From 9e4a93e2b4b003e4d53432019d55f3c2000af3fa Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 3 May 2025 00:21:41 -0500 Subject: [PATCH 001/139] init: governor README folder structure --- src/Model/PhasorDynamics/Governor/README.md | 61 +++--------------- .../PhasorDynamics/Governor/TGOV1/README.md | 63 +++++++++++++++++++ 2 files changed, 71 insertions(+), 53 deletions(-) create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/README.md diff --git a/src/Model/PhasorDynamics/Governor/README.md b/src/Model/PhasorDynamics/Governor/README.md index 19e9dde2f..6490404c2 100644 --- a/src/Model/PhasorDynamics/Governor/README.md +++ b/src/Model/PhasorDynamics/Governor/README.md @@ -1,57 +1,12 @@ -# **Governor** +# **Governor Model** -## TGOV1 Model +> [!NOTE] +> No implementation yet. +## Introduction -**Note: Governor model not yet implemented** +A governor models the control system that regulates the output power of a machine. -Standard model of the stream turbine - -
- - - - Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) -
- -## Nomenclature - -### Inputs -- $`P_{REF}`$ - reference power (set point) -- $`\Delta\omega`$ -### States -- $`P`$ - turbine power (state 1 in the Figure) -- $`V`$ - valve position (state 2 in the Figure) -### Parameters -- $`R`$ - permanent droop, pu (0.05) -- $`T2`$ - steam bowl time constant, sec (0.5) -- $`V_{max}`$ - maximum valve position limit (1) -- $`V_{min}`$ - minimum valve position limit (0) -- $`T2`$ - numerator time constant of T2, T3 block, sec (2.5) -- $`T3`$ - reheater time constant, sec (7.5) -- $`D_{t}`$ - turbine damping coefficient, pu (0) -- $`T_{rate}`$ - turbine rating, MW (0) - -## Equations -```math -\Delta\omega=\dfrac{\omega-\omega_{s}}{\omega_{s}} -``` -First block -```math -\dfrac{dV}{dt} = \begin{cases} - \dfrac{1}{T1}(\dfrac{P_{REF}-\Delta\omega}{R}-V) &\text{if } V_{min}<=V<= V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}>0 \text{ and } V>=V_{max} &\text{ also then } V=V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}<0 \text{ and } V<=V_{min} &\text{ also then } V=V_{min}\\ -\end{cases} -``` -Second block -```math -\dfrac{dx}{dt}=\dfrac{1}{T3}(V-P) -``` -```math -P=x+\dfrac{T2}{T3}V -``` -Output -```math -P_{mech}=P-\Delta\omega D_{t} -``` +## Types +There are a few standard Governor models +- Turbine Governor (See [TGOV1](TGOV1/README.md)) \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md new file mode 100644 index 000000000..96ee09fbb --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -0,0 +1,63 @@ +# **TGOV1** + +## Control Diagram + +Standard model of the stream turbine + +
+ + + + Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) +
+ +## Nomenclature + +### Inputs +- $`P_{REF}`$ - reference power (set point) +- $`\Delta\omega`$ + +### Algebraic Variables +### Differential Variables +- $`P`$ - turbine power (state 1 in the Figure) +- $`V`$ - valve position (state 2 in the Figure) + +### Parameters +- $`R`$ - permanent droop, pu (0.05) +- $`T2`$ - steam bowl time constant, sec (0.5) +- $`V_{max}`$ - maximum valve position limit (1) +- $`V_{min}`$ - minimum valve position limit (0) +- $`T2`$ - numerator time constant of T2, T3 block, sec (2.5) +- $`T3`$ - reheater time constant, sec (7.5) +- $`D_{t}`$ - turbine damping coefficient, pu (0) +- $`T_{rate}`$ - turbine rating, MW (0) + +## Equations + + +### Algebraic Equations + +```math +\Delta\omega=\dfrac{\omega-\omega_{s}}{\omega_{s}} +``` + +### Differential Equations +First block +```math +\dfrac{dV}{dt} = \begin{cases} + \dfrac{1}{T1}(\dfrac{P_{REF}-\Delta\omega}{R}-V) &\text{if } V_{min}<=V<= V_{max}\\ + 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}>0 \text{ and } V>=V_{max} &\text{ also then } V=V_{max}\\ + 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}<0 \text{ and } V<=V_{min} &\text{ also then } V=V_{min}\\ +\end{cases} +``` +Second block +```math +\dfrac{dx}{dt}=\dfrac{1}{T3}(V-P) +``` +```math +P=x+\dfrac{T2}{T3}V +``` +Output +```math +P_{mech}=P-\Delta\omega D_{t} +``` From 53240103184ee99aa0e26708c68955178035f075 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 4 May 2025 22:45:49 -0500 Subject: [PATCH 002/139] edit: equations but misplaced --- .../PhasorDynamics/Governor/TGOV1/README.md | 14 ++++++++++++-- .../SynchronousMachine/GENROUwS/README.md | 17 +++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 96ee09fbb..af8648adf 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -17,10 +17,20 @@ Standard model of the stream turbine - $`P_{REF}`$ - reference power (set point) - $`\Delta\omega`$ +(Below is for exciter oops) + ### Algebraic Variables +- $V_{tr}$ - Sensed terminal voltage +- $V_{F}$ - Voltage Regulator +- $V_{E}'$ - Field Current +- $E_{fd}$ - Exciter Feedback Internal State +- $k_{sat}$ - Exciter Feedback Internal State + ### Differential Variables -- $`P`$ - turbine power (state 1 in the Figure) -- $`V`$ - valve position (state 2 in the Figure) +- $V_{ts}$ - Sensed terminal voltage +- $V_{R}$ - Voltage Regulator +- $E_{FD}'$ - Field Current +- $V_{fx}$ - Exciter Feedback Internal State ### Parameters - $`R`$ - permanent droop, pu (0.05) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md index 38be4af65..c48d0f874 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md @@ -16,6 +16,7 @@ The GENROU model is a variation of the - Same relative amount of saturation occurs on both $`d`$ and $`q`$ axis ## Nomenclature + ### Algebraic Variables - $V_d$, $V_q$ Machine Internal Voltage on the machine d-q reference frame - $I_d$, $I_q$ Terminal currents on the machine d-q reference frame @@ -158,18 +159,18 @@ from the steady-state initial conditions. \begin{aligned} \omega &= 0 \\ \delta &= \text{arg} \left[V_r + jV_i + (R_a + jX_q) (I_r + jI_i)\right] \\ - \psi^{''}_{d} &= V_q \\ - \psi^{''}_{q} &= -V_d \\ - \psi^{''} &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ - k_{sat} &= S_B(\psi^{''}-S_A)^2 \\ - T_{elec} &= (\psi''_{d} - I_dX_d^{''})I_q-(\psi''_{q} - I_qX_d^{''})I_d \\ + \psi''_{d} &= V_q \\ + \psi''_{q} &= -V_d \\ + \psi'' &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ + k_{sat} &= S_B(\psi''-S_A)^2 \\ + T_{elec} &= (\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ P_{mech} &= T_{elec} \\ \psi^{'}_d &= - \dfrac{\psi^{''}_d-X_{d5}X_{d2}I_d}{X_{d5}+1}\\ - \psi^{'}_q &=\dfrac{X_{q5}X_{q2}I_q-\psi^{''}_q}{X_{q5}+1}\\ + \dfrac{\psi''_d-X_{d5}X_{d2}I_d}{X_{d5}+1}\\ + \psi^{'}_q &=\dfrac{X_{q5}X_{q2}I_q-\psi''_q}{X_{q5}+1}\\ E^{'}_d &=\psi^{'}_q - X_{q2}I_q \\ E^{'}_q &=\psi^{'}_d + X_{d2}I_d \\ - E_{fd} &= E'_{q}+X_{d1}I_{d}+\psi^{''}_{d}k_{sat} \\ + E_{fd} &= E'_{q}+X_{d1}I_{d}+\psi''_{d}k_{sat} \\ \end{aligned} ``` From b22d1b2ac1f817b561c47b15dc65ba990d807587 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:09:05 -0500 Subject: [PATCH 003/139] edit: variables and parameters --- .../PhasorDynamics/Governor/TGOV1/README.md | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index af8648adf..2d10fe043 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -13,34 +13,23 @@ Standard model of the stream turbine ## Nomenclature -### Inputs -- $`P_{REF}`$ - reference power (set point) -- $`\Delta\omega`$ - -(Below is for exciter oops) - ### Algebraic Variables -- $V_{tr}$ - Sensed terminal voltage -- $V_{F}$ - Voltage Regulator -- $V_{E}'$ - Field Current -- $E_{fd}$ - Exciter Feedback Internal State -- $k_{sat}$ - Exciter Feedback Internal State +- $\omega$ - Per-unit Speed Deviation +- $P_{ref}$ - Reference Power +- $P_{mech}$ - Mechnical Power to Generator ### Differential Variables -- $V_{ts}$ - Sensed terminal voltage -- $V_{R}$ - Voltage Regulator -- $E_{FD}'$ - Field Current -- $V_{fx}$ - Exciter Feedback Internal State +- $P_{tx}$ - Turbine Power +- $P_{v}$ - Valve Position ### Parameters -- $`R`$ - permanent droop, pu (0.05) -- $`T2`$ - steam bowl time constant, sec (0.5) -- $`V_{max}`$ - maximum valve position limit (1) -- $`V_{min}`$ - minimum valve position limit (0) -- $`T2`$ - numerator time constant of T2, T3 block, sec (2.5) -- $`T3`$ - reheater time constant, sec (7.5) -- $`D_{t}`$ - turbine damping coefficient, pu (0) -- $`T_{rate}`$ - turbine rating, MW (0) +- $R$ - Droop Constant +- $T_1$ - Valve Time Delay +- $V_{max}$ - Max Valve Position +- $V_{min}$ - Min Valve Position +- $T_2$ - Turbine Numerator Time Constat +- $T_3$ - Turbine Delay +- $D_t$ - Turbine Damping Coefficient ## Equations From d6a8645c989d6f547e248a8bb994ddd295e9e994 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:17:28 -0500 Subject: [PATCH 004/139] edit: alg and diff equations --- .../PhasorDynamics/Governor/TGOV1/README.md | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 2d10fe043..ac0a64902 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -25,10 +25,10 @@ Standard model of the stream turbine ### Parameters - $R$ - Droop Constant - $T_1$ - Valve Time Delay -- $V_{max}$ - Max Valve Position -- $V_{min}$ - Min Valve Position - $T_2$ - Turbine Numerator Time Constat - $T_3$ - Turbine Delay +- $V_{max}$ - Max Valve Position +- $V_{min}$ - Min Valve Position - $D_t$ - Turbine Damping Coefficient ## Equations @@ -37,26 +37,22 @@ Standard model of the stream turbine ### Algebraic Equations ```math -\Delta\omega=\dfrac{\omega-\omega_{s}}{\omega_{s}} +\begin{aligned} + \dot{P}_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ +\end{aligned} ``` ### Differential Equations First block ```math -\dfrac{dV}{dt} = \begin{cases} - \dfrac{1}{T1}(\dfrac{P_{REF}-\Delta\omega}{R}-V) &\text{if } V_{min}<=V<= V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}>0 \text{ and } V>=V_{max} &\text{ also then } V=V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}<0 \text{ and } V<=V_{min} &\text{ also then } V=V_{min}\\ -\end{cases} -``` -Second block -```math -\dfrac{dx}{dt}=\dfrac{1}{T3}(V-P) -``` -```math -P=x+\dfrac{T2}{T3}V -``` -Output -```math -P_{mech}=P-\Delta\omega D_{t} +\begin{aligned} + \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ + \dfrac{dV}{dt} &= + \begin{cases} + \dfrac{1}{T1}(\dfrac{P_{ref}-\Delta\omega}{R}-V) + & \text{if } P_v \geq V_{max}\\ + 0 & \text{if } P_v \leq V_{min}\\ + & \text{else } \\ + \end{cases} +\end{aligned} ``` From 4ec96f2724ffa6ae8ace897c718e674839f4b0b3 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:25:13 -0500 Subject: [PATCH 005/139] edit: differential system --- .../PhasorDynamics/Governor/TGOV1/README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index ac0a64902..6c891e754 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -35,23 +35,27 @@ Standard model of the stream turbine ### Algebraic Equations - +The algebraic equation dictating the mechnical power output. ```math \begin{aligned} - \dot{P}_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ + P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ \end{aligned} ``` ### Differential Equations -First block +The TGOV1 differential equations, which include a piecewise definition. +The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced +through the piece-wise definition below. ```math \begin{aligned} \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ - \dfrac{dV}{dt} &= + \dot{P}_{v} &= \begin{cases} - \dfrac{1}{T1}(\dfrac{P_{ref}-\Delta\omega}{R}-V) - & \text{if } P_v \geq V_{max}\\ - 0 & \text{if } P_v \leq V_{min}\\ + \dfrac{1}{T_1}( + -P_{v} + \frac{1}{R}(P_{ref}-\omega) + ) & \text{if } P_v \geq V_{max}\\ + 0 + & \text{if } P_v \leq V_{min}\\ & \text{else } \\ \end{cases} \end{aligned} From fdf61cc754cd3b3f4ea2fe45340f84916eacc983 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:29:14 -0500 Subject: [PATCH 006/139] edit: domain of piecewise --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 6c891e754..713ac1148 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -50,12 +50,11 @@ through the piece-wise definition below. \begin{aligned} \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ \dot{P}_{v} &= + \dfrac{1}{T_1} \begin{cases} - \dfrac{1}{T_1}( - -P_{v} + \frac{1}{R}(P_{ref}-\omega) - ) & \text{if } P_v \geq V_{max}\\ + -P_{v} + \frac{1}{R}(P_{ref}-\omega) + & \text{if } P_v \in \in[V_{min}, V_{max}]\\ 0 - & \text{if } P_v \leq V_{min}\\ & \text{else } \\ \end{cases} \end{aligned} From e9aad7c98e8e94a00733f72c10c42a6cd8cf70a1 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:36:02 -0500 Subject: [PATCH 007/139] edit: notation cleanup --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 713ac1148..c405383e3 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -53,7 +53,7 @@ through the piece-wise definition below. \dfrac{1}{T_1} \begin{cases} -P_{v} + \frac{1}{R}(P_{ref}-\omega) - & \text{if } P_v \in \in[V_{min}, V_{max}]\\ + & \text{if } P_v \in (V_{min}, V_{max})\\ 0 & \text{else } \\ \end{cases} From d42305381629fb5ed89b42fe1e00a9cb5af81f8d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:59:04 -0500 Subject: [PATCH 008/139] propose: continuous domain constraint --- .../PhasorDynamics/Governor/TGOV1/README.md | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index c405383e3..d50988603 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -43,9 +43,7 @@ The algebraic equation dictating the mechnical power output. ``` ### Differential Equations -The TGOV1 differential equations, which include a piecewise definition. -The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced -through the piece-wise definition below. +The TGOV1 differential equations, as derived from the model diagram. ```math \begin{aligned} \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ @@ -59,3 +57,39 @@ through the piece-wise definition below. \end{cases} \end{aligned} ``` +The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced +through the piece-wise definition above. However, depending on the +general solver's requirments, this may need to be expressed as a +smooth approximation (bump function/smooth indicator). +```math +\begin{aligned} + f(x) &= \dfrac{1}{T_1}(-P_{v} + \frac{1}{R}(P_{ref}-\omega)) + I(x) &= \dfrac{1}{2}(1 + \tanh x) + \phi(x) &= I\left( + \dfrac{P_v-V_{min}}{\epsilon} + \right) + - + I\left( + \dfrac{P_v-V_{max}}{\epsilon} + \right) + \dot{P}_{v} &= f(x)\cdot I(x) +\end{aligned} +``` +Perhaps like the following. +$$ +\begin{aligned} + I(x,a,\epsilon) + &= \dfrac{1}{2} + \dfrac{1}{2}\tanh + \left(\dfrac{x-b}{\epsilon}\right) \\ + \phi(x) &= I\left(x;V_{min}, \epsilon + \right) - + I\left(x;V_{max}, \epsilon + \right)\qquad \epsilon <<1\\ + \dot{P}_{v} + &= \ + \dfrac{1}{T_1}\cdot I(P_v) + \left[ + -P_{v} + \frac{1}{R}(P_{ref}-\omega) + \right] +\end{aligned} +$$ \ No newline at end of file From f823d89699b8cd4acf3f87112f7801dbc2c182f9 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 12:04:55 -0500 Subject: [PATCH 009/139] edit: bump function --- .../PhasorDynamics/Governor/TGOV1/README.md | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index d50988603..64ad1073c 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -60,23 +60,9 @@ The TGOV1 differential equations, as derived from the model diagram. The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced through the piece-wise definition above. However, depending on the general solver's requirments, this may need to be expressed as a -smooth approximation (bump function/smooth indicator). +smooth approximation (bump function/smooth indicator). Perhaps like the +following. ```math -\begin{aligned} - f(x) &= \dfrac{1}{T_1}(-P_{v} + \frac{1}{R}(P_{ref}-\omega)) - I(x) &= \dfrac{1}{2}(1 + \tanh x) - \phi(x) &= I\left( - \dfrac{P_v-V_{min}}{\epsilon} - \right) - - - I\left( - \dfrac{P_v-V_{max}}{\epsilon} - \right) - \dot{P}_{v} &= f(x)\cdot I(x) -\end{aligned} -``` -Perhaps like the following. -$$ \begin{aligned} I(x,a,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh @@ -90,6 +76,7 @@ $$ \dfrac{1}{T_1}\cdot I(P_v) \left[ -P_{v} + \frac{1}{R}(P_{ref}-\omega) - \right] + \right] \\ + \nabla P_v \end{aligned} -$$ \ No newline at end of file +``` From b6309119ed89f086aba58ee3f1c1c979ca42e590 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 12:07:04 -0500 Subject: [PATCH 010/139] edit: syntax error --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 64ad1073c..398a32f7d 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -67,16 +67,14 @@ following. I(x,a,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh \left(\dfrac{x-b}{\epsilon}\right) \\ - \phi(x) &= I\left(x;V_{min}, \epsilon - \right) - - I\left(x;V_{max}, \epsilon - \right)\qquad \epsilon <<1\\ + \phi(x) &= I \left(x;V_{min}, \epsilon \right) - + I \left(x;V_{max}, \epsilon \right) + \qquad \epsilon <<1 \\ \dot{P}_{v} - &= \ + &= \dfrac{1}{T_1}\cdot I(P_v) \left[ -P_{v} + \frac{1}{R}(P_{ref}-\omega) - \right] \\ - \nabla P_v + \right] \\ \end{aligned} ``` From b7e7517313c3ef5db17a87da1ab1d71fbce7afb7 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 12:11:47 -0500 Subject: [PATCH 011/139] edit: completed TGOV1 draft --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 398a32f7d..3bca0c498 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -57,22 +57,22 @@ The TGOV1 differential equations, as derived from the model diagram. \end{cases} \end{aligned} ``` -The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced +The domain of the state variable $P_{v}\in(V_{min}, V_{max})$ is enforced through the piece-wise definition above. However, depending on the general solver's requirments, this may need to be expressed as a smooth approximation (bump function/smooth indicator). Perhaps like the following. ```math \begin{aligned} - I(x,a,\epsilon) + I(x,x_0,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh - \left(\dfrac{x-b}{\epsilon}\right) \\ + \left(\dfrac{x-x_0}{\epsilon}\right) \\ \phi(x) &= I \left(x;V_{min}, \epsilon \right) - I \left(x;V_{max}, \epsilon \right) \qquad \epsilon <<1 \\ \dot{P}_{v} &= - \dfrac{1}{T_1}\cdot I(P_v) + \dfrac{1}{T_1}\cdot \phi(P_v) \left[ -P_{v} + \frac{1}{R}(P_{ref}-\omega) \right] \\ From 9850e3c9e85da5ff21cf53e02e4d1431266f8e57 Mon Sep 17 00:00:00 2001 From: lukelowry Date: Wed, 7 May 2025 19:14:17 +0000 Subject: [PATCH 012/139] Apply pre-commmit fixes --- src/Model/PhasorDynamics/Governor/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Governor/README.md b/src/Model/PhasorDynamics/Governor/README.md index 6490404c2..531c9270e 100644 --- a/src/Model/PhasorDynamics/Governor/README.md +++ b/src/Model/PhasorDynamics/Governor/README.md @@ -9,4 +9,4 @@ A governor models the control system that regulates the output power of a machin ## Types There are a few standard Governor models -- Turbine Governor (See [TGOV1](TGOV1/README.md)) \ No newline at end of file +- Turbine Governor (See [TGOV1](TGOV1/README.md)) From 4f9ee5758db87a2467bf9392024c1d8451ea430c Mon Sep 17 00:00:00 2001 From: pelesh Date: Wed, 7 May 2025 15:40:46 -0400 Subject: [PATCH 013/139] Update developer guidelines with Doxygen instructions (#99) --- CONTRIBUTING.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 01fe28e12..d6643d5f6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,6 +57,64 @@ in the GridKit™ repository. There has to be at least one approval before the pull request can be merged. +## Documenting Code + +### Doxygen +All comments in the code should follow [Doxygen](https://www.doxygen.nl/manual/index.html) +markup. For uniformity, we recommend C-style Doxygen comments starting with +two `*`. + +### Documenting functions +Functions should be documented in source files. The rationale is to have +the documentation near the implementation, so that is handy to a developer and +can be updated quickly when the function modified. + +### Minimal function documentation +Function documentation should include specification of function parameters, +template parameters (if any), return value, preconditions, postconditions, +and invariants. + +```c++ +/** + * @brief + * + * @param + * @tparam + * @return + * + * @pre + * @post + * + * LONGER DESCRIPTION, RUNTIME, EXAMPLES, ETC + */ +``` + +* `@brief` marks the text that will be displayed in summaries and index lists. +Typically you would put here a few words description of your function. +* `@param` describes a function parameter and takes an optional direction: +`@param[in]` means the parameter's value is only read and not modified within +the function, `@param[out]` means the parameter is not read and is only +modified, and `@param[in,out]` means the parameter is both read and modified. +* `@pre` and `@post` define the pre- and postconditions, which should be +precise but brief. When in doubt, attempt rigorous conditions but keep in mind +that some concepts such as "validity" may be difficult or impossible to define +precisely. Specifications are primarily for human consumption. +* `@param`, `@pre`, and `@post` sections should be repeated as many time as +required. + + +### Doxygen and Markdown + +Doxygen supports Markdown markup and it should be used to make documentation +more clear. For example, +```c++ + * @return The size of `a` +``` +is clearer than +```c++ + * @return The size of a +``` +when read in plain text and in formatted documentation. ## Code Style From c6ba874e8057a9b4a538cef2c0667221aef95d3f Mon Sep 17 00:00:00 2001 From: pelesh Date: Thu, 8 May 2025 11:25:02 -0400 Subject: [PATCH 014/139] Reorganize examples by model family (#104) --- examples/CMakeLists.txt | 23 ++++++------------- .../AdjointSensitivity/AdjointSensitivity.cpp | 0 .../AdjointSensitivity/CMakeLists.txt | 0 examples/Experimental/CMakeLists.txt | 14 +++++++++++ .../DynamicConstrainedOpt/CMakeLists.txt | 0 .../DynamicConstrainedOpt.cpp | 0 .../GenConstLoad/CMakeLists.txt | 0 .../GenConstLoad/GenConstLoad.cpp | 0 .../GenInfiniteBus/CMakeLists.txt | 0 .../GenInfiniteBus/GenInfiniteBus.cpp | 0 .../ParameterEstimation/CMakeLists.txt | 0 .../ParameterEstimation.cpp | 0 .../ParameterEstimation/lookup_table.hpp | 0 examples/PowerElectronics/CMakeLists.txt | 12 ++++++++++ .../DistributedGeneratorTest/CMakeLists.txt | 0 .../DistributedGeneratorTest/DGTest.cpp | 0 .../Microgrid/CMakeLists.txt | 0 .../Microgrid/Microgrid.cpp | 0 .../RLCircuit/CMakeLists.txt | 0 .../RLCircuit/RLCircuit.cpp | 0 .../ScaleMicrogrid/CMakeLists.txt | 0 .../ScaleMicrogrid/ScaleMicrogrid.cpp | 0 .../ScaleMicrogrid/SolutionKeys.hpp | 0 examples/PowerFlow/CMakeLists.txt | 10 ++++++++ examples/{ => PowerFlow}/Grid3Bus/3bus.mat | 0 .../{ => PowerFlow}/Grid3Bus/CMakeLists.txt | 0 .../{ => PowerFlow}/Grid3Bus/Grid3BusSys.cpp | 0 examples/{ => PowerFlow}/Grid3Bus/README.md | 0 .../MatPowerTesting/CMakeLists.txt | 0 .../MatPowerTesting/test_parse_branch_row.cpp | 0 .../MatPowerTesting/test_parse_bus_row.cpp | 0 .../MatPowerTesting/test_parse_gen_row.cpp | 0 .../test_parse_gencost_row.cpp | 0 .../MatPowerTesting/test_parse_matpower.cpp | 0 examples/README.md | 17 ++++++++++++++ 35 files changed, 60 insertions(+), 16 deletions(-) rename examples/{ => Experimental}/AdjointSensitivity/AdjointSensitivity.cpp (100%) rename examples/{ => Experimental}/AdjointSensitivity/CMakeLists.txt (100%) create mode 100644 examples/Experimental/CMakeLists.txt rename examples/{ => Experimental}/DynamicConstrainedOpt/CMakeLists.txt (100%) rename examples/{ => Experimental}/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp (100%) rename examples/{ => Experimental}/GenConstLoad/CMakeLists.txt (100%) rename examples/{ => Experimental}/GenConstLoad/GenConstLoad.cpp (100%) rename examples/{ => Experimental}/GenInfiniteBus/CMakeLists.txt (100%) rename examples/{ => Experimental}/GenInfiniteBus/GenInfiniteBus.cpp (100%) rename examples/{ => Experimental}/ParameterEstimation/CMakeLists.txt (100%) rename examples/{ => Experimental}/ParameterEstimation/ParameterEstimation.cpp (100%) rename examples/{ => Experimental}/ParameterEstimation/lookup_table.hpp (100%) create mode 100644 examples/PowerElectronics/CMakeLists.txt rename examples/{ => PowerElectronics}/DistributedGeneratorTest/CMakeLists.txt (100%) rename examples/{ => PowerElectronics}/DistributedGeneratorTest/DGTest.cpp (100%) rename examples/{ => PowerElectronics}/Microgrid/CMakeLists.txt (100%) rename examples/{ => PowerElectronics}/Microgrid/Microgrid.cpp (100%) rename examples/{ => PowerElectronics}/RLCircuit/CMakeLists.txt (100%) rename examples/{ => PowerElectronics}/RLCircuit/RLCircuit.cpp (100%) rename examples/{ => PowerElectronics}/ScaleMicrogrid/CMakeLists.txt (100%) rename examples/{ => PowerElectronics}/ScaleMicrogrid/ScaleMicrogrid.cpp (100%) rename examples/{ => PowerElectronics}/ScaleMicrogrid/SolutionKeys.hpp (100%) create mode 100644 examples/PowerFlow/CMakeLists.txt rename examples/{ => PowerFlow}/Grid3Bus/3bus.mat (100%) rename examples/{ => PowerFlow}/Grid3Bus/CMakeLists.txt (100%) rename examples/{ => PowerFlow}/Grid3Bus/Grid3BusSys.cpp (100%) rename examples/{ => PowerFlow}/Grid3Bus/README.md (100%) rename examples/{ => PowerFlow}/MatPowerTesting/CMakeLists.txt (100%) rename examples/{ => PowerFlow}/MatPowerTesting/test_parse_branch_row.cpp (100%) rename examples/{ => PowerFlow}/MatPowerTesting/test_parse_bus_row.cpp (100%) rename examples/{ => PowerFlow}/MatPowerTesting/test_parse_gen_row.cpp (100%) rename examples/{ => PowerFlow}/MatPowerTesting/test_parse_gencost_row.cpp (100%) rename examples/{ => PowerFlow}/MatPowerTesting/test_parse_matpower.cpp (100%) create mode 100644 examples/README.md diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6e0382b71..c242976a4 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,25 +1,16 @@ -# +# [[ +# Author(s): +# - Slaven Peles +#]] -add_subdirectory(MatPowerTesting) add_subdirectory(LinearAlgebra) -add_subdirectory(DistributedGeneratorTest) -if(TARGET SUNDIALS::kinsol) - add_subdirectory(Grid3Bus) -endif() +add_subdirectory(PowerFlow) +add_subdirectory(PowerElectronics) +add_subdirectory(Experimental) if(TARGET SUNDIALS::idas) - add_subdirectory(AdjointSensitivity) - add_subdirectory(RLCircuit) - add_subdirectory(Microgrid) - add_subdirectory(ScaleMicrogrid) add_subdirectory(PhasorDynamics) - if(GRIDKIT_ENABLE_IPOPT) - add_subdirectory(DynamicConstrainedOpt) - add_subdirectory(GenConstLoad) - add_subdirectory(GenInfiniteBus) - add_subdirectory(ParameterEstimation) - endif() endif() if(GRIDKIT_ENABLE_ENZYME) diff --git a/examples/AdjointSensitivity/AdjointSensitivity.cpp b/examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp similarity index 100% rename from examples/AdjointSensitivity/AdjointSensitivity.cpp rename to examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp diff --git a/examples/AdjointSensitivity/CMakeLists.txt b/examples/Experimental/AdjointSensitivity/CMakeLists.txt similarity index 100% rename from examples/AdjointSensitivity/CMakeLists.txt rename to examples/Experimental/AdjointSensitivity/CMakeLists.txt diff --git a/examples/Experimental/CMakeLists.txt b/examples/Experimental/CMakeLists.txt new file mode 100644 index 000000000..767767ffa --- /dev/null +++ b/examples/Experimental/CMakeLists.txt @@ -0,0 +1,14 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + +if(TARGET SUNDIALS::idas) + add_subdirectory(AdjointSensitivity) + if(GRIDKIT_ENABLE_IPOPT) + add_subdirectory(DynamicConstrainedOpt) + add_subdirectory(GenConstLoad) + add_subdirectory(GenInfiniteBus) + add_subdirectory(ParameterEstimation) + endif() +endif() diff --git a/examples/DynamicConstrainedOpt/CMakeLists.txt b/examples/Experimental/DynamicConstrainedOpt/CMakeLists.txt similarity index 100% rename from examples/DynamicConstrainedOpt/CMakeLists.txt rename to examples/Experimental/DynamicConstrainedOpt/CMakeLists.txt diff --git a/examples/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp b/examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp similarity index 100% rename from examples/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp rename to examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp diff --git a/examples/GenConstLoad/CMakeLists.txt b/examples/Experimental/GenConstLoad/CMakeLists.txt similarity index 100% rename from examples/GenConstLoad/CMakeLists.txt rename to examples/Experimental/GenConstLoad/CMakeLists.txt diff --git a/examples/GenConstLoad/GenConstLoad.cpp b/examples/Experimental/GenConstLoad/GenConstLoad.cpp similarity index 100% rename from examples/GenConstLoad/GenConstLoad.cpp rename to examples/Experimental/GenConstLoad/GenConstLoad.cpp diff --git a/examples/GenInfiniteBus/CMakeLists.txt b/examples/Experimental/GenInfiniteBus/CMakeLists.txt similarity index 100% rename from examples/GenInfiniteBus/CMakeLists.txt rename to examples/Experimental/GenInfiniteBus/CMakeLists.txt diff --git a/examples/GenInfiniteBus/GenInfiniteBus.cpp b/examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp similarity index 100% rename from examples/GenInfiniteBus/GenInfiniteBus.cpp rename to examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp diff --git a/examples/ParameterEstimation/CMakeLists.txt b/examples/Experimental/ParameterEstimation/CMakeLists.txt similarity index 100% rename from examples/ParameterEstimation/CMakeLists.txt rename to examples/Experimental/ParameterEstimation/CMakeLists.txt diff --git a/examples/ParameterEstimation/ParameterEstimation.cpp b/examples/Experimental/ParameterEstimation/ParameterEstimation.cpp similarity index 100% rename from examples/ParameterEstimation/ParameterEstimation.cpp rename to examples/Experimental/ParameterEstimation/ParameterEstimation.cpp diff --git a/examples/ParameterEstimation/lookup_table.hpp b/examples/Experimental/ParameterEstimation/lookup_table.hpp similarity index 100% rename from examples/ParameterEstimation/lookup_table.hpp rename to examples/Experimental/ParameterEstimation/lookup_table.hpp diff --git a/examples/PowerElectronics/CMakeLists.txt b/examples/PowerElectronics/CMakeLists.txt new file mode 100644 index 000000000..a362bbe4e --- /dev/null +++ b/examples/PowerElectronics/CMakeLists.txt @@ -0,0 +1,12 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + +add_subdirectory(DistributedGeneratorTest) + +if(TARGET SUNDIALS::idas) + add_subdirectory(RLCircuit) + add_subdirectory(Microgrid) + add_subdirectory(ScaleMicrogrid) +endif() diff --git a/examples/DistributedGeneratorTest/CMakeLists.txt b/examples/PowerElectronics/DistributedGeneratorTest/CMakeLists.txt similarity index 100% rename from examples/DistributedGeneratorTest/CMakeLists.txt rename to examples/PowerElectronics/DistributedGeneratorTest/CMakeLists.txt diff --git a/examples/DistributedGeneratorTest/DGTest.cpp b/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp similarity index 100% rename from examples/DistributedGeneratorTest/DGTest.cpp rename to examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp diff --git a/examples/Microgrid/CMakeLists.txt b/examples/PowerElectronics/Microgrid/CMakeLists.txt similarity index 100% rename from examples/Microgrid/CMakeLists.txt rename to examples/PowerElectronics/Microgrid/CMakeLists.txt diff --git a/examples/Microgrid/Microgrid.cpp b/examples/PowerElectronics/Microgrid/Microgrid.cpp similarity index 100% rename from examples/Microgrid/Microgrid.cpp rename to examples/PowerElectronics/Microgrid/Microgrid.cpp diff --git a/examples/RLCircuit/CMakeLists.txt b/examples/PowerElectronics/RLCircuit/CMakeLists.txt similarity index 100% rename from examples/RLCircuit/CMakeLists.txt rename to examples/PowerElectronics/RLCircuit/CMakeLists.txt diff --git a/examples/RLCircuit/RLCircuit.cpp b/examples/PowerElectronics/RLCircuit/RLCircuit.cpp similarity index 100% rename from examples/RLCircuit/RLCircuit.cpp rename to examples/PowerElectronics/RLCircuit/RLCircuit.cpp diff --git a/examples/ScaleMicrogrid/CMakeLists.txt b/examples/PowerElectronics/ScaleMicrogrid/CMakeLists.txt similarity index 100% rename from examples/ScaleMicrogrid/CMakeLists.txt rename to examples/PowerElectronics/ScaleMicrogrid/CMakeLists.txt diff --git a/examples/ScaleMicrogrid/ScaleMicrogrid.cpp b/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp similarity index 100% rename from examples/ScaleMicrogrid/ScaleMicrogrid.cpp rename to examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp diff --git a/examples/ScaleMicrogrid/SolutionKeys.hpp b/examples/PowerElectronics/ScaleMicrogrid/SolutionKeys.hpp similarity index 100% rename from examples/ScaleMicrogrid/SolutionKeys.hpp rename to examples/PowerElectronics/ScaleMicrogrid/SolutionKeys.hpp diff --git a/examples/PowerFlow/CMakeLists.txt b/examples/PowerFlow/CMakeLists.txt new file mode 100644 index 000000000..584a6c70e --- /dev/null +++ b/examples/PowerFlow/CMakeLists.txt @@ -0,0 +1,10 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + +add_subdirectory(MatPowerTesting) + +if(TARGET SUNDIALS::kinsol) + add_subdirectory(Grid3Bus) +endif() diff --git a/examples/Grid3Bus/3bus.mat b/examples/PowerFlow/Grid3Bus/3bus.mat similarity index 100% rename from examples/Grid3Bus/3bus.mat rename to examples/PowerFlow/Grid3Bus/3bus.mat diff --git a/examples/Grid3Bus/CMakeLists.txt b/examples/PowerFlow/Grid3Bus/CMakeLists.txt similarity index 100% rename from examples/Grid3Bus/CMakeLists.txt rename to examples/PowerFlow/Grid3Bus/CMakeLists.txt diff --git a/examples/Grid3Bus/Grid3BusSys.cpp b/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp similarity index 100% rename from examples/Grid3Bus/Grid3BusSys.cpp rename to examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp diff --git a/examples/Grid3Bus/README.md b/examples/PowerFlow/Grid3Bus/README.md similarity index 100% rename from examples/Grid3Bus/README.md rename to examples/PowerFlow/Grid3Bus/README.md diff --git a/examples/MatPowerTesting/CMakeLists.txt b/examples/PowerFlow/MatPowerTesting/CMakeLists.txt similarity index 100% rename from examples/MatPowerTesting/CMakeLists.txt rename to examples/PowerFlow/MatPowerTesting/CMakeLists.txt diff --git a/examples/MatPowerTesting/test_parse_branch_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp similarity index 100% rename from examples/MatPowerTesting/test_parse_branch_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp diff --git a/examples/MatPowerTesting/test_parse_bus_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp similarity index 100% rename from examples/MatPowerTesting/test_parse_bus_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp diff --git a/examples/MatPowerTesting/test_parse_gen_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp similarity index 100% rename from examples/MatPowerTesting/test_parse_gen_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp diff --git a/examples/MatPowerTesting/test_parse_gencost_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp similarity index 100% rename from examples/MatPowerTesting/test_parse_gencost_row.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp diff --git a/examples/MatPowerTesting/test_parse_matpower.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp similarity index 100% rename from examples/MatPowerTesting/test_parse_matpower.cpp rename to examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 000000000..cd7ad11eb --- /dev/null +++ b/examples/README.md @@ -0,0 +1,17 @@ +# GridKit™ Usage Examples + +GridKit™ usage examples are organized in following way: +- `Enzyme` directory contains Enzyme automatic differentiation examples. +- `Experimental` directory contains examples of dynamic-constrained +optimization. +- `LinearAlgebra` has examples and tests for dense and sparse matrices in +GridKit™. +- `PhasorDynamics` contains examples describing use of GridKit™ for phasor +domain dynamic simulations. +- `PowerElectronics` has examples describing microgrid simulations with +GridKit™. +- `PowerFlow` contains examples of power flow steady-state simulations with +GridKit™. + +Examples are also used as integration tests for GridKit™ and are run on CI +pipeline. From 2b14bbc8ffab5d1eb492f889028a05819d8a81a8 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 12:38:28 -0500 Subject: [PATCH 015/139] edit: parameter names etc [skip ci] --- .../PhasorDynamics/Governor/TGOV1/README.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 3bca0c498..6a1d4872f 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -1,4 +1,4 @@ -# **TGOV1** +# **Steam Turbine-Governor Model (TGOV1)** ## Control Diagram @@ -14,22 +14,22 @@ Standard model of the stream turbine ## Nomenclature ### Algebraic Variables -- $\omega$ - Per-unit Speed Deviation -- $P_{ref}$ - Reference Power +- $\omega$ - Per-unit Speed Deviation (p.u.) +- $P_{ref}$ - Reference Power - $P_{mech}$ - Mechnical Power to Generator ### Differential Variables -- $P_{tx}$ - Turbine Power -- $P_{v}$ - Valve Position +- $P_{tx}$ - Turbine Power (State 1 in Fig. 1) +- $P_{v}$ - Valve Position (State 2 in Fig. 1) ### Parameters -- $R$ - Droop Constant -- $T_1$ - Valve Time Delay -- $T_2$ - Turbine Numerator Time Constat -- $T_3$ - Turbine Delay -- $V_{max}$ - Max Valve Position -- $V_{min}$ - Min Valve Position -- $D_t$ - Turbine Damping Coefficient +- $R$ - Droop Constant (p.u.) +- $T_1$ - Valve Time Delay (sec) +- $T_2$ - Turbine Numerator Time Constat (sec) +- $T_3$ - Turbine Delay (sec) +- $P_{vmax}$ - Max Valve Position +- $P_{vmin}$ - Min Valve Position +- $D_t$ - Turbine Damping Coefficient (p.u.) ## Equations @@ -50,14 +50,14 @@ The TGOV1 differential equations, as derived from the model diagram. \dot{P}_{v} &= \dfrac{1}{T_1} \begin{cases} - -P_{v} + \frac{1}{R}(P_{ref}-\omega) - & \text{if } P_v \in (V_{min}, V_{max})\\ + -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) + & \text{if } P_v \in (P_{vmin}, P_{vmax})\\ 0 & \text{else } \\ \end{cases} \end{aligned} ``` -The domain of the state variable $P_{v}\in(V_{min}, V_{max})$ is enforced +The domain of the state variable $P_{v}\in(P_{vmin}, P_{vmax})$ is enforced through the piece-wise definition above. However, depending on the general solver's requirments, this may need to be expressed as a smooth approximation (bump function/smooth indicator). Perhaps like the @@ -67,14 +67,14 @@ following. I(x,x_0,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh \left(\dfrac{x-x_0}{\epsilon}\right) \\ - \phi(x) &= I \left(x;V_{min}, \epsilon \right) - - I \left(x;V_{max}, \epsilon \right) + \phi(x) &= I \left(x;P_{vmin}, \epsilon \right) - + I \left(x;P_{vmax}, \epsilon \right) \qquad \epsilon <<1 \\ \dot{P}_{v} &= \dfrac{1}{T_1}\cdot \phi(P_v) \left[ - -P_{v} + \frac{1}{R}(P_{ref}-\omega) + -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) \right] \\ \end{aligned} ``` From 3f5a0ea7a162b371646dc51e7842a0f64afceff0 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 12:48:57 -0500 Subject: [PATCH 016/139] edit: delta omega syntax [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 6a1d4872f..757e8e42f 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -14,7 +14,7 @@ Standard model of the stream turbine ## Nomenclature ### Algebraic Variables -- $\omega$ - Per-unit Speed Deviation (p.u.) +- $\Delta\omega$ - Per-unit Speed Deviation (p.u.) - $P_{ref}$ - Reference Power - $P_{mech}$ - Mechnical Power to Generator @@ -38,7 +38,7 @@ Standard model of the stream turbine The algebraic equation dictating the mechnical power output. ```math \begin{aligned} - P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ + P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \Delta\omega \\ \end{aligned} ``` @@ -50,7 +50,7 @@ The TGOV1 differential equations, as derived from the model diagram. \dot{P}_{v} &= \dfrac{1}{T_1} \begin{cases} - -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) + -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) & \text{if } P_v \in (P_{vmin}, P_{vmax})\\ 0 & \text{else } \\ @@ -74,7 +74,7 @@ following. &= \dfrac{1}{T_1}\cdot \phi(P_v) \left[ - -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) + -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ \end{aligned} ``` From 7d242b90d2acb664c8458e508af1560655b17d26 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 13:06:08 -0500 Subject: [PATCH 017/139] edit: power in p.u. [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 757e8e42f..ddfe5f0c9 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -15,11 +15,11 @@ Standard model of the stream turbine ### Algebraic Variables - $\Delta\omega$ - Per-unit Speed Deviation (p.u.) -- $P_{ref}$ - Reference Power -- $P_{mech}$ - Mechnical Power to Generator +- $P_{ref}$ - Reference Power (p.u.) +- $P_{mech}$ - Mechnical Power to Generator (p.u.) ### Differential Variables -- $P_{tx}$ - Turbine Power (State 1 in Fig. 1) +- $P_{tx}$ - Turbine Power (p.u.) (State 1 in Fig. 1) - $P_{v}$ - Valve Position (State 2 in Fig. 1) ### Parameters From c1eb4c4b0d960c95527a829d59c18143eb2cd3fa Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 13:10:07 -0500 Subject: [PATCH 018/139] edit: indicator generalization [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index ddfe5f0c9..35fc97d30 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -58,21 +58,13 @@ The TGOV1 differential equations, as derived from the model diagram. \end{aligned} ``` The domain of the state variable $P_{v}\in(P_{vmin}, P_{vmax})$ is enforced -through the piece-wise definition above. However, depending on the -general solver's requirments, this may need to be expressed as a -smooth approximation (bump function/smooth indicator). Perhaps like the -following. +through the piece-wise definition above. This may need to be expressed as a +smooth approximation (smooth indicator $\phi$) expressed generically as follows. ```math \begin{aligned} - I(x,x_0,\epsilon) - &= \dfrac{1}{2} + \dfrac{1}{2}\tanh - \left(\dfrac{x-x_0}{\epsilon}\right) \\ - \phi(x) &= I \left(x;P_{vmin}, \epsilon \right) - - I \left(x;P_{vmax}, \epsilon \right) - \qquad \epsilon <<1 \\ \dot{P}_{v} &= - \dfrac{1}{T_1}\cdot \phi(P_v) + \phi(P_v) \cdot \dfrac{1}{T_1} \left[ -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ From b297acd9f8124195d5b0748ec32aefd232c9ebea Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 15:52:54 -0500 Subject: [PATCH 019/139] add: untested model draft cpp [skip ci] --- .../Governor/TGOV1/CMakeLists.txt | 5 + .../PhasorDynamics/Governor/TGOV1/README.md | 2 +- .../Governor/TGOV1/TurbineGov.cpp | 262 ++++++++++++++++++ .../Governor/TGOV1/TurbineGov.hpp | 95 +++++++ 4 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt new file mode 100644 index 000000000..63b28df94 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt @@ -0,0 +1,5 @@ +gridkit_add_library(phasor_dynamics_turbinegov + SOURCES + TurbineGov.cpp + OUTPUT_NAME + gridkit_phasor_dynamics_turbinegov) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 35fc97d30..7653fe91a 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -69,4 +69,4 @@ smooth approximation (smooth indicator $\phi$) expressed generically as follows. -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ \end{aligned} -``` +``` \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp new file mode 100644 index 000000000..ec7d0e35e --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -0,0 +1,262 @@ +/** + * @file TurbineGov.cpp + * @author Luke Lowery (lukel@tamu.edu) + * @author Adam Birchfield (abirchfield@tamu.edu) + * @brief Definition of a Turbine Governor Model (IEEET1). + * + * + */ + +#include "TurbineGov.hpp" + +#include +#include + +#include + +#define _USE_MATH_DEFINES + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief Constructor for Governor with default parameters + * + * @param unit_id Associated Generator Unit ID + */ + template + TurbineGov::TurbineGov(machine_type* machine) + : unit_id_(unit_id), + R_(3.), + Pvmin_(0.), + Pvmax_(1.), + T1_(7.), + T2_(.04), + T3_(.05), + Dt_(.75), + { + // 2 Internal Variables and 7 Parameters + size_ = 2; + size_param_ = 7; + + // Eliminate compiler warnings + (void) unit_id_; + } + + /*! + * @brief Constructor for Governor + * + * @param unit_id Generator Unit ID + * @param R Droop Constant (p.u.) + * @param Pvmin Minimum Valve Position + * @param Pvmax Maximum Valve Position + * @param Dt Turbine Damping Coefficient (p.u.) + */ + template + TurbineGov::TurbineGov( + machine_type* machine, + real_type R, + real_type Pvmin, + real_type T1, + real_type T2, + real_type T3, + real_type Dt + ) + : machine_(machine), + R_(3.), + Pvmin_(0.), + Pvmax_(1.), + T1_(7.), + T2_(.04), + T3_(.05), + Dt_(.75), + { + + // 2 Internal Variables and 7 Parameters + size_ = 2; + size_param_ = 7; + + // Eliminate compiler warnings + (void) unit_id_; + } + + /*! + * @brief Destructor for Governor Model + * + */ + template + TurbineGov::~TurbineGov() + { + std::cout << "Destroy Governor ..." << std::endl; + } + + + /*! + * @brief Allocate memory for model + * + * + */ + template + int TurbineGov::allocate() + { + f_.resize(size_); + y_.resize(size_); + yp_.resize(size_); + tag_.resize(size_); + fB_.resize(size_); + yB_.resize(size_); + ypB_.resize(size_); + return 0; + } + + /** + * @brief Initialization of the Governor + * + */ + template + int TurbineGov::initialize() + { + + // Initialize Differential Variables: + y_[0] = pref_; // Valve Position + y_[1] = pmech_; // Turbine Power + + // Initialize Differential Variables + yp_[0] = 0.0; + yp_[1] = 0.0; + + return 0; + } + + /** + * @brief Identify differential variables. + */ + template + int TurbineGov::tagDifferentiable() + { + for (IdxT i = 0; i < size_; ++i) + { + tag_[i] = true; + } + return 0; + } + + /** + * @brief Residuals of system equations + * + */ + template + int TurbineGov::evaluateResidual() + { + + // External Variables + ScalarT omega = machine_->omega(); + + // Internal Variables + ScalarT pv = y_[0]; + ScalarT ptx = y_[1]; + + // Internal Derivatives + ScalarT pv_dot = yp_[0]; + ScalarT ptx_dot = yp_[1]; + + // Internal Differential Equations + f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; + f_[1] = pv_dot + (pv - (pref_ - omega) / R ) / T3_; + + // Output Variable + pmech_ = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + + return 0; + } + + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - Scalar data type + * @tparam IdxT - Index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateJacobian() + { + std::cout << "Jacobian evaluation not implemented!" << std::endl; + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateIntegrand() + { + std::cout << "Evaluate Integrand for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::initializeAdjoint() + { + std::cout << "Initialize adjoint for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateAdjointResidual() + { + std::cout << "Evaluate adjoint residual for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateAdjointIntegrand() + { + std::cout << "Evaluate adjoint Integrand for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief The mechanical power output. + * + * @return ScalarT - Mechanical output power value. + */ + template + ScalarT TurbineGov::Pmech() + { + return pmech_; + } + + // Available template instantiations + template class TurbineGov; + template class TurbineGov; + + + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp new file mode 100644 index 000000000..9d84e038f --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -0,0 +1,95 @@ +/** + * @file TurbineGov.hpp + * @author Luke Lowery (lukel@tamu.edu) + * @author Adam Birchfield (abirchfield@tamu.edu) + * @brief Declaration of a Turbine Governor Model (IEEET1). + * + */ + +#pragma once + +#include + +// Forward declarations. +namespace GridKit +{ + namespace PhasorDynamics + { + template + class MachineBase; + } +} // namespace GridKit + +namespace GridKit +{ + namespace PhasorDynamics + { + + template + class TurbineGov : public Component + { + using Component::alpha_; + using Component::f_; + using Component::fB_; + using Component::g_; + using Component::gB_; + using Component::nnz_; + using Component::param_; + using Component::size_; + using Component::tag_; + using Component::time_; + using Component::y_; + using Component::yB_; + using Component::yp_; + using Component::ypB_; + + using machine_type = MachineBase; + using real_type = typename Component::real_type; + + public: + TurbineGov(machine_type* machine); + TurbineGov(machine_type* machine, + real_type R, + real_type Pvmin, + real_type Pvmax, + real_type T1, + real_type T2, + real_type T3, + real_type Dt); + ~TurbineGov() = default; + + int allocate() override; + int initialize() override; + int tagDifferentiable() override; + int evaluateResidual() override; + + // Still to be implemented + int evaluateJacobian() override; + int evaluateIntegrand() override; + int initializeAdjoint() override; + int evaluateAdjointResidual() override; + int evaluateAdjointIntegrand() override; + + void updateTime(real_type /* t */, real_type /* a */) override + { + } + + private: + + // Associated Machine Model + machine_type* machine_; + + // Input parameters + real_type R_; + real_type T1_; + real_type T2_; + real_type T3_; + real_type Dt_; + + // Output States + ScalarT pmech_; + + }; + + } // namespace PhasorDynamics +} // namespace GridKit From f7672783d00f73e10e540a26d51ecffe5d29d430 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 16:01:27 -0500 Subject: [PATCH 020/139] todo: added dev comments [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 6 +----- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index ec7d0e35e..d778e8529 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -39,9 +39,6 @@ namespace GridKit // 2 Internal Variables and 7 Parameters size_ = 2; size_param_ = 7; - - // Eliminate compiler warnings - (void) unit_id_; } /*! @@ -77,8 +74,6 @@ namespace GridKit size_ = 2; size_param_ = 7; - // Eliminate compiler warnings - (void) unit_id_; } /*! @@ -151,6 +146,7 @@ namespace GridKit { // External Variables + // TODO: should be deviation, not true speed. ScalarT omega = machine_->omega(); // Internal Variables diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 9d84e038f..17832846e 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -10,7 +10,8 @@ #include -// Forward declarations. +// Forward declarations +// TODO: Make a MachineBase class for use with any synch. machine namespace GridKit { namespace PhasorDynamics From c214f9cc26b875386c1513571f62a0c06ac28b40 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan <72402802+nkoukpaizan@users.noreply.github.com> Date: Tue, 13 May 2025 20:11:56 -0400 Subject: [PATCH 021/139] Fixes to assertions and overrides (#106) * size_quad() --> sizeQuadrature(). * Add missing overrides in IdaTests. * Fix time assert with tolerance within a namespace. * Use GridKit's isEqual in example2 time stamp assertion. --------- Co-authored-by: nkoukpaizan --- examples/PhasorDynamics/Example1/example1.cpp | 2 +- examples/PhasorDynamics/Example1/example1.hpp | 4807 ++++++++-------- examples/PhasorDynamics/Example2/example2.cpp | 12 +- examples/PhasorDynamics/Example2/example2.hpp | 4808 +++++++++-------- src/Solver/Optimization/DynamicConstraint.cpp | 2 +- src/Solver/Optimization/DynamicObjective.cpp | 2 +- tests/UnitTests/Solver/Dynamic/IdaTests.hpp | 52 +- 7 files changed, 4846 insertions(+), 4839 deletions(-) diff --git a/examples/PhasorDynamics/Example1/example1.cpp b/examples/PhasorDynamics/Example1/example1.cpp index 300bf0d47..9c9980444 100644 --- a/examples/PhasorDynamics/Example1/example1.cpp +++ b/examples/PhasorDynamics/Example1/example1.cpp @@ -133,7 +133,7 @@ int main() for (size_t i = 0; i < output.size(); i++) { OutputData data = output[i]; - std::vector& ref_sol = reference_solution[i + 1]; + std::vector& ref_sol = Example1::reference_solution[i + 1]; double err = std::abs(std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - ref_sol[2]) diff --git a/examples/PhasorDynamics/Example1/example1.hpp b/examples/PhasorDynamics/Example1/example1.hpp index b654a62f4..ff17a22d3 100644 --- a/examples/PhasorDynamics/Example1/example1.hpp +++ b/examples/PhasorDynamics/Example1/example1.hpp @@ -9,2405 +9,2408 @@ // Columns: // Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, -std::vector> reference_solution = - {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit - {0.004167, 1, 1.000000477}, - {0.008333, 1, 1.000000477}, - {0.0125, 0.99999994, 1.000000477}, - {0.016667, 0.99999994, 1.000000477}, - {0.020833, 0.99999994, 1.000000477}, - {0.025, 0.99999994, 1.000000477}, - {0.029167, 0.99999994, 1.000000477}, - {0.033333, 0.99999994, 1.000000477}, - {0.0375, 0.99999994, 1.000000477}, - {0.041667, 0.99999994, 1.000000477}, - {0.045833, 0.99999994, 1.000000477}, - {0.05, 0.999999881, 1.000000477}, - {0.054167, 0.999999881, 1.000000477}, - {0.058333, 0.999999881, 1.000000477}, - {0.0625, 0.999999881, 1.000000477}, - {0.066667, 0.999999881, 1.000000477}, - {0.070833, 0.999999881, 1.000000477}, - {0.075, 0.999999881, 1.000000477}, - {0.079167, 0.999999881, 1.000000477}, - {0.083333, 0.999999881, 1.000000477}, - {0.0875, 0.999999881, 1.000000477}, - {0.091667, 0.999999881, 1.000000477}, - {0.095833, 0.999999881, 1.000000477}, - {0.1, 0.999999881, 1.000000477}, - {0.104167, 0.999999881, 1.000000477}, - {0.108333, 0.999999881, 1.000000477}, - {0.1125, 0.999999881, 1.000000477}, - {0.116667, 0.999999881, 1.000000477}, - {0.120833, 0.999999881, 1.000000477}, - {0.125, 0.999999881, 1.000000477}, - {0.129167, 0.999999881, 1.000000477}, - {0.133333, 0.999999881, 1.000000477}, - {0.1375, 0.99999994, 1.000000477}, - {0.141667, 0.99999994, 1.000000477}, - {0.145833, 0.99999994, 1.000000477}, - {0.15, 0.99999994, 1.000000477}, - {0.154167, 0.99999994, 1.000000477}, - {0.158333, 0.99999994, 1.000000477}, - {0.1625, 0.99999994, 1.000000477}, - {0.166667, 0.99999994, 1.000000477}, - {0.170833, 0.99999994, 1.000000477}, - {0.175, 0.99999994, 1.000000477}, - {0.179167, 0.99999994, 1.000000477}, - {0.183333, 0.99999994, 1.000000477}, - {0.1875, 0.99999994, 1.000000477}, - {0.191667, 0.99999994, 1.000000477}, - {0.195833, 1, 1.000000477}, - {0.2, 1, 1.000000477}, - {0.204167, 1, 1.000000477}, - {0.208333, 1, 1.000000477}, - {0.2125, 1, 1.000000477}, - {0.216667, 1, 1.000000477}, - {0.220833, 1, 1.000000477}, - {0.225, 1, 1.000000477}, - {0.229167, 1, 1.000000477}, - {0.233333, 1, 1.000000477}, - {0.2375, 1, 1.000000477}, - {0.241667, 1, 1.000000477}, - {0.245833, 1, 1.000000477}, - {0.25, 1, 1.000000477}, - {0.254167, 1, 1.000000477}, - {0.258333, 1, 1.000000477}, - {0.2625, 1, 1.000000477}, - {0.266667, 1, 1.000000477}, - {0.270833, 1, 1.000000477}, - {0.275, 1, 1.000000477}, - {0.279167, 1, 1.000000477}, - {0.283333, 1, 1.000000477}, - {0.2875, 1, 1.000000477}, - {0.291667, 1, 1.000000477}, - {0.295833, 1.000000119, 1.000000477}, - {0.3, 1.000000119, 1.000000477}, - {0.304167, 1.000000119, 1.000000477}, - {0.308333, 1.000000119, 1.000000477}, - {0.3125, 1.000000119, 1.000000477}, - {0.316667, 1.000000119, 1.000000477}, - {0.320833, 1.000000119, 1.000000477}, - {0.325, 1.000000119, 1.000000477}, - {0.329167, 1.000000119, 1.000000477}, - {0.333333, 1.000000119, 1.000000477}, - {0.3375, 1.000000119, 1.000000477}, - {0.341667, 1.000000119, 1.000000477}, - {0.345833, 1.000000119, 1.000000477}, - {0.35, 1.000000119, 1.000000477}, - {0.354167, 1.000000119, 1.000000477}, - {0.358333, 1.000000119, 1.000000477}, - {0.3625, 1, 1.000000477}, - {0.366667, 1, 1.000000477}, - {0.370833, 1, 1.000000477}, - {0.375, 1, 1.000000477}, - {0.379167, 1, 1.000000477}, - {0.383333, 1, 1.000000477}, - {0.3875, 1, 1.000000477}, - {0.391667, 1, 1.000000477}, - {0.395833, 1, 1.000000477}, - {0.4, 1, 1.000000477}, - {0.404167, 1, 1.000000477}, - {0.408333, 1, 1.000000477}, - {0.4125, 1, 1.000000477}, - {0.416667, 1, 1.000000477}, - {0.420833, 1, 1.000000477}, - {0.425, 1, 1.000000477}, - {0.429167, 1, 1.000000477}, - {0.433333, 1, 1.000000477}, - {0.4375, 1, 1.000000477}, - {0.441667, 1, 1.000000477}, - {0.445833, 1, 1.000000477}, - {0.45, 1, 1.000000477}, - {0.454167, 1, 1.000000477}, - {0.458333, 1, 1.000000477}, - {0.4625, 1, 1.000000477}, - {0.466667, 1, 1.000000477}, - {0.470833, 1, 1.000000477}, - {0.475, 1, 1.000000477}, - {0.479167, 1, 1.000000477}, - {0.483333, 1, 1.000000477}, - {0.4875, 1, 1.000000477}, - {0.491667, 1, 1.000000477}, - {0.495833, 1, 1.000000477}, - {0.5, 1, 1.000000477}, - {0.504167, 1, 1.000000477}, - {0.508333, 1, 1.000000477}, - {0.5125, 0.99999994, 1.000000477}, - {0.516667, 0.99999994, 1.000000477}, - {0.520833, 0.99999994, 1.000000477}, - {0.525, 0.99999994, 1.000000477}, - {0.529167, 0.99999994, 1.000000477}, - {0.533333, 0.99999994, 1.000000477}, - {0.5375, 0.99999994, 1.000000477}, - {0.541667, 0.99999994, 1.000000477}, - {0.545833, 0.99999994, 1.000000477}, - {0.55, 0.99999994, 1.000000477}, - {0.554167, 0.99999994, 1.000000477}, - {0.558333, 0.99999994, 1.000000477}, - {0.5625, 0.99999994, 1.000000477}, - {0.566667, 0.99999994, 1.000000477}, - {0.570833, 0.99999994, 1.000000477}, - {0.575, 0.99999994, 1.000000477}, - {0.579167, 0.99999994, 1.000000477}, - {0.583333, 0.99999994, 1.000000477}, - {0.5875, 0.99999994, 1.000000477}, - {0.591667, 0.99999994, 1.000000477}, - {0.595833, 0.99999994, 1.000000477}, - {0.6, 0.99999994, 1.000000477}, - {0.604167, 0.99999994, 1.000000477}, - {0.608333, 0.99999994, 1.000000477}, - {0.6125, 0.99999994, 1.000000477}, - {0.616667, 0.99999994, 1.000000477}, - {0.620833, 1, 1.000000477}, - {0.625, 1, 1.000000477}, - {0.629167, 1, 1.000000477}, - {0.633333, 1, 1.000000477}, - {0.6375, 1, 1.000000477}, - {0.641667, 1, 1.000000477}, - {0.645833, 1, 1.000000477}, - {0.65, 1, 1.000000477}, - {0.654167, 1, 1.000000477}, - {0.658333, 1, 1.000000477}, - {0.6625, 1, 1.000000477}, - {0.666667, 1, 1.000000477}, - {0.670833, 1, 1.000000477}, - {0.675, 1, 1.000000477}, - {0.679167, 1, 1.000000477}, - {0.683333, 1, 1.000000477}, - {0.6875, 1, 1.000000477}, - {0.691667, 1, 1.000000477}, - {0.695833, 1, 1.000000477}, - {0.7, 1, 1.000000477}, - {0.704167, 1, 1.000000477}, - {0.708333, 1, 1.000000477}, - {0.7125, 1, 1.000000477}, - {0.716667, 1, 1.000000477}, - {0.720833, 1, 1.000000477}, - {0.725, 1, 1.000000477}, - {0.729167, 1, 1.000000477}, - {0.733333, 1, 1.000000477}, - {0.7375, 1, 1.000000477}, - {0.741667, 1, 1.000000477}, - {0.745833, 1, 1.000000477}, - {0.75, 1, 1.000000477}, - {0.754167, 1, 1.000000477}, - {0.758333, 1, 1.000000477}, - {0.7625, 1, 1.000000477}, - {0.766667, 1, 1.000000477}, - {0.770833, 1, 1.000000477}, - {0.775, 1, 1.000000477}, - {0.779167, 1, 1.000000477}, - {0.783333, 1, 1.000000477}, - {0.7875, 1, 1.000000477}, - {0.791667, 1, 1.000000477}, - {0.795833, 1, 1.000000477}, - {0.8, 1, 1.000000477}, - {0.804167, 1, 1.000000477}, - {0.808333, 1, 1.000000477}, - {0.8125, 1, 1.000000477}, - {0.816667, 1, 1.000000477}, - {0.820833, 1, 1.000000477}, - {0.825, 1, 1.000000477}, - {0.829167, 1, 1.000000477}, - {0.833333, 1, 1.000000477}, - {0.8375, 1, 1.000000477}, - {0.841667, 1, 1.000000477}, - {0.845833, 1, 1.000000477}, - {0.85, 1, 1.000000477}, - {0.854167, 1, 1.000000477}, - {0.858333, 1, 1.000000477}, - {0.8625, 1, 1.000000477}, - {0.866667, 1, 1.000000477}, - {0.870833, 1, 1.000000477}, - {0.875, 1, 1.000000477}, - {0.879167, 1, 1.000000477}, - {0.883333, 1, 1.000000477}, - {0.8875, 1, 1.000000477}, - {0.891667, 1, 1.000000477}, - {0.895833, 1, 1.000000477}, - {0.9, 1, 1.000000477}, - {0.904167, 1, 1.000000477}, - {0.908333, 1, 1.000000477}, - {0.9125, 1, 1.000000477}, - {0.916667, 1, 1.000000477}, - {0.920833, 1, 1.000000477}, - {0.925, 1, 1.000000477}, - {0.929167, 1, 1.000000477}, - {0.933333, 1, 1.000000477}, - {0.9375, 1, 1.000000477}, - {0.941667, 1, 1.000000477}, - {0.945833, 1, 1.000000477}, - {0.95, 1, 1.000000477}, - {0.954167, 1, 1.000000477}, - {0.958333, 1, 1.000000477}, - {0.9625, 1, 1.000000477}, - {0.966667, 1, 1.000000477}, - {0.970833, 1, 1.000000477}, - {0.975, 1, 1.000000477}, - {0.979167, 1, 1.000000477}, - {0.983333, 1, 1.000000477}, - {0.9875, 1, 1.000000477}, - {0.991667, 1, 1.000000477}, - {0.995833, 1, 1.000000477}, - {1, 1, 1.000000477}, - {1.004167, 1.000682712, 0.015128844}, - {1.008333, 1.001363397, 0.014973078}, - {1.0125, 1.002042532, 0.014841928}, - {1.016667, 1.002720356, 0.014729479}, - {1.020833, 1.00339675, 0.014631276}, - {1.025, 1.004072189, 0.014543867}, - {1.029167, 1.004746675, 0.01446466}, - {1.033333, 1.00541997, 0.014391631}, - {1.0375, 1.006092548, 0.01432314}, - {1.041667, 1.006764412, 0.014257919}, - {1.045833, 1.007435203, 0.014194945}, - {1.05, 1.008105278, 0.014133334}, - {1.054167, 1.008774638, 0.014072391}, - {1.058333, 1.009443045, 0.014011139}, - {1.0625, 1.010110855, 0.01395021}, - {1.066667, 1.010777831, 0.013887996}, - {1.070833, 1.011443853, 0.013824509}, - {1.075, 1.01210916, 0.013759368}, - {1.079167, 1.012773633, 0.013692267}, - {1.083333, 1.013437271, 0.013622929}, - {1.0875, 1.014100075, 0.013551049}, - {1.091667, 1.014762163, 0.013476389}, - {1.095833, 1.015423179, 0.013398723}, - {1.1, 1.016083598, 0.013398723}, - {1.104167, 1.015262365, 0.88047874}, - {1.108333, 1.014493585, 0.89023459}, - {1.1125, 1.013762116, 0.898759723}, - {1.116667, 1.013056278, 0.906125188}, - {1.120833, 1.012367129, 0.912427425}, - {1.125, 1.01168704, 0.917777061}, - {1.129167, 1.011010766, 0.922281682}, - {1.133333, 1.010334253, 0.926045954}, - {1.1375, 1.009654403, 0.929170609}, - {1.141667, 1.008969307, 0.931745946}, - {1.145833, 1.008277893, 0.93385452}, - {1.15, 1.007579207, 0.935571969}, - {1.154167, 1.006873131, 0.936964393}, - {1.158333, 1.006160259, 0.938090801}, - {1.1625, 1.005440712, 0.939003944}, - {1.166667, 1.0047158, 0.9397493}, - {1.170833, 1.003986597, 0.940366805}, - {1.175, 1.003253937, 0.940891325}, - {1.179167, 1.002519608, 0.941352487}, - {1.183333, 1.001785278, 0.94177556}, - {1.1875, 1.001052022, 0.942182004}, - {1.191667, 1.000321627, 0.942589283}, - {1.195833, 0.999596179, 0.943011642}, - {1.2, 0.998876929, 0.943460345}, - {1.204167, 0.998165727, 0.943943799}, - {1.208333, 0.997464538, 0.944467604}, - {1.2125, 0.996774673, 0.945035696}, - {1.216667, 0.996098042, 0.945649385}, - {1.220833, 0.995436549, 0.946308196}, - {1.225, 0.994791448, 0.947010458}, - {1.229167, 0.994164526, 0.947752595}, - {1.233333, 0.993557453, 0.948529899}, - {1.2375, 0.99297154, 0.949337125}, - {1.241667, 0.992408335, 0.950167537}, - {1.245833, 0.99186933, 0.951014042}, - {1.25, 0.991355598, 0.951869369}, - {1.254167, 0.990868449, 0.952725708}, - {1.258333, 0.990409136, 0.953574955}, - {1.2625, 0.989978492, 0.954409778}, - {1.266667, 0.989577591, 0.955215633}, - {1.270833, 0.989207327, 0.956005096}, - {1.275, 0.988868177, 0.956751525}, - {1.279167, 0.988560915, 0.957458079}, - {1.283333, 0.988285899, 0.958120406}, - {1.2875, 0.988043547, 0.958723307}, - {1.291667, 0.987834036, 0.959283113}, - {1.295833, 0.987657607, 0.959768534}, - {1.3, 0.987514019, 0.960213661}, - {1.304167, 0.987403274, 0.96057564}, - {1.308333, 0.987325132, 0.96090132}, - {1.3125, 0.987279058, 0.961140752}, - {1.316667, 0.987264812, 0.961349428}, - {1.320833, 0.987281561, 0.961474001}, - {1.325, 0.987328827, 0.961574197}, - {1.329167, 0.987405658, 0.961597323}, - {1.333333, 0.987511337, 0.961602867}, - {1.3375, 0.987644792, 0.96154201}, - {1.341667, 0.987805247, 0.961470485}, - {1.345833, 0.987991393, 0.961345851}, - {1.35, 0.988202393, 0.961207449}, - {1.354167, 0.988437057, 0.961049318}, - {1.358333, 0.988694072, 0.960876703}, - {1.3625, 0.988972366, 0.960694611}, - {1.366667, 0.989270747, 0.960507751}, - {1.370833, 0.989587843, 0.96032083}, - {1.375, 0.989922643, 0.960137904}, - {1.379167, 0.990273893, 0.959962845}, - {1.383333, 0.990640223, 0.95979917}, - {1.3875, 0.991020679, 0.959649861}, - {1.391667, 0.991413951, 0.959517598}, - {1.395833, 0.991818845, 0.959404588}, - {1.4, 0.992234349, 0.959312677}, - {1.404167, 0.99265933, 0.959243178}, - {1.408333, 0.993092477, 0.959197223}, - {1.4125, 0.993533015, 0.959175408}, - {1.416667, 0.993979812, 0.95917803}, - {1.420833, 0.994431734, 0.959205091}, - {1.425, 0.994888008, 0.959256351}, - {1.429167, 0.995347559, 0.959331334}, - {1.433333, 0.995809376, 0.959429204}, - {1.4375, 0.996272743, 0.959549129}, - {1.441667, 0.996736646, 0.95968461}, - {1.445833, 0.997200072, 0.959850907}, - {1.45, 0.997662604, 0.960024655}, - {1.454167, 0.998123169, 0.960226417}, - {1.458333, 0.998580933, 0.960433066}, - {1.4625, 0.999035299, 0.960664332}, - {1.466667, 0.999485552, 0.96089834}, - {1.470833, 0.99993068, 0.961153209}, - {1.475, 1.000370383, 0.961408794}, - {1.479167, 1.000803709, 0.961681604}, - {1.483333, 1.001230001, 0.961953163}, - {1.4875, 1.001648784, 0.962238312}, - {1.491667, 1.00205946, 0.962520778}, - {1.495833, 1.002461076, 0.962813199}, - {1.5, 1.002853513, 0.963101745}, - {1.504167, 1.003236055, 0.963396966}, - {1.508333, 1.003607988, 0.96368736}, - {1.5125, 1.003968954, 0.963981271}, - {1.516667, 1.004318357, 0.964269757}, - {1.520833, 1.004655838, 0.964558721}, - {1.525, 1.004980803, 0.964841962}, - {1.529167, 1.005292892, 0.965122938}, - {1.533333, 1.005591631, 0.965397894}, - {1.5375, 1.00587666, 0.965667963}, - {1.541667, 1.006147623, 0.96593219}, - {1.545833, 1.006403923, 0.966188729}, - {1.55, 1.006645441, 0.966439664}, - {1.554167, 1.00687182, 0.966680348}, - {1.558333, 1.007082582, 0.966915607}, - {1.5625, 1.007277608, 0.967138052}, - {1.566667, 1.00745666, 0.967355549}, - {1.570833, 1.007619381, 0.96755743}, - {1.575, 1.007765532, 0.967754841}, - {1.579167, 1.007894993, 0.967934012}, - {1.583333, 1.008007526, 0.968109071}, - {1.5875, 1.008103132, 0.968263447}, - {1.591667, 1.008181453, 0.968414128}, - {1.595833, 1.008242607, 0.968541622}, - {1.6, 1.008286357, 0.968665838}, - {1.604167, 1.008312702, 0.968764782}, - {1.608333, 1.008321762, 0.968860805}, - {1.6125, 1.008313417, 0.968929827}, - {1.616667, 1.008287787, 0.968996286}, - {1.620833, 1.008244872, 0.969034612}, - {1.625, 1.00818491, 0.969070733}, - {1.629167, 1.00810802, 0.969078183}, - {1.633333, 1.008014202, 0.969083905}, - {1.6375, 1.007904053, 0.969061136}, - {1.641667, 1.007777452, 0.969037175}, - {1.645833, 1.007634878, 0.968985915}, - {1.65, 1.007476687, 0.96893394}, - {1.654167, 1.007303119, 0.968856812}, - {1.658333, 1.007114768, 0.968779624}, - {1.6625, 1.006911874, 0.968680382}, - {1.666667, 1.006694913, 0.968581617}, - {1.670833, 1.00646472, 0.968464911}, - {1.675, 1.006221414, 0.968349338}, - {1.679167, 1.005965829, 0.968220592}, - {1.683333, 1.005698442, 0.968093693}, - {1.6875, 1.005420089, 0.967959166}, - {1.691667, 1.005131125, 0.967827022}, - {1.695833, 1.004832625, 0.967693269}, - {1.7, 1.004525065, 0.967562377}, - {1.704167, 1.00420928, 0.967436075}, - {1.708333, 1.003885984, 0.967313051}, - {1.7125, 1.003556132, 0.967200637}, - {1.716667, 1.003220201, 0.967091799}, - {1.720833, 1.0028795, 0.966999233}, - {1.725, 1.00253439, 0.966910303}, - {1.729167, 1.00218606, 0.966842711}, - {1.733333, 1.001835227, 0.966778576}, - {1.7375, 1.001482844, 0.966739953}, - {1.741667, 1.001129627, 0.966711283}, - {1.745833, 1.000776529, 0.966690898}, - {1.75, 1.000424623, 0.966700375}, - {1.754167, 1.000074387, 0.96671176}, - {1.758333, 0.999727011, 0.966754198}, - {1.7625, 0.999383092, 0.966797709}, - {1.766667, 0.999043643, 0.966872096}, - {1.770833, 0.998709381, 0.966946483}, - {1.775, 0.998381138, 0.967050433}, - {1.779167, 0.99805963, 0.967153192}, - {1.783333, 0.997745872, 0.96728301}, - {1.7875, 0.997440159, 0.967410386}, - {1.791667, 0.997143567, 0.967561364}, - {1.795833, 0.99685663, 0.967714787}, - {1.8, 0.996579885, 0.967869997}, - {1.804167, 0.996314168, 0.968042195}, - {1.808333, 0.996059835, 0.968208969}, - {1.8125, 0.995817542, 0.968387842}, - {1.816667, 0.995587707, 0.968560398}, - {1.820833, 0.995370924, 0.968739927}, - {1.825, 0.995167375, 0.968912601}, - {1.829167, 0.994977593, 0.969087243}, - {1.833333, 0.994801879, 0.969254494}, - {1.8375, 0.99464041, 0.96941936}, - {1.841667, 0.994493544, 0.969576657}, - {1.845833, 0.994361401, 0.969727576}, - {1.85, 0.994244099, 0.969871104}, - {1.854167, 0.994141817, 0.970005214}, - {1.858333, 0.994054556, 0.970132172}, - {1.8625, 0.993982315, 0.970247447}, - {1.866667, 0.993925095, 0.970356286}, - {1.870833, 0.993882775, 0.97045207}, - {1.875, 0.993855238, 0.970542192}, - {1.879167, 0.993842363, 0.970618844}, - {1.883333, 0.993843973, 0.970690787}, - {1.8875, 0.993859708, 0.970749676}, - {1.891667, 0.993889451, 0.97080493}, - {1.895833, 0.993932843, 0.970848203}, - {1.9, 0.993989527, 0.970888972}, - {1.904167, 0.994059205, 0.97091943}, - {1.908333, 0.994141459, 0.970948577}, - {1.9125, 0.994235873, 0.970969498}, - {1.916667, 0.994342029, 0.970990121}, - {1.920833, 0.99445945, 0.971004903}, - {1.925, 0.994587719, 0.971020401}, - {1.929167, 0.9947263, 0.971032619}, - {1.933333, 0.994874775, 0.971046269}, - {1.9375, 0.995032549, 0.971059203}, - {1.941667, 0.995199144, 0.971074224}, - {1.945833, 0.995373964, 0.971090853}, - {1.95, 0.995556593, 0.971110106}, - {1.954167, 0.995746374, 0.971133053}, - {1.958333, 0.995942831, 0.971158922}, - {1.9625, 0.996145368, 0.971190274}, - {1.966667, 0.996353567, 0.971224725}, - {1.970833, 0.996566653, 0.97126615}, - {1.975, 0.996784389, 0.971310556}, - {1.979167, 0.997005939, 0.971363068}, - {1.983333, 0.997230887, 0.971418381}, - {1.9875, 0.997458696, 0.971482456}, - {1.991667, 0.997688949, 0.971549094}, - {1.995833, 0.997920871, 0.971624851}, - {2, 0.998154223, 0.971702695}, - {2.004167, 0.99838829, 0.971789718}, - {2.008333, 0.998622656, 0.971878409}, - {2.0125, 0.998856843, 0.971975863}, - {2.016667, 0.999090433, 0.972074568}, - {2.020833, 0.999322772, 0.972181499}, - {2.025, 0.999553561, 0.972289145}, - {2.029167, 0.999782324, 0.972404182}, - {2.033333, 1.000008583, 0.972519457}, - {2.0375, 1.000231862, 0.97264123}, - {2.041667, 1.000451922, 0.972762704}, - {2.045833, 1.000668168, 0.972889543}, - {2.05, 1.000880361, 0.973015666}, - {2.054167, 1.001088023, 0.973146021}, - {2.058333, 1.001290798, 0.973275185}, - {2.0625, 1.001488328, 0.973407388}, - {2.066667, 1.001680374, 0.973538041}, - {2.070833, 1.00186646, 0.973670363}, - {2.075, 1.002046466, 0.973800957}, - {2.079167, 1.002219915, 0.973931909}, - {2.083333, 1.002386689, 0.974060893}, - {2.0875, 1.00254631, 0.974188983}, - {2.091667, 1.002698779, 0.974314928}, - {2.095833, 1.002843618, 0.974438667}, - {2.1, 1.002980828, 0.974560261}, - {2.104167, 1.003109932, 0.974678457}, - {2.108333, 1.003231049, 0.974794388}, - {2.1125, 1.003343701, 0.974905789}, - {2.116667, 1.003448009, 0.975015044}, - {2.120833, 1.003543615, 0.975118697}, - {2.125, 1.003630638, 0.975220263}, - {2.129167, 1.00370872, 0.975315332}, - {2.133333, 1.003777862, 0.975408375}, - {2.1375, 1.003837943, 0.975494087}, - {2.141667, 1.003889084, 0.97557801}, - {2.145833, 1.003931046, 0.975653946}, - {2.15, 1.003963828, 0.975728214}, - {2.154167, 1.003987551, 0.975794077}, - {2.158333, 1.004002213, 0.97585845}, - {2.1625, 1.004007816, 0.975914061}, - {2.166667, 1.00400424, 0.97596848}, - {2.170833, 1.003991842, 0.976014078}, - {2.175, 1.003970623, 0.976058662}, - {2.179167, 1.003940463, 0.976094544}, - {2.183333, 1.003901839, 0.976129651}, - {2.1875, 1.003854632, 0.976156354}, - {2.191667, 1.003799081, 0.97618264}, - {2.195833, 1.003735423, 0.976201057}, - {2.2, 1.003663778, 0.976219237}, - {2.204167, 1.003584385, 0.976230323}, - {2.208333, 1.003497481, 0.97624141}, - {2.2125, 1.003403306, 0.976246357}, - {2.216667, 1.003302097, 0.976251602}, - {2.220833, 1.003194094, 0.976251721}, - {2.225, 1.003079653, 0.976252377}, - {2.229167, 1.002959013, 0.976249218}, - {2.233333, 1.002832532, 0.976246715}, - {2.2375, 1.002700567, 0.976241708}, - {2.241667, 1.002563357, 0.976237595}, - {2.245833, 1.002421498, 0.97623235}, - {2.25, 1.00227499, 0.976228058}, - {2.254167, 1.002124429, 0.976224005}, - {2.258333, 1.001970172, 0.976221025}, - {2.2625, 1.001812577, 0.976219654}, - {2.266667, 1.001652002, 0.976219356}, - {2.270833, 1.001489043, 0.976221859}, - {2.275, 1.001323819, 0.976225436}, - {2.279167, 1.001156807, 0.976232946}, - {2.283333, 1.000988603, 0.976241529}, - {2.2875, 1.000819445, 0.97625488}, - {2.291667, 1.000649691, 0.976269126}, - {2.295833, 1.000480056, 0.976288915}, - {2.3, 1.00031054, 0.976309478}, - {2.304167, 1.00014174, 0.976336062}, - {2.308333, 0.999974132, 0.976363182}, - {2.3125, 0.999808013, 0.97639662}, - {2.316667, 0.999643743, 0.976430357}, - {2.320833, 0.999481857, 0.976470292}, - {2.325, 0.999322474, 0.976510406}, - {2.329167, 0.999166131, 0.97655654}, - {2.333333, 0.999013186, 0.976602495}, - {2.3375, 0.998863876, 0.976654112}, - {2.341667, 0.998718619, 0.976705313}, - {2.345833, 0.998577714, 0.97676152}, - {2.35, 0.998441339, 0.976817131}, - {2.354167, 0.99830997, 0.976876974}, - {2.358333, 0.998183727, 0.976935983}, - {2.3625, 0.998062968, 0.976998508}, - {2.366667, 0.997947812, 0.97706002}, - {2.370833, 0.997838557, 0.977124095}, - {2.375, 0.997735381, 0.977187037}, - {2.379167, 0.997638524, 0.977251768}, - {2.383333, 0.997548044, 0.977315128}, - {2.3875, 0.99746418, 0.97737956}, - {2.391667, 0.997386992, 0.977442563}, - {2.395833, 0.997316659, 0.977505863}, - {2.4, 0.99725318, 0.977567792}, - {2.404167, 0.997196674, 0.977629304}, - {2.408333, 0.997147202, 0.977689505}, - {2.4125, 0.997104764, 0.977748811}, - {2.416667, 0.997069418, 0.977806926}, - {2.420833, 0.997041106, 0.977863729}, - {2.425, 0.997019887, 0.977919519}, - {2.429167, 0.997005641, 0.977973759}, - {2.433333, 0.99699831, 0.978027105}, - {2.4375, 0.996997893, 0.978078902}, - {2.441667, 0.997004211, 0.978129923}, - {2.445833, 0.997017264, 0.978179455}, - {2.45, 0.997036815, 0.97822845}, - {2.454167, 0.997062802, 0.978276134}, - {2.458333, 0.997095108, 0.97832346}, - {2.4625, 0.997133493, 0.978369713}, - {2.466667, 0.997177839, 0.978415847}, - {2.470833, 0.997227907, 0.978461266}, - {2.475, 0.997283578, 0.978506744}, - {2.479167, 0.997344553, 0.978551865}, - {2.483333, 0.997410715, 0.978597224}, - {2.4875, 0.997481763, 0.978642642}, - {2.491667, 0.99755758, 0.978688478}, - {2.495833, 0.997637749, 0.978734732}, - {2.5, 0.997722149, 0.978781521}, - {2.504167, 0.997810483, 0.978829205}, - {2.508333, 0.997902572, 0.978877366}, - {2.5125, 0.997998059, 0.978926837}, - {2.516667, 0.998096764, 0.978976846}, - {2.520833, 0.99819833, 0.979028463}, - {2.525, 0.998302639, 0.979080617}, - {2.529167, 0.998409212, 0.97913456}, - {2.533333, 0.998517931, 0.979189098}, - {2.5375, 0.998628497, 0.979245543}, - {2.541667, 0.998740673, 0.979302526}, - {2.545833, 0.998854041, 0.979361534}, - {2.55, 0.998968482, 0.97942096}, - {2.554167, 0.999083698, 0.979482412}, - {2.558333, 0.99919939, 0.979544222}, - {2.5625, 0.999315321, 0.97960794}, - {2.566667, 0.999431312, 0.979671896}, - {2.570833, 0.999546885, 0.979737639}, - {2.575, 0.999662042, 0.979803562}, - {2.579167, 0.999776363, 0.979871035}, - {2.583333, 0.999889672, 0.979938447}, - {2.5875, 1.000001788, 0.980007231}, - {2.591667, 1.000112414, 0.980075896}, - {2.595833, 1.000221252, 0.980145454}, - {2.6, 1.000328302, 0.980214894}, - {2.604167, 1.000433087, 0.98028487}, - {2.608333, 1.000535607, 0.980354488}, - {2.6125, 1.000635624, 0.980424404}, - {2.616667, 1.000732899, 0.980493844}, - {2.620833, 1.000827312, 0.980563104}, - {2.625, 1.000918627, 0.980631888}, - {2.629167, 1.001006722, 0.980700076}, - {2.633333, 1.001091361, 0.980767667}, - {2.6375, 1.001172543, 0.980834305}, - {2.641667, 1.001250029, 0.980900288}, - {2.645833, 1.001323581, 0.980964839}, - {2.65, 1.001393318, 0.981028795}, - {2.654167, 1.001459002, 0.981091022}, - {2.658333, 1.001520634, 0.981152534}, - {2.6625, 1.001577854, 0.98121196}, - {2.666667, 1.001630902, 0.98127073}, - {2.670833, 1.00167942, 0.981327116}, - {2.675, 1.001723647, 0.981382847}, - {2.679167, 1.001763225, 0.981435895}, - {2.683333, 1.001798391, 0.981488407}, - {2.6875, 1.001828909, 0.981538057}, - {2.691667, 1.001854777, 0.981587112}, - {2.695833, 1.001875997, 0.981633246}, - {2.7, 1.001892686, 0.981678843}, - {2.704167, 1.001904726, 0.981721342}, - {2.708333, 1.001912117, 0.981763482}, - {2.7125, 1.001914978, 0.981802464}, - {2.716667, 1.001913309, 0.981841147}, - {2.720833, 1.00190711, 0.981876731}, - {2.725, 1.001896501, 0.981912136}, - {2.729167, 1.00188148, 0.981944501}, - {2.733333, 1.001862168, 0.981976748}, - {2.7375, 1.001838684, 0.982006192}, - {2.741667, 1.001811028, 0.982035518}, - {2.745833, 1.001779318, 0.98206234}, - {2.75, 1.001743793, 0.982089102}, - {2.754167, 1.001704335, 0.98211354}, - {2.758333, 1.001661181, 0.982138097}, - {2.7625, 1.001614571, 0.982160687}, - {2.766667, 1.001564503, 0.982183337}, - {2.770833, 1.001511216, 0.982204437}, - {2.775, 1.001454711, 0.982225657}, - {2.779167, 1.001395345, 0.982245624}, - {2.783333, 1.001333117, 0.98226589}, - {2.7875, 1.001268268, 0.982285261}, - {2.791667, 1.001200914, 0.982304871}, - {2.795833, 1.001131415, 0.982324004}, - {2.8, 1.001059771, 0.982343495}, - {2.804167, 1.000986099, 0.982362807}, - {2.808333, 1.000910878, 0.982382476}, - {2.8125, 1.000833988, 0.982402384}, - {2.816667, 1.000755906, 0.98242265}, - {2.820833, 1.000676632, 0.982443452}, - {2.825, 1.000596285, 0.982464552}, - {2.829167, 1.000515342, 0.982486546}, - {2.833333, 1.000433803, 0.982508838}, - {2.8375, 1.000351906, 0.982532263}, - {2.841667, 1.000269771, 0.982555926}, - {2.845833, 1.000187874, 0.9825809}, - {2.85, 1.000106096, 0.982606173}, - {2.854167, 1.000024676, 0.982632816}, - {2.858333, 0.999943972, 0.982659698}, - {2.8625, 0.999864042, 0.982688129}, - {2.866667, 0.999785066, 0.98271668}, - {2.870833, 0.999707282, 0.98274678}, - {2.875, 0.999630749, 0.982777059}, - {2.879167, 0.999555767, 0.982808828}, - {2.883333, 0.999482453, 0.982840717}, - {2.8875, 0.999410987, 0.982874095}, - {2.891667, 0.999341428, 0.982907474}, - {2.895833, 0.999274015, 0.982942283}, - {2.9, 0.999208868, 0.982977033}, - {2.904167, 0.999146104, 0.983013093}, - {2.908333, 0.999085844, 0.983049035}, - {2.9125, 0.999028206, 0.983086228}, - {2.916667, 0.99897325, 0.983123243}, - {2.920833, 0.998921216, 0.98316133}, - {2.925, 0.998872042, 0.983199179}, - {2.929167, 0.998825967, 0.983237982}, - {2.933333, 0.998782873, 0.983276546}, - {2.9375, 0.998742998, 0.983315885}, - {2.941667, 0.998706341, 0.983354986}, - {2.945833, 0.998672962, 0.983394682}, - {2.95, 0.998642862, 0.9834342}, - {2.954167, 0.998616099, 0.983474135}, - {2.958333, 0.998592734, 0.983513892}, - {2.9625, 0.998572767, 0.983554006}, - {2.966667, 0.998556137, 0.983593881}, - {2.970833, 0.998542905, 0.983634114}, - {2.975, 0.99853307, 0.983674109}, - {2.979167, 0.998526633, 0.983714342}, - {2.983333, 0.998523533, 0.983754396}, - {2.9875, 0.998523712, 0.98379463}, - {2.991667, 0.998527169, 0.983834684}, - {2.995833, 0.998533845, 0.983874977}, - {3, 0.998543739, 0.983915091}, - {3.004167, 0.998556674, 0.983955443}, - {3.008333, 0.998572707, 0.983995676}, - {3.0125, 0.998591661, 0.984036088}, - {3.016667, 0.998613536, 0.98407644}, - {3.020833, 0.998638153, 0.984117031}, - {3.025, 0.998665512, 0.984157622}, - {3.029167, 0.998695493, 0.984198391}, - {3.033333, 0.998727977, 0.984239221}, - {3.0375, 0.998762906, 0.984280348}, - {3.041667, 0.998800099, 0.984321475}, - {3.045833, 0.998839438, 0.9843629}, - {3.05, 0.998880863, 0.984404445}, - {3.054167, 0.998924255, 0.984446287}, - {3.058333, 0.998969436, 0.984488249}, - {3.0625, 0.999016345, 0.984530509}, - {3.066667, 0.999064803, 0.984572887}, - {3.070833, 0.999114692, 0.984615624}, - {3.075, 0.999165893, 0.98465848}, - {3.079167, 0.999218225, 0.984701633}, - {3.083333, 0.999271631, 0.984744906}, - {3.0875, 0.999325931, 0.984788537}, - {3.091667, 0.999381006, 0.984832227}, - {3.095833, 0.999436736, 0.984876215}, - {3.1, 0.999492943, 0.984920263}, - {3.104167, 0.999549508, 0.984964609}, - {3.108333, 0.999606311, 0.985008955}, - {3.1125, 0.999663234, 0.98505348}, - {3.116667, 0.999720097, 0.985098004}, - {3.120833, 0.99977684, 0.985142648}, - {3.125, 0.999833286, 0.985187292}, - {3.129167, 0.999889314, 0.985231936}, - {3.133333, 0.999944806, 0.98527652}, - {3.1375, 0.999999642, 0.985321045}, - {3.141667, 1.000053763, 0.98536545}, - {3.145833, 1.000106931, 0.985409677}, - {3.15, 1.000159144, 0.985453784}, - {3.154167, 1.000210285, 0.985497534}, - {3.158333, 1.000260115, 0.985541224}, - {3.1625, 1.000308752, 0.985584378}, - {3.166667, 1.000355959, 0.985627472}, - {3.170833, 1.000401735, 0.985669911}, - {3.175, 1.000445843, 0.98571223}, - {3.179167, 1.0004884, 0.985753834}, - {3.183333, 1.00052917, 0.985795259}, - {3.1875, 1.000568032, 0.98583585}, - {3.191667, 1.000605226, 0.985876262}, - {3.195833, 1.000640273, 0.98591572}, - {3.2, 1.000673413, 0.985955}, - {3.204167, 1.000704527, 0.985993266}, - {3.208333, 1.000733614, 0.986031294}, - {3.2125, 1.000760436, 0.986068249}, - {3.216667, 1.000785112, 0.986105025}, - {3.220833, 1.000807524, 0.986140609}, - {3.225, 1.000827789, 0.986176014}, - {3.229167, 1.00084579, 0.986210167}, - {3.233333, 1.000861406, 0.986244142}, - {3.2375, 1.000874758, 0.986276925}, - {3.241667, 1.000885844, 0.986309528}, - {3.245833, 1.000894666, 0.986340821}, - {3.25, 1.000901222, 0.986372054}, - {3.254167, 1.000905395, 0.986401975}, - {3.258333, 1.000907302, 0.986431777}, - {3.2625, 1.000906944, 0.986460388}, - {3.266667, 1.000904441, 0.986488879}, - {3.270833, 1.000899673, 0.986516178}, - {3.275, 1.000892639, 0.986543477}, - {3.279167, 1.000883579, 0.986569583}, - {3.283333, 1.000872493, 0.98659569}, - {3.2875, 1.000859261, 0.986620784}, - {3.291667, 1.000844121, 0.986645818}, - {3.295833, 1.000826955, 0.986669898}, - {3.3, 1.000807881, 0.986694038}, - {3.304167, 1.000787139, 0.986717284}, - {3.308333, 1.000764608, 0.986740589}, - {3.3125, 1.00074029, 0.986763179}, - {3.316667, 1.000714421, 0.986785829}, - {3.320833, 1.000687122, 0.986807883}, - {3.325, 1.000658274, 0.986829996}, - {3.329167, 1.000628114, 0.986851633}, - {3.333333, 1.000596523, 0.986873388}, - {3.3375, 1.00056386, 0.986894786}, - {3.341667, 1.000530124, 0.986916244}, - {3.345833, 1.000495315, 0.986937523}, - {3.35, 1.000459552, 0.986958921}, - {3.354167, 1.000423074, 0.986980259}, - {3.358333, 1.000385761, 0.987001657}, - {3.3625, 1.000347853, 0.987023056}, - {3.366667, 1.000309348, 0.987044632}, - {3.370833, 1.000270367, 0.987066269}, - {3.375, 1.000231028, 0.987088084}, - {3.379167, 1.000191569, 0.987110138}, - {3.383333, 1.000151753, 0.987132251}, - {3.3875, 1.000112057, 0.987154663}, - {3.391667, 1.000072241, 0.987177193}, - {3.395833, 1.000032663, 0.987200141}, - {3.4, 0.999993145, 0.987223148}, - {3.404167, 0.999954045, 0.987246573}, - {3.408333, 0.999915302, 0.987270117}, - {3.4125, 0.999877036, 0.987294137}, - {3.416667, 0.999839365, 0.987318218}, - {3.420833, 0.999802351, 0.987342775}, - {3.425, 0.999765992, 0.987367451}, - {3.429167, 0.999730527, 0.987392604}, - {3.433333, 0.999695897, 0.987417817}, - {3.4375, 0.99966222, 0.987443566}, - {3.441667, 0.999629617, 0.987469375}, - {3.445833, 0.999598086, 0.98749572}, - {3.45, 0.999567688, 0.987522006}, - {3.454167, 0.999538481, 0.987548888}, - {3.458333, 0.999510586, 0.98757571}, - {3.4625, 0.999484062, 0.987603068}, - {3.466667, 0.999458849, 0.987630427}, - {3.470833, 0.999435067, 0.987658262}, - {3.475, 0.999412715, 0.987686098}, - {3.479167, 0.999391854, 0.98771435}, - {3.483333, 0.999372542, 0.987742543}, - {3.4875, 0.999354839, 0.987771213}, - {3.491667, 0.999338627, 0.987799883}, - {3.495833, 0.999324083, 0.987828851}, - {3.5, 0.999311149, 0.987857878}, - {3.504167, 0.999299824, 0.987887204}, - {3.508333, 0.999290168, 0.987916529}, - {3.5125, 0.999282122, 0.987946153}, - {3.516667, 0.999275744, 0.987975776}, - {3.520833, 0.999270976, 0.988005638}, - {3.525, 0.999267876, 0.9880355}, - {3.529167, 0.999266386, 0.98806566}, - {3.533333, 0.999266505, 0.98809576}, - {3.5375, 0.999268234, 0.988126099}, - {3.541667, 0.999271512, 0.988156438}, - {3.545833, 0.99927634, 0.988187015}, - {3.55, 0.999282718, 0.988217533}, - {3.554167, 0.999290526, 0.988248229}, - {3.558333, 0.999299765, 0.988278985}, - {3.5625, 0.999310493, 0.98830986}, - {3.566667, 0.999322534, 0.988340735}, - {3.570833, 0.999335885, 0.988371789}, - {3.575, 0.999350548, 0.988402784}, - {3.579167, 0.999366403, 0.988433957}, - {3.583333, 0.99938345, 0.98846513}, - {3.5875, 0.999401629, 0.988496423}, - {3.591667, 0.999420881, 0.988527715}, - {3.595833, 0.999441147, 0.988559127}, - {3.6, 0.999462366, 0.988590479}, - {3.604167, 0.999484479, 0.98862195}, - {3.608333, 0.999507427, 0.988653421}, - {3.6125, 0.99953115, 0.988684893}, - {3.616667, 0.999555588, 0.988716424}, - {3.620833, 0.999580622, 0.988747954}, - {3.625, 0.999606252, 0.988779485}, - {3.629167, 0.999632418, 0.988810956}, - {3.633333, 0.999659002, 0.988842487}, - {3.6375, 0.999685943, 0.988873959}, - {3.641667, 0.999713242, 0.98890543}, - {3.645833, 0.99974072, 0.988936782}, - {3.65, 0.999768436, 0.988968134}, - {3.654167, 0.999796212, 0.988999367}, - {3.658333, 0.999824107, 0.9890306}, - {3.6625, 0.999851942, 0.989061654}, - {3.666667, 0.999879658, 0.989092648}, - {3.670833, 0.999907255, 0.989123464}, - {3.675, 0.999934673, 0.989154279}, - {3.679167, 0.999961793, 0.989184797}, - {3.683333, 0.999988556, 0.989215255}, - {3.6875, 1.00001502, 0.989245474}, - {3.691667, 1.000041008, 0.989275634}, - {3.695833, 1.0000664, 0.989305437}, - {3.7, 1.000091314, 0.989335179}, - {3.704167, 1.000115633, 0.989364564}, - {3.708333, 1.000139356, 0.98939383}, - {3.7125, 1.000162244, 0.989422739}, - {3.716667, 1.000184536, 0.989451587}, - {3.720833, 1.000205874, 0.989479899}, - {3.725, 1.000226498, 0.989508212}, - {3.729167, 1.000246286, 0.989535987}, - {3.733333, 1.000265121, 0.989563704}, - {3.7375, 1.000283003, 0.989590943}, - {3.741667, 1.000299931, 0.989618063}, - {3.745833, 1.000315905, 0.989644587}, - {3.75, 1.000330806, 0.989671111}, - {3.754167, 1.000344634, 0.989697039}, - {3.758333, 1.000357509, 0.989722848}, - {3.7625, 1.000369191, 0.98974812}, - {3.766667, 1.000379801, 0.989773333}, - {3.770833, 1.000389338, 0.98979789}, - {3.775, 1.000397801, 0.989822447}, - {3.779167, 1.000405073, 0.989846408}, - {3.783333, 1.000411153, 0.98987025}, - {3.7875, 1.00041616, 0.989893556}, - {3.791667, 1.000419974, 0.989916801}, - {3.795833, 1.000422716, 0.989939451}, - {3.8, 1.000424385, 0.989962041}, - {3.804167, 1.000424862, 0.989984095}, - {3.808333, 1.000424266, 0.990006089}, - {3.8125, 1.000422597, 0.990027547}, - {3.816667, 1.000419736, 0.990049005}, - {3.820833, 1.000415921, 0.990069926}, - {3.825, 1.000411034, 0.990090847}, - {3.829167, 1.000405192, 0.990111291}, - {3.833333, 1.000398278, 0.990131736}, - {3.8375, 1.00039053, 0.990151703}, - {3.841667, 1.000381708, 0.990171731}, - {3.845833, 1.000372052, 0.99019134}, - {3.85, 1.000361443, 0.99021095}, - {3.854167, 1.000350118, 0.990230203}, - {3.858333, 1.000337839, 0.990249455}, - {3.8625, 1.000324965, 0.990268469}, - {3.866667, 1.000311255, 0.990287483}, - {3.870833, 1.000296831, 0.990306258}, - {3.875, 1.000281811, 0.990325034}, - {3.879167, 1.000266194, 0.99034363}, - {3.883333, 1.000249982, 0.990362227}, - {3.8875, 1.000233293, 0.990380764}, - {3.891667, 1.000216126, 0.990399241}, - {3.895833, 1.000198603, 0.990417659}, - {3.9, 1.000180602, 0.990436137}, - {3.904167, 1.000162244, 0.990454555}, - {3.908333, 1.000143766, 0.990473032}, - {3.9125, 1.000124931, 0.990491509}, - {3.916667, 1.000105858, 0.990509987}, - {3.920833, 1.000086665, 0.990528524}, - {3.925, 1.000067472, 0.990547061}, - {3.929167, 1.000048161, 0.990565717}, - {3.933333, 1.000028849, 0.990584433}, - {3.9375, 1.000009537, 0.990603209}, - {3.941667, 0.999990344, 0.990622103}, - {3.945833, 0.999971271, 0.990641057}, - {3.95, 0.999952376, 0.990660071}, - {3.954167, 0.99993372, 0.990679264}, - {3.958333, 0.999915302, 0.990698457}, - {3.9625, 0.999897242, 0.990717828}, - {3.966667, 0.999879479, 0.990737259}, - {3.970833, 0.999862075, 0.990756929}, - {3.975, 0.999845088, 0.990776539}, - {3.979167, 0.999828577, 0.990796447}, - {3.983333, 0.999812543, 0.990816295}, - {3.9875, 0.999797046, 0.990836442}, - {3.991667, 0.999782085, 0.990856528}, - {3.995833, 0.999767721, 0.990876913}, - {4, 0.999753952, 0.990897238}, - {4.004167, 0.999740779, 0.990917861}, - {4.008333, 0.999728322, 0.990938425}, - {4.0125, 0.99971652, 0.990959287}, - {4.016667, 0.999705434, 0.990980089}, - {4.020833, 0.999695063, 0.991001189}, - {4.025, 0.999685407, 0.991022229}, - {4.029167, 0.999676526, 0.991043508}, - {4.033333, 0.999668419, 0.991064787}, - {4.0375, 0.999661088, 0.991086245}, - {4.041667, 0.999654531, 0.991107702}, - {4.045833, 0.99964875, 0.991129398}, - {4.05, 0.999643803, 0.991151035}, - {4.054167, 0.99963963, 0.99117291}, - {4.058333, 0.999636233, 0.991194725}, - {4.0625, 0.99963367, 0.991216719}, - {4.066667, 0.999631941, 0.991238713}, - {4.070833, 0.999630928, 0.991260886}, - {4.075, 0.999630749, 0.991283059}, - {4.079167, 0.999631345, 0.991305292}, - {4.083333, 0.999632716, 0.991327584}, - {4.0875, 0.999634802, 0.991349995}, - {4.091667, 0.999637663, 0.991372347}, - {4.095833, 0.999641299, 0.991394877}, - {4.1, 0.999645591, 0.991417348}, - {4.104167, 0.999650598, 0.991439939}, - {4.108333, 0.99965626, 0.991462469}, - {4.1125, 0.999662578, 0.991485119}, - {4.116667, 0.999669552, 0.991507709}, - {4.120833, 0.999677122, 0.991530359}, - {4.125, 0.999685287, 0.991553009}, - {4.129167, 0.99969399, 0.991575718}, - {4.133333, 0.999703228, 0.991598368}, - {4.1375, 0.999713004, 0.991621077}, - {4.141667, 0.999723196, 0.991643786}, - {4.145833, 0.999733865, 0.991666436}, - {4.15, 0.999745011, 0.991689086}, - {4.154167, 0.999756455, 0.991711676}, - {4.158333, 0.999768317, 0.991734326}, - {4.1625, 0.999780476, 0.991756856}, - {4.166667, 0.999792933, 0.991779447}, - {4.170833, 0.999805629, 0.991801858}, - {4.175, 0.999818563, 0.991824329}, - {4.179167, 0.999831676, 0.991846681}, - {4.183333, 0.999844968, 0.991869032}, - {4.1875, 0.999858439, 0.991891265}, - {4.191667, 0.999871969, 0.991913497}, - {4.195833, 0.999885499, 0.991935551}, - {4.2, 0.999899149, 0.991957605}, - {4.204167, 0.999912739, 0.99197948}, - {4.208333, 0.999926329, 0.992001355}, - {4.2125, 0.999939859, 0.992023051}, - {4.216667, 0.99995327, 0.992044747}, - {4.220833, 0.999966562, 0.992066205}, - {4.225, 0.999979734, 0.992087603}, - {4.229167, 0.999992669, 0.992108822}, - {4.233333, 1.000005484, 0.992130041}, - {4.2375, 1.000018001, 0.992150962}, - {4.241667, 1.00003016, 0.992171884}, - {4.245833, 1.0000422, 0.992192566}, - {4.25, 1.000053763, 0.99221319}, - {4.254167, 1.000065088, 0.992233574}, - {4.258333, 1.000076056, 0.9922539}, - {4.2625, 1.000086665, 0.992273927}, - {4.266667, 1.000096798, 0.992293954}, - {4.270833, 1.000106454, 0.992313683}, - {4.275, 1.000115752, 0.992333353}, - {4.279167, 1.000124574, 0.992352784}, - {4.283333, 1.000133038, 0.992372096}, - {4.2875, 1.000140905, 0.992391169}, - {4.291667, 1.000148177, 0.992410183}, - {4.295833, 1.000155091, 0.992428839}, - {4.3, 1.000161409, 0.992447555}, - {4.304167, 1.000167251, 0.992465854}, - {4.308333, 1.000172496, 0.992484212}, - {4.3125, 1.000177264, 0.992502213}, - {4.316667, 1.000181437, 0.992520213}, - {4.320833, 1.000185013, 0.992537856}, - {4.325, 1.000188112, 0.992555499}, - {4.329167, 1.000190616, 0.992572844}, - {4.333333, 1.000192642, 0.992590189}, - {4.3375, 1.000193954, 0.992607176}, - {4.341667, 1.000194788, 0.992624164}, - {4.345833, 1.000195146, 0.992640913}, - {4.35, 1.000194907, 0.992657602}, - {4.354167, 1.000194073, 0.992673993}, - {4.358333, 1.000192881, 0.992690444}, - {4.3625, 1.000190973, 0.992706597}, - {4.366667, 1.000188708, 0.99272275}, - {4.370833, 1.000185847, 0.992738664}, - {4.375, 1.000182509, 0.992754579}, - {4.379167, 1.000178695, 0.992770255}, - {4.383333, 1.000174522, 0.992785931}, - {4.3875, 1.000169754, 0.992801368}, - {4.391667, 1.000164747, 0.992816865}, - {4.395833, 1.000159144, 0.992832184}, - {4.4, 1.000153303, 0.992847502}, - {4.404167, 1.000146985, 0.992862642}, - {4.408333, 1.000140309, 0.992877781}, - {4.4125, 1.000133276, 0.992892802}, - {4.416667, 1.000126004, 0.992907822}, - {4.420833, 1.000118494, 0.992922723}, - {4.425, 1.000110626, 0.992937624}, - {4.429167, 1.00010252, 0.992952466}, - {4.433333, 1.000094175, 0.992967308}, - {4.4375, 1.000085592, 0.99298209}, - {4.441667, 1.00007689, 0.992996871}, - {4.445833, 1.000067949, 0.993011653}, - {4.45, 1.000058889, 0.993026376}, - {4.454167, 1.00004971, 0.993041158}, - {4.458333, 1.000040531, 0.99305588}, - {4.4625, 1.000031233, 0.993070602}, - {4.466667, 1.000021815, 0.993085384}, - {4.470833, 1.000012517, 0.993100107}, - {4.475, 1.000003099, 0.993114889}, - {4.479167, 0.999993742, 0.99312973}, - {4.483333, 0.999984443, 0.993144512}, - {4.4875, 0.999975204, 0.993159413}, - {4.491667, 0.999966025, 0.993174255}, - {4.495833, 0.999956965, 0.993189216}, - {4.5, 0.999948025, 0.993204176}, - {4.504167, 0.999939263, 0.993219137}, - {4.508333, 0.99993062, 0.993234158}, - {4.5125, 0.999922216, 0.993249297}, - {4.516667, 0.999913991, 0.993264377}, - {4.520833, 0.999906003, 0.993279576}, - {4.525, 0.999898255, 0.993294775}, - {4.529167, 0.999890745, 0.993310034}, - {4.533333, 0.999883533, 0.993325353}, - {4.5375, 0.999876559, 0.993340731}, - {4.541667, 0.999869883, 0.993356109}, - {4.545833, 0.999863565, 0.993371606}, - {4.55, 0.999857545, 0.993387103}, - {4.554167, 0.999851882, 0.993402719}, - {4.558333, 0.999846518, 0.993418276}, - {4.5625, 0.999841511, 0.993434012}, - {4.566667, 0.999836922, 0.993449688}, - {4.570833, 0.99983263, 0.993465483}, - {4.575, 0.999828756, 0.993481219}, - {4.579167, 0.999825239, 0.993497133}, - {4.583333, 0.99982208, 0.993512988}, - {4.5875, 0.999819338, 0.993528962}, - {4.591667, 0.999817014, 0.993544877}, - {4.595833, 0.999815047, 0.99356091}, - {4.6, 0.999813497, 0.993576944}, - {4.604167, 0.999812305, 0.993593037}, - {4.608333, 0.99981153, 0.99360913}, - {4.6125, 0.999811113, 0.993625283}, - {4.616667, 0.999811053, 0.993641496}, - {4.620833, 0.999811411, 0.993657649}, - {4.625, 0.999812186, 0.993673861}, - {4.629167, 0.999813259, 0.993690133}, - {4.633333, 0.999814749, 0.993706405}, - {4.6375, 0.999816537, 0.993722677}, - {4.641667, 0.999818742, 0.993738949}, - {4.645833, 0.999821246, 0.993755221}, - {4.65, 0.999824047, 0.993771493}, - {4.654167, 0.999827206, 0.993787825}, - {4.658333, 0.999830663, 0.993804097}, - {4.6625, 0.999834418, 0.993820429}, - {4.666667, 0.999838471, 0.993836701}, - {4.670833, 0.999842763, 0.993852973}, - {4.675, 0.999847353, 0.993869245}, - {4.679167, 0.999852121, 0.993885517}, - {4.683333, 0.999857187, 0.99390173}, - {4.6875, 0.999862432, 0.993917942}, - {4.691667, 0.999867916, 0.993934095}, - {4.695833, 0.999873579, 0.993950248}, - {4.7, 0.99987936, 0.993966401}, - {4.704167, 0.99988538, 0.993982494}, - {4.708333, 0.99989146, 0.993998528}, - {4.7125, 0.999897718, 0.994014502}, - {4.716667, 0.999904037, 0.994030535}, - {4.720833, 0.999910533, 0.99404639}, - {4.725, 0.99991703, 0.994062304}, - {4.729167, 0.999923587, 0.9940781}, - {4.733333, 0.999930203, 0.994093835}, - {4.7375, 0.999936879, 0.994109511}, - {4.741667, 0.999943554, 0.994125187}, - {4.745833, 0.999950171, 0.994140744}, - {4.75, 0.999956846, 0.994156241}, - {4.754167, 0.999963462, 0.994171679}, - {4.758333, 0.999970019, 0.994187057}, - {4.7625, 0.999976516, 0.994202256}, - {4.766667, 0.999982893, 0.994217515}, - {4.770833, 0.999989212, 0.994232595}, - {4.775, 0.99999547, 0.994247675}, - {4.779167, 1.00000155, 0.994262576}, - {4.783333, 1.00000751, 0.994277477}, - {4.7875, 1.000013351, 0.994292259}, - {4.791667, 1.000018954, 0.994306982}, - {4.795833, 1.000024438, 0.994321525}, - {4.8, 1.000029802, 0.994336069}, - {4.804167, 1.000034928, 0.994350433}, - {4.808333, 1.000039816, 0.994364798}, - {4.8125, 1.000044584, 0.994378984}, - {4.816667, 1.000048995, 0.99439317}, - {4.820833, 1.000053287, 0.994407177}, - {4.825, 1.00005734, 0.994421124}, - {4.829167, 1.000061154, 0.994434953}, - {4.833333, 1.000064611, 0.994448721}, - {4.8375, 1.000067949, 0.994462311}, - {4.841667, 1.000071049, 0.994475901}, - {4.845833, 1.000073791, 0.994489312}, - {4.85, 1.000076294, 0.994502723}, - {4.854167, 1.000078559, 0.994515955}, - {4.858333, 1.000080466, 0.994529188}, - {4.8625, 1.000082254, 0.994542241}, - {4.866667, 1.000083685, 0.994555235}, - {4.870833, 1.000084758, 0.99456811}, - {4.875, 1.000085711, 0.994580984}, - {4.879167, 1.000086308, 0.99459368}, - {4.883333, 1.000086665, 0.994606376}, - {4.8875, 1.000086784, 0.994618893}, - {4.891667, 1.000086546, 0.99463141}, - {4.895833, 1.000086069, 0.994643748}, - {4.9, 1.000085354, 0.994656146}, - {4.904167, 1.0000844, 0.994668365}, - {4.908333, 1.000083208, 0.994680583}, - {4.9125, 1.000081778, 0.994692683}, - {4.916667, 1.000080109, 0.994704783}, - {4.920833, 1.000078201, 0.994716704}, - {4.925, 1.000076056, 0.994728684}, - {4.929167, 1.000073791, 0.994740546}, - {4.933333, 1.000071168, 0.994752407}, - {4.9375, 1.000068426, 0.994764149}, - {4.941667, 1.000065565, 0.994775891}, - {4.945833, 1.000062346, 0.994787514}, - {4.95, 1.000059128, 0.994799197}, - {4.954167, 1.000055671, 0.99481076}, - {4.958333, 1.000052094, 0.994822323}, - {4.9625, 1.000048399, 0.994833887}, - {4.966667, 1.000044465, 0.99484539}, - {4.970833, 1.000040531, 0.994856834}, - {4.975, 1.000036478, 0.994868279}, - {4.979167, 1.000032187, 0.994879723}, - {4.983333, 1.000028014, 0.994891107}, - {4.9875, 1.000023603, 0.994902492}, - {4.991667, 1.000019193, 0.994913876}, - {4.995833, 1.000014782, 0.994925261}, - {5, 1.000010252, 0.994936585}, - {5.004167, 1.000005722, 0.99494797}, - {5.008333, 1.000001192, 0.994959295}, - {5.0125, 0.999996662, 0.99497062}, - {5.016667, 0.999992073, 0.994981945}, - {5.020833, 0.999987543, 0.994993329}, - {5.025, 0.999983072, 0.995004654}, - {5.029167, 0.999978602, 0.995015979}, - {5.033333, 0.999974132, 0.995027363}, - {5.0375, 0.99996978, 0.995038688}, - {5.041667, 0.999965489, 0.995050073}, - {5.045833, 0.999961257, 0.995061457}, - {5.05, 0.999957144, 0.995072842}, - {5.054167, 0.999953091, 0.995084286}, - {5.058333, 0.999949157, 0.99509567}, - {5.0625, 0.999945343, 0.995107114}, - {5.066667, 0.999941587, 0.995118558}, - {5.070833, 0.999938011, 0.995130002}, - {5.075, 0.999934614, 0.995141506}, - {5.079167, 0.999931276, 0.99515301}, - {5.083333, 0.999928117, 0.995164514}, - {5.0875, 0.999925137, 0.995176017}, - {5.091667, 0.999922276, 0.995187581}, - {5.095833, 0.999919593, 0.995199144}, - {5.1, 0.99991709, 0.995210707}, - {5.104167, 0.999914765, 0.99522233}, - {5.108333, 0.99991262, 0.995233953}, - {5.1125, 0.999910653, 0.995245576}, - {5.116667, 0.999908865, 0.995257199}, - {5.120833, 0.999907255, 0.995268881}, - {5.125, 0.999905825, 0.995280504}, - {5.129167, 0.999904573, 0.995292187}, - {5.133333, 0.99990356, 0.995303869}, - {5.1375, 0.999902725, 0.995315611}, - {5.141667, 0.99990201, 0.995327294}, - {5.145833, 0.999901593, 0.995339036}, - {5.15, 0.999901295, 0.995350778}, - {5.154167, 0.999901176, 0.99536252}, - {5.158333, 0.999901295, 0.995374262}, - {5.1625, 0.999901593, 0.995386004}, - {5.166667, 0.99990201, 0.995397747}, - {5.170833, 0.999902666, 0.995409489}, - {5.175, 0.9999035, 0.995421231}, - {5.179167, 0.999904454, 0.995432973}, - {5.183333, 0.999905646, 0.995444715}, - {5.1875, 0.999906957, 0.995456457}, - {5.191667, 0.999908388, 0.995468199}, - {5.195833, 0.999910057, 0.995479882}, - {5.2, 0.999911845, 0.995491624}, - {5.204167, 0.999913752, 0.995503306}, - {5.208333, 0.999915779, 0.995514989}, - {5.2125, 0.999917984, 0.995526671}, - {5.216667, 0.999920249, 0.995538294}, - {5.220833, 0.999922693, 0.995549917}, - {5.225, 0.999925196, 0.99556154}, - {5.229167, 0.999927878, 0.995573103}, - {5.233333, 0.999930561, 0.995584726}, - {5.2375, 0.999933362, 0.99559623}, - {5.241667, 0.999936283, 0.995607734}, - {5.245833, 0.999939263, 0.995619237}, - {5.25, 0.999942303, 0.995630682}, - {5.254167, 0.999945343, 0.995642126}, - {5.258333, 0.999948502, 0.99565351}, - {5.2625, 0.999951661, 0.995664835}, - {5.266667, 0.999954879, 0.99567616}, - {5.270833, 0.999958098, 0.995687425}, - {5.275, 0.999961376, 0.99569869}, - {5.279167, 0.999964654, 0.995709896}, - {5.283333, 0.999967933, 0.995721042}, - {5.2875, 0.999971151, 0.995732129}, - {5.291667, 0.99997443, 0.995743215}, - {5.295833, 0.999977648, 0.995754182}, - {5.3, 0.999980807, 0.995765209}, - {5.304167, 0.999983966, 0.995776117}, - {5.308333, 0.999987125, 0.995787024}, - {5.3125, 0.999990165, 0.995797813}, - {5.316667, 0.999993205, 0.995808601}, - {5.320833, 0.999996126, 0.995819271}, - {5.325, 0.999999046, 0.995829999}, - {5.329167, 1.000001788, 0.995840549}, - {5.333333, 1.00000453, 0.995851159}, - {5.3375, 1.000007153, 0.99586159}, - {5.341667, 1.000009775, 0.99587208}, - {5.345833, 1.000012159, 0.995882452}, - {5.35, 1.000014544, 0.995892823}, - {5.354167, 1.000016809, 0.995903075}, - {5.358333, 1.000018954, 0.995913327}, - {5.3625, 1.000020981, 0.99592346}, - {5.366667, 1.000022888, 0.995933592}, - {5.370833, 1.000024676, 0.995943606}, - {5.375, 1.000026345, 0.995953619}, - {5.379167, 1.000027895, 0.995963573}, - {5.383333, 1.000029325, 0.995973468}, - {5.3875, 1.000030637, 0.995983303}, - {5.391667, 1.000031829, 0.995993078}, - {5.395833, 1.000032783, 0.996002793}, - {5.4, 1.000033736, 0.996012509}, - {5.404167, 1.000034451, 0.996022105}, - {5.408333, 1.000035167, 0.996031642}, - {5.4125, 1.000035644, 0.996041179}, - {5.416667, 1.000036001, 0.996050656}, - {5.420833, 1.00003624, 0.996060073}, - {5.425, 1.000036359, 0.996069431}, - {5.429167, 1.00003624, 0.99607873}, - {5.433333, 1.00003612, 0.996088028}, - {5.4375, 1.000035882, 0.996097267}, - {5.441667, 1.000035405, 0.996106446}, - {5.445833, 1.000034928, 0.996115625}, - {5.45, 1.000034213, 0.996124744}, - {5.454167, 1.000033498, 0.996133745}, - {5.458333, 1.000032663, 0.996142805}, - {5.4625, 1.00003159, 0.996151805}, - {5.466667, 1.000030518, 0.996160746}, - {5.470833, 1.000029325, 0.996169686}, - {5.475, 1.000028014, 0.996178567}, - {5.479167, 1.000026703, 0.996187449}, - {5.483333, 1.000025153, 0.99619627}, - {5.4875, 1.000023603, 0.996205091}, - {5.491667, 1.000022054, 0.996213853}, - {5.495833, 1.000020266, 0.996222615}, - {5.5, 1.000018477, 0.996231318}, - {5.504167, 1.000016689, 0.99624002}, - {5.508333, 1.000014782, 0.996248722}, - {5.5125, 1.000012755, 0.996257365}, - {5.516667, 1.000010729, 0.996266007}, - {5.520833, 1.000008702, 0.99627465}, - {5.525, 1.000006676, 0.996283293}, - {5.529167, 1.00000453, 0.996291876}, - {5.533333, 1.000002384, 0.996300459}, - {5.5375, 1.000000238, 0.996309042}, - {5.541667, 0.999998033, 0.996317625}, - {5.545833, 0.999995828, 0.996326149}, - {5.55, 0.999993622, 0.996334672}, - {5.554167, 0.999991417, 0.996343195}, - {5.558333, 0.999989212, 0.996351779}, - {5.5625, 0.999987006, 0.996360302}, - {5.566667, 0.99998486, 0.996368825}, - {5.570833, 0.999982715, 0.996377289}, - {5.575, 0.999980569, 0.996385813}, - {5.579167, 0.999978483, 0.996394336}, - {5.583333, 0.999976397, 0.99640286}, - {5.5875, 0.99997443, 0.996411324}, - {5.591667, 0.999972463, 0.996419847}, - {5.595833, 0.999970496, 0.99642837}, - {5.6, 0.999968648, 0.996436894}, - {5.604167, 0.99996686, 0.996445358}, - {5.608333, 0.999965072, 0.996453881}, - {5.6125, 0.999963403, 0.996462405}, - {5.616667, 0.999961793, 0.996470869}, - {5.620833, 0.999960244, 0.996479392}, - {5.625, 0.999958754, 0.996487916}, - {5.629167, 0.999957383, 0.996496439}, - {5.633333, 0.999956071, 0.996504962}, - {5.6375, 0.99995482, 0.996513486}, - {5.641667, 0.999953687, 0.996522009}, - {5.645833, 0.999952614, 0.996530533}, - {5.65, 0.999951661, 0.996539056}, - {5.654167, 0.999950767, 0.99654758}, - {5.658333, 0.999949932, 0.996556044}, - {5.6625, 0.999949276, 0.996564627}, - {5.666667, 0.999948621, 0.99657315}, - {5.670833, 0.999948144, 0.996581614}, - {5.675, 0.999947667, 0.996590137}, - {5.679167, 0.999947369, 0.996598661}, - {5.683333, 0.999947131, 0.996607184}, - {5.6875, 0.999946952, 0.996615708}, - {5.691667, 0.999946892, 0.996624231}, - {5.695833, 0.999946952, 0.996632755}, - {5.7, 0.999947071, 0.996641219}, - {5.704167, 0.999947309, 0.996649742}, - {5.708333, 0.999947608, 0.996658266}, - {5.7125, 0.999947965, 0.996666729}, - {5.716667, 0.999948442, 0.996675193}, - {5.720833, 0.999948978, 0.996683657}, - {5.725, 0.999949634, 0.996692121}, - {5.729167, 0.999950349, 0.996700585}, - {5.733333, 0.999951124, 0.996709049}, - {5.7375, 0.999952018, 0.996717453}, - {5.741667, 0.999952912, 0.996725857}, - {5.745833, 0.999953926, 0.996734262}, - {5.75, 0.999954998, 0.996742666}, - {5.754167, 0.999956131, 0.99675101}, - {5.758333, 0.999957263, 0.996759415}, - {5.7625, 0.999958515, 0.9967677}, - {5.766667, 0.999959826, 0.996776044}, - {5.770833, 0.999961138, 0.996784329}, - {5.775, 0.999962509, 0.996792674}, - {5.779167, 0.999963939, 0.9968009}, - {5.783333, 0.99996537, 0.996809185}, - {5.7875, 0.99996686, 0.99681735}, - {5.791667, 0.99996835, 0.996825576}, - {5.795833, 0.9999699, 0.996833742}, - {5.8, 0.999971449, 0.996841908}, - {5.804167, 0.999972999, 0.996850014}, - {5.808333, 0.999974608, 0.99685812}, - {5.8125, 0.999976218, 0.996866167}, - {5.816667, 0.999977827, 0.996874273}, - {5.820833, 0.999979436, 0.99688226}, - {5.825, 0.999980986, 0.996890247}, - {5.829167, 0.999982595, 0.996898234}, - {5.833333, 0.999984205, 0.996906161}, - {5.8375, 0.999985754, 0.996914029}, - {5.841667, 0.999987304, 0.996921897}, - {5.845833, 0.999988854, 0.996929765}, - {5.85, 0.999990344, 0.996937573}, - {5.854167, 0.999991834, 0.996945322}, - {5.858333, 0.999993324, 0.99695307}, - {5.8625, 0.999994755, 0.996960759}, - {5.866667, 0.999996126, 0.996968508}, - {5.870833, 0.999997497, 0.996976137}, - {5.875, 0.999998748, 0.996983767}, - {5.879167, 1, 0.996991277}, - {5.883333, 1.000001311, 0.996998847}, - {5.8875, 1.000002384, 0.997006357}, - {5.891667, 1.000003576, 0.997013867}, - {5.895833, 1.000004649, 0.997021258}, - {5.9, 1.000005603, 0.997028708}, - {5.904167, 1.000006557, 0.99703604}, - {5.908333, 1.00000751, 0.997043431}, - {5.9125, 1.000008345, 0.997050703}, - {5.916667, 1.00000906, 0.997057974}, - {5.920833, 1.000009775, 0.997065246}, - {5.925, 1.00001049, 0.997072458}, - {5.929167, 1.000011086, 0.997079611}, - {5.933333, 1.000011563, 0.997086763}, - {5.9375, 1.00001204, 0.997093856}, - {5.941667, 1.000012398, 0.997100949}, - {5.945833, 1.000012755, 0.997107983}, - {5.95, 1.000012994, 0.997115016}, - {5.954167, 1.000013232, 0.99712199}, - {5.958333, 1.000013351, 0.997128963}, - {5.9625, 1.000013351, 0.997135878}, - {5.966667, 1.000013471, 0.997142792}, - {5.970833, 1.000013351, 0.997149646}, - {5.975, 1.000013232, 0.997156501}, - {5.979167, 1.000013113, 0.997163296}, - {5.983333, 1.000012875, 0.99717015}, - {5.9875, 1.000012517, 0.997176886}, - {5.991667, 1.000012159, 0.997183621}, - {5.995833, 1.000011802, 0.997190356}, - {6, 1.000011325, 0.997197032}, - {6.004167, 1.000010729, 0.997203708}, - {6.008333, 1.000010252, 0.997210383}, - {6.0125, 1.000009656, 0.997217}, - {6.016667, 1.000008941, 0.997223616}, - {6.020833, 1.000008225, 0.997230172}, - {6.025, 1.00000751, 0.997236729}, - {6.029167, 1.000006676, 0.997243285}, - {6.033333, 1.00000596, 0.997249842}, - {6.0375, 1.000005007, 0.997256339}, - {6.041667, 1.000004172, 0.997262836}, - {6.045833, 1.000003219, 0.997269332}, - {6.05, 1.000002265, 0.99727577}, - {6.054167, 1.000001311, 0.997282207}, - {6.058333, 1.000000358, 0.997288644}, - {6.0625, 0.999999344, 0.997295082}, - {6.066667, 0.999998331, 0.997301519}, - {6.070833, 0.999997258, 0.997307897}, - {6.075, 0.999996245, 0.997314274}, - {6.079167, 0.999995172, 0.997320652}, - {6.083333, 0.999994099, 0.99732703}, - {6.0875, 0.999993026, 0.997333407}, - {6.091667, 0.999992013, 0.997339785}, - {6.095833, 0.99999094, 0.997346103}, - {6.1, 0.999989867, 0.997352421}, - {6.104167, 0.999988794, 0.997358739}, - {6.108333, 0.999987781, 0.997365057}, - {6.1125, 0.999986768, 0.997371376}, - {6.116667, 0.999985754, 0.997377694}, - {6.120833, 0.999984741, 0.997384012}, - {6.125, 0.999983788, 0.99739027}, - {6.129167, 0.999982834, 0.997396588}, - {6.133333, 0.99998188, 0.997402847}, - {6.1375, 0.999980986, 0.997409165}, - {6.141667, 0.999980092, 0.997415423}, - {6.145833, 0.999979258, 0.997421682}, - {6.15, 0.999978423, 0.99742794}, - {6.154167, 0.999977648, 0.997434199}, - {6.158333, 0.999976933, 0.997440457}, - {6.1625, 0.999976218, 0.997446716}, - {6.166667, 0.999975562, 0.997452974}, - {6.170833, 0.999974906, 0.997459233}, - {6.175, 0.99997431, 0.997465432}, - {6.179167, 0.999973774, 0.99747169}, - {6.183333, 0.999973238, 0.997477889}, - {6.1875, 0.999972761, 0.997484148}, - {6.191667, 0.999972343, 0.997490346}, - {6.195833, 0.999971986, 0.997496605}, - {6.2, 0.999971628, 0.997502804}, - {6.204167, 0.99997133, 0.997509003}, - {6.208333, 0.999971092, 0.997515202}, - {6.2125, 0.999970913, 0.9975214}, - {6.216667, 0.999970734, 0.997527599}, - {6.220833, 0.999970615, 0.997533798}, - {6.225, 0.999970555, 0.997539937}, - {6.229167, 0.999970555, 0.997546136}, - {6.233333, 0.999970555, 0.997552276}, - {6.2375, 0.999970615, 0.997558475}, - {6.241667, 0.999970734, 0.997564614}, - {6.245833, 0.999970853, 0.997570753}, - {6.25, 0.999971092, 0.997576892}, - {6.254167, 0.99997133, 0.997583032}, - {6.258333, 0.999971569, 0.997589111}, - {6.2625, 0.999971926, 0.997595251}, - {6.266667, 0.999972284, 0.99760133}, - {6.270833, 0.999972641, 0.99760741}, - {6.275, 0.999973059, 0.99761349}, - {6.279167, 0.999973536, 0.997619569}, - {6.283333, 0.999974012, 0.997625649}, - {6.2875, 0.999974549, 0.997631669}, - {6.291667, 0.999975085, 0.997637689}, - {6.295833, 0.999975681, 0.997643709}, - {6.3, 0.999976277, 0.997649729}, - {6.304167, 0.999976933, 0.997655749}, - {6.308333, 0.999977589, 0.99766171}, - {6.3125, 0.999978244, 0.99766767}, - {6.316667, 0.99997896, 0.997673631}, - {6.320833, 0.999979675, 0.997679532}, - {6.325, 0.99998039, 0.997685492}, - {6.329167, 0.999981165, 0.997691393}, - {6.333333, 0.99998188, 0.997697234}, - {6.3375, 0.999982655, 0.997703135}, - {6.341667, 0.99998343, 0.997708976}, - {6.345833, 0.999984205, 0.997714818}, - {6.35, 0.999985039, 0.997720659}, - {6.354167, 0.999985814, 0.99772644}, - {6.358333, 0.999986589, 0.997732222}, - {6.3625, 0.999987364, 0.997737944}, - {6.366667, 0.999988139, 0.997743726}, - {6.370833, 0.999988973, 0.997749448}, - {6.375, 0.999989748, 0.99775517}, - {6.379167, 0.999990463, 0.997760832}, - {6.383333, 0.999991238, 0.997766495}, - {6.3875, 0.999992013, 0.997772098}, - {6.391667, 0.999992728, 0.99777776}, - {6.395833, 0.999993443, 0.997783363}, - {6.4, 0.999994159, 0.997788966}, - {6.404167, 0.999994814, 0.997794509}, - {6.408333, 0.99999547, 0.997800052}, - {6.4125, 0.999996126, 0.997805536}, - {6.416667, 0.999996781, 0.997811079}, - {6.420833, 0.999997377, 0.997816503}, - {6.425, 0.999997973, 0.997821987}, - {6.429167, 0.99999851, 0.997827411}, - {6.433333, 0.999999046, 0.997832835}, - {6.4375, 0.999999523, 0.997838199}, - {6.441667, 1, 0.997843623}, - {6.445833, 1.000000477, 0.997848928}, - {6.45, 1.000000834, 0.997854292}, - {6.454167, 1.000001192, 0.997859597}, - {6.458333, 1.00000155, 0.997864902}, - {6.4625, 1.000001907, 0.997870147}, - {6.466667, 1.000002265, 0.997875392}, - {6.470833, 1.000002503, 0.997880638}, - {6.475, 1.000002742, 0.997885823}, - {6.479167, 1.000002861, 0.997891009}, - {6.483333, 1.000003099, 0.997896194}, - {6.4875, 1.000003219, 0.99790132}, - {6.491667, 1.000003338, 0.997906446}, - {6.495833, 1.000003457, 0.997911572}, - {6.5, 1.000003457, 0.997916639}, - {6.504167, 1.000003457, 0.997921705}, - {6.508333, 1.000003457, 0.997926772}, - {6.5125, 1.000003338, 0.997931838}, - {6.516667, 1.000003338, 0.997936845}, - {6.520833, 1.000003219, 0.997941852}, - {6.525, 1.000003099, 0.997946858}, - {6.529167, 1.000002861, 0.997951806}, - {6.533333, 1.000002742, 0.997956753}, - {6.5375, 1.000002503, 0.9979617}, - {6.541667, 1.000002265, 0.997966647}, - {6.545833, 1.000002027, 0.997971535}, - {6.55, 1.000001669, 0.997976422}, - {6.554167, 1.000001311, 0.99798131}, - {6.558333, 1.000001073, 0.997986197}, - {6.5625, 1.000000715, 0.997991025}, - {6.566667, 1.000000238, 0.997995913}, - {6.570833, 0.999999881, 0.998000741}, - {6.575, 0.999999523, 0.998005509}, - {6.579167, 0.999999046, 0.998010337}, - {6.583333, 0.999998629, 0.998015106}, - {6.5875, 0.999998152, 0.998019934}, - {6.591667, 0.999997735, 0.998024702}, - {6.595833, 0.999997258, 0.998029411}, - {6.6, 0.999996781, 0.998034179}, - {6.604167, 0.999996245, 0.998038948}, - {6.608333, 0.999995768, 0.998043656}, - {6.6125, 0.999995232, 0.998048365}, - {6.616667, 0.999994755, 0.998053074}, - {6.620833, 0.999994218, 0.998057783}, - {6.625, 0.999993742, 0.998062491}, - {6.629167, 0.999993205, 0.998067141}, - {6.633333, 0.999992728, 0.998071849}, - {6.6375, 0.999992192, 0.998076499}, - {6.641667, 0.999991715, 0.998081207}, - {6.645833, 0.999991179, 0.998085856}, - {6.65, 0.999990702, 0.998090506}, - {6.654167, 0.999990225, 0.998095095}, - {6.658333, 0.999989748, 0.998099744}, - {6.6625, 0.999989271, 0.998104393}, - {6.666667, 0.999988794, 0.998108983}, - {6.670833, 0.999988377, 0.998113632}, - {6.675, 0.99998796, 0.998118222}, - {6.679167, 0.999987543, 0.998122811}, - {6.683333, 0.999987125, 0.998127401}, - {6.6875, 0.999986708, 0.99813199}, - {6.691667, 0.999986351, 0.99813658}, - {6.695833, 0.999985993, 0.99814117}, - {6.7, 0.999985635, 0.998145759}, - {6.704167, 0.999985337, 0.998150289}, - {6.708333, 0.999985039, 0.998154879}, - {6.7125, 0.999984741, 0.998159409}, - {6.716667, 0.999984503, 0.998163998}, - {6.720833, 0.999984264, 0.998168528}, - {6.725, 0.999984026, 0.998173058}, - {6.729167, 0.999983847, 0.998177588}, - {6.733333, 0.999983668, 0.998182118}, - {6.7375, 0.99998349, 0.998186648}, - {6.741667, 0.99998337, 0.998191178}, - {6.745833, 0.999983251, 0.998195648}, - {6.75, 0.999983132, 0.998200178}, - {6.754167, 0.999983072, 0.998204648}, - {6.758333, 0.999983072, 0.998209178}, - {6.7625, 0.999983013, 0.998213649}, - {6.766667, 0.999983013, 0.998218119}, - {6.770833, 0.999983013, 0.998222589}, - {6.775, 0.999983072, 0.99822706}, - {6.779167, 0.999983132, 0.99823153}, - {6.783333, 0.999983251, 0.998235941}, - {6.7875, 0.999983311, 0.998240411}, - {6.791667, 0.99998343, 0.998244822}, - {6.795833, 0.999983609, 0.998249233}, - {6.8, 0.999983728, 0.998253644}, - {6.804167, 0.999983907, 0.998258054}, - {6.808333, 0.999984145, 0.998262465}, - {6.8125, 0.999984324, 0.998266876}, - {6.816667, 0.999984562, 0.998271227}, - {6.820833, 0.999984801, 0.998275638}, - {6.825, 0.999985099, 0.998279989}, - {6.829167, 0.999985337, 0.99828434}, - {6.833333, 0.999985635, 0.998288691}, - {6.8375, 0.999985933, 0.998292983}, - {6.841667, 0.999986291, 0.998297334}, - {6.845833, 0.999986589, 0.998301625}, - {6.85, 0.999986947, 0.998305976}, - {6.854167, 0.999987304, 0.998310208}, - {6.858333, 0.999987662, 0.9983145}, - {6.8625, 0.999988019, 0.998318791}, - {6.866667, 0.999988377, 0.998323023}, - {6.870833, 0.999988735, 0.998327315}, - {6.875, 0.999989152, 0.998331547}, - {6.879167, 0.99998951, 0.998335719}, - {6.883333, 0.999989927, 0.998339951}, - {6.8875, 0.999990284, 0.998344183}, - {6.891667, 0.999990702, 0.998348355}, - {6.895833, 0.999991059, 0.998352528}, - {6.9, 0.999991477, 0.9983567}, - {6.904167, 0.999991834, 0.998360813}, - {6.908333, 0.999992251, 0.998364985}, - {6.9125, 0.999992609, 0.998369098}, - {6.916667, 0.999993026, 0.99837321}, - {6.920833, 0.999993384, 0.998377264}, - {6.925, 0.999993742, 0.998381376}, - {6.929167, 0.999994099, 0.998385429}, - {6.933333, 0.999994457, 0.998389482}, - {6.9375, 0.999994814, 0.998393536}, - {6.941667, 0.999995172, 0.998397589}, - {6.945833, 0.99999547, 0.998401582}, - {6.95, 0.999995768, 0.998405576}, - {6.954167, 0.999996126, 0.998409569}, - {6.958333, 0.999996424, 0.998413563}, - {6.9625, 0.999996662, 0.998417497}, - {6.966667, 0.99999696, 0.99842149}, - {6.970833, 0.999997199, 0.998425424}, - {6.975, 0.999997497, 0.998429298}, - {6.979167, 0.999997735, 0.998433232}, - {6.983333, 0.999997914, 0.998437107}, - {6.9875, 0.999998152, 0.998440981}, - {6.991667, 0.999998331, 0.998444855}, - {6.995833, 0.99999851, 0.99844873}, - {7, 0.999998689, 0.998452544}, - {7.004167, 0.999998808, 0.998456359}, - {7.008333, 0.999998927, 0.998460233}, - {7.0125, 0.999999046, 0.998463988}, - {7.016667, 0.999999166, 0.998467803}, - {7.020833, 0.999999225, 0.998471558}, - {7.025, 0.999999344, 0.998475313}, - {7.029167, 0.999999404, 0.998479068}, - {7.033333, 0.999999404, 0.998482823}, - {7.0375, 0.999999464, 0.998486519}, - {7.041667, 0.999999464, 0.998490274}, - {7.045833, 0.999999464, 0.998493969}, - {7.05, 0.999999404, 0.998497665}, - {7.054167, 0.999999404, 0.99850136}, - {7.058333, 0.999999344, 0.998504996}, - {7.0625, 0.999999285, 0.998508692}, - {7.066667, 0.999999225, 0.998512328}, - {7.070833, 0.999999106, 0.998515964}, - {7.075, 0.999998987, 0.998519599}, - {7.079167, 0.999998868, 0.998523176}, - {7.083333, 0.999998748, 0.998526812}, - {7.0875, 0.999998629, 0.998530388}, - {7.091667, 0.99999845, 0.998533964}, - {7.095833, 0.999998331, 0.99853754}, - {7.1, 0.999998152, 0.998541117}, - {7.104167, 0.999997973, 0.998544693}, - {7.108333, 0.999997795, 0.99854821}, - {7.1125, 0.999997616, 0.998551726}, - {7.116667, 0.999997377, 0.998555303}, - {7.120833, 0.999997199, 0.998558819}, - {7.125, 0.99999696, 0.998562336}, - {7.129167, 0.999996722, 0.998565793}, - {7.133333, 0.999996483, 0.99856931}, - {7.1375, 0.999996305, 0.998572826}, - {7.141667, 0.999996066, 0.998576283}, - {7.145833, 0.999995828, 0.998579741}, - {7.15, 0.999995589, 0.998583198}, - {7.154167, 0.999995351, 0.998586655}, - {7.158333, 0.999995053, 0.998590112}, - {7.1625, 0.999994814, 0.998593569}, - {7.166667, 0.999994576, 0.998597026}, - {7.170833, 0.999994338, 0.998600423}, - {7.175, 0.999994099, 0.99860388}, - {7.179167, 0.999993861, 0.998607278}, - {7.183333, 0.999993622, 0.998610675}, - {7.1875, 0.999993384, 0.998614073}, - {7.191667, 0.999993145, 0.99861753}, - {7.195833, 0.999992907, 0.998620868}, - {7.2, 0.999992728, 0.998624265}, - {7.204167, 0.99999249, 0.998627663}, - {7.208333, 0.999992311, 0.99863106}, - {7.2125, 0.999992073, 0.998634398}, - {7.216667, 0.999991894, 0.998637795}, - {7.220833, 0.999991715, 0.998641133}, - {7.225, 0.999991536, 0.998644471}, - {7.229167, 0.999991357, 0.998647809}, - {7.233333, 0.999991179, 0.998651147}, - {7.2375, 0.999991, 0.998654485}, - {7.241667, 0.99999088, 0.998657823}, - {7.245833, 0.999990702, 0.99866116}, - {7.25, 0.999990582, 0.998664498}, - {7.254167, 0.999990463, 0.998667777}, - {7.258333, 0.999990344, 0.998671114}, - {7.2625, 0.999990225, 0.998674393}, - {7.266667, 0.999990165, 0.998677671}, - {7.270833, 0.999990106, 0.998681009}, - {7.275, 0.999989986, 0.998684287}, - {7.279167, 0.999989927, 0.998687565}, - {7.283333, 0.999989927, 0.998690844}, - {7.2875, 0.999989867, 0.998694062}, - {7.291667, 0.999989867, 0.99869734}, - {7.295833, 0.999989808, 0.998700619}, - {7.3, 0.999989808, 0.998703837}, - {7.304167, 0.999989808, 0.998707116}, - {7.308333, 0.999989867, 0.998710334}, - {7.3125, 0.999989867, 0.998713553}, - {7.316667, 0.999989927, 0.998716831}, - {7.320833, 0.999989927, 0.99872005}, - {7.325, 0.999989986, 0.998723269}, - {7.329167, 0.999990046, 0.998726428}, - {7.333333, 0.999990165, 0.998729646}, - {7.3375, 0.999990225, 0.998732865}, - {7.341667, 0.999990344, 0.998736024}, - {7.345833, 0.999990404, 0.998739183}, - {7.35, 0.999990523, 0.998742402}, - {7.354167, 0.999990642, 0.998745561}, - {7.358333, 0.999990761, 0.99874872}, - {7.3625, 0.99999094, 0.998751879}, - {7.366667, 0.999991059, 0.998755038}, - {7.370833, 0.999991238, 0.998758137}, - {7.375, 0.999991357, 0.998761296}, - {7.379167, 0.999991536, 0.998764396}, - {7.383333, 0.999991715, 0.998767495}, - {7.3875, 0.999991834, 0.998770654}, - {7.391667, 0.999992013, 0.998773754}, - {7.395833, 0.999992192, 0.998776793}, - {7.4, 0.999992371, 0.998779893}, - {7.404167, 0.999992549, 0.998782992}, - {7.408333, 0.999992788, 0.998786032}, - {7.4125, 0.999992967, 0.998789132}, - {7.416667, 0.999993145, 0.998792171}, - {7.420833, 0.999993324, 0.998795211}, - {7.425, 0.999993563, 0.998798251}, - {7.429167, 0.999993742, 0.998801291}, - {7.433333, 0.99999392, 0.998804271}, - {7.4375, 0.999994099, 0.998807311}, - {7.441667, 0.999994338, 0.998810291}, - {7.445833, 0.999994516, 0.998813272}, - {7.45, 0.999994695, 0.998816252}, - {7.454167, 0.999994874, 0.998819232}, - {7.458333, 0.999995053, 0.998822212}, - {7.4625, 0.999995232, 0.998825133}, - {7.466667, 0.99999541, 0.998828113}, - {7.470833, 0.999995589, 0.998831034}, - {7.475, 0.999995768, 0.998833954}, - {7.479167, 0.999995947, 0.998836875}, - {7.483333, 0.999996126, 0.998839796}, - {7.4875, 0.999996305, 0.998842716}, - {7.491667, 0.999996424, 0.998845577}, - {7.495833, 0.999996603, 0.998848498}, - {7.5, 0.999996722, 0.998851359}, - {7.504167, 0.999996841, 0.99885422}, - {7.508333, 0.99999696, 0.998857081}, - {7.5125, 0.999997139, 0.998859942}, - {7.516667, 0.999997258, 0.998862803}, - {7.520833, 0.999997318, 0.998865604}, - {7.525, 0.999997437, 0.998868406}, - {7.529167, 0.999997556, 0.998871207}, - {7.533333, 0.999997616, 0.998874068}, - {7.5375, 0.999997735, 0.99887681}, - {7.541667, 0.999997795, 0.998879611}, - {7.545833, 0.999997854, 0.998882413}, - {7.55, 0.999997914, 0.998885155}, - {7.554167, 0.999997973, 0.998887956}, - {7.558333, 0.999998033, 0.998890698}, - {7.5625, 0.999998033, 0.99889344}, - {7.566667, 0.999998093, 0.998896182}, - {7.570833, 0.999998093, 0.998898864}, - {7.575, 0.999998093, 0.998901606}, - {7.579167, 0.999998093, 0.998904347}, - {7.583333, 0.999998093, 0.99890703}, - {7.5875, 0.999998093, 0.998909712}, - {7.591667, 0.999998093, 0.998912394}, - {7.595833, 0.999998093, 0.998915076}, - {7.6, 0.999998033, 0.998917758}, - {7.604167, 0.999998033, 0.998920441}, - {7.608333, 0.999997973, 0.998923063}, - {7.6125, 0.999997914, 0.998925745}, - {7.616667, 0.999997854, 0.998928368}, - {7.620833, 0.999997795, 0.998930991}, - {7.625, 0.999997735, 0.998933613}, - {7.629167, 0.999997675, 0.998936236}, - {7.633333, 0.999997616, 0.998938859}, - {7.6375, 0.999997497, 0.998941481}, - {7.641667, 0.999997437, 0.998944104}, - {7.645833, 0.999997318, 0.998946667}, - {7.65, 0.999997258, 0.998949289}, - {7.654167, 0.999997139, 0.998951852}, - {7.658333, 0.999997079, 0.998954415}, - {7.6625, 0.99999696, 0.998956978}, - {7.666667, 0.999996841, 0.998959541}, - {7.670833, 0.999996722, 0.998962104}, - {7.675, 0.999996662, 0.998964667}, - {7.679167, 0.999996543, 0.99896723}, - {7.683333, 0.999996424, 0.998969734}, - {7.6875, 0.999996305, 0.998972297}, - {7.691667, 0.999996185, 0.9989748}, - {7.695833, 0.999996066, 0.998977304}, - {7.7, 0.999995947, 0.998979867}, - {7.704167, 0.999995828, 0.99898237}, - {7.708333, 0.999995708, 0.998984873}, - {7.7125, 0.999995589, 0.998987377}, - {7.716667, 0.99999547, 0.99898988}, - {7.720833, 0.99999541, 0.998992324}, - {7.725, 0.999995291, 0.998994827}, - {7.729167, 0.999995172, 0.998997331}, - {7.733333, 0.999995053, 0.998999774}, - {7.7375, 0.999994934, 0.999002278}, - {7.741667, 0.999994874, 0.999004722}, - {7.745833, 0.999994755, 0.999007165}, - {7.75, 0.999994636, 0.999009669}, - {7.754167, 0.999994576, 0.999012113}, - {7.758333, 0.999994457, 0.999014556}, - {7.7625, 0.999994397, 0.999017}, - {7.766667, 0.999994338, 0.999019444}, - {7.770833, 0.999994218, 0.999021828}, - {7.775, 0.999994159, 0.999024272}, - {7.779167, 0.999994099, 0.999026716}, - {7.783333, 0.99999404, 0.9990291}, - {7.7875, 0.99999398, 0.999031544}, - {7.791667, 0.99999392, 0.999033928}, - {7.795833, 0.999993861, 0.999036372}, - {7.8, 0.999993801, 0.999038756}, - {7.804167, 0.999993801, 0.99904114}, - {7.808333, 0.999993742, 0.999043524}, - {7.8125, 0.999993742, 0.999045908}, - {7.816667, 0.999993682, 0.999048293}, - {7.820833, 0.999993682, 0.999050677}, - {7.825, 0.999993682, 0.999053061}, - {7.829167, 0.999993682, 0.999055445}, - {7.833333, 0.999993682, 0.99905777}, - {7.8375, 0.999993682, 0.999060154}, - {7.841667, 0.999993682, 0.999062479}, - {7.845833, 0.999993682, 0.999064863}, - {7.85, 0.999993682, 0.999067187}, - {7.854167, 0.999993742, 0.999069512}, - {7.858333, 0.999993742, 0.999071836}, - {7.8625, 0.999993801, 0.999074161}, - {7.866667, 0.999993801, 0.999076486}, - {7.870833, 0.999993861, 0.99907881}, - {7.875, 0.99999392, 0.999081135}, - {7.879167, 0.99999398, 0.999083459}, - {7.883333, 0.99999398, 0.999085724}, - {7.8875, 0.99999404, 0.999088049}, - {7.891667, 0.999994099, 0.999090314}, - {7.895833, 0.999994218, 0.999092638}, - {7.9, 0.999994278, 0.999094903}, - {7.904167, 0.999994338, 0.999097168}, - {7.908333, 0.999994397, 0.999099433}, - {7.9125, 0.999994516, 0.999101698}, - {7.916667, 0.999994576, 0.999103963}, - {7.920833, 0.999994636, 0.999106228}, - {7.925, 0.999994755, 0.999108434}, - {7.929167, 0.999994814, 0.999110699}, - {7.933333, 0.999994934, 0.999112964}, - {7.9375, 0.999994993, 0.999115169}, - {7.941667, 0.999995112, 0.999117374}, - {7.945833, 0.999995232, 0.999119639}, - {7.95, 0.999995291, 0.999121845}, - {7.954167, 0.99999541, 0.99912405}, - {7.958333, 0.99999547, 0.999126256}, - {7.9625, 0.999995589, 0.999128401}, - {7.966667, 0.999995708, 0.999130607}, - {7.970833, 0.999995768, 0.999132812}, - {7.975, 0.999995887, 0.999134958}, - {7.979167, 0.999996006, 0.999137163}, - {7.983333, 0.999996066, 0.999139309}, - {7.9875, 0.999996185, 0.999141455}, - {7.991667, 0.999996245, 0.99914366}, - {7.995833, 0.999996364, 0.999145746}, - {8, 0.999996483, 0.999147892}, - {8.004167, 0.999996543, 0.999150038}, - {8.008333, 0.999996662, 0.999152184}, - {8.0125, 0.999996722, 0.999154329}, - {8.016667, 0.999996781, 0.999156415}, - {8.020833, 0.999996901, 0.999158502}, - {8.025, 0.99999696, 0.999160647}, - {8.029167, 0.99999702, 0.999162734}, - {8.033333, 0.999997139, 0.99916482}, - {8.0375, 0.999997199, 0.999166906}, - {8.041667, 0.999997258, 0.999168992}, - {8.045833, 0.999997318, 0.999171078}, - {8.05, 0.999997377, 0.999173105}, - {8.054167, 0.999997437, 0.999175191}, - {8.058333, 0.999997497, 0.999177277}, - {8.0625, 0.999997556, 0.999179304}, - {8.066667, 0.999997616, 0.99918133}, - {8.070833, 0.999997675, 0.999183357}, - {8.075, 0.999997675, 0.999185443}, - {8.079167, 0.999997735, 0.99918741}, - {8.083333, 0.999997795, 0.999189436}, - {8.0875, 0.999997795, 0.999191463}, - {8.091667, 0.999997854, 0.99919349}, - {8.095833, 0.999997854, 0.999195457}, - {8.1, 0.999997854, 0.999197483}, - {8.104167, 0.999997914, 0.99919945}, - {8.108333, 0.999997914, 0.999201477}, - {8.1125, 0.999997914, 0.999203444}, - {8.116667, 0.999997914, 0.99920541}, - {8.120833, 0.999997914, 0.999207377}, - {8.125, 0.999997914, 0.999209344}, - {8.129167, 0.999997914, 0.999211311}, - {8.133333, 0.999997914, 0.999213278}, - {8.1375, 0.999997914, 0.999215186}, - {8.141667, 0.999997854, 0.999217153}, - {8.145833, 0.999997854, 0.99921906}, - {8.15, 0.999997854, 0.999221027}, - {8.154167, 0.999997795, 0.999222934}, - {8.158333, 0.999997795, 0.999224842}, - {8.1625, 0.999997735, 0.999226749}, - {8.166667, 0.999997735, 0.999228716}, - {8.170833, 0.999997675, 0.999230564}, - {8.175, 0.999997675, 0.999232471}, - {8.179167, 0.999997616, 0.999234378}, - {8.183333, 0.999997556, 0.999236286}, - {8.1875, 0.999997556, 0.999238193}, - {8.191667, 0.999997497, 0.999240041}, - {8.195833, 0.999997437, 0.999241948}, - {8.2, 0.999997377, 0.999243796}, - {8.204167, 0.999997318, 0.999245644}, - {8.208333, 0.999997318, 0.999247551}, - {8.2125, 0.999997258, 0.999249399}, - {8.216667, 0.999997199, 0.999251246}, - {8.220833, 0.999997139, 0.999253094}, - {8.225, 0.999997079, 0.999254942}, - {8.229167, 0.99999702, 0.99925679}, - {8.233333, 0.99999696, 0.999258637}, - {8.2375, 0.999996901, 0.999260485}, - {8.241667, 0.999996901, 0.999262273}, - {8.245833, 0.999996841, 0.999264121}, - {8.25, 0.999996781, 0.999265969}, - {8.254167, 0.999996722, 0.999267757}, - {8.258333, 0.999996662, 0.999269605}, - {8.2625, 0.999996603, 0.999271393}, - {8.266667, 0.999996543, 0.999273181}, - {8.270833, 0.999996483, 0.999274969}, - {8.275, 0.999996483, 0.999276817}, - {8.279167, 0.999996424, 0.999278605}, - {8.283333, 0.999996364, 0.999280393}, - {8.2875, 0.999996305, 0.999282181}, - {8.291667, 0.999996305, 0.999283969}, - {8.295833, 0.999996245, 0.999285758}, - {8.3, 0.999996185, 0.999287486}, - {8.304167, 0.999996185, 0.999289274}, - {8.308333, 0.999996126, 0.999291062}, - {8.3125, 0.999996126, 0.999292791}, - {8.316667, 0.999996066, 0.999294579}, - {8.320833, 0.999996066, 0.999296308}, - {8.325, 0.999996006, 0.999298096}, - {8.329167, 0.999996006, 0.999299824}, - {8.333333, 0.999996006, 0.999301553}, - {8.3375, 0.999995947, 0.999303341}, - {8.341667, 0.999995947, 0.999305069}, - {8.345833, 0.999995947, 0.999306798}, - {8.35, 0.999995947, 0.999308527}, - {8.354167, 0.999995887, 0.999310255}, - {8.358333, 0.999995887, 0.999311984}, - {8.3625, 0.999995887, 0.999313712}, - {8.366667, 0.999995887, 0.999315381}, - {8.370833, 0.999995887, 0.99931711}, - {8.375, 0.999995887, 0.999318838}, - {8.379167, 0.999995887, 0.999320507}, - {8.383333, 0.999995947, 0.999322236}, - {8.3875, 0.999995947, 0.999323905}, - {8.391667, 0.999995947, 0.999325633}, - {8.395833, 0.999995947, 0.999327302}, - {8.4, 0.999996006, 0.999329031}, - {8.404167, 0.999996006, 0.999330699}, - {8.408333, 0.999996006, 0.999332368}, - {8.4125, 0.999996066, 0.999334037}, - {8.416667, 0.999996066, 0.999335706}, - {8.420833, 0.999996126, 0.999337375}, - {8.425, 0.999996126, 0.999339044}, - {8.429167, 0.999996185, 0.999340713}, - {8.433333, 0.999996185, 0.999342322}, - {8.4375, 0.999996245, 0.999343991}, - {8.441667, 0.999996305, 0.99934566}, - {8.445833, 0.999996305, 0.99934727}, - {8.45, 0.999996364, 0.999348938}, - {8.454167, 0.999996424, 0.999350548}, - {8.458333, 0.999996483, 0.999352217}, - {8.4625, 0.999996483, 0.999353826}, - {8.466667, 0.999996543, 0.999355435}, - {8.470833, 0.999996603, 0.999357045}, - {8.475, 0.999996662, 0.999358654}, - {8.479167, 0.999996662, 0.999360263}, - {8.483333, 0.999996722, 0.999361873}, - {8.4875, 0.999996781, 0.999363482}, - {8.491667, 0.999996841, 0.999365091}, - {8.495833, 0.999996901, 0.999366701}, - {8.5, 0.99999696, 0.99936825}, - {8.504167, 0.99999696, 0.99936986}, - {8.508333, 0.99999702, 0.999371409}, - {8.5125, 0.999997079, 0.999373019}, - {8.516667, 0.999997139, 0.999374568}, - {8.520833, 0.999997199, 0.999376178}, - {8.525, 0.999997258, 0.999377728}, - {8.529167, 0.999997258, 0.999379277}, - {8.533333, 0.999997318, 0.999380827}, - {8.5375, 0.999997377, 0.999382377}, - {8.541667, 0.999997437, 0.999383926}, - {8.545833, 0.999997497, 0.999385476}, - {8.55, 0.999997497, 0.999387026}, - {8.554167, 0.999997556, 0.999388516}, - {8.558333, 0.999997616, 0.999390066}, - {8.5625, 0.999997616, 0.999391615}, - {8.566667, 0.999997675, 0.999393106}, - {8.570833, 0.999997735, 0.999394655}, - {8.575, 0.999997735, 0.999396145}, - {8.579167, 0.999997795, 0.999397635}, - {8.583333, 0.999997795, 0.999399185}, - {8.5875, 0.999997854, 0.999400675}, - {8.591667, 0.999997914, 0.999402165}, - {8.595833, 0.999997914, 0.999403656}, - {8.6, 0.999997914, 0.999405146}, - {8.604167, 0.999997973, 0.999406636}, - {8.608333, 0.999997973, 0.999408126}, - {8.6125, 0.999998033, 0.999409556}, - {8.616667, 0.999998033, 0.999411047}, - {8.620833, 0.999998033, 0.999412537}, - {8.625, 0.999998093, 0.999413967}, - {8.629167, 0.999998093, 0.999415457}, - {8.633333, 0.999998093, 0.999416888}, - {8.6375, 0.999998093, 0.999418318}, - {8.641667, 0.999998093, 0.999419808}, - {8.645833, 0.999998152, 0.999421239}, - {8.65, 0.999998152, 0.999422669}, - {8.654167, 0.999998152, 0.9994241}, - {8.658333, 0.999998152, 0.99942553}, - {8.6625, 0.999998152, 0.999426961}, - {8.666667, 0.999998152, 0.999428391}, - {8.670833, 0.999998152, 0.999429822}, - {8.675, 0.999998152, 0.999431252}, - {8.679167, 0.999998152, 0.999432623}, - {8.683333, 0.999998093, 0.999434054}, - {8.6875, 0.999998093, 0.999435425}, - {8.691667, 0.999998093, 0.999436855}, - {8.695833, 0.999998093, 0.999438226}, - {8.7, 0.999998093, 0.999439657}, - {8.704167, 0.999998033, 0.999441028}, - {8.708333, 0.999998033, 0.999442399}, - {8.7125, 0.999998033, 0.999443829}, - {8.716667, 0.999998033, 0.9994452}, - {8.720833, 0.999997973, 0.999446571}, - {8.725, 0.999997973, 0.999447942}, - {8.729167, 0.999997973, 0.999449313}, - {8.733333, 0.999997914, 0.999450684}, - {8.7375, 0.999997914, 0.999452055}, - {8.741667, 0.999997914, 0.999453425}, - {8.745833, 0.999997854, 0.999454737}, - {8.75, 0.999997854, 0.999456108}, - {8.754167, 0.999997795, 0.999457479}, - {8.758333, 0.999997795, 0.99945879}, - {8.7625, 0.999997795, 0.999460161}, - {8.766667, 0.999997735, 0.999461472}, - {8.770833, 0.999997735, 0.999462843}, - {8.775, 0.999997675, 0.999464154}, - {8.779167, 0.999997675, 0.999465525}, - {8.783333, 0.999997675, 0.999466836}, - {8.7875, 0.999997616, 0.999468148}, - {8.791667, 0.999997616, 0.999469459}, - {8.795833, 0.999997616, 0.99947077}, - {8.8, 0.999997556, 0.999472082}, - {8.804167, 0.999997556, 0.999473393}, - {8.808333, 0.999997497, 0.999474704}, - {8.8125, 0.999997497, 0.999476016}, - {8.816667, 0.999997497, 0.999477327}, - {8.820833, 0.999997437, 0.999478638}, - {8.825, 0.999997437, 0.999479949}, - {8.829167, 0.999997437, 0.999481261}, - {8.833333, 0.999997377, 0.999482512}, - {8.8375, 0.999997377, 0.999483824}, - {8.841667, 0.999997377, 0.999485135}, - {8.845833, 0.999997377, 0.999486387}, - {8.85, 0.999997318, 0.999487698}, - {8.854167, 0.999997318, 0.99948895}, - {8.858333, 0.999997318, 0.999490201}, - {8.8625, 0.999997318, 0.999491513}, - {8.866667, 0.999997318, 0.999492764}, - {8.870833, 0.999997318, 0.999494016}, - {8.875, 0.999997258, 0.999495268}, - {8.879167, 0.999997258, 0.999496579}, - {8.883333, 0.999997258, 0.999497831}, - {8.8875, 0.999997258, 0.999499083}, - {8.891667, 0.999997258, 0.999500334}, - {8.895833, 0.999997258, 0.999501586}, - {8.9, 0.999997258, 0.999502838}, - {8.904167, 0.999997258, 0.999504089}, - {8.908333, 0.999997258, 0.999505281}, - {8.9125, 0.999997258, 0.999506533}, - {8.916667, 0.999997258, 0.999507785}, - {8.920833, 0.999997318, 0.999509037}, - {8.925, 0.999997318, 0.999510229}, - {8.929167, 0.999997318, 0.99951148}, - {8.933333, 0.999997318, 0.999512672}, - {8.9375, 0.999997318, 0.999513924}, - {8.941667, 0.999997318, 0.999515116}, - {8.945833, 0.999997377, 0.999516368}, - {8.95, 0.999997377, 0.99951756}, - {8.954167, 0.999997377, 0.999518752}, - {8.958333, 0.999997377, 0.999520004}, - {8.9625, 0.999997437, 0.999521196}, - {8.966667, 0.999997437, 0.999522388}, - {8.970833, 0.999997437, 0.99952358}, - {8.975, 0.999997497, 0.999524772}, - {8.979167, 0.999997497, 0.999525964}, - {8.983333, 0.999997497, 0.999527156}, - {8.9875, 0.999997556, 0.999528348}, - {8.991667, 0.999997556, 0.999529541}, - {8.995833, 0.999997616, 0.999530733}, - {9, 0.999997616, 0.999531865}, - {9.004167, 0.999997616, 0.999533057}, - {9.008333, 0.999997675, 0.999534249}, - {9.0125, 0.999997675, 0.999535382}, - {9.016667, 0.999997735, 0.999536574}, - {9.020833, 0.999997735, 0.999537706}, - {9.025, 0.999997735, 0.999538898}, - {9.029167, 0.999997795, 0.999540031}, - {9.033333, 0.999997795, 0.999541223}, - {9.0375, 0.999997854, 0.999542356}, - {9.041667, 0.999997854, 0.999543488}, - {9.045833, 0.999997914, 0.999544621}, - {9.05, 0.999997914, 0.999545753}, - {9.054167, 0.999997973, 0.999546945}, - {9.058333, 0.999997973, 0.999548078}, - {9.0625, 0.999997973, 0.99954921}, - {9.066667, 0.999998033, 0.999550343}, - {9.070833, 0.999998033, 0.999551415}, - {9.075, 0.999998093, 0.999552548}, - {9.079167, 0.999998093, 0.99955368}, - {9.083333, 0.999998093, 0.999554813}, - {9.0875, 0.999998152, 0.999555945}, - {9.091667, 0.999998152, 0.999557018}, - {9.095833, 0.999998212, 0.999558151}, - {9.1, 0.999998212, 0.999559224}, - {9.104167, 0.999998212, 0.999560356}, - {9.108333, 0.999998271, 0.999561429}, - {9.1125, 0.999998271, 0.999562562}, - {9.116667, 0.999998271, 0.999563634}, - {9.120833, 0.999998331, 0.999564707}, - {9.125, 0.999998331, 0.99956584}, - {9.129167, 0.999998331, 0.999566913}, - {9.133333, 0.999998331, 0.999567986}, - {9.1375, 0.999998391, 0.999569058}, - {9.141667, 0.999998391, 0.999570131}, - {9.145833, 0.999998391, 0.999571204}, - {9.15, 0.999998391, 0.999572277}, - {9.154167, 0.999998391, 0.99957335}, - {9.158333, 0.99999845, 0.999574423}, - {9.1625, 0.99999845, 0.999575496}, - {9.166667, 0.99999845, 0.999576569}, - {9.170833, 0.99999845, 0.999577582}, - {9.175, 0.99999845, 0.999578655}, - {9.179167, 0.99999845, 0.999579728}, - {9.183333, 0.99999845, 0.999580741}, - {9.1875, 0.99999845, 0.999581814}, - {9.191667, 0.99999845, 0.999582827}, - {9.195833, 0.99999851, 0.9995839}, - {9.2, 0.99999851, 0.999584913}, - {9.204167, 0.99999851, 0.999585927}, - {9.208333, 0.99999851, 0.999586999}, - {9.2125, 0.99999851, 0.999588013}, - {9.216667, 0.99999851, 0.999589026}, - {9.220833, 0.99999845, 0.999590039}, - {9.225, 0.99999845, 0.999591053}, - {9.229167, 0.99999845, 0.999592125}, - {9.233333, 0.99999845, 0.999593139}, - {9.2375, 0.99999845, 0.999594152}, - {9.241667, 0.99999845, 0.999595165}, - {9.245833, 0.99999845, 0.999596119}, - {9.25, 0.99999845, 0.999597132}, - {9.254167, 0.99999845, 0.999598145}, - {9.258333, 0.99999845, 0.999599159}, - {9.2625, 0.99999845, 0.999600172}, - {9.266667, 0.999998391, 0.999601126}, - {9.270833, 0.999998391, 0.999602139}, - {9.275, 0.999998391, 0.999603152}, - {9.279167, 0.999998391, 0.999604106}, - {9.283333, 0.999998391, 0.999605119}, - {9.2875, 0.999998391, 0.999606073}, - {9.291667, 0.999998331, 0.999607086}, - {9.295833, 0.999998331, 0.99960804}, - {9.3, 0.999998331, 0.999609053}, - {9.304167, 0.999998331, 0.999610007}, - {9.308333, 0.999998331, 0.99961096}, - {9.3125, 0.999998331, 0.999611914}, - {9.316667, 0.999998271, 0.999612927}, - {9.320833, 0.999998271, 0.999613881}, - {9.325, 0.999998271, 0.999614835}, - {9.329167, 0.999998271, 0.999615788}, - {9.333333, 0.999998271, 0.999616742}, - {9.3375, 0.999998271, 0.999617696}, - {9.341667, 0.999998212, 0.999618649}, - {9.345833, 0.999998212, 0.999619603}, - {9.35, 0.999998212, 0.999620557}, - {9.354167, 0.999998212, 0.999621511}, - {9.358333, 0.999998212, 0.999622464}, - {9.3625, 0.999998212, 0.999623418}, - {9.366667, 0.999998212, 0.999624312}, - {9.370833, 0.999998152, 0.999625266}, - {9.375, 0.999998152, 0.999626219}, - {9.379167, 0.999998152, 0.999627173}, - {9.383333, 0.999998152, 0.999628067}, - {9.3875, 0.999998152, 0.999629021}, - {9.391667, 0.999998152, 0.999629915}, - {9.395833, 0.999998152, 0.999630868}, - {9.4, 0.999998152, 0.999631763}, - {9.404167, 0.999998152, 0.999632716}, - {9.408333, 0.999998152, 0.99963361}, - {9.4125, 0.999998152, 0.999634564}, - {9.416667, 0.999998152, 0.999635458}, - {9.420833, 0.999998152, 0.999636352}, - {9.425, 0.999998152, 0.999637246}, - {9.429167, 0.999998152, 0.9996382}, - {9.433333, 0.999998152, 0.999639094}, - {9.4375, 0.999998152, 0.999639988}, - {9.441667, 0.999998152, 0.999640882}, - {9.445833, 0.999998152, 0.999641776}, - {9.45, 0.999998152, 0.99964267}, - {9.454167, 0.999998152, 0.999643564}, - {9.458333, 0.999998152, 0.999644458}, - {9.4625, 0.999998152, 0.999645352}, - {9.466667, 0.999998152, 0.999646246}, - {9.470833, 0.999998152, 0.999647141}, - {9.475, 0.999998212, 0.999648035}, - {9.479167, 0.999998212, 0.999648929}, - {9.483333, 0.999998212, 0.999649763}, - {9.4875, 0.999998212, 0.999650657}, - {9.491667, 0.999998212, 0.999651551}, - {9.495833, 0.999998212, 0.999652445}, - {9.5, 0.999998212, 0.99965328}, - {9.504167, 0.999998271, 0.999654174}, - {9.508333, 0.999998271, 0.999655008}, - {9.5125, 0.999998271, 0.999655902}, - {9.516667, 0.999998271, 0.999656737}, - {9.520833, 0.999998271, 0.999657631}, - {9.525, 0.999998331, 0.999658465}, - {9.529167, 0.999998331, 0.999659359}, - {9.533333, 0.999998331, 0.999660194}, - {9.5375, 0.999998331, 0.999661028}, - {9.541667, 0.999998331, 0.999661863}, - {9.545833, 0.999998391, 0.999662757}, - {9.55, 0.999998391, 0.999663591}, - {9.554167, 0.999998391, 0.999664426}, - {9.558333, 0.999998391, 0.99966526}, - {9.5625, 0.99999845, 0.999666095}, - {9.566667, 0.99999845, 0.999666929}, - {9.570833, 0.99999845, 0.999667764}, - {9.575, 0.99999845, 0.999668598}, - {9.579167, 0.99999845, 0.999669433}, - {9.583333, 0.99999851, 0.999670267}, - {9.5875, 0.99999851, 0.999671102}, - {9.591667, 0.99999851, 0.999671936}, - {9.595833, 0.99999851, 0.999672771}, - {9.6, 0.999998569, 0.999673545}, - {9.604167, 0.999998569, 0.99967438}, - {9.608333, 0.999998569, 0.999675214}, - {9.6125, 0.999998569, 0.999676049}, - {9.616667, 0.999998629, 0.999676824}, - {9.620833, 0.999998629, 0.999677658}, - {9.625, 0.999998629, 0.999678433}, - {9.629167, 0.999998629, 0.999679267}, - {9.633333, 0.999998629, 0.999680042}, - {9.6375, 0.999998689, 0.999680877}, - {9.641667, 0.999998689, 0.999681652}, - {9.645833, 0.999998689, 0.999682486}, - {9.65, 0.999998689, 0.999683261}, - {9.654167, 0.999998689, 0.999684036}, - {9.658333, 0.999998689, 0.999684811}, - {9.6625, 0.999998748, 0.999685645}, - {9.666667, 0.999998748, 0.99968642}, - {9.670833, 0.999998748, 0.999687195}, - {9.675, 0.999998748, 0.99968797}, - {9.679167, 0.999998748, 0.999688745}, - {9.683333, 0.999998748, 0.999689519}, - {9.6875, 0.999998748, 0.999690294}, - {9.691667, 0.999998748, 0.999691069}, - {9.695833, 0.999998808, 0.999691844}, - {9.7, 0.999998808, 0.999692619}, - {9.704167, 0.999998808, 0.999693394}, - {9.708333, 0.999998808, 0.999694169}, - {9.7125, 0.999998808, 0.999694943}, - {9.716667, 0.999998808, 0.999695718}, - {9.720833, 0.999998808, 0.999696434}, - {9.725, 0.999998808, 0.999697208}, - {9.729167, 0.999998808, 0.999697983}, - {9.733333, 0.999998808, 0.999698699}, - {9.7375, 0.999998808, 0.999699473}, - {9.741667, 0.999998808, 0.999700248}, - {9.745833, 0.999998808, 0.999700963}, - {9.75, 0.999998808, 0.999701738}, - {9.754167, 0.999998808, 0.999702454}, - {9.758333, 0.999998808, 0.999703228}, - {9.7625, 0.999998808, 0.999703944}, - {9.766667, 0.999998808, 0.999704719}, - {9.770833, 0.999998808, 0.999705434}, - {9.775, 0.999998808, 0.999706149}, - {9.779167, 0.999998808, 0.999706924}, - {9.783333, 0.999998808, 0.999707639}, - {9.7875, 0.999998808, 0.999708354}, - {9.791667, 0.999998808, 0.99970907}, - {9.795833, 0.999998808, 0.999709845}, - {9.8, 0.999998808, 0.99971056}, - {9.804167, 0.999998808, 0.999711275}, - {9.808333, 0.999998808, 0.99971199}, - {9.8125, 0.999998808, 0.999712706}, - {9.816667, 0.999998808, 0.999713421}, - {9.820833, 0.999998808, 0.999714136}, - {9.825, 0.999998808, 0.999714851}, - {9.829167, 0.999998808, 0.999715567}, - {9.833333, 0.999998748, 0.999716282}, - {9.8375, 0.999998748, 0.999716997}, - {9.841667, 0.999998748, 0.999717712}, - {9.845833, 0.999998748, 0.999718368}, - {9.85, 0.999998748, 0.999719083}, - {9.854167, 0.999998748, 0.999719799}, - {9.858333, 0.999998748, 0.999720514}, - {9.8625, 0.999998748, 0.999721169}, - {9.866667, 0.999998748, 0.999721885}, - {9.870833, 0.999998748, 0.9997226}, - {9.875, 0.999998748, 0.999723256}, - {9.879167, 0.999998748, 0.999723971}, - {9.883333, 0.999998748, 0.999724686}, - {9.8875, 0.999998748, 0.999725342}, - {9.891667, 0.999998748, 0.999726057}, - {9.895833, 0.999998748, 0.999726713}, - {9.9, 0.999998689, 0.999727428}, - {9.904167, 0.999998689, 0.999728084}, - {9.908333, 0.999998689, 0.999728799}, - {9.9125, 0.999998689, 0.999729455}, - {9.916667, 0.999998689, 0.99973011}, - {9.920833, 0.999998689, 0.999730825}, - {9.925, 0.999998689, 0.999731481}, - {9.929167, 0.999998689, 0.999732137}, - {9.933333, 0.999998689, 0.999732792}, - {9.9375, 0.999998689, 0.999733508}, - {9.941667, 0.999998689, 0.999734163}, - {9.945833, 0.999998689, 0.999734819}, - {9.95, 0.999998689, 0.999735475}, - {9.954167, 0.999998689, 0.99973613}, - {9.958333, 0.999998689, 0.999736786}, - {9.9625, 0.999998689, 0.999737501}, - {9.966667, 0.999998689, 0.999738157}, - {9.970833, 0.999998689, 0.999738812}, - {9.975, 0.999998689, 0.999739468}, - {9.979167, 0.999998689, 0.999740124}, - {9.983333, 0.999998689, 0.99974072}, - {9.9875, 0.999998689, 0.999741375}, - {9.991667, 0.999998748, 0.999742031}, - {9.995833, 0.999998748, 0.999742687}, - {10, 0.999998748, 0.999743342}}; +namespace Example1 +{ + std::vector> reference_solution = + {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit + {0.004167, 1, 1.000000477}, + {0.008333, 1, 1.000000477}, + {0.0125, 0.99999994, 1.000000477}, + {0.016667, 0.99999994, 1.000000477}, + {0.020833, 0.99999994, 1.000000477}, + {0.025, 0.99999994, 1.000000477}, + {0.029167, 0.99999994, 1.000000477}, + {0.033333, 0.99999994, 1.000000477}, + {0.0375, 0.99999994, 1.000000477}, + {0.041667, 0.99999994, 1.000000477}, + {0.045833, 0.99999994, 1.000000477}, + {0.05, 0.999999881, 1.000000477}, + {0.054167, 0.999999881, 1.000000477}, + {0.058333, 0.999999881, 1.000000477}, + {0.0625, 0.999999881, 1.000000477}, + {0.066667, 0.999999881, 1.000000477}, + {0.070833, 0.999999881, 1.000000477}, + {0.075, 0.999999881, 1.000000477}, + {0.079167, 0.999999881, 1.000000477}, + {0.083333, 0.999999881, 1.000000477}, + {0.0875, 0.999999881, 1.000000477}, + {0.091667, 0.999999881, 1.000000477}, + {0.095833, 0.999999881, 1.000000477}, + {0.1, 0.999999881, 1.000000477}, + {0.104167, 0.999999881, 1.000000477}, + {0.108333, 0.999999881, 1.000000477}, + {0.1125, 0.999999881, 1.000000477}, + {0.116667, 0.999999881, 1.000000477}, + {0.120833, 0.999999881, 1.000000477}, + {0.125, 0.999999881, 1.000000477}, + {0.129167, 0.999999881, 1.000000477}, + {0.133333, 0.999999881, 1.000000477}, + {0.1375, 0.99999994, 1.000000477}, + {0.141667, 0.99999994, 1.000000477}, + {0.145833, 0.99999994, 1.000000477}, + {0.15, 0.99999994, 1.000000477}, + {0.154167, 0.99999994, 1.000000477}, + {0.158333, 0.99999994, 1.000000477}, + {0.1625, 0.99999994, 1.000000477}, + {0.166667, 0.99999994, 1.000000477}, + {0.170833, 0.99999994, 1.000000477}, + {0.175, 0.99999994, 1.000000477}, + {0.179167, 0.99999994, 1.000000477}, + {0.183333, 0.99999994, 1.000000477}, + {0.1875, 0.99999994, 1.000000477}, + {0.191667, 0.99999994, 1.000000477}, + {0.195833, 1, 1.000000477}, + {0.2, 1, 1.000000477}, + {0.204167, 1, 1.000000477}, + {0.208333, 1, 1.000000477}, + {0.2125, 1, 1.000000477}, + {0.216667, 1, 1.000000477}, + {0.220833, 1, 1.000000477}, + {0.225, 1, 1.000000477}, + {0.229167, 1, 1.000000477}, + {0.233333, 1, 1.000000477}, + {0.2375, 1, 1.000000477}, + {0.241667, 1, 1.000000477}, + {0.245833, 1, 1.000000477}, + {0.25, 1, 1.000000477}, + {0.254167, 1, 1.000000477}, + {0.258333, 1, 1.000000477}, + {0.2625, 1, 1.000000477}, + {0.266667, 1, 1.000000477}, + {0.270833, 1, 1.000000477}, + {0.275, 1, 1.000000477}, + {0.279167, 1, 1.000000477}, + {0.283333, 1, 1.000000477}, + {0.2875, 1, 1.000000477}, + {0.291667, 1, 1.000000477}, + {0.295833, 1.000000119, 1.000000477}, + {0.3, 1.000000119, 1.000000477}, + {0.304167, 1.000000119, 1.000000477}, + {0.308333, 1.000000119, 1.000000477}, + {0.3125, 1.000000119, 1.000000477}, + {0.316667, 1.000000119, 1.000000477}, + {0.320833, 1.000000119, 1.000000477}, + {0.325, 1.000000119, 1.000000477}, + {0.329167, 1.000000119, 1.000000477}, + {0.333333, 1.000000119, 1.000000477}, + {0.3375, 1.000000119, 1.000000477}, + {0.341667, 1.000000119, 1.000000477}, + {0.345833, 1.000000119, 1.000000477}, + {0.35, 1.000000119, 1.000000477}, + {0.354167, 1.000000119, 1.000000477}, + {0.358333, 1.000000119, 1.000000477}, + {0.3625, 1, 1.000000477}, + {0.366667, 1, 1.000000477}, + {0.370833, 1, 1.000000477}, + {0.375, 1, 1.000000477}, + {0.379167, 1, 1.000000477}, + {0.383333, 1, 1.000000477}, + {0.3875, 1, 1.000000477}, + {0.391667, 1, 1.000000477}, + {0.395833, 1, 1.000000477}, + {0.4, 1, 1.000000477}, + {0.404167, 1, 1.000000477}, + {0.408333, 1, 1.000000477}, + {0.4125, 1, 1.000000477}, + {0.416667, 1, 1.000000477}, + {0.420833, 1, 1.000000477}, + {0.425, 1, 1.000000477}, + {0.429167, 1, 1.000000477}, + {0.433333, 1, 1.000000477}, + {0.4375, 1, 1.000000477}, + {0.441667, 1, 1.000000477}, + {0.445833, 1, 1.000000477}, + {0.45, 1, 1.000000477}, + {0.454167, 1, 1.000000477}, + {0.458333, 1, 1.000000477}, + {0.4625, 1, 1.000000477}, + {0.466667, 1, 1.000000477}, + {0.470833, 1, 1.000000477}, + {0.475, 1, 1.000000477}, + {0.479167, 1, 1.000000477}, + {0.483333, 1, 1.000000477}, + {0.4875, 1, 1.000000477}, + {0.491667, 1, 1.000000477}, + {0.495833, 1, 1.000000477}, + {0.5, 1, 1.000000477}, + {0.504167, 1, 1.000000477}, + {0.508333, 1, 1.000000477}, + {0.5125, 0.99999994, 1.000000477}, + {0.516667, 0.99999994, 1.000000477}, + {0.520833, 0.99999994, 1.000000477}, + {0.525, 0.99999994, 1.000000477}, + {0.529167, 0.99999994, 1.000000477}, + {0.533333, 0.99999994, 1.000000477}, + {0.5375, 0.99999994, 1.000000477}, + {0.541667, 0.99999994, 1.000000477}, + {0.545833, 0.99999994, 1.000000477}, + {0.55, 0.99999994, 1.000000477}, + {0.554167, 0.99999994, 1.000000477}, + {0.558333, 0.99999994, 1.000000477}, + {0.5625, 0.99999994, 1.000000477}, + {0.566667, 0.99999994, 1.000000477}, + {0.570833, 0.99999994, 1.000000477}, + {0.575, 0.99999994, 1.000000477}, + {0.579167, 0.99999994, 1.000000477}, + {0.583333, 0.99999994, 1.000000477}, + {0.5875, 0.99999994, 1.000000477}, + {0.591667, 0.99999994, 1.000000477}, + {0.595833, 0.99999994, 1.000000477}, + {0.6, 0.99999994, 1.000000477}, + {0.604167, 0.99999994, 1.000000477}, + {0.608333, 0.99999994, 1.000000477}, + {0.6125, 0.99999994, 1.000000477}, + {0.616667, 0.99999994, 1.000000477}, + {0.620833, 1, 1.000000477}, + {0.625, 1, 1.000000477}, + {0.629167, 1, 1.000000477}, + {0.633333, 1, 1.000000477}, + {0.6375, 1, 1.000000477}, + {0.641667, 1, 1.000000477}, + {0.645833, 1, 1.000000477}, + {0.65, 1, 1.000000477}, + {0.654167, 1, 1.000000477}, + {0.658333, 1, 1.000000477}, + {0.6625, 1, 1.000000477}, + {0.666667, 1, 1.000000477}, + {0.670833, 1, 1.000000477}, + {0.675, 1, 1.000000477}, + {0.679167, 1, 1.000000477}, + {0.683333, 1, 1.000000477}, + {0.6875, 1, 1.000000477}, + {0.691667, 1, 1.000000477}, + {0.695833, 1, 1.000000477}, + {0.7, 1, 1.000000477}, + {0.704167, 1, 1.000000477}, + {0.708333, 1, 1.000000477}, + {0.7125, 1, 1.000000477}, + {0.716667, 1, 1.000000477}, + {0.720833, 1, 1.000000477}, + {0.725, 1, 1.000000477}, + {0.729167, 1, 1.000000477}, + {0.733333, 1, 1.000000477}, + {0.7375, 1, 1.000000477}, + {0.741667, 1, 1.000000477}, + {0.745833, 1, 1.000000477}, + {0.75, 1, 1.000000477}, + {0.754167, 1, 1.000000477}, + {0.758333, 1, 1.000000477}, + {0.7625, 1, 1.000000477}, + {0.766667, 1, 1.000000477}, + {0.770833, 1, 1.000000477}, + {0.775, 1, 1.000000477}, + {0.779167, 1, 1.000000477}, + {0.783333, 1, 1.000000477}, + {0.7875, 1, 1.000000477}, + {0.791667, 1, 1.000000477}, + {0.795833, 1, 1.000000477}, + {0.8, 1, 1.000000477}, + {0.804167, 1, 1.000000477}, + {0.808333, 1, 1.000000477}, + {0.8125, 1, 1.000000477}, + {0.816667, 1, 1.000000477}, + {0.820833, 1, 1.000000477}, + {0.825, 1, 1.000000477}, + {0.829167, 1, 1.000000477}, + {0.833333, 1, 1.000000477}, + {0.8375, 1, 1.000000477}, + {0.841667, 1, 1.000000477}, + {0.845833, 1, 1.000000477}, + {0.85, 1, 1.000000477}, + {0.854167, 1, 1.000000477}, + {0.858333, 1, 1.000000477}, + {0.8625, 1, 1.000000477}, + {0.866667, 1, 1.000000477}, + {0.870833, 1, 1.000000477}, + {0.875, 1, 1.000000477}, + {0.879167, 1, 1.000000477}, + {0.883333, 1, 1.000000477}, + {0.8875, 1, 1.000000477}, + {0.891667, 1, 1.000000477}, + {0.895833, 1, 1.000000477}, + {0.9, 1, 1.000000477}, + {0.904167, 1, 1.000000477}, + {0.908333, 1, 1.000000477}, + {0.9125, 1, 1.000000477}, + {0.916667, 1, 1.000000477}, + {0.920833, 1, 1.000000477}, + {0.925, 1, 1.000000477}, + {0.929167, 1, 1.000000477}, + {0.933333, 1, 1.000000477}, + {0.9375, 1, 1.000000477}, + {0.941667, 1, 1.000000477}, + {0.945833, 1, 1.000000477}, + {0.95, 1, 1.000000477}, + {0.954167, 1, 1.000000477}, + {0.958333, 1, 1.000000477}, + {0.9625, 1, 1.000000477}, + {0.966667, 1, 1.000000477}, + {0.970833, 1, 1.000000477}, + {0.975, 1, 1.000000477}, + {0.979167, 1, 1.000000477}, + {0.983333, 1, 1.000000477}, + {0.9875, 1, 1.000000477}, + {0.991667, 1, 1.000000477}, + {0.995833, 1, 1.000000477}, + {1, 1, 1.000000477}, + {1.004167, 1.000682712, 0.015128844}, + {1.008333, 1.001363397, 0.014973078}, + {1.0125, 1.002042532, 0.014841928}, + {1.016667, 1.002720356, 0.014729479}, + {1.020833, 1.00339675, 0.014631276}, + {1.025, 1.004072189, 0.014543867}, + {1.029167, 1.004746675, 0.01446466}, + {1.033333, 1.00541997, 0.014391631}, + {1.0375, 1.006092548, 0.01432314}, + {1.041667, 1.006764412, 0.014257919}, + {1.045833, 1.007435203, 0.014194945}, + {1.05, 1.008105278, 0.014133334}, + {1.054167, 1.008774638, 0.014072391}, + {1.058333, 1.009443045, 0.014011139}, + {1.0625, 1.010110855, 0.01395021}, + {1.066667, 1.010777831, 0.013887996}, + {1.070833, 1.011443853, 0.013824509}, + {1.075, 1.01210916, 0.013759368}, + {1.079167, 1.012773633, 0.013692267}, + {1.083333, 1.013437271, 0.013622929}, + {1.0875, 1.014100075, 0.013551049}, + {1.091667, 1.014762163, 0.013476389}, + {1.095833, 1.015423179, 0.013398723}, + {1.1, 1.016083598, 0.013398723}, + {1.104167, 1.015262365, 0.88047874}, + {1.108333, 1.014493585, 0.89023459}, + {1.1125, 1.013762116, 0.898759723}, + {1.116667, 1.013056278, 0.906125188}, + {1.120833, 1.012367129, 0.912427425}, + {1.125, 1.01168704, 0.917777061}, + {1.129167, 1.011010766, 0.922281682}, + {1.133333, 1.010334253, 0.926045954}, + {1.1375, 1.009654403, 0.929170609}, + {1.141667, 1.008969307, 0.931745946}, + {1.145833, 1.008277893, 0.93385452}, + {1.15, 1.007579207, 0.935571969}, + {1.154167, 1.006873131, 0.936964393}, + {1.158333, 1.006160259, 0.938090801}, + {1.1625, 1.005440712, 0.939003944}, + {1.166667, 1.0047158, 0.9397493}, + {1.170833, 1.003986597, 0.940366805}, + {1.175, 1.003253937, 0.940891325}, + {1.179167, 1.002519608, 0.941352487}, + {1.183333, 1.001785278, 0.94177556}, + {1.1875, 1.001052022, 0.942182004}, + {1.191667, 1.000321627, 0.942589283}, + {1.195833, 0.999596179, 0.943011642}, + {1.2, 0.998876929, 0.943460345}, + {1.204167, 0.998165727, 0.943943799}, + {1.208333, 0.997464538, 0.944467604}, + {1.2125, 0.996774673, 0.945035696}, + {1.216667, 0.996098042, 0.945649385}, + {1.220833, 0.995436549, 0.946308196}, + {1.225, 0.994791448, 0.947010458}, + {1.229167, 0.994164526, 0.947752595}, + {1.233333, 0.993557453, 0.948529899}, + {1.2375, 0.99297154, 0.949337125}, + {1.241667, 0.992408335, 0.950167537}, + {1.245833, 0.99186933, 0.951014042}, + {1.25, 0.991355598, 0.951869369}, + {1.254167, 0.990868449, 0.952725708}, + {1.258333, 0.990409136, 0.953574955}, + {1.2625, 0.989978492, 0.954409778}, + {1.266667, 0.989577591, 0.955215633}, + {1.270833, 0.989207327, 0.956005096}, + {1.275, 0.988868177, 0.956751525}, + {1.279167, 0.988560915, 0.957458079}, + {1.283333, 0.988285899, 0.958120406}, + {1.2875, 0.988043547, 0.958723307}, + {1.291667, 0.987834036, 0.959283113}, + {1.295833, 0.987657607, 0.959768534}, + {1.3, 0.987514019, 0.960213661}, + {1.304167, 0.987403274, 0.96057564}, + {1.308333, 0.987325132, 0.96090132}, + {1.3125, 0.987279058, 0.961140752}, + {1.316667, 0.987264812, 0.961349428}, + {1.320833, 0.987281561, 0.961474001}, + {1.325, 0.987328827, 0.961574197}, + {1.329167, 0.987405658, 0.961597323}, + {1.333333, 0.987511337, 0.961602867}, + {1.3375, 0.987644792, 0.96154201}, + {1.341667, 0.987805247, 0.961470485}, + {1.345833, 0.987991393, 0.961345851}, + {1.35, 0.988202393, 0.961207449}, + {1.354167, 0.988437057, 0.961049318}, + {1.358333, 0.988694072, 0.960876703}, + {1.3625, 0.988972366, 0.960694611}, + {1.366667, 0.989270747, 0.960507751}, + {1.370833, 0.989587843, 0.96032083}, + {1.375, 0.989922643, 0.960137904}, + {1.379167, 0.990273893, 0.959962845}, + {1.383333, 0.990640223, 0.95979917}, + {1.3875, 0.991020679, 0.959649861}, + {1.391667, 0.991413951, 0.959517598}, + {1.395833, 0.991818845, 0.959404588}, + {1.4, 0.992234349, 0.959312677}, + {1.404167, 0.99265933, 0.959243178}, + {1.408333, 0.993092477, 0.959197223}, + {1.4125, 0.993533015, 0.959175408}, + {1.416667, 0.993979812, 0.95917803}, + {1.420833, 0.994431734, 0.959205091}, + {1.425, 0.994888008, 0.959256351}, + {1.429167, 0.995347559, 0.959331334}, + {1.433333, 0.995809376, 0.959429204}, + {1.4375, 0.996272743, 0.959549129}, + {1.441667, 0.996736646, 0.95968461}, + {1.445833, 0.997200072, 0.959850907}, + {1.45, 0.997662604, 0.960024655}, + {1.454167, 0.998123169, 0.960226417}, + {1.458333, 0.998580933, 0.960433066}, + {1.4625, 0.999035299, 0.960664332}, + {1.466667, 0.999485552, 0.96089834}, + {1.470833, 0.99993068, 0.961153209}, + {1.475, 1.000370383, 0.961408794}, + {1.479167, 1.000803709, 0.961681604}, + {1.483333, 1.001230001, 0.961953163}, + {1.4875, 1.001648784, 0.962238312}, + {1.491667, 1.00205946, 0.962520778}, + {1.495833, 1.002461076, 0.962813199}, + {1.5, 1.002853513, 0.963101745}, + {1.504167, 1.003236055, 0.963396966}, + {1.508333, 1.003607988, 0.96368736}, + {1.5125, 1.003968954, 0.963981271}, + {1.516667, 1.004318357, 0.964269757}, + {1.520833, 1.004655838, 0.964558721}, + {1.525, 1.004980803, 0.964841962}, + {1.529167, 1.005292892, 0.965122938}, + {1.533333, 1.005591631, 0.965397894}, + {1.5375, 1.00587666, 0.965667963}, + {1.541667, 1.006147623, 0.96593219}, + {1.545833, 1.006403923, 0.966188729}, + {1.55, 1.006645441, 0.966439664}, + {1.554167, 1.00687182, 0.966680348}, + {1.558333, 1.007082582, 0.966915607}, + {1.5625, 1.007277608, 0.967138052}, + {1.566667, 1.00745666, 0.967355549}, + {1.570833, 1.007619381, 0.96755743}, + {1.575, 1.007765532, 0.967754841}, + {1.579167, 1.007894993, 0.967934012}, + {1.583333, 1.008007526, 0.968109071}, + {1.5875, 1.008103132, 0.968263447}, + {1.591667, 1.008181453, 0.968414128}, + {1.595833, 1.008242607, 0.968541622}, + {1.6, 1.008286357, 0.968665838}, + {1.604167, 1.008312702, 0.968764782}, + {1.608333, 1.008321762, 0.968860805}, + {1.6125, 1.008313417, 0.968929827}, + {1.616667, 1.008287787, 0.968996286}, + {1.620833, 1.008244872, 0.969034612}, + {1.625, 1.00818491, 0.969070733}, + {1.629167, 1.00810802, 0.969078183}, + {1.633333, 1.008014202, 0.969083905}, + {1.6375, 1.007904053, 0.969061136}, + {1.641667, 1.007777452, 0.969037175}, + {1.645833, 1.007634878, 0.968985915}, + {1.65, 1.007476687, 0.96893394}, + {1.654167, 1.007303119, 0.968856812}, + {1.658333, 1.007114768, 0.968779624}, + {1.6625, 1.006911874, 0.968680382}, + {1.666667, 1.006694913, 0.968581617}, + {1.670833, 1.00646472, 0.968464911}, + {1.675, 1.006221414, 0.968349338}, + {1.679167, 1.005965829, 0.968220592}, + {1.683333, 1.005698442, 0.968093693}, + {1.6875, 1.005420089, 0.967959166}, + {1.691667, 1.005131125, 0.967827022}, + {1.695833, 1.004832625, 0.967693269}, + {1.7, 1.004525065, 0.967562377}, + {1.704167, 1.00420928, 0.967436075}, + {1.708333, 1.003885984, 0.967313051}, + {1.7125, 1.003556132, 0.967200637}, + {1.716667, 1.003220201, 0.967091799}, + {1.720833, 1.0028795, 0.966999233}, + {1.725, 1.00253439, 0.966910303}, + {1.729167, 1.00218606, 0.966842711}, + {1.733333, 1.001835227, 0.966778576}, + {1.7375, 1.001482844, 0.966739953}, + {1.741667, 1.001129627, 0.966711283}, + {1.745833, 1.000776529, 0.966690898}, + {1.75, 1.000424623, 0.966700375}, + {1.754167, 1.000074387, 0.96671176}, + {1.758333, 0.999727011, 0.966754198}, + {1.7625, 0.999383092, 0.966797709}, + {1.766667, 0.999043643, 0.966872096}, + {1.770833, 0.998709381, 0.966946483}, + {1.775, 0.998381138, 0.967050433}, + {1.779167, 0.99805963, 0.967153192}, + {1.783333, 0.997745872, 0.96728301}, + {1.7875, 0.997440159, 0.967410386}, + {1.791667, 0.997143567, 0.967561364}, + {1.795833, 0.99685663, 0.967714787}, + {1.8, 0.996579885, 0.967869997}, + {1.804167, 0.996314168, 0.968042195}, + {1.808333, 0.996059835, 0.968208969}, + {1.8125, 0.995817542, 0.968387842}, + {1.816667, 0.995587707, 0.968560398}, + {1.820833, 0.995370924, 0.968739927}, + {1.825, 0.995167375, 0.968912601}, + {1.829167, 0.994977593, 0.969087243}, + {1.833333, 0.994801879, 0.969254494}, + {1.8375, 0.99464041, 0.96941936}, + {1.841667, 0.994493544, 0.969576657}, + {1.845833, 0.994361401, 0.969727576}, + {1.85, 0.994244099, 0.969871104}, + {1.854167, 0.994141817, 0.970005214}, + {1.858333, 0.994054556, 0.970132172}, + {1.8625, 0.993982315, 0.970247447}, + {1.866667, 0.993925095, 0.970356286}, + {1.870833, 0.993882775, 0.97045207}, + {1.875, 0.993855238, 0.970542192}, + {1.879167, 0.993842363, 0.970618844}, + {1.883333, 0.993843973, 0.970690787}, + {1.8875, 0.993859708, 0.970749676}, + {1.891667, 0.993889451, 0.97080493}, + {1.895833, 0.993932843, 0.970848203}, + {1.9, 0.993989527, 0.970888972}, + {1.904167, 0.994059205, 0.97091943}, + {1.908333, 0.994141459, 0.970948577}, + {1.9125, 0.994235873, 0.970969498}, + {1.916667, 0.994342029, 0.970990121}, + {1.920833, 0.99445945, 0.971004903}, + {1.925, 0.994587719, 0.971020401}, + {1.929167, 0.9947263, 0.971032619}, + {1.933333, 0.994874775, 0.971046269}, + {1.9375, 0.995032549, 0.971059203}, + {1.941667, 0.995199144, 0.971074224}, + {1.945833, 0.995373964, 0.971090853}, + {1.95, 0.995556593, 0.971110106}, + {1.954167, 0.995746374, 0.971133053}, + {1.958333, 0.995942831, 0.971158922}, + {1.9625, 0.996145368, 0.971190274}, + {1.966667, 0.996353567, 0.971224725}, + {1.970833, 0.996566653, 0.97126615}, + {1.975, 0.996784389, 0.971310556}, + {1.979167, 0.997005939, 0.971363068}, + {1.983333, 0.997230887, 0.971418381}, + {1.9875, 0.997458696, 0.971482456}, + {1.991667, 0.997688949, 0.971549094}, + {1.995833, 0.997920871, 0.971624851}, + {2, 0.998154223, 0.971702695}, + {2.004167, 0.99838829, 0.971789718}, + {2.008333, 0.998622656, 0.971878409}, + {2.0125, 0.998856843, 0.971975863}, + {2.016667, 0.999090433, 0.972074568}, + {2.020833, 0.999322772, 0.972181499}, + {2.025, 0.999553561, 0.972289145}, + {2.029167, 0.999782324, 0.972404182}, + {2.033333, 1.000008583, 0.972519457}, + {2.0375, 1.000231862, 0.97264123}, + {2.041667, 1.000451922, 0.972762704}, + {2.045833, 1.000668168, 0.972889543}, + {2.05, 1.000880361, 0.973015666}, + {2.054167, 1.001088023, 0.973146021}, + {2.058333, 1.001290798, 0.973275185}, + {2.0625, 1.001488328, 0.973407388}, + {2.066667, 1.001680374, 0.973538041}, + {2.070833, 1.00186646, 0.973670363}, + {2.075, 1.002046466, 0.973800957}, + {2.079167, 1.002219915, 0.973931909}, + {2.083333, 1.002386689, 0.974060893}, + {2.0875, 1.00254631, 0.974188983}, + {2.091667, 1.002698779, 0.974314928}, + {2.095833, 1.002843618, 0.974438667}, + {2.1, 1.002980828, 0.974560261}, + {2.104167, 1.003109932, 0.974678457}, + {2.108333, 1.003231049, 0.974794388}, + {2.1125, 1.003343701, 0.974905789}, + {2.116667, 1.003448009, 0.975015044}, + {2.120833, 1.003543615, 0.975118697}, + {2.125, 1.003630638, 0.975220263}, + {2.129167, 1.00370872, 0.975315332}, + {2.133333, 1.003777862, 0.975408375}, + {2.1375, 1.003837943, 0.975494087}, + {2.141667, 1.003889084, 0.97557801}, + {2.145833, 1.003931046, 0.975653946}, + {2.15, 1.003963828, 0.975728214}, + {2.154167, 1.003987551, 0.975794077}, + {2.158333, 1.004002213, 0.97585845}, + {2.1625, 1.004007816, 0.975914061}, + {2.166667, 1.00400424, 0.97596848}, + {2.170833, 1.003991842, 0.976014078}, + {2.175, 1.003970623, 0.976058662}, + {2.179167, 1.003940463, 0.976094544}, + {2.183333, 1.003901839, 0.976129651}, + {2.1875, 1.003854632, 0.976156354}, + {2.191667, 1.003799081, 0.97618264}, + {2.195833, 1.003735423, 0.976201057}, + {2.2, 1.003663778, 0.976219237}, + {2.204167, 1.003584385, 0.976230323}, + {2.208333, 1.003497481, 0.97624141}, + {2.2125, 1.003403306, 0.976246357}, + {2.216667, 1.003302097, 0.976251602}, + {2.220833, 1.003194094, 0.976251721}, + {2.225, 1.003079653, 0.976252377}, + {2.229167, 1.002959013, 0.976249218}, + {2.233333, 1.002832532, 0.976246715}, + {2.2375, 1.002700567, 0.976241708}, + {2.241667, 1.002563357, 0.976237595}, + {2.245833, 1.002421498, 0.97623235}, + {2.25, 1.00227499, 0.976228058}, + {2.254167, 1.002124429, 0.976224005}, + {2.258333, 1.001970172, 0.976221025}, + {2.2625, 1.001812577, 0.976219654}, + {2.266667, 1.001652002, 0.976219356}, + {2.270833, 1.001489043, 0.976221859}, + {2.275, 1.001323819, 0.976225436}, + {2.279167, 1.001156807, 0.976232946}, + {2.283333, 1.000988603, 0.976241529}, + {2.2875, 1.000819445, 0.97625488}, + {2.291667, 1.000649691, 0.976269126}, + {2.295833, 1.000480056, 0.976288915}, + {2.3, 1.00031054, 0.976309478}, + {2.304167, 1.00014174, 0.976336062}, + {2.308333, 0.999974132, 0.976363182}, + {2.3125, 0.999808013, 0.97639662}, + {2.316667, 0.999643743, 0.976430357}, + {2.320833, 0.999481857, 0.976470292}, + {2.325, 0.999322474, 0.976510406}, + {2.329167, 0.999166131, 0.97655654}, + {2.333333, 0.999013186, 0.976602495}, + {2.3375, 0.998863876, 0.976654112}, + {2.341667, 0.998718619, 0.976705313}, + {2.345833, 0.998577714, 0.97676152}, + {2.35, 0.998441339, 0.976817131}, + {2.354167, 0.99830997, 0.976876974}, + {2.358333, 0.998183727, 0.976935983}, + {2.3625, 0.998062968, 0.976998508}, + {2.366667, 0.997947812, 0.97706002}, + {2.370833, 0.997838557, 0.977124095}, + {2.375, 0.997735381, 0.977187037}, + {2.379167, 0.997638524, 0.977251768}, + {2.383333, 0.997548044, 0.977315128}, + {2.3875, 0.99746418, 0.97737956}, + {2.391667, 0.997386992, 0.977442563}, + {2.395833, 0.997316659, 0.977505863}, + {2.4, 0.99725318, 0.977567792}, + {2.404167, 0.997196674, 0.977629304}, + {2.408333, 0.997147202, 0.977689505}, + {2.4125, 0.997104764, 0.977748811}, + {2.416667, 0.997069418, 0.977806926}, + {2.420833, 0.997041106, 0.977863729}, + {2.425, 0.997019887, 0.977919519}, + {2.429167, 0.997005641, 0.977973759}, + {2.433333, 0.99699831, 0.978027105}, + {2.4375, 0.996997893, 0.978078902}, + {2.441667, 0.997004211, 0.978129923}, + {2.445833, 0.997017264, 0.978179455}, + {2.45, 0.997036815, 0.97822845}, + {2.454167, 0.997062802, 0.978276134}, + {2.458333, 0.997095108, 0.97832346}, + {2.4625, 0.997133493, 0.978369713}, + {2.466667, 0.997177839, 0.978415847}, + {2.470833, 0.997227907, 0.978461266}, + {2.475, 0.997283578, 0.978506744}, + {2.479167, 0.997344553, 0.978551865}, + {2.483333, 0.997410715, 0.978597224}, + {2.4875, 0.997481763, 0.978642642}, + {2.491667, 0.99755758, 0.978688478}, + {2.495833, 0.997637749, 0.978734732}, + {2.5, 0.997722149, 0.978781521}, + {2.504167, 0.997810483, 0.978829205}, + {2.508333, 0.997902572, 0.978877366}, + {2.5125, 0.997998059, 0.978926837}, + {2.516667, 0.998096764, 0.978976846}, + {2.520833, 0.99819833, 0.979028463}, + {2.525, 0.998302639, 0.979080617}, + {2.529167, 0.998409212, 0.97913456}, + {2.533333, 0.998517931, 0.979189098}, + {2.5375, 0.998628497, 0.979245543}, + {2.541667, 0.998740673, 0.979302526}, + {2.545833, 0.998854041, 0.979361534}, + {2.55, 0.998968482, 0.97942096}, + {2.554167, 0.999083698, 0.979482412}, + {2.558333, 0.99919939, 0.979544222}, + {2.5625, 0.999315321, 0.97960794}, + {2.566667, 0.999431312, 0.979671896}, + {2.570833, 0.999546885, 0.979737639}, + {2.575, 0.999662042, 0.979803562}, + {2.579167, 0.999776363, 0.979871035}, + {2.583333, 0.999889672, 0.979938447}, + {2.5875, 1.000001788, 0.980007231}, + {2.591667, 1.000112414, 0.980075896}, + {2.595833, 1.000221252, 0.980145454}, + {2.6, 1.000328302, 0.980214894}, + {2.604167, 1.000433087, 0.98028487}, + {2.608333, 1.000535607, 0.980354488}, + {2.6125, 1.000635624, 0.980424404}, + {2.616667, 1.000732899, 0.980493844}, + {2.620833, 1.000827312, 0.980563104}, + {2.625, 1.000918627, 0.980631888}, + {2.629167, 1.001006722, 0.980700076}, + {2.633333, 1.001091361, 0.980767667}, + {2.6375, 1.001172543, 0.980834305}, + {2.641667, 1.001250029, 0.980900288}, + {2.645833, 1.001323581, 0.980964839}, + {2.65, 1.001393318, 0.981028795}, + {2.654167, 1.001459002, 0.981091022}, + {2.658333, 1.001520634, 0.981152534}, + {2.6625, 1.001577854, 0.98121196}, + {2.666667, 1.001630902, 0.98127073}, + {2.670833, 1.00167942, 0.981327116}, + {2.675, 1.001723647, 0.981382847}, + {2.679167, 1.001763225, 0.981435895}, + {2.683333, 1.001798391, 0.981488407}, + {2.6875, 1.001828909, 0.981538057}, + {2.691667, 1.001854777, 0.981587112}, + {2.695833, 1.001875997, 0.981633246}, + {2.7, 1.001892686, 0.981678843}, + {2.704167, 1.001904726, 0.981721342}, + {2.708333, 1.001912117, 0.981763482}, + {2.7125, 1.001914978, 0.981802464}, + {2.716667, 1.001913309, 0.981841147}, + {2.720833, 1.00190711, 0.981876731}, + {2.725, 1.001896501, 0.981912136}, + {2.729167, 1.00188148, 0.981944501}, + {2.733333, 1.001862168, 0.981976748}, + {2.7375, 1.001838684, 0.982006192}, + {2.741667, 1.001811028, 0.982035518}, + {2.745833, 1.001779318, 0.98206234}, + {2.75, 1.001743793, 0.982089102}, + {2.754167, 1.001704335, 0.98211354}, + {2.758333, 1.001661181, 0.982138097}, + {2.7625, 1.001614571, 0.982160687}, + {2.766667, 1.001564503, 0.982183337}, + {2.770833, 1.001511216, 0.982204437}, + {2.775, 1.001454711, 0.982225657}, + {2.779167, 1.001395345, 0.982245624}, + {2.783333, 1.001333117, 0.98226589}, + {2.7875, 1.001268268, 0.982285261}, + {2.791667, 1.001200914, 0.982304871}, + {2.795833, 1.001131415, 0.982324004}, + {2.8, 1.001059771, 0.982343495}, + {2.804167, 1.000986099, 0.982362807}, + {2.808333, 1.000910878, 0.982382476}, + {2.8125, 1.000833988, 0.982402384}, + {2.816667, 1.000755906, 0.98242265}, + {2.820833, 1.000676632, 0.982443452}, + {2.825, 1.000596285, 0.982464552}, + {2.829167, 1.000515342, 0.982486546}, + {2.833333, 1.000433803, 0.982508838}, + {2.8375, 1.000351906, 0.982532263}, + {2.841667, 1.000269771, 0.982555926}, + {2.845833, 1.000187874, 0.9825809}, + {2.85, 1.000106096, 0.982606173}, + {2.854167, 1.000024676, 0.982632816}, + {2.858333, 0.999943972, 0.982659698}, + {2.8625, 0.999864042, 0.982688129}, + {2.866667, 0.999785066, 0.98271668}, + {2.870833, 0.999707282, 0.98274678}, + {2.875, 0.999630749, 0.982777059}, + {2.879167, 0.999555767, 0.982808828}, + {2.883333, 0.999482453, 0.982840717}, + {2.8875, 0.999410987, 0.982874095}, + {2.891667, 0.999341428, 0.982907474}, + {2.895833, 0.999274015, 0.982942283}, + {2.9, 0.999208868, 0.982977033}, + {2.904167, 0.999146104, 0.983013093}, + {2.908333, 0.999085844, 0.983049035}, + {2.9125, 0.999028206, 0.983086228}, + {2.916667, 0.99897325, 0.983123243}, + {2.920833, 0.998921216, 0.98316133}, + {2.925, 0.998872042, 0.983199179}, + {2.929167, 0.998825967, 0.983237982}, + {2.933333, 0.998782873, 0.983276546}, + {2.9375, 0.998742998, 0.983315885}, + {2.941667, 0.998706341, 0.983354986}, + {2.945833, 0.998672962, 0.983394682}, + {2.95, 0.998642862, 0.9834342}, + {2.954167, 0.998616099, 0.983474135}, + {2.958333, 0.998592734, 0.983513892}, + {2.9625, 0.998572767, 0.983554006}, + {2.966667, 0.998556137, 0.983593881}, + {2.970833, 0.998542905, 0.983634114}, + {2.975, 0.99853307, 0.983674109}, + {2.979167, 0.998526633, 0.983714342}, + {2.983333, 0.998523533, 0.983754396}, + {2.9875, 0.998523712, 0.98379463}, + {2.991667, 0.998527169, 0.983834684}, + {2.995833, 0.998533845, 0.983874977}, + {3, 0.998543739, 0.983915091}, + {3.004167, 0.998556674, 0.983955443}, + {3.008333, 0.998572707, 0.983995676}, + {3.0125, 0.998591661, 0.984036088}, + {3.016667, 0.998613536, 0.98407644}, + {3.020833, 0.998638153, 0.984117031}, + {3.025, 0.998665512, 0.984157622}, + {3.029167, 0.998695493, 0.984198391}, + {3.033333, 0.998727977, 0.984239221}, + {3.0375, 0.998762906, 0.984280348}, + {3.041667, 0.998800099, 0.984321475}, + {3.045833, 0.998839438, 0.9843629}, + {3.05, 0.998880863, 0.984404445}, + {3.054167, 0.998924255, 0.984446287}, + {3.058333, 0.998969436, 0.984488249}, + {3.0625, 0.999016345, 0.984530509}, + {3.066667, 0.999064803, 0.984572887}, + {3.070833, 0.999114692, 0.984615624}, + {3.075, 0.999165893, 0.98465848}, + {3.079167, 0.999218225, 0.984701633}, + {3.083333, 0.999271631, 0.984744906}, + {3.0875, 0.999325931, 0.984788537}, + {3.091667, 0.999381006, 0.984832227}, + {3.095833, 0.999436736, 0.984876215}, + {3.1, 0.999492943, 0.984920263}, + {3.104167, 0.999549508, 0.984964609}, + {3.108333, 0.999606311, 0.985008955}, + {3.1125, 0.999663234, 0.98505348}, + {3.116667, 0.999720097, 0.985098004}, + {3.120833, 0.99977684, 0.985142648}, + {3.125, 0.999833286, 0.985187292}, + {3.129167, 0.999889314, 0.985231936}, + {3.133333, 0.999944806, 0.98527652}, + {3.1375, 0.999999642, 0.985321045}, + {3.141667, 1.000053763, 0.98536545}, + {3.145833, 1.000106931, 0.985409677}, + {3.15, 1.000159144, 0.985453784}, + {3.154167, 1.000210285, 0.985497534}, + {3.158333, 1.000260115, 0.985541224}, + {3.1625, 1.000308752, 0.985584378}, + {3.166667, 1.000355959, 0.985627472}, + {3.170833, 1.000401735, 0.985669911}, + {3.175, 1.000445843, 0.98571223}, + {3.179167, 1.0004884, 0.985753834}, + {3.183333, 1.00052917, 0.985795259}, + {3.1875, 1.000568032, 0.98583585}, + {3.191667, 1.000605226, 0.985876262}, + {3.195833, 1.000640273, 0.98591572}, + {3.2, 1.000673413, 0.985955}, + {3.204167, 1.000704527, 0.985993266}, + {3.208333, 1.000733614, 0.986031294}, + {3.2125, 1.000760436, 0.986068249}, + {3.216667, 1.000785112, 0.986105025}, + {3.220833, 1.000807524, 0.986140609}, + {3.225, 1.000827789, 0.986176014}, + {3.229167, 1.00084579, 0.986210167}, + {3.233333, 1.000861406, 0.986244142}, + {3.2375, 1.000874758, 0.986276925}, + {3.241667, 1.000885844, 0.986309528}, + {3.245833, 1.000894666, 0.986340821}, + {3.25, 1.000901222, 0.986372054}, + {3.254167, 1.000905395, 0.986401975}, + {3.258333, 1.000907302, 0.986431777}, + {3.2625, 1.000906944, 0.986460388}, + {3.266667, 1.000904441, 0.986488879}, + {3.270833, 1.000899673, 0.986516178}, + {3.275, 1.000892639, 0.986543477}, + {3.279167, 1.000883579, 0.986569583}, + {3.283333, 1.000872493, 0.98659569}, + {3.2875, 1.000859261, 0.986620784}, + {3.291667, 1.000844121, 0.986645818}, + {3.295833, 1.000826955, 0.986669898}, + {3.3, 1.000807881, 0.986694038}, + {3.304167, 1.000787139, 0.986717284}, + {3.308333, 1.000764608, 0.986740589}, + {3.3125, 1.00074029, 0.986763179}, + {3.316667, 1.000714421, 0.986785829}, + {3.320833, 1.000687122, 0.986807883}, + {3.325, 1.000658274, 0.986829996}, + {3.329167, 1.000628114, 0.986851633}, + {3.333333, 1.000596523, 0.986873388}, + {3.3375, 1.00056386, 0.986894786}, + {3.341667, 1.000530124, 0.986916244}, + {3.345833, 1.000495315, 0.986937523}, + {3.35, 1.000459552, 0.986958921}, + {3.354167, 1.000423074, 0.986980259}, + {3.358333, 1.000385761, 0.987001657}, + {3.3625, 1.000347853, 0.987023056}, + {3.366667, 1.000309348, 0.987044632}, + {3.370833, 1.000270367, 0.987066269}, + {3.375, 1.000231028, 0.987088084}, + {3.379167, 1.000191569, 0.987110138}, + {3.383333, 1.000151753, 0.987132251}, + {3.3875, 1.000112057, 0.987154663}, + {3.391667, 1.000072241, 0.987177193}, + {3.395833, 1.000032663, 0.987200141}, + {3.4, 0.999993145, 0.987223148}, + {3.404167, 0.999954045, 0.987246573}, + {3.408333, 0.999915302, 0.987270117}, + {3.4125, 0.999877036, 0.987294137}, + {3.416667, 0.999839365, 0.987318218}, + {3.420833, 0.999802351, 0.987342775}, + {3.425, 0.999765992, 0.987367451}, + {3.429167, 0.999730527, 0.987392604}, + {3.433333, 0.999695897, 0.987417817}, + {3.4375, 0.99966222, 0.987443566}, + {3.441667, 0.999629617, 0.987469375}, + {3.445833, 0.999598086, 0.98749572}, + {3.45, 0.999567688, 0.987522006}, + {3.454167, 0.999538481, 0.987548888}, + {3.458333, 0.999510586, 0.98757571}, + {3.4625, 0.999484062, 0.987603068}, + {3.466667, 0.999458849, 0.987630427}, + {3.470833, 0.999435067, 0.987658262}, + {3.475, 0.999412715, 0.987686098}, + {3.479167, 0.999391854, 0.98771435}, + {3.483333, 0.999372542, 0.987742543}, + {3.4875, 0.999354839, 0.987771213}, + {3.491667, 0.999338627, 0.987799883}, + {3.495833, 0.999324083, 0.987828851}, + {3.5, 0.999311149, 0.987857878}, + {3.504167, 0.999299824, 0.987887204}, + {3.508333, 0.999290168, 0.987916529}, + {3.5125, 0.999282122, 0.987946153}, + {3.516667, 0.999275744, 0.987975776}, + {3.520833, 0.999270976, 0.988005638}, + {3.525, 0.999267876, 0.9880355}, + {3.529167, 0.999266386, 0.98806566}, + {3.533333, 0.999266505, 0.98809576}, + {3.5375, 0.999268234, 0.988126099}, + {3.541667, 0.999271512, 0.988156438}, + {3.545833, 0.99927634, 0.988187015}, + {3.55, 0.999282718, 0.988217533}, + {3.554167, 0.999290526, 0.988248229}, + {3.558333, 0.999299765, 0.988278985}, + {3.5625, 0.999310493, 0.98830986}, + {3.566667, 0.999322534, 0.988340735}, + {3.570833, 0.999335885, 0.988371789}, + {3.575, 0.999350548, 0.988402784}, + {3.579167, 0.999366403, 0.988433957}, + {3.583333, 0.99938345, 0.98846513}, + {3.5875, 0.999401629, 0.988496423}, + {3.591667, 0.999420881, 0.988527715}, + {3.595833, 0.999441147, 0.988559127}, + {3.6, 0.999462366, 0.988590479}, + {3.604167, 0.999484479, 0.98862195}, + {3.608333, 0.999507427, 0.988653421}, + {3.6125, 0.99953115, 0.988684893}, + {3.616667, 0.999555588, 0.988716424}, + {3.620833, 0.999580622, 0.988747954}, + {3.625, 0.999606252, 0.988779485}, + {3.629167, 0.999632418, 0.988810956}, + {3.633333, 0.999659002, 0.988842487}, + {3.6375, 0.999685943, 0.988873959}, + {3.641667, 0.999713242, 0.98890543}, + {3.645833, 0.99974072, 0.988936782}, + {3.65, 0.999768436, 0.988968134}, + {3.654167, 0.999796212, 0.988999367}, + {3.658333, 0.999824107, 0.9890306}, + {3.6625, 0.999851942, 0.989061654}, + {3.666667, 0.999879658, 0.989092648}, + {3.670833, 0.999907255, 0.989123464}, + {3.675, 0.999934673, 0.989154279}, + {3.679167, 0.999961793, 0.989184797}, + {3.683333, 0.999988556, 0.989215255}, + {3.6875, 1.00001502, 0.989245474}, + {3.691667, 1.000041008, 0.989275634}, + {3.695833, 1.0000664, 0.989305437}, + {3.7, 1.000091314, 0.989335179}, + {3.704167, 1.000115633, 0.989364564}, + {3.708333, 1.000139356, 0.98939383}, + {3.7125, 1.000162244, 0.989422739}, + {3.716667, 1.000184536, 0.989451587}, + {3.720833, 1.000205874, 0.989479899}, + {3.725, 1.000226498, 0.989508212}, + {3.729167, 1.000246286, 0.989535987}, + {3.733333, 1.000265121, 0.989563704}, + {3.7375, 1.000283003, 0.989590943}, + {3.741667, 1.000299931, 0.989618063}, + {3.745833, 1.000315905, 0.989644587}, + {3.75, 1.000330806, 0.989671111}, + {3.754167, 1.000344634, 0.989697039}, + {3.758333, 1.000357509, 0.989722848}, + {3.7625, 1.000369191, 0.98974812}, + {3.766667, 1.000379801, 0.989773333}, + {3.770833, 1.000389338, 0.98979789}, + {3.775, 1.000397801, 0.989822447}, + {3.779167, 1.000405073, 0.989846408}, + {3.783333, 1.000411153, 0.98987025}, + {3.7875, 1.00041616, 0.989893556}, + {3.791667, 1.000419974, 0.989916801}, + {3.795833, 1.000422716, 0.989939451}, + {3.8, 1.000424385, 0.989962041}, + {3.804167, 1.000424862, 0.989984095}, + {3.808333, 1.000424266, 0.990006089}, + {3.8125, 1.000422597, 0.990027547}, + {3.816667, 1.000419736, 0.990049005}, + {3.820833, 1.000415921, 0.990069926}, + {3.825, 1.000411034, 0.990090847}, + {3.829167, 1.000405192, 0.990111291}, + {3.833333, 1.000398278, 0.990131736}, + {3.8375, 1.00039053, 0.990151703}, + {3.841667, 1.000381708, 0.990171731}, + {3.845833, 1.000372052, 0.99019134}, + {3.85, 1.000361443, 0.99021095}, + {3.854167, 1.000350118, 0.990230203}, + {3.858333, 1.000337839, 0.990249455}, + {3.8625, 1.000324965, 0.990268469}, + {3.866667, 1.000311255, 0.990287483}, + {3.870833, 1.000296831, 0.990306258}, + {3.875, 1.000281811, 0.990325034}, + {3.879167, 1.000266194, 0.99034363}, + {3.883333, 1.000249982, 0.990362227}, + {3.8875, 1.000233293, 0.990380764}, + {3.891667, 1.000216126, 0.990399241}, + {3.895833, 1.000198603, 0.990417659}, + {3.9, 1.000180602, 0.990436137}, + {3.904167, 1.000162244, 0.990454555}, + {3.908333, 1.000143766, 0.990473032}, + {3.9125, 1.000124931, 0.990491509}, + {3.916667, 1.000105858, 0.990509987}, + {3.920833, 1.000086665, 0.990528524}, + {3.925, 1.000067472, 0.990547061}, + {3.929167, 1.000048161, 0.990565717}, + {3.933333, 1.000028849, 0.990584433}, + {3.9375, 1.000009537, 0.990603209}, + {3.941667, 0.999990344, 0.990622103}, + {3.945833, 0.999971271, 0.990641057}, + {3.95, 0.999952376, 0.990660071}, + {3.954167, 0.99993372, 0.990679264}, + {3.958333, 0.999915302, 0.990698457}, + {3.9625, 0.999897242, 0.990717828}, + {3.966667, 0.999879479, 0.990737259}, + {3.970833, 0.999862075, 0.990756929}, + {3.975, 0.999845088, 0.990776539}, + {3.979167, 0.999828577, 0.990796447}, + {3.983333, 0.999812543, 0.990816295}, + {3.9875, 0.999797046, 0.990836442}, + {3.991667, 0.999782085, 0.990856528}, + {3.995833, 0.999767721, 0.990876913}, + {4, 0.999753952, 0.990897238}, + {4.004167, 0.999740779, 0.990917861}, + {4.008333, 0.999728322, 0.990938425}, + {4.0125, 0.99971652, 0.990959287}, + {4.016667, 0.999705434, 0.990980089}, + {4.020833, 0.999695063, 0.991001189}, + {4.025, 0.999685407, 0.991022229}, + {4.029167, 0.999676526, 0.991043508}, + {4.033333, 0.999668419, 0.991064787}, + {4.0375, 0.999661088, 0.991086245}, + {4.041667, 0.999654531, 0.991107702}, + {4.045833, 0.99964875, 0.991129398}, + {4.05, 0.999643803, 0.991151035}, + {4.054167, 0.99963963, 0.99117291}, + {4.058333, 0.999636233, 0.991194725}, + {4.0625, 0.99963367, 0.991216719}, + {4.066667, 0.999631941, 0.991238713}, + {4.070833, 0.999630928, 0.991260886}, + {4.075, 0.999630749, 0.991283059}, + {4.079167, 0.999631345, 0.991305292}, + {4.083333, 0.999632716, 0.991327584}, + {4.0875, 0.999634802, 0.991349995}, + {4.091667, 0.999637663, 0.991372347}, + {4.095833, 0.999641299, 0.991394877}, + {4.1, 0.999645591, 0.991417348}, + {4.104167, 0.999650598, 0.991439939}, + {4.108333, 0.99965626, 0.991462469}, + {4.1125, 0.999662578, 0.991485119}, + {4.116667, 0.999669552, 0.991507709}, + {4.120833, 0.999677122, 0.991530359}, + {4.125, 0.999685287, 0.991553009}, + {4.129167, 0.99969399, 0.991575718}, + {4.133333, 0.999703228, 0.991598368}, + {4.1375, 0.999713004, 0.991621077}, + {4.141667, 0.999723196, 0.991643786}, + {4.145833, 0.999733865, 0.991666436}, + {4.15, 0.999745011, 0.991689086}, + {4.154167, 0.999756455, 0.991711676}, + {4.158333, 0.999768317, 0.991734326}, + {4.1625, 0.999780476, 0.991756856}, + {4.166667, 0.999792933, 0.991779447}, + {4.170833, 0.999805629, 0.991801858}, + {4.175, 0.999818563, 0.991824329}, + {4.179167, 0.999831676, 0.991846681}, + {4.183333, 0.999844968, 0.991869032}, + {4.1875, 0.999858439, 0.991891265}, + {4.191667, 0.999871969, 0.991913497}, + {4.195833, 0.999885499, 0.991935551}, + {4.2, 0.999899149, 0.991957605}, + {4.204167, 0.999912739, 0.99197948}, + {4.208333, 0.999926329, 0.992001355}, + {4.2125, 0.999939859, 0.992023051}, + {4.216667, 0.99995327, 0.992044747}, + {4.220833, 0.999966562, 0.992066205}, + {4.225, 0.999979734, 0.992087603}, + {4.229167, 0.999992669, 0.992108822}, + {4.233333, 1.000005484, 0.992130041}, + {4.2375, 1.000018001, 0.992150962}, + {4.241667, 1.00003016, 0.992171884}, + {4.245833, 1.0000422, 0.992192566}, + {4.25, 1.000053763, 0.99221319}, + {4.254167, 1.000065088, 0.992233574}, + {4.258333, 1.000076056, 0.9922539}, + {4.2625, 1.000086665, 0.992273927}, + {4.266667, 1.000096798, 0.992293954}, + {4.270833, 1.000106454, 0.992313683}, + {4.275, 1.000115752, 0.992333353}, + {4.279167, 1.000124574, 0.992352784}, + {4.283333, 1.000133038, 0.992372096}, + {4.2875, 1.000140905, 0.992391169}, + {4.291667, 1.000148177, 0.992410183}, + {4.295833, 1.000155091, 0.992428839}, + {4.3, 1.000161409, 0.992447555}, + {4.304167, 1.000167251, 0.992465854}, + {4.308333, 1.000172496, 0.992484212}, + {4.3125, 1.000177264, 0.992502213}, + {4.316667, 1.000181437, 0.992520213}, + {4.320833, 1.000185013, 0.992537856}, + {4.325, 1.000188112, 0.992555499}, + {4.329167, 1.000190616, 0.992572844}, + {4.333333, 1.000192642, 0.992590189}, + {4.3375, 1.000193954, 0.992607176}, + {4.341667, 1.000194788, 0.992624164}, + {4.345833, 1.000195146, 0.992640913}, + {4.35, 1.000194907, 0.992657602}, + {4.354167, 1.000194073, 0.992673993}, + {4.358333, 1.000192881, 0.992690444}, + {4.3625, 1.000190973, 0.992706597}, + {4.366667, 1.000188708, 0.99272275}, + {4.370833, 1.000185847, 0.992738664}, + {4.375, 1.000182509, 0.992754579}, + {4.379167, 1.000178695, 0.992770255}, + {4.383333, 1.000174522, 0.992785931}, + {4.3875, 1.000169754, 0.992801368}, + {4.391667, 1.000164747, 0.992816865}, + {4.395833, 1.000159144, 0.992832184}, + {4.4, 1.000153303, 0.992847502}, + {4.404167, 1.000146985, 0.992862642}, + {4.408333, 1.000140309, 0.992877781}, + {4.4125, 1.000133276, 0.992892802}, + {4.416667, 1.000126004, 0.992907822}, + {4.420833, 1.000118494, 0.992922723}, + {4.425, 1.000110626, 0.992937624}, + {4.429167, 1.00010252, 0.992952466}, + {4.433333, 1.000094175, 0.992967308}, + {4.4375, 1.000085592, 0.99298209}, + {4.441667, 1.00007689, 0.992996871}, + {4.445833, 1.000067949, 0.993011653}, + {4.45, 1.000058889, 0.993026376}, + {4.454167, 1.00004971, 0.993041158}, + {4.458333, 1.000040531, 0.99305588}, + {4.4625, 1.000031233, 0.993070602}, + {4.466667, 1.000021815, 0.993085384}, + {4.470833, 1.000012517, 0.993100107}, + {4.475, 1.000003099, 0.993114889}, + {4.479167, 0.999993742, 0.99312973}, + {4.483333, 0.999984443, 0.993144512}, + {4.4875, 0.999975204, 0.993159413}, + {4.491667, 0.999966025, 0.993174255}, + {4.495833, 0.999956965, 0.993189216}, + {4.5, 0.999948025, 0.993204176}, + {4.504167, 0.999939263, 0.993219137}, + {4.508333, 0.99993062, 0.993234158}, + {4.5125, 0.999922216, 0.993249297}, + {4.516667, 0.999913991, 0.993264377}, + {4.520833, 0.999906003, 0.993279576}, + {4.525, 0.999898255, 0.993294775}, + {4.529167, 0.999890745, 0.993310034}, + {4.533333, 0.999883533, 0.993325353}, + {4.5375, 0.999876559, 0.993340731}, + {4.541667, 0.999869883, 0.993356109}, + {4.545833, 0.999863565, 0.993371606}, + {4.55, 0.999857545, 0.993387103}, + {4.554167, 0.999851882, 0.993402719}, + {4.558333, 0.999846518, 0.993418276}, + {4.5625, 0.999841511, 0.993434012}, + {4.566667, 0.999836922, 0.993449688}, + {4.570833, 0.99983263, 0.993465483}, + {4.575, 0.999828756, 0.993481219}, + {4.579167, 0.999825239, 0.993497133}, + {4.583333, 0.99982208, 0.993512988}, + {4.5875, 0.999819338, 0.993528962}, + {4.591667, 0.999817014, 0.993544877}, + {4.595833, 0.999815047, 0.99356091}, + {4.6, 0.999813497, 0.993576944}, + {4.604167, 0.999812305, 0.993593037}, + {4.608333, 0.99981153, 0.99360913}, + {4.6125, 0.999811113, 0.993625283}, + {4.616667, 0.999811053, 0.993641496}, + {4.620833, 0.999811411, 0.993657649}, + {4.625, 0.999812186, 0.993673861}, + {4.629167, 0.999813259, 0.993690133}, + {4.633333, 0.999814749, 0.993706405}, + {4.6375, 0.999816537, 0.993722677}, + {4.641667, 0.999818742, 0.993738949}, + {4.645833, 0.999821246, 0.993755221}, + {4.65, 0.999824047, 0.993771493}, + {4.654167, 0.999827206, 0.993787825}, + {4.658333, 0.999830663, 0.993804097}, + {4.6625, 0.999834418, 0.993820429}, + {4.666667, 0.999838471, 0.993836701}, + {4.670833, 0.999842763, 0.993852973}, + {4.675, 0.999847353, 0.993869245}, + {4.679167, 0.999852121, 0.993885517}, + {4.683333, 0.999857187, 0.99390173}, + {4.6875, 0.999862432, 0.993917942}, + {4.691667, 0.999867916, 0.993934095}, + {4.695833, 0.999873579, 0.993950248}, + {4.7, 0.99987936, 0.993966401}, + {4.704167, 0.99988538, 0.993982494}, + {4.708333, 0.99989146, 0.993998528}, + {4.7125, 0.999897718, 0.994014502}, + {4.716667, 0.999904037, 0.994030535}, + {4.720833, 0.999910533, 0.99404639}, + {4.725, 0.99991703, 0.994062304}, + {4.729167, 0.999923587, 0.9940781}, + {4.733333, 0.999930203, 0.994093835}, + {4.7375, 0.999936879, 0.994109511}, + {4.741667, 0.999943554, 0.994125187}, + {4.745833, 0.999950171, 0.994140744}, + {4.75, 0.999956846, 0.994156241}, + {4.754167, 0.999963462, 0.994171679}, + {4.758333, 0.999970019, 0.994187057}, + {4.7625, 0.999976516, 0.994202256}, + {4.766667, 0.999982893, 0.994217515}, + {4.770833, 0.999989212, 0.994232595}, + {4.775, 0.99999547, 0.994247675}, + {4.779167, 1.00000155, 0.994262576}, + {4.783333, 1.00000751, 0.994277477}, + {4.7875, 1.000013351, 0.994292259}, + {4.791667, 1.000018954, 0.994306982}, + {4.795833, 1.000024438, 0.994321525}, + {4.8, 1.000029802, 0.994336069}, + {4.804167, 1.000034928, 0.994350433}, + {4.808333, 1.000039816, 0.994364798}, + {4.8125, 1.000044584, 0.994378984}, + {4.816667, 1.000048995, 0.99439317}, + {4.820833, 1.000053287, 0.994407177}, + {4.825, 1.00005734, 0.994421124}, + {4.829167, 1.000061154, 0.994434953}, + {4.833333, 1.000064611, 0.994448721}, + {4.8375, 1.000067949, 0.994462311}, + {4.841667, 1.000071049, 0.994475901}, + {4.845833, 1.000073791, 0.994489312}, + {4.85, 1.000076294, 0.994502723}, + {4.854167, 1.000078559, 0.994515955}, + {4.858333, 1.000080466, 0.994529188}, + {4.8625, 1.000082254, 0.994542241}, + {4.866667, 1.000083685, 0.994555235}, + {4.870833, 1.000084758, 0.99456811}, + {4.875, 1.000085711, 0.994580984}, + {4.879167, 1.000086308, 0.99459368}, + {4.883333, 1.000086665, 0.994606376}, + {4.8875, 1.000086784, 0.994618893}, + {4.891667, 1.000086546, 0.99463141}, + {4.895833, 1.000086069, 0.994643748}, + {4.9, 1.000085354, 0.994656146}, + {4.904167, 1.0000844, 0.994668365}, + {4.908333, 1.000083208, 0.994680583}, + {4.9125, 1.000081778, 0.994692683}, + {4.916667, 1.000080109, 0.994704783}, + {4.920833, 1.000078201, 0.994716704}, + {4.925, 1.000076056, 0.994728684}, + {4.929167, 1.000073791, 0.994740546}, + {4.933333, 1.000071168, 0.994752407}, + {4.9375, 1.000068426, 0.994764149}, + {4.941667, 1.000065565, 0.994775891}, + {4.945833, 1.000062346, 0.994787514}, + {4.95, 1.000059128, 0.994799197}, + {4.954167, 1.000055671, 0.99481076}, + {4.958333, 1.000052094, 0.994822323}, + {4.9625, 1.000048399, 0.994833887}, + {4.966667, 1.000044465, 0.99484539}, + {4.970833, 1.000040531, 0.994856834}, + {4.975, 1.000036478, 0.994868279}, + {4.979167, 1.000032187, 0.994879723}, + {4.983333, 1.000028014, 0.994891107}, + {4.9875, 1.000023603, 0.994902492}, + {4.991667, 1.000019193, 0.994913876}, + {4.995833, 1.000014782, 0.994925261}, + {5, 1.000010252, 0.994936585}, + {5.004167, 1.000005722, 0.99494797}, + {5.008333, 1.000001192, 0.994959295}, + {5.0125, 0.999996662, 0.99497062}, + {5.016667, 0.999992073, 0.994981945}, + {5.020833, 0.999987543, 0.994993329}, + {5.025, 0.999983072, 0.995004654}, + {5.029167, 0.999978602, 0.995015979}, + {5.033333, 0.999974132, 0.995027363}, + {5.0375, 0.99996978, 0.995038688}, + {5.041667, 0.999965489, 0.995050073}, + {5.045833, 0.999961257, 0.995061457}, + {5.05, 0.999957144, 0.995072842}, + {5.054167, 0.999953091, 0.995084286}, + {5.058333, 0.999949157, 0.99509567}, + {5.0625, 0.999945343, 0.995107114}, + {5.066667, 0.999941587, 0.995118558}, + {5.070833, 0.999938011, 0.995130002}, + {5.075, 0.999934614, 0.995141506}, + {5.079167, 0.999931276, 0.99515301}, + {5.083333, 0.999928117, 0.995164514}, + {5.0875, 0.999925137, 0.995176017}, + {5.091667, 0.999922276, 0.995187581}, + {5.095833, 0.999919593, 0.995199144}, + {5.1, 0.99991709, 0.995210707}, + {5.104167, 0.999914765, 0.99522233}, + {5.108333, 0.99991262, 0.995233953}, + {5.1125, 0.999910653, 0.995245576}, + {5.116667, 0.999908865, 0.995257199}, + {5.120833, 0.999907255, 0.995268881}, + {5.125, 0.999905825, 0.995280504}, + {5.129167, 0.999904573, 0.995292187}, + {5.133333, 0.99990356, 0.995303869}, + {5.1375, 0.999902725, 0.995315611}, + {5.141667, 0.99990201, 0.995327294}, + {5.145833, 0.999901593, 0.995339036}, + {5.15, 0.999901295, 0.995350778}, + {5.154167, 0.999901176, 0.99536252}, + {5.158333, 0.999901295, 0.995374262}, + {5.1625, 0.999901593, 0.995386004}, + {5.166667, 0.99990201, 0.995397747}, + {5.170833, 0.999902666, 0.995409489}, + {5.175, 0.9999035, 0.995421231}, + {5.179167, 0.999904454, 0.995432973}, + {5.183333, 0.999905646, 0.995444715}, + {5.1875, 0.999906957, 0.995456457}, + {5.191667, 0.999908388, 0.995468199}, + {5.195833, 0.999910057, 0.995479882}, + {5.2, 0.999911845, 0.995491624}, + {5.204167, 0.999913752, 0.995503306}, + {5.208333, 0.999915779, 0.995514989}, + {5.2125, 0.999917984, 0.995526671}, + {5.216667, 0.999920249, 0.995538294}, + {5.220833, 0.999922693, 0.995549917}, + {5.225, 0.999925196, 0.99556154}, + {5.229167, 0.999927878, 0.995573103}, + {5.233333, 0.999930561, 0.995584726}, + {5.2375, 0.999933362, 0.99559623}, + {5.241667, 0.999936283, 0.995607734}, + {5.245833, 0.999939263, 0.995619237}, + {5.25, 0.999942303, 0.995630682}, + {5.254167, 0.999945343, 0.995642126}, + {5.258333, 0.999948502, 0.99565351}, + {5.2625, 0.999951661, 0.995664835}, + {5.266667, 0.999954879, 0.99567616}, + {5.270833, 0.999958098, 0.995687425}, + {5.275, 0.999961376, 0.99569869}, + {5.279167, 0.999964654, 0.995709896}, + {5.283333, 0.999967933, 0.995721042}, + {5.2875, 0.999971151, 0.995732129}, + {5.291667, 0.99997443, 0.995743215}, + {5.295833, 0.999977648, 0.995754182}, + {5.3, 0.999980807, 0.995765209}, + {5.304167, 0.999983966, 0.995776117}, + {5.308333, 0.999987125, 0.995787024}, + {5.3125, 0.999990165, 0.995797813}, + {5.316667, 0.999993205, 0.995808601}, + {5.320833, 0.999996126, 0.995819271}, + {5.325, 0.999999046, 0.995829999}, + {5.329167, 1.000001788, 0.995840549}, + {5.333333, 1.00000453, 0.995851159}, + {5.3375, 1.000007153, 0.99586159}, + {5.341667, 1.000009775, 0.99587208}, + {5.345833, 1.000012159, 0.995882452}, + {5.35, 1.000014544, 0.995892823}, + {5.354167, 1.000016809, 0.995903075}, + {5.358333, 1.000018954, 0.995913327}, + {5.3625, 1.000020981, 0.99592346}, + {5.366667, 1.000022888, 0.995933592}, + {5.370833, 1.000024676, 0.995943606}, + {5.375, 1.000026345, 0.995953619}, + {5.379167, 1.000027895, 0.995963573}, + {5.383333, 1.000029325, 0.995973468}, + {5.3875, 1.000030637, 0.995983303}, + {5.391667, 1.000031829, 0.995993078}, + {5.395833, 1.000032783, 0.996002793}, + {5.4, 1.000033736, 0.996012509}, + {5.404167, 1.000034451, 0.996022105}, + {5.408333, 1.000035167, 0.996031642}, + {5.4125, 1.000035644, 0.996041179}, + {5.416667, 1.000036001, 0.996050656}, + {5.420833, 1.00003624, 0.996060073}, + {5.425, 1.000036359, 0.996069431}, + {5.429167, 1.00003624, 0.99607873}, + {5.433333, 1.00003612, 0.996088028}, + {5.4375, 1.000035882, 0.996097267}, + {5.441667, 1.000035405, 0.996106446}, + {5.445833, 1.000034928, 0.996115625}, + {5.45, 1.000034213, 0.996124744}, + {5.454167, 1.000033498, 0.996133745}, + {5.458333, 1.000032663, 0.996142805}, + {5.4625, 1.00003159, 0.996151805}, + {5.466667, 1.000030518, 0.996160746}, + {5.470833, 1.000029325, 0.996169686}, + {5.475, 1.000028014, 0.996178567}, + {5.479167, 1.000026703, 0.996187449}, + {5.483333, 1.000025153, 0.99619627}, + {5.4875, 1.000023603, 0.996205091}, + {5.491667, 1.000022054, 0.996213853}, + {5.495833, 1.000020266, 0.996222615}, + {5.5, 1.000018477, 0.996231318}, + {5.504167, 1.000016689, 0.99624002}, + {5.508333, 1.000014782, 0.996248722}, + {5.5125, 1.000012755, 0.996257365}, + {5.516667, 1.000010729, 0.996266007}, + {5.520833, 1.000008702, 0.99627465}, + {5.525, 1.000006676, 0.996283293}, + {5.529167, 1.00000453, 0.996291876}, + {5.533333, 1.000002384, 0.996300459}, + {5.5375, 1.000000238, 0.996309042}, + {5.541667, 0.999998033, 0.996317625}, + {5.545833, 0.999995828, 0.996326149}, + {5.55, 0.999993622, 0.996334672}, + {5.554167, 0.999991417, 0.996343195}, + {5.558333, 0.999989212, 0.996351779}, + {5.5625, 0.999987006, 0.996360302}, + {5.566667, 0.99998486, 0.996368825}, + {5.570833, 0.999982715, 0.996377289}, + {5.575, 0.999980569, 0.996385813}, + {5.579167, 0.999978483, 0.996394336}, + {5.583333, 0.999976397, 0.99640286}, + {5.5875, 0.99997443, 0.996411324}, + {5.591667, 0.999972463, 0.996419847}, + {5.595833, 0.999970496, 0.99642837}, + {5.6, 0.999968648, 0.996436894}, + {5.604167, 0.99996686, 0.996445358}, + {5.608333, 0.999965072, 0.996453881}, + {5.6125, 0.999963403, 0.996462405}, + {5.616667, 0.999961793, 0.996470869}, + {5.620833, 0.999960244, 0.996479392}, + {5.625, 0.999958754, 0.996487916}, + {5.629167, 0.999957383, 0.996496439}, + {5.633333, 0.999956071, 0.996504962}, + {5.6375, 0.99995482, 0.996513486}, + {5.641667, 0.999953687, 0.996522009}, + {5.645833, 0.999952614, 0.996530533}, + {5.65, 0.999951661, 0.996539056}, + {5.654167, 0.999950767, 0.99654758}, + {5.658333, 0.999949932, 0.996556044}, + {5.6625, 0.999949276, 0.996564627}, + {5.666667, 0.999948621, 0.99657315}, + {5.670833, 0.999948144, 0.996581614}, + {5.675, 0.999947667, 0.996590137}, + {5.679167, 0.999947369, 0.996598661}, + {5.683333, 0.999947131, 0.996607184}, + {5.6875, 0.999946952, 0.996615708}, + {5.691667, 0.999946892, 0.996624231}, + {5.695833, 0.999946952, 0.996632755}, + {5.7, 0.999947071, 0.996641219}, + {5.704167, 0.999947309, 0.996649742}, + {5.708333, 0.999947608, 0.996658266}, + {5.7125, 0.999947965, 0.996666729}, + {5.716667, 0.999948442, 0.996675193}, + {5.720833, 0.999948978, 0.996683657}, + {5.725, 0.999949634, 0.996692121}, + {5.729167, 0.999950349, 0.996700585}, + {5.733333, 0.999951124, 0.996709049}, + {5.7375, 0.999952018, 0.996717453}, + {5.741667, 0.999952912, 0.996725857}, + {5.745833, 0.999953926, 0.996734262}, + {5.75, 0.999954998, 0.996742666}, + {5.754167, 0.999956131, 0.99675101}, + {5.758333, 0.999957263, 0.996759415}, + {5.7625, 0.999958515, 0.9967677}, + {5.766667, 0.999959826, 0.996776044}, + {5.770833, 0.999961138, 0.996784329}, + {5.775, 0.999962509, 0.996792674}, + {5.779167, 0.999963939, 0.9968009}, + {5.783333, 0.99996537, 0.996809185}, + {5.7875, 0.99996686, 0.99681735}, + {5.791667, 0.99996835, 0.996825576}, + {5.795833, 0.9999699, 0.996833742}, + {5.8, 0.999971449, 0.996841908}, + {5.804167, 0.999972999, 0.996850014}, + {5.808333, 0.999974608, 0.99685812}, + {5.8125, 0.999976218, 0.996866167}, + {5.816667, 0.999977827, 0.996874273}, + {5.820833, 0.999979436, 0.99688226}, + {5.825, 0.999980986, 0.996890247}, + {5.829167, 0.999982595, 0.996898234}, + {5.833333, 0.999984205, 0.996906161}, + {5.8375, 0.999985754, 0.996914029}, + {5.841667, 0.999987304, 0.996921897}, + {5.845833, 0.999988854, 0.996929765}, + {5.85, 0.999990344, 0.996937573}, + {5.854167, 0.999991834, 0.996945322}, + {5.858333, 0.999993324, 0.99695307}, + {5.8625, 0.999994755, 0.996960759}, + {5.866667, 0.999996126, 0.996968508}, + {5.870833, 0.999997497, 0.996976137}, + {5.875, 0.999998748, 0.996983767}, + {5.879167, 1, 0.996991277}, + {5.883333, 1.000001311, 0.996998847}, + {5.8875, 1.000002384, 0.997006357}, + {5.891667, 1.000003576, 0.997013867}, + {5.895833, 1.000004649, 0.997021258}, + {5.9, 1.000005603, 0.997028708}, + {5.904167, 1.000006557, 0.99703604}, + {5.908333, 1.00000751, 0.997043431}, + {5.9125, 1.000008345, 0.997050703}, + {5.916667, 1.00000906, 0.997057974}, + {5.920833, 1.000009775, 0.997065246}, + {5.925, 1.00001049, 0.997072458}, + {5.929167, 1.000011086, 0.997079611}, + {5.933333, 1.000011563, 0.997086763}, + {5.9375, 1.00001204, 0.997093856}, + {5.941667, 1.000012398, 0.997100949}, + {5.945833, 1.000012755, 0.997107983}, + {5.95, 1.000012994, 0.997115016}, + {5.954167, 1.000013232, 0.99712199}, + {5.958333, 1.000013351, 0.997128963}, + {5.9625, 1.000013351, 0.997135878}, + {5.966667, 1.000013471, 0.997142792}, + {5.970833, 1.000013351, 0.997149646}, + {5.975, 1.000013232, 0.997156501}, + {5.979167, 1.000013113, 0.997163296}, + {5.983333, 1.000012875, 0.99717015}, + {5.9875, 1.000012517, 0.997176886}, + {5.991667, 1.000012159, 0.997183621}, + {5.995833, 1.000011802, 0.997190356}, + {6, 1.000011325, 0.997197032}, + {6.004167, 1.000010729, 0.997203708}, + {6.008333, 1.000010252, 0.997210383}, + {6.0125, 1.000009656, 0.997217}, + {6.016667, 1.000008941, 0.997223616}, + {6.020833, 1.000008225, 0.997230172}, + {6.025, 1.00000751, 0.997236729}, + {6.029167, 1.000006676, 0.997243285}, + {6.033333, 1.00000596, 0.997249842}, + {6.0375, 1.000005007, 0.997256339}, + {6.041667, 1.000004172, 0.997262836}, + {6.045833, 1.000003219, 0.997269332}, + {6.05, 1.000002265, 0.99727577}, + {6.054167, 1.000001311, 0.997282207}, + {6.058333, 1.000000358, 0.997288644}, + {6.0625, 0.999999344, 0.997295082}, + {6.066667, 0.999998331, 0.997301519}, + {6.070833, 0.999997258, 0.997307897}, + {6.075, 0.999996245, 0.997314274}, + {6.079167, 0.999995172, 0.997320652}, + {6.083333, 0.999994099, 0.99732703}, + {6.0875, 0.999993026, 0.997333407}, + {6.091667, 0.999992013, 0.997339785}, + {6.095833, 0.99999094, 0.997346103}, + {6.1, 0.999989867, 0.997352421}, + {6.104167, 0.999988794, 0.997358739}, + {6.108333, 0.999987781, 0.997365057}, + {6.1125, 0.999986768, 0.997371376}, + {6.116667, 0.999985754, 0.997377694}, + {6.120833, 0.999984741, 0.997384012}, + {6.125, 0.999983788, 0.99739027}, + {6.129167, 0.999982834, 0.997396588}, + {6.133333, 0.99998188, 0.997402847}, + {6.1375, 0.999980986, 0.997409165}, + {6.141667, 0.999980092, 0.997415423}, + {6.145833, 0.999979258, 0.997421682}, + {6.15, 0.999978423, 0.99742794}, + {6.154167, 0.999977648, 0.997434199}, + {6.158333, 0.999976933, 0.997440457}, + {6.1625, 0.999976218, 0.997446716}, + {6.166667, 0.999975562, 0.997452974}, + {6.170833, 0.999974906, 0.997459233}, + {6.175, 0.99997431, 0.997465432}, + {6.179167, 0.999973774, 0.99747169}, + {6.183333, 0.999973238, 0.997477889}, + {6.1875, 0.999972761, 0.997484148}, + {6.191667, 0.999972343, 0.997490346}, + {6.195833, 0.999971986, 0.997496605}, + {6.2, 0.999971628, 0.997502804}, + {6.204167, 0.99997133, 0.997509003}, + {6.208333, 0.999971092, 0.997515202}, + {6.2125, 0.999970913, 0.9975214}, + {6.216667, 0.999970734, 0.997527599}, + {6.220833, 0.999970615, 0.997533798}, + {6.225, 0.999970555, 0.997539937}, + {6.229167, 0.999970555, 0.997546136}, + {6.233333, 0.999970555, 0.997552276}, + {6.2375, 0.999970615, 0.997558475}, + {6.241667, 0.999970734, 0.997564614}, + {6.245833, 0.999970853, 0.997570753}, + {6.25, 0.999971092, 0.997576892}, + {6.254167, 0.99997133, 0.997583032}, + {6.258333, 0.999971569, 0.997589111}, + {6.2625, 0.999971926, 0.997595251}, + {6.266667, 0.999972284, 0.99760133}, + {6.270833, 0.999972641, 0.99760741}, + {6.275, 0.999973059, 0.99761349}, + {6.279167, 0.999973536, 0.997619569}, + {6.283333, 0.999974012, 0.997625649}, + {6.2875, 0.999974549, 0.997631669}, + {6.291667, 0.999975085, 0.997637689}, + {6.295833, 0.999975681, 0.997643709}, + {6.3, 0.999976277, 0.997649729}, + {6.304167, 0.999976933, 0.997655749}, + {6.308333, 0.999977589, 0.99766171}, + {6.3125, 0.999978244, 0.99766767}, + {6.316667, 0.99997896, 0.997673631}, + {6.320833, 0.999979675, 0.997679532}, + {6.325, 0.99998039, 0.997685492}, + {6.329167, 0.999981165, 0.997691393}, + {6.333333, 0.99998188, 0.997697234}, + {6.3375, 0.999982655, 0.997703135}, + {6.341667, 0.99998343, 0.997708976}, + {6.345833, 0.999984205, 0.997714818}, + {6.35, 0.999985039, 0.997720659}, + {6.354167, 0.999985814, 0.99772644}, + {6.358333, 0.999986589, 0.997732222}, + {6.3625, 0.999987364, 0.997737944}, + {6.366667, 0.999988139, 0.997743726}, + {6.370833, 0.999988973, 0.997749448}, + {6.375, 0.999989748, 0.99775517}, + {6.379167, 0.999990463, 0.997760832}, + {6.383333, 0.999991238, 0.997766495}, + {6.3875, 0.999992013, 0.997772098}, + {6.391667, 0.999992728, 0.99777776}, + {6.395833, 0.999993443, 0.997783363}, + {6.4, 0.999994159, 0.997788966}, + {6.404167, 0.999994814, 0.997794509}, + {6.408333, 0.99999547, 0.997800052}, + {6.4125, 0.999996126, 0.997805536}, + {6.416667, 0.999996781, 0.997811079}, + {6.420833, 0.999997377, 0.997816503}, + {6.425, 0.999997973, 0.997821987}, + {6.429167, 0.99999851, 0.997827411}, + {6.433333, 0.999999046, 0.997832835}, + {6.4375, 0.999999523, 0.997838199}, + {6.441667, 1, 0.997843623}, + {6.445833, 1.000000477, 0.997848928}, + {6.45, 1.000000834, 0.997854292}, + {6.454167, 1.000001192, 0.997859597}, + {6.458333, 1.00000155, 0.997864902}, + {6.4625, 1.000001907, 0.997870147}, + {6.466667, 1.000002265, 0.997875392}, + {6.470833, 1.000002503, 0.997880638}, + {6.475, 1.000002742, 0.997885823}, + {6.479167, 1.000002861, 0.997891009}, + {6.483333, 1.000003099, 0.997896194}, + {6.4875, 1.000003219, 0.99790132}, + {6.491667, 1.000003338, 0.997906446}, + {6.495833, 1.000003457, 0.997911572}, + {6.5, 1.000003457, 0.997916639}, + {6.504167, 1.000003457, 0.997921705}, + {6.508333, 1.000003457, 0.997926772}, + {6.5125, 1.000003338, 0.997931838}, + {6.516667, 1.000003338, 0.997936845}, + {6.520833, 1.000003219, 0.997941852}, + {6.525, 1.000003099, 0.997946858}, + {6.529167, 1.000002861, 0.997951806}, + {6.533333, 1.000002742, 0.997956753}, + {6.5375, 1.000002503, 0.9979617}, + {6.541667, 1.000002265, 0.997966647}, + {6.545833, 1.000002027, 0.997971535}, + {6.55, 1.000001669, 0.997976422}, + {6.554167, 1.000001311, 0.99798131}, + {6.558333, 1.000001073, 0.997986197}, + {6.5625, 1.000000715, 0.997991025}, + {6.566667, 1.000000238, 0.997995913}, + {6.570833, 0.999999881, 0.998000741}, + {6.575, 0.999999523, 0.998005509}, + {6.579167, 0.999999046, 0.998010337}, + {6.583333, 0.999998629, 0.998015106}, + {6.5875, 0.999998152, 0.998019934}, + {6.591667, 0.999997735, 0.998024702}, + {6.595833, 0.999997258, 0.998029411}, + {6.6, 0.999996781, 0.998034179}, + {6.604167, 0.999996245, 0.998038948}, + {6.608333, 0.999995768, 0.998043656}, + {6.6125, 0.999995232, 0.998048365}, + {6.616667, 0.999994755, 0.998053074}, + {6.620833, 0.999994218, 0.998057783}, + {6.625, 0.999993742, 0.998062491}, + {6.629167, 0.999993205, 0.998067141}, + {6.633333, 0.999992728, 0.998071849}, + {6.6375, 0.999992192, 0.998076499}, + {6.641667, 0.999991715, 0.998081207}, + {6.645833, 0.999991179, 0.998085856}, + {6.65, 0.999990702, 0.998090506}, + {6.654167, 0.999990225, 0.998095095}, + {6.658333, 0.999989748, 0.998099744}, + {6.6625, 0.999989271, 0.998104393}, + {6.666667, 0.999988794, 0.998108983}, + {6.670833, 0.999988377, 0.998113632}, + {6.675, 0.99998796, 0.998118222}, + {6.679167, 0.999987543, 0.998122811}, + {6.683333, 0.999987125, 0.998127401}, + {6.6875, 0.999986708, 0.99813199}, + {6.691667, 0.999986351, 0.99813658}, + {6.695833, 0.999985993, 0.99814117}, + {6.7, 0.999985635, 0.998145759}, + {6.704167, 0.999985337, 0.998150289}, + {6.708333, 0.999985039, 0.998154879}, + {6.7125, 0.999984741, 0.998159409}, + {6.716667, 0.999984503, 0.998163998}, + {6.720833, 0.999984264, 0.998168528}, + {6.725, 0.999984026, 0.998173058}, + {6.729167, 0.999983847, 0.998177588}, + {6.733333, 0.999983668, 0.998182118}, + {6.7375, 0.99998349, 0.998186648}, + {6.741667, 0.99998337, 0.998191178}, + {6.745833, 0.999983251, 0.998195648}, + {6.75, 0.999983132, 0.998200178}, + {6.754167, 0.999983072, 0.998204648}, + {6.758333, 0.999983072, 0.998209178}, + {6.7625, 0.999983013, 0.998213649}, + {6.766667, 0.999983013, 0.998218119}, + {6.770833, 0.999983013, 0.998222589}, + {6.775, 0.999983072, 0.99822706}, + {6.779167, 0.999983132, 0.99823153}, + {6.783333, 0.999983251, 0.998235941}, + {6.7875, 0.999983311, 0.998240411}, + {6.791667, 0.99998343, 0.998244822}, + {6.795833, 0.999983609, 0.998249233}, + {6.8, 0.999983728, 0.998253644}, + {6.804167, 0.999983907, 0.998258054}, + {6.808333, 0.999984145, 0.998262465}, + {6.8125, 0.999984324, 0.998266876}, + {6.816667, 0.999984562, 0.998271227}, + {6.820833, 0.999984801, 0.998275638}, + {6.825, 0.999985099, 0.998279989}, + {6.829167, 0.999985337, 0.99828434}, + {6.833333, 0.999985635, 0.998288691}, + {6.8375, 0.999985933, 0.998292983}, + {6.841667, 0.999986291, 0.998297334}, + {6.845833, 0.999986589, 0.998301625}, + {6.85, 0.999986947, 0.998305976}, + {6.854167, 0.999987304, 0.998310208}, + {6.858333, 0.999987662, 0.9983145}, + {6.8625, 0.999988019, 0.998318791}, + {6.866667, 0.999988377, 0.998323023}, + {6.870833, 0.999988735, 0.998327315}, + {6.875, 0.999989152, 0.998331547}, + {6.879167, 0.99998951, 0.998335719}, + {6.883333, 0.999989927, 0.998339951}, + {6.8875, 0.999990284, 0.998344183}, + {6.891667, 0.999990702, 0.998348355}, + {6.895833, 0.999991059, 0.998352528}, + {6.9, 0.999991477, 0.9983567}, + {6.904167, 0.999991834, 0.998360813}, + {6.908333, 0.999992251, 0.998364985}, + {6.9125, 0.999992609, 0.998369098}, + {6.916667, 0.999993026, 0.99837321}, + {6.920833, 0.999993384, 0.998377264}, + {6.925, 0.999993742, 0.998381376}, + {6.929167, 0.999994099, 0.998385429}, + {6.933333, 0.999994457, 0.998389482}, + {6.9375, 0.999994814, 0.998393536}, + {6.941667, 0.999995172, 0.998397589}, + {6.945833, 0.99999547, 0.998401582}, + {6.95, 0.999995768, 0.998405576}, + {6.954167, 0.999996126, 0.998409569}, + {6.958333, 0.999996424, 0.998413563}, + {6.9625, 0.999996662, 0.998417497}, + {6.966667, 0.99999696, 0.99842149}, + {6.970833, 0.999997199, 0.998425424}, + {6.975, 0.999997497, 0.998429298}, + {6.979167, 0.999997735, 0.998433232}, + {6.983333, 0.999997914, 0.998437107}, + {6.9875, 0.999998152, 0.998440981}, + {6.991667, 0.999998331, 0.998444855}, + {6.995833, 0.99999851, 0.99844873}, + {7, 0.999998689, 0.998452544}, + {7.004167, 0.999998808, 0.998456359}, + {7.008333, 0.999998927, 0.998460233}, + {7.0125, 0.999999046, 0.998463988}, + {7.016667, 0.999999166, 0.998467803}, + {7.020833, 0.999999225, 0.998471558}, + {7.025, 0.999999344, 0.998475313}, + {7.029167, 0.999999404, 0.998479068}, + {7.033333, 0.999999404, 0.998482823}, + {7.0375, 0.999999464, 0.998486519}, + {7.041667, 0.999999464, 0.998490274}, + {7.045833, 0.999999464, 0.998493969}, + {7.05, 0.999999404, 0.998497665}, + {7.054167, 0.999999404, 0.99850136}, + {7.058333, 0.999999344, 0.998504996}, + {7.0625, 0.999999285, 0.998508692}, + {7.066667, 0.999999225, 0.998512328}, + {7.070833, 0.999999106, 0.998515964}, + {7.075, 0.999998987, 0.998519599}, + {7.079167, 0.999998868, 0.998523176}, + {7.083333, 0.999998748, 0.998526812}, + {7.0875, 0.999998629, 0.998530388}, + {7.091667, 0.99999845, 0.998533964}, + {7.095833, 0.999998331, 0.99853754}, + {7.1, 0.999998152, 0.998541117}, + {7.104167, 0.999997973, 0.998544693}, + {7.108333, 0.999997795, 0.99854821}, + {7.1125, 0.999997616, 0.998551726}, + {7.116667, 0.999997377, 0.998555303}, + {7.120833, 0.999997199, 0.998558819}, + {7.125, 0.99999696, 0.998562336}, + {7.129167, 0.999996722, 0.998565793}, + {7.133333, 0.999996483, 0.99856931}, + {7.1375, 0.999996305, 0.998572826}, + {7.141667, 0.999996066, 0.998576283}, + {7.145833, 0.999995828, 0.998579741}, + {7.15, 0.999995589, 0.998583198}, + {7.154167, 0.999995351, 0.998586655}, + {7.158333, 0.999995053, 0.998590112}, + {7.1625, 0.999994814, 0.998593569}, + {7.166667, 0.999994576, 0.998597026}, + {7.170833, 0.999994338, 0.998600423}, + {7.175, 0.999994099, 0.99860388}, + {7.179167, 0.999993861, 0.998607278}, + {7.183333, 0.999993622, 0.998610675}, + {7.1875, 0.999993384, 0.998614073}, + {7.191667, 0.999993145, 0.99861753}, + {7.195833, 0.999992907, 0.998620868}, + {7.2, 0.999992728, 0.998624265}, + {7.204167, 0.99999249, 0.998627663}, + {7.208333, 0.999992311, 0.99863106}, + {7.2125, 0.999992073, 0.998634398}, + {7.216667, 0.999991894, 0.998637795}, + {7.220833, 0.999991715, 0.998641133}, + {7.225, 0.999991536, 0.998644471}, + {7.229167, 0.999991357, 0.998647809}, + {7.233333, 0.999991179, 0.998651147}, + {7.2375, 0.999991, 0.998654485}, + {7.241667, 0.99999088, 0.998657823}, + {7.245833, 0.999990702, 0.99866116}, + {7.25, 0.999990582, 0.998664498}, + {7.254167, 0.999990463, 0.998667777}, + {7.258333, 0.999990344, 0.998671114}, + {7.2625, 0.999990225, 0.998674393}, + {7.266667, 0.999990165, 0.998677671}, + {7.270833, 0.999990106, 0.998681009}, + {7.275, 0.999989986, 0.998684287}, + {7.279167, 0.999989927, 0.998687565}, + {7.283333, 0.999989927, 0.998690844}, + {7.2875, 0.999989867, 0.998694062}, + {7.291667, 0.999989867, 0.99869734}, + {7.295833, 0.999989808, 0.998700619}, + {7.3, 0.999989808, 0.998703837}, + {7.304167, 0.999989808, 0.998707116}, + {7.308333, 0.999989867, 0.998710334}, + {7.3125, 0.999989867, 0.998713553}, + {7.316667, 0.999989927, 0.998716831}, + {7.320833, 0.999989927, 0.99872005}, + {7.325, 0.999989986, 0.998723269}, + {7.329167, 0.999990046, 0.998726428}, + {7.333333, 0.999990165, 0.998729646}, + {7.3375, 0.999990225, 0.998732865}, + {7.341667, 0.999990344, 0.998736024}, + {7.345833, 0.999990404, 0.998739183}, + {7.35, 0.999990523, 0.998742402}, + {7.354167, 0.999990642, 0.998745561}, + {7.358333, 0.999990761, 0.99874872}, + {7.3625, 0.99999094, 0.998751879}, + {7.366667, 0.999991059, 0.998755038}, + {7.370833, 0.999991238, 0.998758137}, + {7.375, 0.999991357, 0.998761296}, + {7.379167, 0.999991536, 0.998764396}, + {7.383333, 0.999991715, 0.998767495}, + {7.3875, 0.999991834, 0.998770654}, + {7.391667, 0.999992013, 0.998773754}, + {7.395833, 0.999992192, 0.998776793}, + {7.4, 0.999992371, 0.998779893}, + {7.404167, 0.999992549, 0.998782992}, + {7.408333, 0.999992788, 0.998786032}, + {7.4125, 0.999992967, 0.998789132}, + {7.416667, 0.999993145, 0.998792171}, + {7.420833, 0.999993324, 0.998795211}, + {7.425, 0.999993563, 0.998798251}, + {7.429167, 0.999993742, 0.998801291}, + {7.433333, 0.99999392, 0.998804271}, + {7.4375, 0.999994099, 0.998807311}, + {7.441667, 0.999994338, 0.998810291}, + {7.445833, 0.999994516, 0.998813272}, + {7.45, 0.999994695, 0.998816252}, + {7.454167, 0.999994874, 0.998819232}, + {7.458333, 0.999995053, 0.998822212}, + {7.4625, 0.999995232, 0.998825133}, + {7.466667, 0.99999541, 0.998828113}, + {7.470833, 0.999995589, 0.998831034}, + {7.475, 0.999995768, 0.998833954}, + {7.479167, 0.999995947, 0.998836875}, + {7.483333, 0.999996126, 0.998839796}, + {7.4875, 0.999996305, 0.998842716}, + {7.491667, 0.999996424, 0.998845577}, + {7.495833, 0.999996603, 0.998848498}, + {7.5, 0.999996722, 0.998851359}, + {7.504167, 0.999996841, 0.99885422}, + {7.508333, 0.99999696, 0.998857081}, + {7.5125, 0.999997139, 0.998859942}, + {7.516667, 0.999997258, 0.998862803}, + {7.520833, 0.999997318, 0.998865604}, + {7.525, 0.999997437, 0.998868406}, + {7.529167, 0.999997556, 0.998871207}, + {7.533333, 0.999997616, 0.998874068}, + {7.5375, 0.999997735, 0.99887681}, + {7.541667, 0.999997795, 0.998879611}, + {7.545833, 0.999997854, 0.998882413}, + {7.55, 0.999997914, 0.998885155}, + {7.554167, 0.999997973, 0.998887956}, + {7.558333, 0.999998033, 0.998890698}, + {7.5625, 0.999998033, 0.99889344}, + {7.566667, 0.999998093, 0.998896182}, + {7.570833, 0.999998093, 0.998898864}, + {7.575, 0.999998093, 0.998901606}, + {7.579167, 0.999998093, 0.998904347}, + {7.583333, 0.999998093, 0.99890703}, + {7.5875, 0.999998093, 0.998909712}, + {7.591667, 0.999998093, 0.998912394}, + {7.595833, 0.999998093, 0.998915076}, + {7.6, 0.999998033, 0.998917758}, + {7.604167, 0.999998033, 0.998920441}, + {7.608333, 0.999997973, 0.998923063}, + {7.6125, 0.999997914, 0.998925745}, + {7.616667, 0.999997854, 0.998928368}, + {7.620833, 0.999997795, 0.998930991}, + {7.625, 0.999997735, 0.998933613}, + {7.629167, 0.999997675, 0.998936236}, + {7.633333, 0.999997616, 0.998938859}, + {7.6375, 0.999997497, 0.998941481}, + {7.641667, 0.999997437, 0.998944104}, + {7.645833, 0.999997318, 0.998946667}, + {7.65, 0.999997258, 0.998949289}, + {7.654167, 0.999997139, 0.998951852}, + {7.658333, 0.999997079, 0.998954415}, + {7.6625, 0.99999696, 0.998956978}, + {7.666667, 0.999996841, 0.998959541}, + {7.670833, 0.999996722, 0.998962104}, + {7.675, 0.999996662, 0.998964667}, + {7.679167, 0.999996543, 0.99896723}, + {7.683333, 0.999996424, 0.998969734}, + {7.6875, 0.999996305, 0.998972297}, + {7.691667, 0.999996185, 0.9989748}, + {7.695833, 0.999996066, 0.998977304}, + {7.7, 0.999995947, 0.998979867}, + {7.704167, 0.999995828, 0.99898237}, + {7.708333, 0.999995708, 0.998984873}, + {7.7125, 0.999995589, 0.998987377}, + {7.716667, 0.99999547, 0.99898988}, + {7.720833, 0.99999541, 0.998992324}, + {7.725, 0.999995291, 0.998994827}, + {7.729167, 0.999995172, 0.998997331}, + {7.733333, 0.999995053, 0.998999774}, + {7.7375, 0.999994934, 0.999002278}, + {7.741667, 0.999994874, 0.999004722}, + {7.745833, 0.999994755, 0.999007165}, + {7.75, 0.999994636, 0.999009669}, + {7.754167, 0.999994576, 0.999012113}, + {7.758333, 0.999994457, 0.999014556}, + {7.7625, 0.999994397, 0.999017}, + {7.766667, 0.999994338, 0.999019444}, + {7.770833, 0.999994218, 0.999021828}, + {7.775, 0.999994159, 0.999024272}, + {7.779167, 0.999994099, 0.999026716}, + {7.783333, 0.99999404, 0.9990291}, + {7.7875, 0.99999398, 0.999031544}, + {7.791667, 0.99999392, 0.999033928}, + {7.795833, 0.999993861, 0.999036372}, + {7.8, 0.999993801, 0.999038756}, + {7.804167, 0.999993801, 0.99904114}, + {7.808333, 0.999993742, 0.999043524}, + {7.8125, 0.999993742, 0.999045908}, + {7.816667, 0.999993682, 0.999048293}, + {7.820833, 0.999993682, 0.999050677}, + {7.825, 0.999993682, 0.999053061}, + {7.829167, 0.999993682, 0.999055445}, + {7.833333, 0.999993682, 0.99905777}, + {7.8375, 0.999993682, 0.999060154}, + {7.841667, 0.999993682, 0.999062479}, + {7.845833, 0.999993682, 0.999064863}, + {7.85, 0.999993682, 0.999067187}, + {7.854167, 0.999993742, 0.999069512}, + {7.858333, 0.999993742, 0.999071836}, + {7.8625, 0.999993801, 0.999074161}, + {7.866667, 0.999993801, 0.999076486}, + {7.870833, 0.999993861, 0.99907881}, + {7.875, 0.99999392, 0.999081135}, + {7.879167, 0.99999398, 0.999083459}, + {7.883333, 0.99999398, 0.999085724}, + {7.8875, 0.99999404, 0.999088049}, + {7.891667, 0.999994099, 0.999090314}, + {7.895833, 0.999994218, 0.999092638}, + {7.9, 0.999994278, 0.999094903}, + {7.904167, 0.999994338, 0.999097168}, + {7.908333, 0.999994397, 0.999099433}, + {7.9125, 0.999994516, 0.999101698}, + {7.916667, 0.999994576, 0.999103963}, + {7.920833, 0.999994636, 0.999106228}, + {7.925, 0.999994755, 0.999108434}, + {7.929167, 0.999994814, 0.999110699}, + {7.933333, 0.999994934, 0.999112964}, + {7.9375, 0.999994993, 0.999115169}, + {7.941667, 0.999995112, 0.999117374}, + {7.945833, 0.999995232, 0.999119639}, + {7.95, 0.999995291, 0.999121845}, + {7.954167, 0.99999541, 0.99912405}, + {7.958333, 0.99999547, 0.999126256}, + {7.9625, 0.999995589, 0.999128401}, + {7.966667, 0.999995708, 0.999130607}, + {7.970833, 0.999995768, 0.999132812}, + {7.975, 0.999995887, 0.999134958}, + {7.979167, 0.999996006, 0.999137163}, + {7.983333, 0.999996066, 0.999139309}, + {7.9875, 0.999996185, 0.999141455}, + {7.991667, 0.999996245, 0.99914366}, + {7.995833, 0.999996364, 0.999145746}, + {8, 0.999996483, 0.999147892}, + {8.004167, 0.999996543, 0.999150038}, + {8.008333, 0.999996662, 0.999152184}, + {8.0125, 0.999996722, 0.999154329}, + {8.016667, 0.999996781, 0.999156415}, + {8.020833, 0.999996901, 0.999158502}, + {8.025, 0.99999696, 0.999160647}, + {8.029167, 0.99999702, 0.999162734}, + {8.033333, 0.999997139, 0.99916482}, + {8.0375, 0.999997199, 0.999166906}, + {8.041667, 0.999997258, 0.999168992}, + {8.045833, 0.999997318, 0.999171078}, + {8.05, 0.999997377, 0.999173105}, + {8.054167, 0.999997437, 0.999175191}, + {8.058333, 0.999997497, 0.999177277}, + {8.0625, 0.999997556, 0.999179304}, + {8.066667, 0.999997616, 0.99918133}, + {8.070833, 0.999997675, 0.999183357}, + {8.075, 0.999997675, 0.999185443}, + {8.079167, 0.999997735, 0.99918741}, + {8.083333, 0.999997795, 0.999189436}, + {8.0875, 0.999997795, 0.999191463}, + {8.091667, 0.999997854, 0.99919349}, + {8.095833, 0.999997854, 0.999195457}, + {8.1, 0.999997854, 0.999197483}, + {8.104167, 0.999997914, 0.99919945}, + {8.108333, 0.999997914, 0.999201477}, + {8.1125, 0.999997914, 0.999203444}, + {8.116667, 0.999997914, 0.99920541}, + {8.120833, 0.999997914, 0.999207377}, + {8.125, 0.999997914, 0.999209344}, + {8.129167, 0.999997914, 0.999211311}, + {8.133333, 0.999997914, 0.999213278}, + {8.1375, 0.999997914, 0.999215186}, + {8.141667, 0.999997854, 0.999217153}, + {8.145833, 0.999997854, 0.99921906}, + {8.15, 0.999997854, 0.999221027}, + {8.154167, 0.999997795, 0.999222934}, + {8.158333, 0.999997795, 0.999224842}, + {8.1625, 0.999997735, 0.999226749}, + {8.166667, 0.999997735, 0.999228716}, + {8.170833, 0.999997675, 0.999230564}, + {8.175, 0.999997675, 0.999232471}, + {8.179167, 0.999997616, 0.999234378}, + {8.183333, 0.999997556, 0.999236286}, + {8.1875, 0.999997556, 0.999238193}, + {8.191667, 0.999997497, 0.999240041}, + {8.195833, 0.999997437, 0.999241948}, + {8.2, 0.999997377, 0.999243796}, + {8.204167, 0.999997318, 0.999245644}, + {8.208333, 0.999997318, 0.999247551}, + {8.2125, 0.999997258, 0.999249399}, + {8.216667, 0.999997199, 0.999251246}, + {8.220833, 0.999997139, 0.999253094}, + {8.225, 0.999997079, 0.999254942}, + {8.229167, 0.99999702, 0.99925679}, + {8.233333, 0.99999696, 0.999258637}, + {8.2375, 0.999996901, 0.999260485}, + {8.241667, 0.999996901, 0.999262273}, + {8.245833, 0.999996841, 0.999264121}, + {8.25, 0.999996781, 0.999265969}, + {8.254167, 0.999996722, 0.999267757}, + {8.258333, 0.999996662, 0.999269605}, + {8.2625, 0.999996603, 0.999271393}, + {8.266667, 0.999996543, 0.999273181}, + {8.270833, 0.999996483, 0.999274969}, + {8.275, 0.999996483, 0.999276817}, + {8.279167, 0.999996424, 0.999278605}, + {8.283333, 0.999996364, 0.999280393}, + {8.2875, 0.999996305, 0.999282181}, + {8.291667, 0.999996305, 0.999283969}, + {8.295833, 0.999996245, 0.999285758}, + {8.3, 0.999996185, 0.999287486}, + {8.304167, 0.999996185, 0.999289274}, + {8.308333, 0.999996126, 0.999291062}, + {8.3125, 0.999996126, 0.999292791}, + {8.316667, 0.999996066, 0.999294579}, + {8.320833, 0.999996066, 0.999296308}, + {8.325, 0.999996006, 0.999298096}, + {8.329167, 0.999996006, 0.999299824}, + {8.333333, 0.999996006, 0.999301553}, + {8.3375, 0.999995947, 0.999303341}, + {8.341667, 0.999995947, 0.999305069}, + {8.345833, 0.999995947, 0.999306798}, + {8.35, 0.999995947, 0.999308527}, + {8.354167, 0.999995887, 0.999310255}, + {8.358333, 0.999995887, 0.999311984}, + {8.3625, 0.999995887, 0.999313712}, + {8.366667, 0.999995887, 0.999315381}, + {8.370833, 0.999995887, 0.99931711}, + {8.375, 0.999995887, 0.999318838}, + {8.379167, 0.999995887, 0.999320507}, + {8.383333, 0.999995947, 0.999322236}, + {8.3875, 0.999995947, 0.999323905}, + {8.391667, 0.999995947, 0.999325633}, + {8.395833, 0.999995947, 0.999327302}, + {8.4, 0.999996006, 0.999329031}, + {8.404167, 0.999996006, 0.999330699}, + {8.408333, 0.999996006, 0.999332368}, + {8.4125, 0.999996066, 0.999334037}, + {8.416667, 0.999996066, 0.999335706}, + {8.420833, 0.999996126, 0.999337375}, + {8.425, 0.999996126, 0.999339044}, + {8.429167, 0.999996185, 0.999340713}, + {8.433333, 0.999996185, 0.999342322}, + {8.4375, 0.999996245, 0.999343991}, + {8.441667, 0.999996305, 0.99934566}, + {8.445833, 0.999996305, 0.99934727}, + {8.45, 0.999996364, 0.999348938}, + {8.454167, 0.999996424, 0.999350548}, + {8.458333, 0.999996483, 0.999352217}, + {8.4625, 0.999996483, 0.999353826}, + {8.466667, 0.999996543, 0.999355435}, + {8.470833, 0.999996603, 0.999357045}, + {8.475, 0.999996662, 0.999358654}, + {8.479167, 0.999996662, 0.999360263}, + {8.483333, 0.999996722, 0.999361873}, + {8.4875, 0.999996781, 0.999363482}, + {8.491667, 0.999996841, 0.999365091}, + {8.495833, 0.999996901, 0.999366701}, + {8.5, 0.99999696, 0.99936825}, + {8.504167, 0.99999696, 0.99936986}, + {8.508333, 0.99999702, 0.999371409}, + {8.5125, 0.999997079, 0.999373019}, + {8.516667, 0.999997139, 0.999374568}, + {8.520833, 0.999997199, 0.999376178}, + {8.525, 0.999997258, 0.999377728}, + {8.529167, 0.999997258, 0.999379277}, + {8.533333, 0.999997318, 0.999380827}, + {8.5375, 0.999997377, 0.999382377}, + {8.541667, 0.999997437, 0.999383926}, + {8.545833, 0.999997497, 0.999385476}, + {8.55, 0.999997497, 0.999387026}, + {8.554167, 0.999997556, 0.999388516}, + {8.558333, 0.999997616, 0.999390066}, + {8.5625, 0.999997616, 0.999391615}, + {8.566667, 0.999997675, 0.999393106}, + {8.570833, 0.999997735, 0.999394655}, + {8.575, 0.999997735, 0.999396145}, + {8.579167, 0.999997795, 0.999397635}, + {8.583333, 0.999997795, 0.999399185}, + {8.5875, 0.999997854, 0.999400675}, + {8.591667, 0.999997914, 0.999402165}, + {8.595833, 0.999997914, 0.999403656}, + {8.6, 0.999997914, 0.999405146}, + {8.604167, 0.999997973, 0.999406636}, + {8.608333, 0.999997973, 0.999408126}, + {8.6125, 0.999998033, 0.999409556}, + {8.616667, 0.999998033, 0.999411047}, + {8.620833, 0.999998033, 0.999412537}, + {8.625, 0.999998093, 0.999413967}, + {8.629167, 0.999998093, 0.999415457}, + {8.633333, 0.999998093, 0.999416888}, + {8.6375, 0.999998093, 0.999418318}, + {8.641667, 0.999998093, 0.999419808}, + {8.645833, 0.999998152, 0.999421239}, + {8.65, 0.999998152, 0.999422669}, + {8.654167, 0.999998152, 0.9994241}, + {8.658333, 0.999998152, 0.99942553}, + {8.6625, 0.999998152, 0.999426961}, + {8.666667, 0.999998152, 0.999428391}, + {8.670833, 0.999998152, 0.999429822}, + {8.675, 0.999998152, 0.999431252}, + {8.679167, 0.999998152, 0.999432623}, + {8.683333, 0.999998093, 0.999434054}, + {8.6875, 0.999998093, 0.999435425}, + {8.691667, 0.999998093, 0.999436855}, + {8.695833, 0.999998093, 0.999438226}, + {8.7, 0.999998093, 0.999439657}, + {8.704167, 0.999998033, 0.999441028}, + {8.708333, 0.999998033, 0.999442399}, + {8.7125, 0.999998033, 0.999443829}, + {8.716667, 0.999998033, 0.9994452}, + {8.720833, 0.999997973, 0.999446571}, + {8.725, 0.999997973, 0.999447942}, + {8.729167, 0.999997973, 0.999449313}, + {8.733333, 0.999997914, 0.999450684}, + {8.7375, 0.999997914, 0.999452055}, + {8.741667, 0.999997914, 0.999453425}, + {8.745833, 0.999997854, 0.999454737}, + {8.75, 0.999997854, 0.999456108}, + {8.754167, 0.999997795, 0.999457479}, + {8.758333, 0.999997795, 0.99945879}, + {8.7625, 0.999997795, 0.999460161}, + {8.766667, 0.999997735, 0.999461472}, + {8.770833, 0.999997735, 0.999462843}, + {8.775, 0.999997675, 0.999464154}, + {8.779167, 0.999997675, 0.999465525}, + {8.783333, 0.999997675, 0.999466836}, + {8.7875, 0.999997616, 0.999468148}, + {8.791667, 0.999997616, 0.999469459}, + {8.795833, 0.999997616, 0.99947077}, + {8.8, 0.999997556, 0.999472082}, + {8.804167, 0.999997556, 0.999473393}, + {8.808333, 0.999997497, 0.999474704}, + {8.8125, 0.999997497, 0.999476016}, + {8.816667, 0.999997497, 0.999477327}, + {8.820833, 0.999997437, 0.999478638}, + {8.825, 0.999997437, 0.999479949}, + {8.829167, 0.999997437, 0.999481261}, + {8.833333, 0.999997377, 0.999482512}, + {8.8375, 0.999997377, 0.999483824}, + {8.841667, 0.999997377, 0.999485135}, + {8.845833, 0.999997377, 0.999486387}, + {8.85, 0.999997318, 0.999487698}, + {8.854167, 0.999997318, 0.99948895}, + {8.858333, 0.999997318, 0.999490201}, + {8.8625, 0.999997318, 0.999491513}, + {8.866667, 0.999997318, 0.999492764}, + {8.870833, 0.999997318, 0.999494016}, + {8.875, 0.999997258, 0.999495268}, + {8.879167, 0.999997258, 0.999496579}, + {8.883333, 0.999997258, 0.999497831}, + {8.8875, 0.999997258, 0.999499083}, + {8.891667, 0.999997258, 0.999500334}, + {8.895833, 0.999997258, 0.999501586}, + {8.9, 0.999997258, 0.999502838}, + {8.904167, 0.999997258, 0.999504089}, + {8.908333, 0.999997258, 0.999505281}, + {8.9125, 0.999997258, 0.999506533}, + {8.916667, 0.999997258, 0.999507785}, + {8.920833, 0.999997318, 0.999509037}, + {8.925, 0.999997318, 0.999510229}, + {8.929167, 0.999997318, 0.99951148}, + {8.933333, 0.999997318, 0.999512672}, + {8.9375, 0.999997318, 0.999513924}, + {8.941667, 0.999997318, 0.999515116}, + {8.945833, 0.999997377, 0.999516368}, + {8.95, 0.999997377, 0.99951756}, + {8.954167, 0.999997377, 0.999518752}, + {8.958333, 0.999997377, 0.999520004}, + {8.9625, 0.999997437, 0.999521196}, + {8.966667, 0.999997437, 0.999522388}, + {8.970833, 0.999997437, 0.99952358}, + {8.975, 0.999997497, 0.999524772}, + {8.979167, 0.999997497, 0.999525964}, + {8.983333, 0.999997497, 0.999527156}, + {8.9875, 0.999997556, 0.999528348}, + {8.991667, 0.999997556, 0.999529541}, + {8.995833, 0.999997616, 0.999530733}, + {9, 0.999997616, 0.999531865}, + {9.004167, 0.999997616, 0.999533057}, + {9.008333, 0.999997675, 0.999534249}, + {9.0125, 0.999997675, 0.999535382}, + {9.016667, 0.999997735, 0.999536574}, + {9.020833, 0.999997735, 0.999537706}, + {9.025, 0.999997735, 0.999538898}, + {9.029167, 0.999997795, 0.999540031}, + {9.033333, 0.999997795, 0.999541223}, + {9.0375, 0.999997854, 0.999542356}, + {9.041667, 0.999997854, 0.999543488}, + {9.045833, 0.999997914, 0.999544621}, + {9.05, 0.999997914, 0.999545753}, + {9.054167, 0.999997973, 0.999546945}, + {9.058333, 0.999997973, 0.999548078}, + {9.0625, 0.999997973, 0.99954921}, + {9.066667, 0.999998033, 0.999550343}, + {9.070833, 0.999998033, 0.999551415}, + {9.075, 0.999998093, 0.999552548}, + {9.079167, 0.999998093, 0.99955368}, + {9.083333, 0.999998093, 0.999554813}, + {9.0875, 0.999998152, 0.999555945}, + {9.091667, 0.999998152, 0.999557018}, + {9.095833, 0.999998212, 0.999558151}, + {9.1, 0.999998212, 0.999559224}, + {9.104167, 0.999998212, 0.999560356}, + {9.108333, 0.999998271, 0.999561429}, + {9.1125, 0.999998271, 0.999562562}, + {9.116667, 0.999998271, 0.999563634}, + {9.120833, 0.999998331, 0.999564707}, + {9.125, 0.999998331, 0.99956584}, + {9.129167, 0.999998331, 0.999566913}, + {9.133333, 0.999998331, 0.999567986}, + {9.1375, 0.999998391, 0.999569058}, + {9.141667, 0.999998391, 0.999570131}, + {9.145833, 0.999998391, 0.999571204}, + {9.15, 0.999998391, 0.999572277}, + {9.154167, 0.999998391, 0.99957335}, + {9.158333, 0.99999845, 0.999574423}, + {9.1625, 0.99999845, 0.999575496}, + {9.166667, 0.99999845, 0.999576569}, + {9.170833, 0.99999845, 0.999577582}, + {9.175, 0.99999845, 0.999578655}, + {9.179167, 0.99999845, 0.999579728}, + {9.183333, 0.99999845, 0.999580741}, + {9.1875, 0.99999845, 0.999581814}, + {9.191667, 0.99999845, 0.999582827}, + {9.195833, 0.99999851, 0.9995839}, + {9.2, 0.99999851, 0.999584913}, + {9.204167, 0.99999851, 0.999585927}, + {9.208333, 0.99999851, 0.999586999}, + {9.2125, 0.99999851, 0.999588013}, + {9.216667, 0.99999851, 0.999589026}, + {9.220833, 0.99999845, 0.999590039}, + {9.225, 0.99999845, 0.999591053}, + {9.229167, 0.99999845, 0.999592125}, + {9.233333, 0.99999845, 0.999593139}, + {9.2375, 0.99999845, 0.999594152}, + {9.241667, 0.99999845, 0.999595165}, + {9.245833, 0.99999845, 0.999596119}, + {9.25, 0.99999845, 0.999597132}, + {9.254167, 0.99999845, 0.999598145}, + {9.258333, 0.99999845, 0.999599159}, + {9.2625, 0.99999845, 0.999600172}, + {9.266667, 0.999998391, 0.999601126}, + {9.270833, 0.999998391, 0.999602139}, + {9.275, 0.999998391, 0.999603152}, + {9.279167, 0.999998391, 0.999604106}, + {9.283333, 0.999998391, 0.999605119}, + {9.2875, 0.999998391, 0.999606073}, + {9.291667, 0.999998331, 0.999607086}, + {9.295833, 0.999998331, 0.99960804}, + {9.3, 0.999998331, 0.999609053}, + {9.304167, 0.999998331, 0.999610007}, + {9.308333, 0.999998331, 0.99961096}, + {9.3125, 0.999998331, 0.999611914}, + {9.316667, 0.999998271, 0.999612927}, + {9.320833, 0.999998271, 0.999613881}, + {9.325, 0.999998271, 0.999614835}, + {9.329167, 0.999998271, 0.999615788}, + {9.333333, 0.999998271, 0.999616742}, + {9.3375, 0.999998271, 0.999617696}, + {9.341667, 0.999998212, 0.999618649}, + {9.345833, 0.999998212, 0.999619603}, + {9.35, 0.999998212, 0.999620557}, + {9.354167, 0.999998212, 0.999621511}, + {9.358333, 0.999998212, 0.999622464}, + {9.3625, 0.999998212, 0.999623418}, + {9.366667, 0.999998212, 0.999624312}, + {9.370833, 0.999998152, 0.999625266}, + {9.375, 0.999998152, 0.999626219}, + {9.379167, 0.999998152, 0.999627173}, + {9.383333, 0.999998152, 0.999628067}, + {9.3875, 0.999998152, 0.999629021}, + {9.391667, 0.999998152, 0.999629915}, + {9.395833, 0.999998152, 0.999630868}, + {9.4, 0.999998152, 0.999631763}, + {9.404167, 0.999998152, 0.999632716}, + {9.408333, 0.999998152, 0.99963361}, + {9.4125, 0.999998152, 0.999634564}, + {9.416667, 0.999998152, 0.999635458}, + {9.420833, 0.999998152, 0.999636352}, + {9.425, 0.999998152, 0.999637246}, + {9.429167, 0.999998152, 0.9996382}, + {9.433333, 0.999998152, 0.999639094}, + {9.4375, 0.999998152, 0.999639988}, + {9.441667, 0.999998152, 0.999640882}, + {9.445833, 0.999998152, 0.999641776}, + {9.45, 0.999998152, 0.99964267}, + {9.454167, 0.999998152, 0.999643564}, + {9.458333, 0.999998152, 0.999644458}, + {9.4625, 0.999998152, 0.999645352}, + {9.466667, 0.999998152, 0.999646246}, + {9.470833, 0.999998152, 0.999647141}, + {9.475, 0.999998212, 0.999648035}, + {9.479167, 0.999998212, 0.999648929}, + {9.483333, 0.999998212, 0.999649763}, + {9.4875, 0.999998212, 0.999650657}, + {9.491667, 0.999998212, 0.999651551}, + {9.495833, 0.999998212, 0.999652445}, + {9.5, 0.999998212, 0.99965328}, + {9.504167, 0.999998271, 0.999654174}, + {9.508333, 0.999998271, 0.999655008}, + {9.5125, 0.999998271, 0.999655902}, + {9.516667, 0.999998271, 0.999656737}, + {9.520833, 0.999998271, 0.999657631}, + {9.525, 0.999998331, 0.999658465}, + {9.529167, 0.999998331, 0.999659359}, + {9.533333, 0.999998331, 0.999660194}, + {9.5375, 0.999998331, 0.999661028}, + {9.541667, 0.999998331, 0.999661863}, + {9.545833, 0.999998391, 0.999662757}, + {9.55, 0.999998391, 0.999663591}, + {9.554167, 0.999998391, 0.999664426}, + {9.558333, 0.999998391, 0.99966526}, + {9.5625, 0.99999845, 0.999666095}, + {9.566667, 0.99999845, 0.999666929}, + {9.570833, 0.99999845, 0.999667764}, + {9.575, 0.99999845, 0.999668598}, + {9.579167, 0.99999845, 0.999669433}, + {9.583333, 0.99999851, 0.999670267}, + {9.5875, 0.99999851, 0.999671102}, + {9.591667, 0.99999851, 0.999671936}, + {9.595833, 0.99999851, 0.999672771}, + {9.6, 0.999998569, 0.999673545}, + {9.604167, 0.999998569, 0.99967438}, + {9.608333, 0.999998569, 0.999675214}, + {9.6125, 0.999998569, 0.999676049}, + {9.616667, 0.999998629, 0.999676824}, + {9.620833, 0.999998629, 0.999677658}, + {9.625, 0.999998629, 0.999678433}, + {9.629167, 0.999998629, 0.999679267}, + {9.633333, 0.999998629, 0.999680042}, + {9.6375, 0.999998689, 0.999680877}, + {9.641667, 0.999998689, 0.999681652}, + {9.645833, 0.999998689, 0.999682486}, + {9.65, 0.999998689, 0.999683261}, + {9.654167, 0.999998689, 0.999684036}, + {9.658333, 0.999998689, 0.999684811}, + {9.6625, 0.999998748, 0.999685645}, + {9.666667, 0.999998748, 0.99968642}, + {9.670833, 0.999998748, 0.999687195}, + {9.675, 0.999998748, 0.99968797}, + {9.679167, 0.999998748, 0.999688745}, + {9.683333, 0.999998748, 0.999689519}, + {9.6875, 0.999998748, 0.999690294}, + {9.691667, 0.999998748, 0.999691069}, + {9.695833, 0.999998808, 0.999691844}, + {9.7, 0.999998808, 0.999692619}, + {9.704167, 0.999998808, 0.999693394}, + {9.708333, 0.999998808, 0.999694169}, + {9.7125, 0.999998808, 0.999694943}, + {9.716667, 0.999998808, 0.999695718}, + {9.720833, 0.999998808, 0.999696434}, + {9.725, 0.999998808, 0.999697208}, + {9.729167, 0.999998808, 0.999697983}, + {9.733333, 0.999998808, 0.999698699}, + {9.7375, 0.999998808, 0.999699473}, + {9.741667, 0.999998808, 0.999700248}, + {9.745833, 0.999998808, 0.999700963}, + {9.75, 0.999998808, 0.999701738}, + {9.754167, 0.999998808, 0.999702454}, + {9.758333, 0.999998808, 0.999703228}, + {9.7625, 0.999998808, 0.999703944}, + {9.766667, 0.999998808, 0.999704719}, + {9.770833, 0.999998808, 0.999705434}, + {9.775, 0.999998808, 0.999706149}, + {9.779167, 0.999998808, 0.999706924}, + {9.783333, 0.999998808, 0.999707639}, + {9.7875, 0.999998808, 0.999708354}, + {9.791667, 0.999998808, 0.99970907}, + {9.795833, 0.999998808, 0.999709845}, + {9.8, 0.999998808, 0.99971056}, + {9.804167, 0.999998808, 0.999711275}, + {9.808333, 0.999998808, 0.99971199}, + {9.8125, 0.999998808, 0.999712706}, + {9.816667, 0.999998808, 0.999713421}, + {9.820833, 0.999998808, 0.999714136}, + {9.825, 0.999998808, 0.999714851}, + {9.829167, 0.999998808, 0.999715567}, + {9.833333, 0.999998748, 0.999716282}, + {9.8375, 0.999998748, 0.999716997}, + {9.841667, 0.999998748, 0.999717712}, + {9.845833, 0.999998748, 0.999718368}, + {9.85, 0.999998748, 0.999719083}, + {9.854167, 0.999998748, 0.999719799}, + {9.858333, 0.999998748, 0.999720514}, + {9.8625, 0.999998748, 0.999721169}, + {9.866667, 0.999998748, 0.999721885}, + {9.870833, 0.999998748, 0.9997226}, + {9.875, 0.999998748, 0.999723256}, + {9.879167, 0.999998748, 0.999723971}, + {9.883333, 0.999998748, 0.999724686}, + {9.8875, 0.999998748, 0.999725342}, + {9.891667, 0.999998748, 0.999726057}, + {9.895833, 0.999998748, 0.999726713}, + {9.9, 0.999998689, 0.999727428}, + {9.904167, 0.999998689, 0.999728084}, + {9.908333, 0.999998689, 0.999728799}, + {9.9125, 0.999998689, 0.999729455}, + {9.916667, 0.999998689, 0.99973011}, + {9.920833, 0.999998689, 0.999730825}, + {9.925, 0.999998689, 0.999731481}, + {9.929167, 0.999998689, 0.999732137}, + {9.933333, 0.999998689, 0.999732792}, + {9.9375, 0.999998689, 0.999733508}, + {9.941667, 0.999998689, 0.999734163}, + {9.945833, 0.999998689, 0.999734819}, + {9.95, 0.999998689, 0.999735475}, + {9.954167, 0.999998689, 0.99973613}, + {9.958333, 0.999998689, 0.999736786}, + {9.9625, 0.999998689, 0.999737501}, + {9.966667, 0.999998689, 0.999738157}, + {9.970833, 0.999998689, 0.999738812}, + {9.975, 0.999998689, 0.999739468}, + {9.979167, 0.999998689, 0.999740124}, + {9.983333, 0.999998689, 0.99974072}, + {9.9875, 0.999998689, 0.999741375}, + {9.991667, 0.999998748, 0.999742031}, + {9.995833, 0.999998748, 0.999742687}, + {10, 0.999998748, 0.999743342}}; +} // namespace Example1 diff --git a/examples/PhasorDynamics/Example2/example2.cpp b/examples/PhasorDynamics/Example2/example2.cpp index c7939ead1..a04103ca7 100644 --- a/examples/PhasorDynamics/Example2/example2.cpp +++ b/examples/PhasorDynamics/Example2/example2.cpp @@ -39,7 +39,7 @@ struct OutputData OutputData& operator-=(const OutputData& other) { - assert(t == other.t); + assert(GridKit::Testing::isEqual(t, other.t, Example2::reference_tol)); gen2speed -= other.gen2speed; gen3speed -= other.gen3speed; v2mag -= other.v2mag; @@ -165,11 +165,11 @@ int main() for (index_type i = 0; i < output.size(); ++i) { - OutputData ref{reference_solution[i + 1][0], - reference_solution[i + 1][1], - reference_solution[i + 1][2], - reference_solution[i + 1][4], - reference_solution[i + 1][5]}; + OutputData ref{Example2::reference_solution[i + 1][0], + Example2::reference_solution[i + 1][1], + Example2::reference_solution[i + 1][2], + Example2::reference_solution[i + 1][4], + Example2::reference_solution[i + 1][5]}; OutputData out_data = output[i]; out << out_data << '\n'; diff --git a/examples/PhasorDynamics/Example2/example2.hpp b/examples/PhasorDynamics/Example2/example2.hpp index 19b432eea..adf72f723 100644 --- a/examples/PhasorDynamics/Example2/example2.hpp +++ b/examples/PhasorDynamics/Example2/example2.hpp @@ -9,2405 +9,2409 @@ // Columns: // Time, Gen 2 #1 Speed, Gen 3 #1 Speed, Bus 1 V pu, Bus 2 V pu, Bus 3 V pu -std::vector> reference_solution = { - {0, 1, 1, 1.059999943, 1.059997797, 0.969999611}, - {0.004167, 0.99999994, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, - {0.008333, 0.999999881, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, - {0.0125, 0.999999821, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, - {0.016667, 0.999999762, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.020833, 0.999999702, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.025, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.029167, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, - {0.033333, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.0375, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.041667, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.045833, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.05, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.054167, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.058333, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.0625, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.066667, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.070833, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, - {0.075, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.079167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.083333, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.0875, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.091667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.095833, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.1, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.104167, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.108333, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.1125, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.116667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.120833, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.125, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.129167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.133333, 0.999999464, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, - {0.1375, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.141667, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.145833, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.15, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.154167, 0.999999583, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, - {0.158333, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.1625, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.166667, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.170833, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, - {0.175, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.179167, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.183333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.1875, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.191667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.195833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.2, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.204167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.208333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.2125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.216667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.220833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.225, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.229167, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.233333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.2375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.241667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.245833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.25, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.254167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.258333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.2625, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.266667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.270833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.275, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.279167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.283333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.2875, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.291667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.295833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.3, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.304167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.308333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.3125, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.316667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.320833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.325, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.329167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.333333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.3375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.341667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.345833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.35, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, - {0.354167, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.358333, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.3625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.366667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.370833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.379167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.383333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.3875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.391667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.395833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.4, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.404167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.408333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.4125, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.416667, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.420833, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.425, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.429167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.433333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.4375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.441667, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.445833, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.45, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.454167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.458333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.4625, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.466667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.470833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.475, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.479167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.483333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.4875, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.491667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.495833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.5, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.504167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.508333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.5125, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.516667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.520833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.525, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.529167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.533333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.5375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, - {0.541667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.545833, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.55, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.554167, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.558333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.5625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.566667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.570833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.575, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.579167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.583333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.5875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.591667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.595833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.604167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.608333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.616667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.620833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.629167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.633333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.641667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.645833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.65, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.654167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.658333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.666667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.670833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.675, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.679167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.683333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.6875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.691667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.695833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.704167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.708333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.716667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.720833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.725, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.729167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.733333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.741667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.745833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.75, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.754167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.758333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.766667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.770833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.775, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.779167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.783333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.7875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.791667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.795833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.804167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.808333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.816667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.820833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.825, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.829167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.833333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.841667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.845833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.85, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.854167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.858333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.866667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.870833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.879167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.883333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.8875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.891667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.895833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.904167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.908333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9125, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.916667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.920833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.925, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.929167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.933333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.941667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.945833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.95, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.954167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.958333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.966667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.970833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.975, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.979167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.983333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.9875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.991667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {0.995833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {1, 1, 1, 1.059999943, 1.059996843, 0.969999015}, - {1.004167, 1.000062704, 1.000325799, 1.059999943, 0.820292711, 0.000147394}, - {1.008333, 1.000121474, 1.00065136, 1.059999943, 0.818987548, 0.000146861}, - {1.0125, 1.000176668, 1.00097692, 1.059999943, 0.81781584, 0.000146359}, - {1.016667, 1.000228524, 1.001302361, 1.059999943, 0.816757917, 0.000145887}, - {1.020833, 1.000277519, 1.001627564, 1.059999943, 0.815796912, 0.000145443}, - {1.025, 1.000323892, 1.001952767, 1.059999943, 0.814918101, 0.000145025}, - {1.029167, 1.000367641, 1.00227797, 1.059999943, 0.814109504, 0.000144631}, - {1.033333, 1.000409126, 1.002602816, 1.059999943, 0.813361049, 0.000144261}, - {1.0375, 1.000448585, 1.002927661, 1.059999943, 0.812663555, 0.000143912}, - {1.041667, 1.000486016, 1.003252506, 1.059999943, 0.812009811, 0.000143584}, - {1.045833, 1.000521541, 1.003576994, 1.059999943, 0.811393619, 0.000143274}, - {1.05, 1.000555277, 1.003901601, 1.059999943, 0.810793042, 0.000142972}, - {1.054167, 1.000587344, 1.004225969, 1.059999943, 0.810252428, 0.000142705}, - {1.058333, 1.000617743, 1.004550219, 1.059999943, 0.809719265, 0.000142443}, - {1.0625, 1.000646591, 1.004874468, 1.059999943, 0.809195876, 0.000142186}, - {1.066667, 1.000674009, 1.005198598, 1.059999943, 0.808710635, 0.000141957}, - {1.070833, 1.000699759, 1.00552249, 1.059999943, 0.808222353, 0.000141725}, - {1.075, 1.000724196, 1.005846381, 1.059999943, 0.807762384, 0.000141516}, - {1.079167, 1.000747085, 1.006170154, 1.059999943, 0.807305813, 0.000141309}, - {1.083333, 1.000768542, 1.006493688, 1.059999943, 0.806858957, 0.000141109}, - {1.0875, 1.000788689, 1.006817341, 1.059999943, 0.806420326, 0.000140917}, - {1.091667, 1.000807405, 1.007140756, 1.059999943, 0.805988908, 0.000140729}, - {1.095833, 1.00082469, 1.007463932, 1.059999943, 0.805563867, 0.000140547}, - {1.1, 1.000840545, 1.007787228, 1.059999943, 0.80514407, 0.00014037}, - {1.104167, 1.000855803, 1.007198334, 1.059999943, 1.032057166, 0.922393143}, - {1.108333, 1.000866055, 1.006641626, 1.059999943, 1.033476114, 0.924479365}, - {1.1125, 1.000872135, 1.006110191, 1.059999943, 1.034744263, 0.926455021}, - {1.116667, 1.000874519, 1.005599022, 1.059999943, 1.035876513, 0.928305149}, - {1.120833, 1.000873804, 1.005103946, 1.059999943, 1.036886334, 0.930021584}, - {1.125, 1.000870109, 1.004621744, 1.059999943, 1.03778708, 0.93160224}, - {1.129167, 1.00086391, 1.004150152, 1.059999943, 1.038589478, 0.933047175}, - {1.133333, 1.000855207, 1.003687382, 1.059999943, 1.039303541, 0.934358716}, - {1.1375, 1.00084424, 1.003232241, 1.059999943, 1.039938688, 0.935541749}, - {1.141667, 1.000831127, 1.002783775, 1.059999943, 1.040502787, 0.936601043}, - {1.145833, 1.000815868, 1.002342105, 1.059999943, 1.041002631, 0.937542081}, - {1.15, 1.000798583, 1.001906633, 1.059999943, 1.041444898, 0.938371241}, - {1.154167, 1.000779152, 1.001477718, 1.059999943, 1.041862607, 0.939153254}, - {1.158333, 1.000757694, 1.001055717, 1.059999943, 1.042177677, 0.939717412}, - {1.1625, 1.00073421, 1.000641108, 1.059999943, 1.042499781, 0.940296471}, - {1.166667, 1.00070858, 1.000234604, 1.059999943, 1.04273808, 0.940686703}, - {1.170833, 1.000681043, 0.999836862, 1.059999943, 1.042981267, 0.941086531}, - {1.175, 1.000651479, 0.999448657, 1.059999943, 1.043155313, 0.941323221}, - {1.179167, 1.000619888, 0.999070704, 1.059999943, 1.043332696, 0.94156599}, - {1.183333, 1.00058639, 0.998704076, 1.059999943, 1.043452263, 0.941668034}, - {1.1875, 1.000550866, 0.998349309, 1.059999943, 1.043573976, 0.941773772}, - {1.191667, 1.000513554, 0.998007417, 1.059999943, 1.04364717, 0.941758871}, - {1.195833, 1.000474334, 0.997679114, 1.059999943, 1.043721676, 0.941746056}, - {1.2, 1.000433326, 0.997365177, 1.059999943, 1.043755054, 0.941630721}, - {1.204167, 1.000390649, 0.997066259, 1.059999943, 1.043789148, 0.941516459}, - {1.208333, 1.000346303, 0.996783197, 1.059999943, 1.043788195, 0.941316426}, - {1.2125, 1.000300407, 0.996516407, 1.059999943, 1.043780208, 0.941099048}, - {1.216667, 1.000253201, 0.996266425, 1.059999943, 1.043764353, 0.940862536}, - {1.220833, 1.000204682, 0.996034026, 1.059999943, 1.04372108, 0.940563142}, - {1.225, 1.000154972, 0.995819211, 1.059999943, 1.043678045, 0.940263927}, - {1.229167, 1.000104189, 0.995622635, 1.059999943, 1.043612003, 0.939915836}, - {1.233333, 1.000052571, 0.995444477, 1.059999943, 1.043545961, 0.9395684}, - {1.2375, 1.000000119, 0.995284915, 1.059999943, 1.043460965, 0.939185202}, - {1.241667, 0.999947131, 0.99514401, 1.059999943, 1.043376088, 0.938803017}, - {1.245833, 0.999893785, 0.995021999, 1.059999943, 1.043275952, 0.938397586}, - {1.25, 0.999840021, 0.994918644, 1.059999943, 1.043175936, 0.937993705}, - {1.254167, 0.999786258, 0.994834065, 1.059999943, 1.043063998, 0.937578082}, - {1.258333, 0.999732554, 0.994768023, 1.059999943, 1.042952418, 0.937164783}, - {1.2625, 0.999679089, 0.99472034, 1.059999943, 1.042832136, 0.936750293}, - {1.266667, 0.999625981, 0.994690776, 1.059999943, 1.042712331, 0.936338663}, - {1.270833, 0.999573588, 0.994678915, 1.059999943, 1.042586803, 0.935935795}, - {1.275, 0.999521911, 0.994684458, 1.059999943, 1.042461753, 0.935536265}, - {1.279167, 0.999471188, 0.994706929, 1.059999943, 1.042333841, 0.935154021}, - {1.283333, 0.999421597, 0.99474597, 1.059999943, 1.042206645, 0.934775829}, - {1.2875, 0.999373257, 0.994800925, 1.059999943, 1.042078972, 0.934422433}, - {1.291667, 0.999326408, 0.994871318, 1.059999943, 1.041952252, 0.934073329}, - {1.295833, 0.999281168, 0.994956493, 1.059999943, 1.04182744, 0.933755577}, - {1.3, 0.999237716, 0.995055914, 1.059999943, 1.041703463, 0.933442354}, - {1.304167, 0.999196231, 0.995168865, 1.059999943, 1.041583538, 0.933165789}, - {1.308333, 0.999156773, 0.99529469, 1.059999943, 1.041464686, 0.932893932}, - {1.3125, 0.99911952, 0.995432615, 1.059999943, 1.041351557, 0.932662845}, - {1.316667, 0.999084651, 0.995582044, 1.059999943, 1.0412395, 0.932436347}, - {1.320833, 0.999052227, 0.995742023, 1.059999943, 1.041135073, 0.932253957}, - {1.325, 0.999022365, 0.995912075, 1.059999943, 1.041031599, 0.932075918}, - {1.329167, 0.998995245, 0.996091127, 1.059999943, 1.040937185, 0.931943953}, - {1.333333, 0.998970926, 0.996278644, 1.059999943, 1.040843606, 0.93181622}, - {1.3375, 0.998949409, 0.99647367, 1.059999943, 1.040760398, 0.931735754}, - {1.341667, 0.998930931, 0.996675611, 1.059999943, 1.040678024, 0.931658983}, - {1.345833, 0.998915493, 0.996883333, 1.059999943, 1.040607095, 0.931629896}, - {1.35, 0.998903096, 0.997096419, 1.059999943, 1.040536761, 0.931604028}, - {1.354167, 0.998893857, 0.997313857, 1.059999943, 1.040478826, 0.931625366}, - {1.358333, 0.998887837, 0.997534931, 1.059999943, 1.040421486, 0.931649446}, - {1.3625, 0.998884976, 0.997758746, 1.059999943, 1.04037714, 0.931719601}, - {1.366667, 0.998885393, 0.997984767, 1.059999943, 1.040333271, 0.931791902}, - {1.370833, 0.998889029, 0.99821198, 1.059999943, 1.040302992, 0.931908667}, - {1.375, 0.998895884, 0.998439848, 1.059999943, 1.04027307, 0.932026923}, - {1.379167, 0.998906016, 0.998667419, 1.059999943, 1.040257096, 0.932187438}, - {1.383333, 0.998919308, 0.998894155, 1.059999943, 1.04024148, 0.932348847}, - {1.3875, 0.998935759, 0.999119222, 1.059999943, 1.04023993, 0.932549894}, - {1.391667, 0.998955429, 0.999342144, 1.059999943, 1.040238619, 0.932751417}, - {1.395833, 0.998978078, 0.999561965, 1.059999943, 1.040251493, 0.932989478}, - {1.4, 0.999003768, 0.99977833, 1.059999943, 1.040264487, 0.933227539}, - {1.404167, 0.999032319, 0.999990404, 1.059999943, 1.040291786, 0.933498859}, - {1.408333, 0.999063849, 1.000197768, 1.059999943, 1.040318966, 0.933769703}, - {1.4125, 0.999098003, 1.000399709, 1.059999943, 1.040360212, 0.934070349}, - {1.416667, 0.999134898, 1.000595927, 1.059999943, 1.040401459, 0.934370279}, - {1.420833, 0.999174297, 1.000785589, 1.059999943, 1.040456295, 0.934696198}, - {1.425, 0.999216139, 1.000968456, 1.059999943, 1.040511131, 0.935021162}, - {1.429167, 0.999260247, 1.001143932, 1.059999943, 1.0405792, 0.935368419}, - {1.433333, 0.999306619, 1.001311779, 1.059999943, 1.040647149, 0.935714424}, - {1.4375, 0.999354899, 1.001471519, 1.059999943, 1.040727735, 0.936078966}, - {1.441667, 0.999405086, 1.001622796, 1.059999943, 1.040808201, 0.936442196}, - {1.445833, 0.999457002, 1.001765251, 1.059999943, 1.040900707, 0.936819971}, - {1.45, 0.999510527, 1.001898766, 1.059999943, 1.040993094, 0.937196553}, - {1.454167, 0.999565363, 1.002022862, 1.059999943, 1.041096687, 0.937583864}, - {1.458333, 0.999621451, 1.002137542, 1.059999943, 1.041200042, 0.937969863}, - {1.4625, 0.999678612, 1.002242565, 1.059999943, 1.041313887, 0.938363016}, - {1.466667, 0.999736667, 1.002337694, 1.059999943, 1.041427493, 0.938754976}, - {1.470833, 0.999795318, 1.00242281, 1.059999943, 1.041550517, 0.939150274}, - {1.475, 0.999854624, 1.002497911, 1.059999943, 1.041673303, 0.939544678}, - {1.479167, 0.999914169, 1.002563, 1.059999943, 1.041804552, 0.939938962}, - {1.483333, 0.999973893, 1.002618074, 1.059999943, 1.041935563, 0.940332353}, - {1.4875, 1.000033617, 1.002663016, 1.059999943, 1.042073965, 0.940722287}, - {1.491667, 1.000093102, 1.002697945, 1.059999943, 1.042212009, 0.941111684}, - {1.495833, 1.000152111, 1.002722979, 1.059999943, 1.042356133, 0.941494226}, - {1.5, 1.000210524, 1.002738118, 1.059999943, 1.042500138, 0.941876531}, - {1.504167, 1.000268221, 1.002743721, 1.059999943, 1.042649031, 0.94224906}, - {1.508333, 1.000325084, 1.002739787, 1.059999943, 1.042797565, 0.94262141}, - {1.5125, 1.000380635, 1.002726674, 1.059999943, 1.042949796, 0.942981184}, - {1.516667, 1.000434995, 1.002704382, 1.059999943, 1.043101668, 0.943341076}, - {1.520833, 1.000487924, 1.002673268, 1.059999943, 1.043255925, 0.943685651}, - {1.525, 1.000539184, 1.002633691, 1.059999943, 1.043409944, 0.944030523}, - {1.529167, 1.000588775, 1.002585888, 1.059999943, 1.043564916, 0.944357812}, - {1.533333, 1.000636339, 1.002530217, 1.059999943, 1.04371953, 0.944685459}, - {1.5375, 1.000681877, 1.002466917, 1.059999943, 1.043873787, 0.944993436}, - {1.541667, 1.00072515, 1.002396464, 1.059999943, 1.044027925, 0.94530189}, - {1.545833, 1.000766158, 1.002319217, 1.059999943, 1.044180274, 0.945588708}, - {1.55, 1.000804663, 1.002235413, 1.059999943, 1.044332385, 0.945876181}, - {1.554167, 1.000840664, 1.002145648, 1.059999943, 1.044481516, 0.946140409}, - {1.558333, 1.000873923, 1.002050281, 1.059999943, 1.044630408, 0.946405232}, - {1.5625, 1.000904441, 1.001949787, 1.059999943, 1.044775009, 0.946645617}, - {1.566667, 1.000932097, 1.001844525, 1.059999943, 1.044919491, 0.946886659}, - {1.570833, 1.000956893, 1.001735091, 1.059999943, 1.045058489, 0.94710207}, - {1.575, 1.000978589, 1.001621723, 1.059999943, 1.045197368, 0.947318256}, - {1.579167, 1.000997186, 1.001505017, 1.059999943, 1.045329809, 0.947508216}, - {1.583333, 1.001012683, 1.00138545, 1.059999943, 1.045461893, 0.947698712}, - {1.5875, 1.001025081, 1.001263499, 1.059999943, 1.045586586, 0.947862685}, - {1.591667, 1.00103426, 1.001139522, 1.059999943, 1.045711041, 0.948027253}, - {1.595833, 1.00104022, 1.001014113, 1.059999943, 1.04582727, 0.948165178}, - {1.6, 1.001043081, 1.000887513, 1.059999943, 1.04594326, 0.94830364}, - {1.604167, 1.001042604, 1.000760436, 1.059999943, 1.046050191, 0.948415816}, - {1.608333, 1.001038909, 1.000633121, 1.059999943, 1.046156883, 0.948528349}, - {1.6125, 1.001032114, 1.000506163, 1.059999943, 1.04625392, 0.948615313}, - {1.616667, 1.00102222, 1.00037992, 1.059999943, 1.046350837, 0.948702633}, - {1.620833, 1.001009107, 1.000254869, 1.059999943, 1.046437621, 0.948765159}, - {1.625, 1.000993013, 1.000131369, 1.059999943, 1.046524167, 0.948828101}, - {1.629167, 1.000973821, 1.000009775, 1.059999943, 1.046600223, 0.9488675}, - {1.633333, 1.000951767, 0.999890447, 1.059999943, 1.046676159, 0.948907197}, - {1.6375, 1.000926971, 0.99977386, 1.059999943, 1.046741486, 0.948924899}, - {1.641667, 1.000899315, 0.999660254, 1.059999943, 1.046806693, 0.94894284}, - {1.645833, 1.000869036, 0.999550045, 1.059999943, 1.046861053, 0.948940635}, - {1.65, 1.000836134, 0.999443412, 1.059999943, 1.046915293, 0.948938608}, - {1.654167, 1.000800848, 0.999340832, 1.059999943, 1.046958923, 0.948918402}, - {1.658333, 1.000763297, 0.999242425, 1.059999943, 1.047002435, 0.948898375}, - {1.6625, 1.000723481, 0.999148488, 1.059999943, 1.047035456, 0.948862374}, - {1.666667, 1.00068152, 0.9990592, 1.059999943, 1.047068477, 0.948826551}, - {1.670833, 1.00063777, 0.9989748, 1.059999943, 1.047091246, 0.94877708}, - {1.675, 1.000592232, 0.998895526, 1.059999943, 1.047114015, 0.948727787}, - {1.679167, 1.000545025, 0.998821437, 1.059999943, 1.047126889, 0.948667228}, - {1.683333, 1.000496387, 0.998752713, 1.059999943, 1.047140002, 0.948606968}, - {1.6875, 1.000446439, 0.998689532, 1.059999943, 1.047143579, 0.948537946}, - {1.691667, 1.000395298, 0.998631895, 1.059999943, 1.047147393, 0.948469162}, - {1.695833, 1.000343204, 0.998579919, 1.059999943, 1.047142267, 0.94839412}, - {1.7, 1.000290275, 0.998533607, 1.059999943, 1.04713738, 0.948319435}, - {1.704167, 1.00023663, 0.998493075, 1.059999943, 1.047124386, 0.948240876}, - {1.708333, 1.000182509, 0.998458266, 1.059999943, 1.04711163, 0.948162794}, - {1.7125, 1.00012815, 0.998429179, 1.059999943, 1.047091365, 0.948083282}, - {1.716667, 1.000073671, 0.998405755, 1.059999943, 1.047071218, 0.948004186}, - {1.720833, 1.000019193, 0.998387992, 1.059999943, 1.047044516, 0.947925985}, - {1.725, 0.999964893, 0.998375833, 1.059999943, 1.047018051, 0.94784826}, - {1.729167, 0.999910951, 0.998369098, 1.059999943, 1.046985745, 0.947773576}, - {1.733333, 0.999857545, 0.998367786, 1.059999943, 1.046953559, 0.947699487}, - {1.7375, 0.999804854, 0.99837172, 1.059999943, 1.046916485, 0.947630346}, - {1.741667, 0.999752998, 0.998380721, 1.059999943, 1.046879649, 0.9475618}, - {1.745833, 0.999702215, 0.998394728, 1.059999943, 1.046838641, 0.947500169}, - {1.75, 0.999652505, 0.998413563, 1.059999943, 1.046797872, 0.947439015}, - {1.754167, 0.999604166, 0.998436928, 1.059999943, 1.046753883, 0.947386384}, - {1.758333, 0.999557257, 0.998464823, 1.059999943, 1.046710134, 0.94733429}, - {1.7625, 0.999511898, 0.99849689, 1.059999943, 1.046664119, 0.94729203}, - {1.766667, 0.999468327, 0.99853301, 1.059999943, 1.046618223, 0.947250366}, - {1.770833, 0.999426544, 0.998572886, 1.059999943, 1.046570897, 0.94721967}, - {1.775, 0.999386728, 0.998616397, 1.059999943, 1.04652369, 0.94718951}, - {1.779167, 0.999348998, 0.998663187, 1.059999943, 1.046476007, 0.94717133}, - {1.783333, 0.999313474, 0.998713076, 1.059999943, 1.046428561, 0.947153628}, - {1.7875, 0.999280155, 0.998765886, 1.059999943, 1.046381354, 0.947148621}, - {1.791667, 0.99924922, 0.998821259, 1.059999943, 1.046334267, 0.947143972}, - {1.795833, 0.999220729, 0.998879015, 1.059999943, 1.04628849, 0.947152495}, - {1.8, 0.999194741, 0.998938859, 1.059999943, 1.046242714, 0.947161376}, - {1.804167, 0.999171317, 0.999000549, 1.059999943, 1.046199083, 0.947183728}, - {1.808333, 0.999150515, 0.999063849, 1.059999943, 1.046155453, 0.947206259}, - {1.8125, 0.999132395, 0.99912852, 1.059999943, 1.046114683, 0.947242379}, - {1.816667, 0.999116957, 0.999194264, 1.059999943, 1.046073914, 0.947278678}, - {1.820833, 0.999104321, 0.999260843, 1.059999943, 1.04603672, 0.947328329}, - {1.825, 0.999094367, 0.999328017, 1.059999943, 1.045999646, 0.947378159}, - {1.829167, 0.999087214, 0.999395549, 1.059999943, 1.045966744, 0.947441041}, - {1.833333, 0.999082804, 0.99946326, 1.059999943, 1.045933962, 0.947503924}, - {1.8375, 0.999081135, 0.999530792, 1.059999943, 1.045906067, 0.947579503}, - {1.841667, 0.999082267, 0.999598026, 1.059999943, 1.045878291, 0.947655022}, - {1.845833, 0.999086082, 0.999664605, 1.059999943, 1.04585588, 0.947742462}, - {1.85, 0.999092579, 0.999730527, 1.059999943, 1.045833588, 0.947829902}, - {1.854167, 0.999101698, 0.999795437, 1.059999943, 1.045817137, 0.947928607}, - {1.858333, 0.999113441, 0.999859154, 1.059999943, 1.045800805, 0.948027134}, - {1.8625, 0.999127686, 0.999921501, 1.059999943, 1.045790911, 0.948136032}, - {1.866667, 0.999144435, 0.999982357, 1.059999943, 1.045781016, 0.94824481}, - {1.870833, 0.999163568, 1.000041485, 1.059999943, 1.045777917, 0.948362947}, - {1.875, 0.999185085, 1.000098825, 1.059999943, 1.045774817, 0.948480964}, - {1.879167, 0.999208808, 1.000154018, 1.059999943, 1.045778871, 0.948607385}, - {1.883333, 0.999234676, 1.000207067, 1.059999943, 1.045782804, 0.948733509}, - {1.8875, 0.999262571, 1.000257969, 1.059999943, 1.04579401, 0.948866963}, - {1.891667, 0.999292433, 1.000306368, 1.059999943, 1.045805335, 0.949000239}, - {1.895833, 0.999324083, 1.000352263, 1.059999943, 1.045823932, 0.949139595}, - {1.9, 0.999357522, 1.000395656, 1.059999943, 1.045842528, 0.949278772}, - {1.904167, 0.999392569, 1.000436306, 1.059999943, 1.045868516, 0.949423015}, - {1.908333, 0.999429107, 1.000474215, 1.059999943, 1.045894504, 0.94956696}, - {1.9125, 0.999466956, 1.000509381, 1.059999943, 1.045927644, 0.94971478}, - {1.916667, 0.999506116, 1.000541568, 1.059999943, 1.045960903, 0.949862361}, - {1.920833, 0.999546349, 1.000570893, 1.059999943, 1.046001196, 0.950012624}, - {1.925, 0.999587536, 1.000597358, 1.059999943, 1.046041489, 0.950162709}, - {1.929167, 0.999629557, 1.000620842, 1.059999943, 1.046088696, 0.950314343}, - {1.933333, 0.999672294, 1.000641465, 1.059999943, 1.046135783, 0.950465679}, - {1.9375, 0.999715626, 1.000658989, 1.059999943, 1.046189427, 0.950617552}, - {1.941667, 0.999759376, 1.000673771, 1.059999943, 1.046242952, 0.950769186}, - {1.945833, 0.999803364, 1.000685453, 1.059999943, 1.046302676, 0.950920165}, - {1.95, 0.999847531, 1.000694394, 1.059999943, 1.046362281, 0.951070964}, - {1.954167, 0.999891698, 1.000700474, 1.059999943, 1.046427488, 0.951220155}, - {1.958333, 0.999935806, 1.000703812, 1.059999943, 1.046492577, 0.951369166}, - {1.9625, 0.999979556, 1.000704408, 1.059999943, 1.046562791, 0.951515555}, - {1.966667, 1.000023007, 1.000702381, 1.059999943, 1.046632886, 0.951661825}, - {1.970833, 1.000065923, 1.000697732, 1.059999943, 1.046707511, 0.951804578}, - {1.975, 1.000108123, 1.000690579, 1.059999943, 1.046782017, 0.951947272}, - {1.979167, 1.000149608, 1.000681162, 1.059999943, 1.046860218, 0.952085614}, - {1.983333, 1.000190258, 1.00066936, 1.059999943, 1.046938419, 0.952223837}, - {1.9875, 1.000229836, 1.000655293, 1.059999943, 1.04701972, 0.952357054}, - {1.991667, 1.00026834, 1.0006392, 1.059999943, 1.047100902, 0.952490211}, - {1.995833, 1.000305653, 1.0006212, 1.059999943, 1.047184587, 0.952617645}, - {2, 1.000341535, 1.000601172, 1.059999943, 1.047268033, 0.95274508}, - {2.004167, 1.000376105, 1.000579476, 1.059999943, 1.047353268, 0.952866316}, - {2.008333, 1.000409007, 1.000556231, 1.059999943, 1.047438383, 0.952987432}, - {2.0125, 1.000440478, 1.000531435, 1.059999943, 1.047524452, 0.953101993}, - {2.016667, 1.000470161, 1.000505209, 1.059999943, 1.047610402, 0.953216493}, - {2.020833, 1.000498056, 1.000477791, 1.059999943, 1.04769671, 0.95332408}, - {2.025, 1.000524282, 1.0004493, 1.059999943, 1.047782779, 0.953431606}, - {2.029167, 1.000548482, 1.000419736, 1.059999943, 1.047868609, 0.953531981}, - {2.033333, 1.000570774, 1.000389457, 1.059999943, 1.047954082, 0.953632295}, - {2.0375, 1.00059104, 1.000358343, 1.059999943, 1.048038721, 0.953725338}, - {2.041667, 1.000609279, 1.000326633, 1.059999943, 1.048123121, 0.953818321}, - {2.045833, 1.000625491, 1.000294566, 1.059999943, 1.048205853, 0.953904033}, - {2.05, 1.000639558, 1.000262022, 1.059999943, 1.048288465, 0.953989685}, - {2.054167, 1.000651479, 1.000229359, 1.059999943, 1.048368931, 0.954068124}, - {2.058333, 1.000661254, 1.000196576, 1.059999943, 1.048449159, 0.954146564}, - {2.0625, 1.000668883, 1.000163794, 1.059999943, 1.048526645, 0.954217851}, - {2.066667, 1.000674367, 1.000131249, 1.059999943, 1.048604012, 0.954289198}, - {2.070833, 1.000677705, 1.000098944, 1.059999943, 1.04867816, 0.95435369}, - {2.075, 1.000678897, 1.000066876, 1.059999943, 1.048752069, 0.954418182}, - {2.079167, 1.000677943, 1.000035405, 1.059999943, 1.048822403, 0.954476118}, - {2.083333, 1.000674844, 1.000004411, 1.059999943, 1.048892617, 0.954534054}, - {2.0875, 1.000669718, 0.999974191, 1.059999943, 1.048958778, 0.95458585}, - {2.091667, 1.000662565, 0.999944627, 1.059999943, 1.04902482, 0.954637706}, - {2.095833, 1.000653505, 0.999915957, 1.059999943, 1.049086452, 0.954683781}, - {2.1, 1.000642419, 0.999888122, 1.059999943, 1.049148083, 0.954729974}, - {2.104167, 1.000629425, 0.99986136, 1.059999943, 1.049205065, 0.954770863}, - {2.108333, 1.000614524, 0.99983561, 1.059999943, 1.049262047, 0.954811871}, - {2.1125, 1.000597954, 0.999810994, 1.059999943, 1.049314141, 0.954848111}, - {2.116667, 1.000579715, 0.999787509, 1.059999943, 1.049366236, 0.95488447}, - {2.120833, 1.000559807, 0.999765277, 1.059999943, 1.049413323, 0.954916656}, - {2.125, 1.000538349, 0.999744296, 1.059999943, 1.049460411, 0.954948962}, - {2.129167, 1.000515461, 0.999724627, 1.059999943, 1.049502373, 0.954977632}, - {2.133333, 1.000491142, 0.999706268, 1.059999943, 1.049544454, 0.955006421}, - {2.1375, 1.000465512, 0.999689341, 1.059999943, 1.049581409, 0.955032229}, - {2.141667, 1.00043869, 0.999673724, 1.059999943, 1.049618363, 0.955058157}, - {2.145833, 1.000410795, 0.999659538, 1.059999943, 1.049650192, 0.955081642}, - {2.15, 1.000381947, 0.999646723, 1.059999943, 1.04968214, 0.955105186}, - {2.154167, 1.000352144, 0.999635339, 1.059999943, 1.049709082, 0.955126941}, - {2.158333, 1.000321388, 0.999625385, 1.059999943, 1.049736142, 0.955148816}, - {2.1625, 1.000290155, 0.999616802, 1.059999943, 1.049758196, 0.95516938}, - {2.166667, 1.000258207, 0.999609649, 1.059999943, 1.049780369, 0.955190122}, - {2.170833, 1.000225663, 0.999603808, 1.059999943, 1.049797893, 0.95521003}, - {2.175, 1.000192881, 0.999599397, 1.059999943, 1.049815416, 0.955230057}, - {2.179167, 1.00015974, 0.999596238, 1.059999943, 1.04982841, 0.955249846}, - {2.183333, 1.000126481, 0.99959439, 1.059999943, 1.049841523, 0.955269754}, - {2.1875, 1.000093102, 0.999593854, 1.059999943, 1.049850345, 0.9552899}, - {2.191667, 1.000059724, 0.99959451, 1.059999943, 1.049859285, 0.955310106}, - {2.195833, 1.000026464, 0.999596357, 1.059999943, 1.049864173, 0.955330908}, - {2.2, 0.999993443, 0.999599338, 1.059999943, 1.04986918, 0.95535183}, - {2.204167, 0.99996078, 0.999603391, 1.059999943, 1.049870491, 0.955373764}, - {2.208333, 0.999928474, 0.999608517, 1.059999943, 1.049871922, 0.955395818}, - {2.2125, 0.999896765, 0.999614656, 1.059999943, 1.049870014, 0.955419123}, - {2.216667, 0.999865592, 0.999621749, 1.059999943, 1.049868107, 0.955442548}, - {2.220833, 0.999835193, 0.999629676, 1.059999943, 1.049863338, 0.955467582}, - {2.225, 0.99980551, 0.999638438, 1.059999943, 1.04985857, 0.955492675}, - {2.229167, 0.999776721, 0.999648035, 1.059999943, 1.049851298, 0.955519617}, - {2.233333, 0.999748886, 0.999658287, 1.059999943, 1.049844027, 0.955546558}, - {2.2375, 0.999722064, 0.999669194, 1.059999943, 1.049834609, 0.955575585}, - {2.241667, 0.999696374, 0.999680698, 1.059999943, 1.049825192, 0.955604613}, - {2.245833, 0.999671817, 0.999692738, 1.059999943, 1.049814105, 0.955635786}, - {2.25, 0.999648452, 0.999705255, 1.059999943, 1.049803138, 0.955667019}, - {2.254167, 0.999626398, 0.999718189, 1.059999943, 1.04979074, 0.955700517}, - {2.258333, 0.999605656, 0.999731421, 1.059999943, 1.049778461, 0.955734015}, - {2.2625, 0.999586284, 0.999744952, 1.059999943, 1.049765348, 0.955769777}, - {2.266667, 0.999568343, 0.99975878, 1.059999943, 1.049752116, 0.95580554}, - {2.270833, 0.999551892, 0.999772727, 1.059999943, 1.049738646, 0.955843627}, - {2.275, 0.999536932, 0.999786794, 1.059999943, 1.049725056, 0.955881715}, - {2.279167, 0.999523461, 0.99980098, 1.059999943, 1.049711585, 0.955922067}, - {2.283333, 0.9995116, 0.999815106, 1.059999943, 1.049698114, 0.95596242}, - {2.2875, 0.999501228, 0.999829233, 1.059999943, 1.049685001, 0.956004977}, - {2.291667, 0.999492526, 0.99984324, 1.059999943, 1.049672008, 0.956047535}, - {2.295833, 0.999485373, 0.999857128, 1.059999943, 1.049659848, 0.956092179}, - {2.3, 0.999479771, 0.999870837, 1.059999943, 1.049647689, 0.956136823}, - {2.304167, 0.999475837, 0.999884367, 1.059999943, 1.049636841, 0.956183434}, - {2.308333, 0.999473453, 0.99989754, 1.059999943, 1.049625993, 0.956230044}, - {2.3125, 0.999472618, 0.999910474, 1.059999943, 1.049616814, 0.956278563}, - {2.316667, 0.999473393, 0.99992305, 1.059999943, 1.049607515, 0.956327021}, - {2.320833, 0.999475658, 0.999935269, 1.059999943, 1.049600363, 0.956377208}, - {2.325, 0.999479473, 0.999947071, 1.059999943, 1.04959321, 0.956427336}, - {2.329167, 0.999484777, 0.999958456, 1.059999943, 1.049588203, 0.956479013}, - {2.333333, 0.999491513, 0.999969423, 1.059999943, 1.049583435, 0.95653069}, - {2.3375, 0.999499619, 0.999979854, 1.059999943, 1.049581051, 0.956583738}, - {2.341667, 0.999509156, 0.999989808, 1.059999943, 1.049578905, 0.956636727}, - {2.345833, 0.999519944, 0.999999285, 1.059999943, 1.049579382, 0.956690967}, - {2.35, 0.999532104, 1.000008225, 1.059999943, 1.049579978, 0.956745088}, - {2.354167, 0.999545395, 1.00001657, 1.059999943, 1.049583673, 0.956800282}, - {2.358333, 0.999559939, 1.000024438, 1.059999943, 1.049587369, 0.956855416}, - {2.3625, 0.999575555, 1.00003171, 1.059999943, 1.049594283, 0.956911385}, - {2.366667, 0.999592185, 1.000038385, 1.059999943, 1.049601197, 0.956967354}, - {2.370833, 0.999609828, 1.000044584, 1.059999943, 1.049611449, 0.957023919}, - {2.375, 0.999628425, 1.000050187, 1.059999943, 1.049621701, 0.957080424}, - {2.379167, 0.999647856, 1.000055313, 1.059999943, 1.04963541, 0.957137406}, - {2.383333, 0.999668062, 1.000059724, 1.059999943, 1.049649119, 0.957194388}, - {2.3875, 0.999688923, 1.000063777, 1.059999943, 1.049666286, 0.957251668}, - {2.391667, 0.9997105, 1.000067115, 1.059999943, 1.049683571, 0.957308888}, - {2.395833, 0.999732614, 1.000070095, 1.059999943, 1.049704194, 0.957366169}, - {2.4, 0.999755204, 1.000072479, 1.059999943, 1.049724817, 0.957423508}, - {2.404167, 0.999778271, 1.000074387, 1.059999943, 1.049748898, 0.957480788}, - {2.408333, 0.999801636, 1.000075817, 1.059999943, 1.049772978, 0.957538009}, - {2.4125, 0.999825239, 1.000076771, 1.059999943, 1.049800277, 0.95759505}, - {2.416667, 0.999849081, 1.000077248, 1.059999943, 1.049827695, 0.957652092}, - {2.420833, 0.999873042, 1.000077367, 1.059999943, 1.049858212, 0.957708836}, - {2.425, 0.999897003, 1.000077009, 1.059999943, 1.04988873, 0.95776552}, - {2.429167, 0.999920964, 1.000076294, 1.059999943, 1.049922347, 0.957821786}, - {2.433333, 0.999944866, 1.000075221, 1.059999943, 1.049955845, 0.957877994}, - {2.4375, 0.999968529, 1.000073791, 1.059999943, 1.049992204, 0.957933664}, - {2.441667, 0.999991953, 1.000072002, 1.059999943, 1.050028443, 0.957989335}, - {2.445833, 1.00001514, 1.000069976, 1.059999943, 1.050067425, 0.95804435}, - {2.45, 1.000037909, 1.000067711, 1.059999943, 1.050106287, 0.958099365}, - {2.454167, 1.000060201, 1.000065088, 1.059999943, 1.050147414, 0.958153665}, - {2.458333, 1.000082016, 1.000062346, 1.059999943, 1.050188541, 0.958207965}, - {2.4625, 1.000103235, 1.000059366, 1.059999943, 1.050231814, 0.95826143}, - {2.466667, 1.000123858, 1.000056148, 1.059999943, 1.050274968, 0.958314896}, - {2.470833, 1.000143886, 1.00005281, 1.059999943, 1.05031991, 0.958367527}, - {2.475, 1.000163078, 1.000049353, 1.059999943, 1.050364733, 0.958420157}, - {2.479167, 1.000181556, 1.000045776, 1.059999943, 1.050411105, 0.958471894}, - {2.483333, 1.000199199, 1.000042081, 1.059999943, 1.050457358, 0.958523631}, - {2.4875, 1.000216007, 1.000038385, 1.059999943, 1.050504684, 0.958574474}, - {2.491667, 1.000231862, 1.000034571, 1.059999943, 1.050552011, 0.958625317}, - {2.495833, 1.000246763, 1.000030875, 1.059999943, 1.050600171, 0.958675206}, - {2.5, 1.00026083, 1.000027061, 1.059999943, 1.050648332, 0.958725095}, - {2.504167, 1.000273705, 1.000023246, 1.059999943, 1.05069685, 0.95877403}, - {2.508333, 1.000285625, 1.000019431, 1.059999943, 1.050745368, 0.958822966}, - {2.5125, 1.000296593, 1.000015616, 1.059999943, 1.050794125, 0.958871007}, - {2.516667, 1.000306368, 1.00001204, 1.059999943, 1.050842762, 0.958919048}, - {2.520833, 1.00031507, 1.000008345, 1.059999943, 1.050891161, 0.958966136}, - {2.525, 1.0003227, 1.000004768, 1.059999943, 1.050939679, 0.959013283}, - {2.529167, 1.000329256, 1.000001431, 1.059999943, 1.050987601, 0.959059477}, - {2.533333, 1.00033462, 0.999998033, 1.059999943, 1.051035523, 0.95910567}, - {2.5375, 1.000338912, 0.999994814, 1.059999943, 1.05108285, 0.95915097}, - {2.541667, 1.000342131, 0.999991655, 1.059999943, 1.051129937, 0.95919627}, - {2.545833, 1.000344157, 0.999988675, 1.059999943, 1.05117619, 0.959240735}, - {2.55, 1.00034523, 0.999985814, 1.059999943, 1.051222205, 0.9592852}, - {2.554167, 1.000345111, 0.999983132, 1.059999943, 1.051267147, 0.95932889}, - {2.558333, 1.000343919, 0.999980509, 1.059999943, 1.05131197, 0.95937252}, - {2.5625, 1.000341654, 0.999978125, 1.059999943, 1.051355243, 0.959415317}, - {2.566667, 1.000338316, 0.999975801, 1.059999943, 1.051398516, 0.959458172}, - {2.570833, 1.000334024, 0.999973655, 1.059999943, 1.05144012, 0.959500253}, - {2.575, 1.00032866, 0.999971688, 1.059999943, 1.051481724, 0.959542274}, - {2.579167, 1.000322461, 0.99996978, 1.059999943, 1.05152142, 0.95958364}, - {2.583333, 1.000315309, 0.999968112, 1.059999943, 1.051561117, 0.959624946}, - {2.5875, 1.000307202, 0.999966502, 1.059999943, 1.051598668, 0.959665537}, - {2.591667, 1.000298262, 0.999965072, 1.059999943, 1.051636338, 0.959706128}, - {2.595833, 1.000288486, 0.99996376, 1.059999943, 1.051671743, 0.959746063}, - {2.6, 1.000277996, 0.999962568, 1.059999943, 1.051707149, 0.959785938}, - {2.604167, 1.000266671, 0.999961555, 1.059999943, 1.05174017, 0.959825158}, - {2.608333, 1.00025475, 0.999960601, 1.059999943, 1.05177331, 0.959864378}, - {2.6125, 1.000242114, 0.999959767, 1.059999943, 1.051804066, 0.959902942}, - {2.616667, 1.000228882, 0.999958992, 1.059999943, 1.051834702, 0.959941506}, - {2.620833, 1.000215173, 0.999958396, 1.059999943, 1.051862955, 0.959979355}, - {2.625, 1.000200868, 0.9999578, 1.059999943, 1.051891327, 0.960017264}, - {2.629167, 1.000186086, 0.999957323, 1.059999943, 1.051917076, 0.960054517}, - {2.633333, 1.000170946, 0.999956906, 1.059999943, 1.051942945, 0.96009171}, - {2.6375, 1.000155449, 0.999956608, 1.059999943, 1.05196619, 0.960128307}, - {2.641667, 1.000139713, 0.99995631, 1.059999943, 1.051989555, 0.960164905}, - {2.645833, 1.00012362, 0.999956071, 1.059999943, 1.052010417, 0.960200846}, - {2.65, 1.000107288, 0.999955833, 1.059999943, 1.052031398, 0.960236788}, - {2.654167, 1.000090957, 0.999955654, 1.059999943, 1.052049875, 0.960272133}, - {2.658333, 1.000074387, 0.999955535, 1.059999943, 1.052068353, 0.96030736}, - {2.6625, 1.000057936, 0.999955356, 1.059999943, 1.052084565, 0.96034205}, - {2.666667, 1.000041366, 0.999955237, 1.059999943, 1.052100658, 0.96037668}, - {2.670833, 1.000024796, 0.999955118, 1.059999943, 1.052114606, 0.960410595}, - {2.675, 1.000008464, 0.999954998, 1.059999943, 1.052128553, 0.96044457}, - {2.679167, 0.999992192, 0.999954879, 1.059999943, 1.052140355, 0.960477889}, - {2.683333, 0.999976158, 0.9999547, 1.059999943, 1.052152157, 0.960511148}, - {2.6875, 0.999960363, 0.999954522, 1.059999943, 1.052162051, 0.960543811}, - {2.691667, 0.999944866, 0.999954283, 1.059999943, 1.052171826, 0.960576415}, - {2.695833, 0.999929667, 0.999954045, 1.059999943, 1.052179813, 0.960608363}, - {2.7, 0.999914825, 0.999953806, 1.059999943, 1.0521878, 0.960640311}, - {2.704167, 0.99990046, 0.999953449, 1.059999943, 1.052194119, 0.960671544}, - {2.708333, 0.999886453, 0.999953091, 1.059999943, 1.052200437, 0.960702837}, - {2.7125, 0.999872983, 0.999952734, 1.059999943, 1.052205324, 0.960733414}, - {2.716667, 0.999860048, 0.999952257, 1.059999943, 1.052210212, 0.960763991}, - {2.720833, 0.999847651, 0.99995178, 1.059999943, 1.052213669, 0.960793912}, - {2.725, 0.999835789, 0.999951303, 1.059999943, 1.052217245, 0.960823774}, - {2.729167, 0.999824584, 0.999950707, 1.059999943, 1.052219629, 0.96085304}, - {2.733333, 0.999813974, 0.999950111, 1.059999943, 1.052222133, 0.960882246}, - {2.7375, 0.99980408, 0.999949455, 1.059999943, 1.052223682, 0.960910857}, - {2.741667, 0.999794781, 0.99994874, 1.059999943, 1.052225232, 0.960939467}, - {2.745833, 0.999786258, 0.999947965, 1.059999943, 1.052226067, 0.960967422}, - {2.75, 0.99977839, 0.99994719, 1.059999943, 1.05222702, 0.960995376}, - {2.754167, 0.999771297, 0.999946415, 1.059999943, 1.052227378, 0.961022794}, - {2.758333, 0.99976486, 0.999945581, 1.059999943, 1.052227855, 0.961050153}, - {2.7625, 0.999759257, 0.999944746, 1.059999943, 1.052228093, 0.961076915}, - {2.766667, 0.999754369, 0.999943852, 1.059999943, 1.052228212, 0.961103737}, - {2.770833, 0.999750197, 0.999942958, 1.059999943, 1.052228451, 0.961130023}, - {2.775, 0.999746859, 0.999942064, 1.059999943, 1.05222857, 0.961156309}, - {2.779167, 0.999744236, 0.99994117, 1.059999943, 1.052228928, 0.961182117}, - {2.783333, 0.999742389, 0.999940276, 1.059999943, 1.052229404, 0.961207926}, - {2.7875, 0.999741256, 0.999939382, 1.059999943, 1.05223012, 0.961233318}, - {2.791667, 0.999740899, 0.999938548, 1.059999943, 1.052230954, 0.961258709}, - {2.795833, 0.999741256, 0.999937713, 1.059999943, 1.052232265, 0.961283743}, - {2.8, 0.999742389, 0.999936879, 1.059999943, 1.052233577, 0.961308777}, - {2.804167, 0.999744177, 0.999936104, 1.059999943, 1.052235723, 0.961333513}, - {2.808333, 0.99974668, 0.999935329, 1.059999943, 1.052237868, 0.96135819}, - {2.8125, 0.999749899, 0.999934673, 1.059999943, 1.052240968, 0.961382687}, - {2.816667, 0.999753714, 0.999934018, 1.059999943, 1.052244067, 0.961407185}, - {2.820833, 0.999758184, 0.999933481, 1.059999943, 1.05224812, 0.961431503}, - {2.825, 0.99976331, 0.999932945, 1.059999943, 1.052252293, 0.961455822}, - {2.829167, 0.999768972, 0.999932528, 1.059999943, 1.052257657, 0.961480081}, - {2.833333, 0.99977529, 0.99993217, 1.059999943, 1.052263141, 0.961504281}, - {2.8375, 0.999782085, 0.999931931, 1.059999943, 1.052269816, 0.96152848}, - {2.841667, 0.999789417, 0.999931753, 1.059999943, 1.052276611, 0.96155268}, - {2.845833, 0.999797225, 0.999931633, 1.059999943, 1.052284718, 0.961576939}, - {2.85, 0.99980545, 0.999931693, 1.059999943, 1.052292943, 0.961601198}, - {2.854167, 0.999814153, 0.999931812, 1.059999943, 1.052302599, 0.961625576}, - {2.858333, 0.999823272, 0.999932051, 1.059999943, 1.052312374, 0.961649954}, - {2.8625, 0.99983269, 0.999932349, 1.059999943, 1.05232358, 0.961674511}, - {2.866667, 0.999842465, 0.999932826, 1.059999943, 1.052334905, 0.961699069}, - {2.870833, 0.999852538, 0.999933422, 1.059999943, 1.052347779, 0.961723924}, - {2.875, 0.999862909, 0.999934137, 1.059999943, 1.052360773, 0.961748719}, - {2.879167, 0.999873459, 0.999934912, 1.059999943, 1.052375197, 0.961773872}, - {2.883333, 0.999884188, 0.999935865, 1.059999943, 1.052389741, 0.961799026}, - {2.8875, 0.999895096, 0.999936938, 1.059999943, 1.052405953, 0.961824536}, - {2.891667, 0.999906182, 0.999938071, 1.059999943, 1.052422047, 0.961850047}, - {2.895833, 0.999917269, 0.999939382, 1.059999943, 1.052439809, 0.961876035}, - {2.9, 0.999928474, 0.999940813, 1.059999943, 1.052457571, 0.961901963}, - {2.904167, 0.99993968, 0.999942362, 1.059999943, 1.052476883, 0.961928368}, - {2.908333, 0.999950886, 0.999944031, 1.059999943, 1.052496195, 0.961954772}, - {2.9125, 0.999962032, 0.99994576, 1.059999943, 1.052517056, 0.961981714}, - {2.916667, 0.999973118, 0.999947608, 1.059999943, 1.052537918, 0.962008655}, - {2.920833, 0.999984086, 0.999949634, 1.059999943, 1.052560091, 0.962036073}, - {2.925, 0.999994934, 0.999951661, 1.059999943, 1.052582264, 0.962063551}, - {2.929167, 1.000005603, 0.999953866, 1.059999943, 1.052605867, 0.962091565}, - {2.933333, 1.000016093, 0.999956131, 1.059999943, 1.052629471, 0.962119579}, - {2.9375, 1.000026345, 0.999958456, 1.059999943, 1.052654147, 0.96214813}, - {2.941667, 1.000036359, 0.999960899, 1.059999943, 1.052678943, 0.962176681}, - {2.945833, 1.000046015, 0.999963343, 1.059999943, 1.052704811, 0.962205768}, - {2.95, 1.000055432, 0.999965906, 1.059999943, 1.05273068, 0.962234914}, - {2.954167, 1.000064492, 0.999968529, 1.059999943, 1.052757502, 0.962264597}, - {2.958333, 1.000073314, 0.999971151, 1.059999943, 1.052784204, 0.962294281}, - {2.9625, 1.000081658, 0.999973834, 1.059999943, 1.052811861, 0.96232444}, - {2.966667, 1.000089645, 0.999976575, 1.059999943, 1.052839518, 0.96235466}, - {2.970833, 1.000097156, 0.999979317, 1.059999943, 1.052867889, 0.962385356}, - {2.975, 1.000104308, 0.999982119, 1.059999943, 1.052896142, 0.962416053}, - {2.979167, 1.000111103, 0.99998486, 1.059999943, 1.052924991, 0.962447166}, - {2.983333, 1.000117302, 0.999987602, 1.059999943, 1.05295372, 0.96247834}, - {2.9875, 1.000123143, 0.999990344, 1.059999943, 1.052983046, 0.96250993}, - {2.991667, 1.000128508, 0.999993086, 1.059999943, 1.053012133, 0.962541461}, - {2.995833, 1.000133276, 0.999995768, 1.059999943, 1.053041577, 0.962573409}, - {3, 1.000137687, 0.99999845, 1.059999943, 1.053071022, 0.962605298}, - {3.004167, 1.000141501, 1.000001073, 1.059999943, 1.053100467, 0.962637544}, - {3.008333, 1.000144958, 1.000003576, 1.059999943, 1.053129911, 0.96266973}, - {3.0125, 1.00014782, 1.00000608, 1.059999943, 1.053159356, 0.962702215}, - {3.016667, 1.000150084, 1.000008464, 1.059999943, 1.053188682, 0.96273464}, - {3.020833, 1.000151992, 1.000010729, 1.059999943, 1.053217888, 0.962767243}, - {3.025, 1.000153303, 1.000012994, 1.059999943, 1.053246975, 0.962799788}, - {3.029167, 1.000154138, 1.00001514, 1.059999943, 1.053275824, 0.962832451}, - {3.033333, 1.000154495, 1.000017047, 1.059999943, 1.053304553, 0.962865114}, - {3.0375, 1.000154376, 1.000018954, 1.059999943, 1.053332806, 0.962897778}, - {3.041667, 1.00015378, 1.000020742, 1.059999943, 1.053361058, 0.962930441}, - {3.045833, 1.000152707, 1.000022411, 1.059999943, 1.053388596, 0.962962985}, - {3.05, 1.000151157, 1.000023961, 1.059999943, 1.053416252, 0.962995529}, - {3.054167, 1.000149131, 1.000025272, 1.059999943, 1.053443074, 0.963027895}, - {3.058333, 1.000146747, 1.000026464, 1.059999943, 1.053469896, 0.96306026}, - {3.0625, 1.000143886, 1.000027537, 1.059999943, 1.053495884, 0.963092387}, - {3.066667, 1.000140548, 1.000028491, 1.059999943, 1.053521872, 0.963124454}, - {3.070833, 1.000136852, 1.000029206, 1.059999943, 1.053546906, 0.963156223}, - {3.075, 1.000132799, 1.000029802, 1.059999943, 1.053571939, 0.963187933}, - {3.079167, 1.000128388, 1.000030279, 1.059999943, 1.053595901, 0.963219225}, - {3.083333, 1.00012362, 1.000030518, 1.059999943, 1.053619981, 0.963250518}, - {3.0875, 1.000118494, 1.000030637, 1.059999943, 1.053642869, 0.963281274}, - {3.091667, 1.00011313, 1.000030518, 1.059999943, 1.053665638, 0.96331203}, - {3.095833, 1.000107408, 1.000030398, 1.059999943, 1.053687334, 0.963342249}, - {3.1, 1.000101447, 1.000029922, 1.059999943, 1.05370903, 0.963372409}, - {3.104167, 1.000095248, 1.000029445, 1.059999943, 1.053729534, 0.963401914}, - {3.108333, 1.000088811, 1.00002861, 1.059999943, 1.053750038, 0.963431358}, - {3.1125, 1.000082135, 1.000027776, 1.059999943, 1.05376935, 0.963460147}, - {3.116667, 1.00007534, 1.000026703, 1.059999943, 1.053788543, 0.963488877}, - {3.120833, 1.000068426, 1.000025511, 1.059999943, 1.053806543, 0.963516891}, - {3.125, 1.000061274, 1.000024199, 1.059999943, 1.053824544, 0.963544846}, - {3.129167, 1.000054121, 1.00002265, 1.059999943, 1.053841352, 0.963571966}, - {3.133333, 1.00004673, 1.0000211, 1.059999943, 1.053858042, 0.963599026}, - {3.1375, 1.000039339, 1.000019312, 1.059999943, 1.053873539, 0.963625252}, - {3.141667, 1.000031948, 1.000017405, 1.059999943, 1.053889036, 0.963651478}, - {3.145833, 1.000024557, 1.000015378, 1.059999943, 1.053903341, 0.96367681}, - {3.15, 1.000017047, 1.000013232, 1.059999943, 1.053917527, 0.963702083}, - {3.154167, 1.000009656, 1.000010967, 1.059999943, 1.05393064, 0.963726461}, - {3.158333, 1.000002265, 1.000008702, 1.059999943, 1.053943753, 0.96375078}, - {3.1625, 0.999994993, 1.000006199, 1.059999943, 1.053955674, 0.963774204}, - {3.166667, 0.999987721, 1.000003695, 1.059999943, 1.053967595, 0.963797569}, - {3.170833, 0.999980628, 1.000001073, 1.059999943, 1.053978443, 0.96382004}, - {3.175, 0.999973595, 0.99999845, 1.059999943, 1.053989291, 0.963842452}, - {3.179167, 0.999966741, 0.999995708, 1.059999943, 1.053999186, 0.963863909}, - {3.183333, 0.999960005, 0.999992967, 1.059999943, 1.054008961, 0.963885427}, - {3.1875, 0.999953508, 0.999990165, 1.059999943, 1.054017901, 0.963905931}, - {3.191667, 0.999947131, 0.999987304, 1.059999943, 1.054026842, 0.963926494}, - {3.195833, 0.999941051, 0.999984443, 1.059999943, 1.054034948, 0.963946104}, - {3.2, 0.99993515, 0.999981582, 1.059999943, 1.054042935, 0.963965714}, - {3.204167, 0.999929488, 0.999978721, 1.059999943, 1.054050326, 0.963984489}, - {3.208333, 0.999924064, 0.99997592, 1.059999943, 1.054057598, 0.964003205}, - {3.2125, 0.999918878, 0.999973059, 1.059999943, 1.054064274, 0.964021087}, - {3.216667, 0.99991399, 0.999970257, 1.059999943, 1.05407095, 0.964039028}, - {3.220833, 0.999909461, 0.999967515, 1.059999943, 1.054077029, 0.964056134}, - {3.225, 0.999905109, 0.999964774, 1.059999943, 1.054083109, 0.9640733}, - {3.229167, 0.999901116, 0.999962151, 1.059999943, 1.054088712, 0.964089692}, - {3.233333, 0.99989748, 0.999959528, 1.059999943, 1.054094434, 0.964106083}, - {3.2375, 0.999894083, 0.999957025, 1.059999943, 1.054099679, 0.964121819}, - {3.241667, 0.999891043, 0.999954581, 1.059999943, 1.054105043, 0.964137554}, - {3.245833, 0.999888361, 0.999952257, 1.059999943, 1.054110169, 0.964152753}, - {3.25, 0.999885976, 0.999949992, 1.059999943, 1.054115295, 0.964167893}, - {3.254167, 0.99988389, 0.999947846, 1.059999943, 1.054120183, 0.964182556}, - {3.258333, 0.999882162, 0.999945819, 1.059999943, 1.05412519, 0.964197218}, - {3.2625, 0.999880791, 0.999943972, 1.059999943, 1.054130197, 0.964211464}, - {3.266667, 0.999879777, 0.999942183, 1.059999943, 1.054135203, 0.964225709}, - {3.270833, 0.999879003, 0.999940515, 1.059999943, 1.05414021, 0.964239597}, - {3.275, 0.999878645, 0.999939024, 1.059999943, 1.054145336, 0.964253485}, - {3.279167, 0.999878585, 0.999937654, 1.059999943, 1.054150581, 0.964267135}, - {3.283333, 0.999878824, 0.999936461, 1.059999943, 1.054155827, 0.964280784}, - {3.2875, 0.99987942, 0.999935389, 1.059999943, 1.05416131, 0.964294255}, - {3.291667, 0.999880314, 0.999934435, 1.059999943, 1.054166913, 0.964307725}, - {3.295833, 0.999881506, 0.99993366, 1.059999943, 1.054172874, 0.964321136}, - {3.3, 0.999882996, 0.999933064, 1.059999943, 1.054178715, 0.964334488}, - {3.304167, 0.999884784, 0.999932647, 1.059999943, 1.054185152, 0.964347899}, - {3.308333, 0.99988687, 0.999932349, 1.059999943, 1.054191589, 0.96436131}, - {3.3125, 0.999889195, 0.99993223, 1.059999943, 1.054198503, 0.964374721}, - {3.316667, 0.999891758, 0.99993223, 1.059999943, 1.054205418, 0.964388251}, - {3.320833, 0.999894619, 0.999932468, 1.059999943, 1.054212928, 0.964401841}, - {3.325, 0.999897718, 0.999932766, 1.059999943, 1.054220438, 0.964415491}, - {3.329167, 0.999900997, 0.999933302, 1.059999943, 1.054228544, 0.964429319}, - {3.333333, 0.999904513, 0.999933958, 1.059999943, 1.05423677, 0.964443207}, - {3.3375, 0.999908209, 0.999934793, 1.059999943, 1.054245591, 0.964457333}, - {3.341667, 0.999912143, 0.999935746, 1.059999943, 1.054254532, 0.964471459}, - {3.345833, 0.999916196, 0.999936819, 1.059999943, 1.054264188, 0.964485943}, - {3.35, 0.999920428, 0.999938071, 1.059999943, 1.054273725, 0.964500487}, - {3.354167, 0.999924839, 0.999939442, 1.059999943, 1.054284096, 0.964515388}, - {3.358333, 0.999929368, 0.999940991, 1.059999943, 1.054294467, 0.964530289}, - {3.3625, 0.999933958, 0.999942601, 1.059999943, 1.054305673, 0.964545608}, - {3.366667, 0.999938726, 0.999944389, 1.059999943, 1.054316878, 0.964560986}, - {3.370833, 0.999943495, 0.999946237, 1.059999943, 1.054328799, 0.96457684}, - {3.375, 0.999948382, 0.999948204, 1.059999943, 1.05434072, 0.964592695}, - {3.379167, 0.99995333, 0.99995029, 1.059999943, 1.054353476, 0.964609027}, - {3.383333, 0.999958336, 0.999952435, 1.059999943, 1.054366231, 0.964625418}, - {3.3875, 0.999963343, 0.9999547, 1.059999943, 1.054379702, 0.964642286}, - {3.391667, 0.99996835, 0.999957025, 1.059999943, 1.054393172, 0.964659154}, - {3.395833, 0.999973357, 0.999959409, 1.059999943, 1.054407358, 0.964676619}, - {3.4, 0.999978364, 0.999961853, 1.059999943, 1.054421663, 0.964694023}, - {3.404167, 0.99998337, 0.999964416, 1.059999943, 1.054436564, 0.964712024}, - {3.408333, 0.999988258, 0.999966919, 1.059999943, 1.054451585, 0.964729965}, - {3.4125, 0.999993145, 0.999969542, 1.059999943, 1.054467201, 0.964748502}, - {3.416667, 0.999997973, 0.999972165, 1.059999943, 1.054482818, 0.964766979}, - {3.420833, 1.000002623, 0.999974787, 1.059999943, 1.05449903, 0.964785993}, - {3.425, 1.000007272, 0.99997741, 1.059999943, 1.054515243, 0.964805067}, - {3.429167, 1.000011802, 0.999980092, 1.059999943, 1.054532051, 0.964824557}, - {3.433333, 1.000016212, 0.999982715, 1.059999943, 1.05454886, 0.964844108}, - {3.4375, 1.000020385, 0.999985337, 1.059999943, 1.054566145, 0.964864075}, - {3.441667, 1.000024557, 0.99998796, 1.059999943, 1.05458343, 0.964884043}, - {3.445833, 1.000028491, 0.999990523, 1.059999943, 1.054601192, 0.964904487}, - {3.45, 1.000032306, 0.999993026, 1.059999943, 1.054618955, 0.964924872}, - {3.454167, 1.000036001, 0.99999553, 1.059999943, 1.054637074, 0.964945674}, - {3.458333, 1.000039458, 0.999997973, 1.059999943, 1.054655194, 0.964966476}, - {3.4625, 1.000042677, 1.000000358, 1.059999943, 1.054673672, 0.964987576}, - {3.466667, 1.000045776, 1.000002623, 1.059999943, 1.05469203, 0.965008676}, - {3.470833, 1.000048637, 1.000004888, 1.059999943, 1.054710627, 0.965030074}, - {3.475, 1.000051379, 1.000007033, 1.059999943, 1.054729342, 0.965051472}, - {3.479167, 1.000053883, 1.00000906, 1.059999943, 1.054748058, 0.965073049}, - {3.483333, 1.000056148, 1.000010967, 1.059999943, 1.054766893, 0.965094686}, - {3.4875, 1.000058174, 1.000012875, 1.059999943, 1.054785728, 0.965116441}, - {3.491667, 1.000059962, 1.000014544, 1.059999943, 1.054804564, 0.965138137}, - {3.495833, 1.000061631, 1.000016212, 1.059999943, 1.054823399, 0.965160012}, - {3.5, 1.000063062, 1.000017762, 1.059999943, 1.054842234, 0.965181828}, - {3.504167, 1.000064135, 1.000019193, 1.059999943, 1.054861069, 0.965203702}, - {3.508333, 1.000065088, 1.000020504, 1.059999943, 1.054879785, 0.965225518}, - {3.5125, 1.000065804, 1.000021577, 1.059999943, 1.054898381, 0.965247333}, - {3.516667, 1.00006628, 1.00002265, 1.059999943, 1.054916978, 0.965269089}, - {3.520833, 1.000066638, 1.000023603, 1.059999943, 1.054935336, 0.965290785}, - {3.525, 1.000066638, 1.000024319, 1.059999943, 1.054953694, 0.965312481}, - {3.529167, 1.000066519, 1.000025034, 1.059999943, 1.054971695, 0.965333939}, - {3.533333, 1.000066161, 1.000025511, 1.059999943, 1.054989815, 0.965355456}, - {3.5375, 1.000065565, 1.000025988, 1.059999943, 1.055007458, 0.965376675}, - {3.541667, 1.000064731, 1.000026226, 1.059999943, 1.05502522, 0.965397954}, - {3.545833, 1.000063777, 1.000026345, 1.059999943, 1.055042505, 0.965418875}, - {3.55, 1.000062585, 1.000026345, 1.059999943, 1.055059791, 0.965439796}, - {3.554167, 1.000061154, 1.000026226, 1.059999943, 1.055076599, 0.96546036}, - {3.558333, 1.000059605, 1.000025868, 1.059999943, 1.055093408, 0.965480924}, - {3.5625, 1.000057936, 1.000025511, 1.059999943, 1.055109739, 0.96550107}, - {3.566667, 1.000056028, 1.000025034, 1.059999943, 1.055126071, 0.965521216}, - {3.570833, 1.000054002, 1.000024438, 1.059999943, 1.055141807, 0.965540946}, - {3.575, 1.000051737, 1.000023603, 1.059999943, 1.055157542, 0.965560615}, - {3.579167, 1.000049353, 1.000022769, 1.059999943, 1.055172682, 0.965579808}, - {3.583333, 1.000046968, 1.000021815, 1.059999943, 1.055187941, 0.965598941}, - {3.5875, 1.000044346, 1.000020742, 1.059999943, 1.055202484, 0.965617597}, - {3.591667, 1.000041604, 1.00001955, 1.059999943, 1.055217028, 0.965636253}, - {3.595833, 1.000038743, 1.000018358, 1.059999943, 1.055230856, 0.965654254}, - {3.6, 1.000035763, 1.000016928, 1.059999943, 1.055244803, 0.965672314}, - {3.604167, 1.000032783, 1.000015497, 1.059999943, 1.055258155, 0.965689778}, - {3.608333, 1.000029683, 1.000014067, 1.059999943, 1.055271387, 0.965707242}, - {3.6125, 1.000026464, 1.000012398, 1.059999943, 1.055284023, 0.965724051}, - {3.616667, 1.000023246, 1.000010729, 1.059999943, 1.055296659, 0.965740919}, - {3.620833, 1.000019908, 1.00000906, 1.059999943, 1.05530858, 0.965757132}, - {3.625, 1.000016689, 1.000007272, 1.059999943, 1.055320621, 0.965773344}, - {3.629167, 1.000013232, 1.000005484, 1.059999943, 1.055331945, 0.965788901}, - {3.633333, 1.000009894, 1.000003695, 1.059999943, 1.05534327, 0.965804458}, - {3.6375, 1.000006557, 1.000001788, 1.059999943, 1.055353999, 0.965819418}, - {3.641667, 1.000003099, 0.999999821, 1.059999943, 1.055364728, 0.965834379}, - {3.645833, 0.999999762, 0.999997914, 1.059999943, 1.055374861, 0.965848684}, - {3.65, 0.999996424, 0.999995947, 1.059999943, 1.055384994, 0.965862989}, - {3.654167, 0.999993086, 0.99999398, 1.059999943, 1.05539453, 0.965876758}, - {3.658333, 0.999989808, 0.999992013, 1.059999943, 1.055404067, 0.965890467}, - {3.6625, 0.999986589, 0.999990106, 1.059999943, 1.055413008, 0.96590358}, - {3.666667, 0.99998343, 0.999988139, 1.059999943, 1.055422068, 0.965916753}, - {3.670833, 0.99998033, 0.999986231, 1.059999943, 1.055430532, 0.96592927}, - {3.675, 0.999977291, 0.999984324, 1.059999943, 1.055438995, 0.965941906}, - {3.679167, 0.99997431, 0.999982417, 1.059999943, 1.055447102, 0.965953946}, - {3.683333, 0.999971449, 0.999980628, 1.059999943, 1.055455089, 0.965965986}, - {3.6875, 0.999968648, 0.99997884, 1.059999943, 1.055462718, 0.96597755}, - {3.691667, 0.999965966, 0.999977052, 1.059999943, 1.055470347, 0.965989113}, - {3.695833, 0.999963403, 0.999975383, 1.059999943, 1.0554775, 0.966000199}, - {3.7, 0.999960959, 0.999973774, 1.059999943, 1.055484772, 0.966011345}, - {3.704167, 0.999958634, 0.999972165, 1.059999943, 1.055491686, 0.966022074}, - {3.708333, 0.999956429, 0.999970675, 1.059999943, 1.0554986, 0.966032803}, - {3.7125, 0.999954343, 0.999969244, 1.059999943, 1.055505276, 0.966043115}, - {3.716667, 0.999952376, 0.999967873, 1.059999943, 1.055511951, 0.966053486}, - {3.720833, 0.999950588, 0.999966621, 1.059999943, 1.055518389, 0.966063559}, - {3.725, 0.999948919, 0.999965429, 1.059999943, 1.055524826, 0.966073573}, - {3.729167, 0.999947369, 0.999964297, 1.059999943, 1.055531144, 0.966083348}, - {3.733333, 0.999945998, 0.999963284, 1.059999943, 1.055537462, 0.966093183}, - {3.7375, 0.999944806, 0.99996233, 1.059999943, 1.055543542, 0.966102719}, - {3.741667, 0.999943733, 0.999961495, 1.059999943, 1.055549741, 0.966112316}, - {3.745833, 0.99994278, 0.99996078, 1.059999943, 1.05555594, 0.966121733}, - {3.75, 0.999942005, 0.999960124, 1.059999943, 1.055562019, 0.96613121}, - {3.754167, 0.999941409, 0.999959588, 1.059999943, 1.055568218, 0.966140509}, - {3.758333, 0.999940932, 0.999959111, 1.059999943, 1.055574417, 0.966149867}, - {3.7625, 0.999940634, 0.999958754, 1.059999943, 1.055580616, 0.966159105}, - {3.766667, 0.999940515, 0.999958515, 1.059999943, 1.055586815, 0.966168404}, - {3.770833, 0.999940455, 0.999958336, 1.059999943, 1.055593133, 0.966177642}, - {3.775, 0.999940634, 0.999958277, 1.059999943, 1.055599332, 0.966186941}, - {3.779167, 0.999940932, 0.999958336, 1.059999943, 1.055605888, 0.966196239}, - {3.783333, 0.999941349, 0.999958456, 1.059999943, 1.055612326, 0.966205537}, - {3.7875, 0.999941945, 0.999958634, 1.059999943, 1.055619001, 0.966214955}, - {3.791667, 0.999942601, 0.999958992, 1.059999943, 1.055625558, 0.966224313}, - {3.795833, 0.999943495, 0.999959409, 1.059999943, 1.055632472, 0.96623385}, - {3.8, 0.999944448, 0.999959886, 1.059999943, 1.055639386, 0.966243386}, - {3.804167, 0.999945521, 0.999960482, 1.059999943, 1.055646539, 0.966253042}, - {3.808333, 0.999946773, 0.999961138, 1.059999943, 1.055653691, 0.966262698}, - {3.8125, 0.999948084, 0.999961853, 1.059999943, 1.055661082, 0.966272593}, - {3.816667, 0.999949574, 0.999962687, 1.059999943, 1.055668592, 0.966282427}, - {3.820833, 0.999951124, 0.999963582, 1.059999943, 1.055676341, 0.966292501}, - {3.825, 0.999952734, 0.999964535, 1.059999943, 1.05568409, 0.966302633}, - {3.829167, 0.999954522, 0.999965608, 1.059999943, 1.055692196, 0.966312945}, - {3.833333, 0.99995631, 0.999966681, 1.059999943, 1.055700302, 0.966323256}, - {3.8375, 0.999958277, 0.999967813, 1.059999943, 1.055708766, 0.966333866}, - {3.841667, 0.999960244, 0.999969065, 1.059999943, 1.05571723, 0.966344476}, - {3.845833, 0.99996227, 0.999970317, 1.059999943, 1.055726051, 0.966355324}, - {3.85, 0.999964416, 0.999971569, 1.059999943, 1.055734873, 0.966366172}, - {3.854167, 0.999966562, 0.999972939, 1.059999943, 1.055744052, 0.966377318}, - {3.858333, 0.999968827, 0.99997431, 1.059999943, 1.055753231, 0.966388464}, - {3.8625, 0.999971092, 0.999975681, 1.059999943, 1.055762768, 0.966399908}, - {3.866667, 0.999973357, 0.999977112, 1.059999943, 1.055772305, 0.966411352}, - {3.870833, 0.999975681, 0.999978602, 1.059999943, 1.055782318, 0.966423094}, - {3.875, 0.999978065, 0.999980032, 1.059999943, 1.055792212, 0.966434777}, - {3.879167, 0.99998039, 0.999981523, 1.059999943, 1.055802464, 0.966446817}, - {3.883333, 0.999982774, 0.999983013, 1.059999943, 1.055812836, 0.966458797}, - {3.8875, 0.999985158, 0.999984503, 1.059999943, 1.055823445, 0.966471076}, - {3.891667, 0.999987483, 0.999985993, 1.059999943, 1.055834055, 0.966483355}, - {3.895833, 0.999989867, 0.999987483, 1.059999943, 1.055845022, 0.966495872}, - {3.9, 0.999992192, 0.999988973, 1.059999943, 1.055855989, 0.966508389}, - {3.904167, 0.999994457, 0.999990404, 1.059999943, 1.055867195, 0.966521144}, - {3.908333, 0.999996722, 0.999991834, 1.059999943, 1.055878401, 0.966533899}, - {3.9125, 0.999998987, 0.999993265, 1.059999943, 1.055889964, 0.966546893}, - {3.916667, 1.000001192, 0.999994636, 1.059999943, 1.055901527, 0.966559887}, - {3.920833, 1.000003338, 0.999996006, 1.059999943, 1.055913329, 0.96657306}, - {3.925, 1.000005364, 0.999997318, 1.059999943, 1.055925012, 0.966586232}, - {3.929167, 1.000007391, 0.999998569, 1.059999943, 1.055937052, 0.966599584}, - {3.933333, 1.000009298, 0.999999821, 1.059999943, 1.055949092, 0.966612935}, - {3.9375, 1.000011206, 1.000001073, 1.059999943, 1.055961251, 0.966626406}, - {3.941667, 1.000012994, 1.000002146, 1.059999943, 1.055973411, 0.966639876}, - {3.945833, 1.000014782, 1.000003219, 1.059999943, 1.055985689, 0.966653466}, - {3.95, 1.000016451, 1.000004292, 1.059999943, 1.055998087, 0.966666996}, - {3.954167, 1.000018001, 1.000005245, 1.059999943, 1.056010485, 0.966680646}, - {3.958333, 1.000019431, 1.000006199, 1.059999943, 1.056022882, 0.966694295}, - {3.9625, 1.000020742, 1.000007033, 1.059999943, 1.056035399, 0.966708004}, - {3.966667, 1.000022054, 1.000007868, 1.059999943, 1.056047916, 0.966721654}, - {3.970833, 1.000023246, 1.000008583, 1.059999943, 1.056060433, 0.966735363}, - {3.975, 1.000024319, 1.000009179, 1.059999943, 1.05607295, 0.966749012}, - {3.979167, 1.000025272, 1.000009775, 1.059999943, 1.056085467, 0.966762662}, - {3.983333, 1.000026226, 1.000010371, 1.059999943, 1.056097984, 0.966776311}, - {3.9875, 1.000026941, 1.000010729, 1.059999943, 1.056110501, 0.966789901}, - {3.991667, 1.000027657, 1.000011206, 1.059999943, 1.056123018, 0.966803432}, - {3.995833, 1.000028133, 1.000011444, 1.059999943, 1.056135416, 0.966816902}, - {4, 1.00002861, 1.000011802, 1.059999943, 1.056147814, 0.966830373}, - {4.004167, 1.000028968, 1.000011921, 1.059999943, 1.056160092, 0.966843724}, - {4.008333, 1.000029206, 1.00001204, 1.059999943, 1.056172371, 0.966857076}, - {4.0125, 1.000029325, 1.00001204, 1.059999943, 1.05618453, 0.966870248}, - {4.016667, 1.000029325, 1.00001204, 1.059999943, 1.05619669, 0.966883421}, - {4.020833, 1.000029206, 1.00001204, 1.059999943, 1.056208611, 0.966896355}, - {4.025, 1.000029087, 1.000011802, 1.059999943, 1.056220651, 0.966909349}, - {4.029167, 1.000028729, 1.000011683, 1.059999943, 1.056232333, 0.966922104}, - {4.033333, 1.000028372, 1.000011325, 1.059999943, 1.056244135, 0.96693486}, - {4.0375, 1.000027895, 1.000011086, 1.059999943, 1.056255579, 0.966947377}, - {4.041667, 1.000027299, 1.00001061, 1.059999943, 1.056267142, 0.966959894}, - {4.045833, 1.000026703, 1.000010252, 1.059999943, 1.056278348, 0.966972113}, - {4.05, 1.000025868, 1.000009656, 1.059999943, 1.056289673, 0.966984391}, - {4.054167, 1.000025034, 1.000009179, 1.059999943, 1.05630064, 0.966996372}, - {4.058333, 1.000024199, 1.000008583, 1.059999943, 1.056311607, 0.967008293}, - {4.0625, 1.000023127, 1.000007987, 1.059999943, 1.056322336, 0.967019975}, - {4.066667, 1.000022054, 1.000007272, 1.059999943, 1.056332946, 0.967031598}, - {4.070833, 1.000020981, 1.000006557, 1.059999943, 1.056343317, 0.967042983}, - {4.075, 1.000019789, 1.000005722, 1.059999943, 1.056353688, 0.967054307}, - {4.079167, 1.000018477, 1.000005007, 1.059999943, 1.056363702, 0.967065334}, - {4.083333, 1.000017166, 1.000004172, 1.059999943, 1.056373835, 0.967076361}, - {4.0875, 1.000015855, 1.000003338, 1.059999943, 1.056383491, 0.96708709}, - {4.091667, 1.000014424, 1.000002384, 1.059999943, 1.056393266, 0.967097759}, - {4.095833, 1.000012875, 1.00000155, 1.059999943, 1.056402564, 0.96710813}, - {4.1, 1.000011444, 1.000000596, 1.059999943, 1.056411982, 0.967118561}, - {4.104167, 1.000009894, 0.999999702, 1.059999943, 1.056421041, 0.967128575}, - {4.108333, 1.000008345, 0.999998748, 1.059999943, 1.056430101, 0.967138648}, - {4.1125, 1.000006676, 0.999997795, 1.059999943, 1.056438804, 0.967148364}, - {4.116667, 1.000005126, 0.999996841, 1.059999943, 1.056447506, 0.967158079}, - {4.120833, 1.000003457, 0.999995887, 1.059999943, 1.056455851, 0.967167497}, - {4.125, 1.000001907, 0.999994934, 1.059999943, 1.056464314, 0.967176914}, - {4.129167, 1.000000238, 0.99999398, 1.059999943, 1.056472301, 0.967185974}, - {4.133333, 0.999998629, 0.999993026, 1.059999943, 1.056480408, 0.967195094}, - {4.1375, 0.99999696, 0.999992073, 1.059999943, 1.056488156, 0.967203915}, - {4.141667, 0.999995351, 0.999991119, 1.059999943, 1.056496024, 0.967212737}, - {4.145833, 0.999993742, 0.999990225, 1.059999943, 1.056503415, 0.96722126}, - {4.15, 0.999992192, 0.999989331, 1.059999943, 1.056510925, 0.967229784}, - {4.154167, 0.999990582, 0.999988496, 1.059999943, 1.056518197, 0.967238069}, - {4.158333, 0.999989092, 0.999987602, 1.059999943, 1.05652535, 0.967246294}, - {4.1625, 0.999987602, 0.999986827, 1.059999943, 1.056532383, 0.967254341}, - {4.166667, 0.999986112, 0.999985993, 1.059999943, 1.056539297, 0.967262328}, - {4.170833, 0.999984682, 0.999985278, 1.059999943, 1.056546092, 0.967270136}, - {4.175, 0.999983311, 0.999984503, 1.059999943, 1.056552887, 0.967277944}, - {4.179167, 0.99998194, 0.999983847, 1.059999943, 1.056559324, 0.967285573}, - {4.183333, 0.999980688, 0.999983191, 1.059999943, 1.056565881, 0.967293143}, - {4.1875, 0.999979436, 0.999982536, 1.059999943, 1.056572318, 0.967300594}, - {4.191667, 0.999978304, 0.99998194, 1.059999943, 1.056578636, 0.967307985}, - {4.195833, 0.999977171, 0.999981403, 1.059999943, 1.056584835, 0.967315257}, - {4.2, 0.999976099, 0.999980927, 1.059999943, 1.056591034, 0.967322528}, - {4.204167, 0.999975145, 0.99998045, 1.059999943, 1.056597114, 0.967329681}, - {4.208333, 0.999974191, 0.999980032, 1.059999943, 1.056603193, 0.967336833}, - {4.2125, 0.999973357, 0.999979675, 1.059999943, 1.056609154, 0.967343867}, - {4.216667, 0.999972522, 0.999979317, 1.059999943, 1.056615233, 0.9673509}, - {4.220833, 0.999971867, 0.999979079, 1.059999943, 1.056621075, 0.967357814}, - {4.225, 0.999971211, 0.99997884, 1.059999943, 1.056627035, 0.967364788}, - {4.229167, 0.999970615, 0.999978602, 1.059999943, 1.056632876, 0.967371643}, - {4.233333, 0.999970138, 0.999978483, 1.059999943, 1.056638718, 0.967378557}, - {4.2375, 0.999969721, 0.999978364, 1.059999943, 1.056644559, 0.967385411}, - {4.241667, 0.999969363, 0.999978304, 1.059999943, 1.0566504, 0.967392266}, - {4.245833, 0.999969125, 0.999978304, 1.059999943, 1.056656241, 0.96739912}, - {4.25, 0.999968886, 0.999978364, 1.059999943, 1.056662083, 0.967405975}, - {4.254167, 0.999968767, 0.999978423, 1.059999943, 1.056668043, 0.96741277}, - {4.258333, 0.999968767, 0.999978542, 1.059999943, 1.056673884, 0.967419624}, - {4.2625, 0.999968767, 0.999978721, 1.059999943, 1.056679845, 0.967426479}, - {4.266667, 0.999968886, 0.9999789, 1.059999943, 1.056685805, 0.967433393}, - {4.270833, 0.999969065, 0.999979138, 1.059999943, 1.056691766, 0.967440307}, - {4.275, 0.999969304, 0.999979436, 1.059999943, 1.056697726, 0.967447221}, - {4.279167, 0.999969602, 0.999979734, 1.059999943, 1.056703806, 0.967454195}, - {4.283333, 0.999970019, 0.999980092, 1.059999943, 1.056710005, 0.967461169}, - {4.2875, 0.999970436, 0.99998045, 1.059999943, 1.056716204, 0.967468202}, - {4.291667, 0.999970973, 0.999980867, 1.059999943, 1.056722403, 0.967475235}, - {4.295833, 0.999971569, 0.999981344, 1.059999943, 1.056728721, 0.967482388}, - {4.3, 0.999972165, 0.999981821, 1.059999943, 1.056735039, 0.967489481}, - {4.304167, 0.99997288, 0.999982297, 1.059999943, 1.056741476, 0.967496693}, - {4.308333, 0.999973595, 0.999982834, 1.059999943, 1.056748033, 0.967503965}, - {4.3125, 0.99997443, 0.99998343, 1.059999943, 1.056754589, 0.967511296}, - {4.316667, 0.999975264, 0.999983966, 1.059999943, 1.056761265, 0.967518628}, - {4.320833, 0.999976158, 0.999984562, 1.059999943, 1.05676806, 0.967526019}, - {4.325, 0.999977052, 0.999985158, 1.059999943, 1.056774855, 0.967533469}, - {4.329167, 0.999978006, 0.999985814, 1.059999943, 1.056781769, 0.967541039}, - {4.333333, 0.999979019, 0.99998647, 1.059999943, 1.056788683, 0.967548549}, - {4.3375, 0.999980092, 0.999987125, 1.059999943, 1.056795835, 0.967556238}, - {4.341667, 0.999981165, 0.999987781, 1.059999943, 1.056802988, 0.967563868}, - {4.345833, 0.999982238, 0.999988437, 1.059999943, 1.05681026, 0.967571676}, - {4.35, 0.99998337, 0.999989092, 1.059999943, 1.056817532, 0.967579424}, - {4.354167, 0.999984503, 0.999989808, 1.059999943, 1.056824923, 0.967587292}, - {4.358333, 0.999985635, 0.999990463, 1.059999943, 1.056832433, 0.96759516}, - {4.3625, 0.999986768, 0.999991119, 1.059999943, 1.056840062, 0.967603147}, - {4.366667, 0.99998796, 0.999991834, 1.059999943, 1.056847572, 0.967611134}, - {4.370833, 0.999989152, 0.99999249, 1.059999943, 1.05685544, 0.96761924}, - {4.375, 0.999990284, 0.999993145, 1.059999943, 1.056863189, 0.967627347}, - {4.379167, 0.999991477, 0.999993801, 1.059999943, 1.056871057, 0.967635512}, - {4.383333, 0.999992669, 0.999994457, 1.059999943, 1.056878924, 0.967643678}, - {4.3875, 0.999993801, 0.999995053, 1.059999943, 1.056887031, 0.967651904}, - {4.391667, 0.999994993, 0.999995708, 1.059999943, 1.056895137, 0.967660189}, - {4.395833, 0.999996126, 0.999996305, 1.059999943, 1.056903243, 0.967668533}, - {4.4, 0.999997199, 0.999996901, 1.059999943, 1.056911469, 0.967676818}, - {4.404167, 0.999998331, 0.999997437, 1.059999943, 1.056919694, 0.967685223}, - {4.408333, 0.999999404, 0.999997973, 1.059999943, 1.056928039, 0.967693627}, - {4.4125, 1.000000477, 0.99999851, 1.059999943, 1.056936383, 0.967702031}, - {4.416667, 1.000001431, 0.999999046, 1.059999943, 1.056944847, 0.967710495}, - {4.420833, 1.000002384, 0.999999523, 1.059999943, 1.056953311, 0.967718959}, - {4.425, 1.000003338, 0.99999994, 1.059999943, 1.056961775, 0.967727423}, - {4.429167, 1.000004292, 1.000000358, 1.059999943, 1.056970239, 0.967735887}, - {4.433333, 1.000005126, 1.000000834, 1.059999943, 1.056978822, 0.96774435}, - {4.4375, 1.00000596, 1.000001192, 1.059999943, 1.056987405, 0.967752874}, - {4.441667, 1.000006795, 1.00000155, 1.059999943, 1.056995988, 0.967761338}, - {4.445833, 1.00000751, 1.000001907, 1.059999943, 1.057004571, 0.967769802}, - {4.45, 1.000008225, 1.000002146, 1.059999943, 1.057013154, 0.967778325}, - {4.454167, 1.000008821, 1.000002384, 1.059999943, 1.057021856, 0.967786729}, - {4.458333, 1.000009537, 1.000002623, 1.059999943, 1.057030439, 0.967795193}, - {4.4625, 1.000010014, 1.000002861, 1.059999943, 1.057039022, 0.967803597}, - {4.466667, 1.00001049, 1.000003099, 1.059999943, 1.057047606, 0.967812002}, - {4.470833, 1.000010967, 1.000003219, 1.059999943, 1.057056189, 0.967820346}, - {4.475, 1.000011325, 1.000003338, 1.059999943, 1.057064891, 0.967828691}, - {4.479167, 1.000011683, 1.000003457, 1.059999943, 1.057073355, 0.967836976}, - {4.483333, 1.00001204, 1.000003457, 1.059999943, 1.057081938, 0.967845261}, - {4.4875, 1.000012279, 1.000003457, 1.059999943, 1.057090402, 0.967853487}, - {4.491667, 1.000012398, 1.000003576, 1.059999943, 1.057098866, 0.967861652}, - {4.495833, 1.000012517, 1.000003457, 1.059999943, 1.057107329, 0.967869759}, - {4.5, 1.000012636, 1.000003457, 1.059999943, 1.057115674, 0.967877865}, - {4.504167, 1.000012636, 1.000003338, 1.059999943, 1.057124019, 0.967885852}, - {4.508333, 1.000012636, 1.000003219, 1.059999943, 1.057132244, 0.967893839}, - {4.5125, 1.000012517, 1.000003099, 1.059999943, 1.05714047, 0.967901707}, - {4.516667, 1.000012398, 1.00000298, 1.059999943, 1.057148695, 0.967909634}, - {4.520833, 1.000012279, 1.000002861, 1.059999943, 1.057156801, 0.967917383}, - {4.525, 1.00001204, 1.000002623, 1.059999943, 1.057164907, 0.967925131}, - {4.529167, 1.000011802, 1.000002384, 1.059999943, 1.057172775, 0.967932701}, - {4.533333, 1.000011444, 1.000002146, 1.059999943, 1.057180762, 0.967940331}, - {4.5375, 1.000011086, 1.000001907, 1.059999943, 1.057188511, 0.967947781}, - {4.541667, 1.00001061, 1.000001669, 1.059999943, 1.057196379, 0.967955291}, - {4.545833, 1.000010252, 1.000001311, 1.059999943, 1.057204008, 0.967962623}, - {4.55, 1.000009775, 1.000001073, 1.059999943, 1.057211638, 0.967969894}, - {4.554167, 1.000009179, 1.000000715, 1.059999943, 1.057219148, 0.967977107}, - {4.558333, 1.000008583, 1.000000358, 1.059999943, 1.057226539, 0.967984259}, - {4.5625, 1.000007987, 1, 1.059999943, 1.05723393, 0.967991292}, - {4.566667, 1.000007391, 0.999999642, 1.059999943, 1.057241201, 0.967998326}, - {4.570833, 1.000006795, 0.999999285, 1.059999943, 1.057248354, 0.96800518}, - {4.575, 1.00000608, 0.999998927, 1.059999943, 1.057255507, 0.968012035}, - {4.579167, 1.000005364, 0.99999851, 1.059999943, 1.05726254, 0.968018711}, - {4.583333, 1.000004649, 0.999998152, 1.059999943, 1.057269454, 0.968025446}, - {4.5875, 1.000003934, 0.999997735, 1.059999943, 1.057276249, 0.968031943}, - {4.591667, 1.000003219, 0.999997318, 1.059999943, 1.057283044, 0.968038499}, - {4.595833, 1.000002384, 0.999996901, 1.059999943, 1.05728972, 0.968044877}, - {4.6, 1.00000155, 0.999996543, 1.059999943, 1.057296276, 0.968051314}, - {4.604167, 1.000000834, 0.999996126, 1.059999943, 1.057302833, 0.968057513}, - {4.608333, 1, 0.999995708, 1.059999943, 1.05730927, 0.968063772}, - {4.6125, 0.999999166, 0.999995351, 1.059999943, 1.057315469, 0.968069851}, - {4.616667, 0.999998391, 0.999994934, 1.059999943, 1.057321787, 0.968075991}, - {4.620833, 0.999997556, 0.999994576, 1.059999943, 1.057327986, 0.968081951}, - {4.625, 0.999996781, 0.999994159, 1.059999943, 1.057334065, 0.968087912}, - {4.629167, 0.999995947, 0.999993801, 1.059999943, 1.057340026, 0.968093693}, - {4.633333, 0.999995172, 0.999993443, 1.059999943, 1.057345986, 0.968099535}, - {4.6375, 0.999994397, 0.999993086, 1.059999943, 1.057351828, 0.968105197}, - {4.641667, 0.999993622, 0.999992728, 1.059999943, 1.057357669, 0.968110919}, - {4.645833, 0.999992847, 0.99999243, 1.059999943, 1.057363391, 0.968116522}, - {4.65, 0.999992132, 0.999992073, 1.059999943, 1.057369113, 0.968122065}, - {4.654167, 0.999991417, 0.999991775, 1.059999943, 1.057374716, 0.968127549}, - {4.658333, 0.999990702, 0.999991477, 1.059999943, 1.057380199, 0.968133032}, - {4.6625, 0.999989986, 0.999991238, 1.059999943, 1.057385683, 0.968138397}, - {4.666667, 0.999989331, 0.99999094, 1.059999943, 1.057391167, 0.968143761}, - {4.670833, 0.999988735, 0.999990702, 1.059999943, 1.057396531, 0.968149066}, - {4.675, 0.999988079, 0.999990463, 1.059999943, 1.057401896, 0.968154311}, - {4.679167, 0.999987543, 0.999990284, 1.059999943, 1.057407141, 0.968159497}, - {4.683333, 0.999986947, 0.999990046, 1.059999943, 1.057412386, 0.968164742}, - {4.6875, 0.99998647, 0.999989867, 1.059999943, 1.057417631, 0.968169868}, - {4.691667, 0.999985993, 0.999989748, 1.059999943, 1.057422876, 0.968174994}, - {4.695833, 0.999985516, 0.999989569, 1.059999943, 1.057428002, 0.96818006}, - {4.7, 0.999985099, 0.99998945, 1.059999943, 1.057433128, 0.968185127}, - {4.704167, 0.999984741, 0.999989331, 1.059999943, 1.057438135, 0.968190134}, - {4.708333, 0.999984384, 0.999989271, 1.059999943, 1.057443261, 0.96819514}, - {4.7125, 0.999984086, 0.999989212, 1.059999943, 1.057448268, 0.968200147}, - {4.716667, 0.999983788, 0.999989152, 1.059999943, 1.057453275, 0.968205154}, - {4.720833, 0.999983549, 0.999989092, 1.059999943, 1.057458401, 0.968210101}, - {4.725, 0.99998337, 0.999989092, 1.059999943, 1.057463408, 0.968215048}, - {4.729167, 0.999983191, 0.999989092, 1.059999943, 1.057468414, 0.968219936}, - {4.733333, 0.999983072, 0.999989152, 1.059999943, 1.057473421, 0.968224883}, - {4.7375, 0.999982953, 0.999989152, 1.059999943, 1.057478428, 0.96822983}, - {4.741667, 0.999982953, 0.999989212, 1.059999943, 1.057483435, 0.968234718}, - {4.745833, 0.999982953, 0.999989331, 1.059999943, 1.057488441, 0.968239665}, - {4.75, 0.999982953, 0.99998939, 1.059999943, 1.057493448, 0.968244553}, - {4.754167, 0.999983013, 0.99998951, 1.059999943, 1.057498455, 0.9682495}, - {4.758333, 0.999983132, 0.999989629, 1.059999943, 1.057503462, 0.968254387}, - {4.7625, 0.999983251, 0.999989748, 1.059999943, 1.057508588, 0.968259335}, - {4.766667, 0.99998343, 0.999989927, 1.059999943, 1.057513714, 0.968264282}, - {4.770833, 0.999983609, 0.999990106, 1.059999943, 1.057518721, 0.968269229}, - {4.775, 0.999983847, 0.999990284, 1.059999943, 1.057523847, 0.968274176}, - {4.779167, 0.999984086, 0.999990463, 1.059999943, 1.057529092, 0.968279123}, - {4.783333, 0.999984384, 0.999990642, 1.059999943, 1.057534218, 0.96828413}, - {4.7875, 0.999984741, 0.99999088, 1.059999943, 1.057539463, 0.968289077}, - {4.791667, 0.999985099, 0.999991119, 1.059999943, 1.057544589, 0.968294084}, - {4.795833, 0.999985456, 0.999991357, 1.059999943, 1.057549953, 0.96829915}, - {4.8, 0.999985874, 0.999991596, 1.059999943, 1.057555199, 0.968304157}, - {4.804167, 0.999986291, 0.999991834, 1.059999943, 1.057560563, 0.968309224}, - {4.808333, 0.999986768, 0.999992073, 1.059999943, 1.057565928, 0.96831429}, - {4.8125, 0.999987245, 0.999992371, 1.059999943, 1.057571292, 0.968319356}, - {4.816667, 0.999987721, 0.999992609, 1.059999943, 1.057576656, 0.968324482}, - {4.820833, 0.999988198, 0.999992907, 1.059999943, 1.05758214, 0.968329608}, - {4.825, 0.999988735, 0.999993205, 1.059999943, 1.057587624, 0.968334734}, - {4.829167, 0.999989271, 0.999993503, 1.059999943, 1.057593226, 0.96833992}, - {4.833333, 0.999989808, 0.999993742, 1.059999943, 1.05759871, 0.968345046}, - {4.8375, 0.999990404, 0.99999404, 1.059999943, 1.057604432, 0.968350291}, - {4.841667, 0.99999094, 0.999994338, 1.059999943, 1.057610035, 0.968355477}, - {4.845833, 0.999991536, 0.999994636, 1.059999943, 1.057615757, 0.968360722}, - {4.85, 0.999992132, 0.999994934, 1.059999943, 1.05762136, 0.968365967}, - {4.854167, 0.999992728, 0.999995232, 1.059999943, 1.057627201, 0.968371212}, - {4.858333, 0.999993265, 0.99999547, 1.059999943, 1.057632923, 0.968376517}, - {4.8625, 0.999993861, 0.999995768, 1.059999943, 1.057638764, 0.968381822}, - {4.866667, 0.999994457, 0.999996066, 1.059999943, 1.057644606, 0.968387127}, - {4.870833, 0.999995053, 0.999996305, 1.059999943, 1.057650447, 0.968392432}, - {4.875, 0.999995649, 0.999996603, 1.059999943, 1.057656288, 0.968397737}, - {4.879167, 0.999996185, 0.999996841, 1.059999943, 1.057662249, 0.968403101}, - {4.883333, 0.999996781, 0.999997139, 1.059999943, 1.057668209, 0.968408465}, - {4.8875, 0.999997318, 0.999997377, 1.059999943, 1.05767417, 0.96841383}, - {4.891667, 0.999997854, 0.999997616, 1.059999943, 1.05768013, 0.968419194}, - {4.895833, 0.999998391, 0.999997854, 1.059999943, 1.05768621, 0.968424559}, - {4.9, 0.999998927, 0.999998093, 1.059999943, 1.05769217, 0.968429923}, - {4.904167, 0.999999404, 0.999998271, 1.059999943, 1.05769825, 0.968435287}, - {4.908333, 0.999999881, 0.99999851, 1.059999943, 1.057704329, 0.968440712}, - {4.9125, 1.000000358, 0.999998689, 1.059999943, 1.057710409, 0.968446076}, - {4.916667, 1.000000834, 0.999998868, 1.059999943, 1.057716489, 0.96845144}, - {4.920833, 1.000001192, 0.999999046, 1.059999943, 1.057722569, 0.968456805}, - {4.925, 1.000001669, 0.999999225, 1.059999943, 1.057728648, 0.968462229}, - {4.929167, 1.000002027, 0.999999404, 1.059999943, 1.057734728, 0.968467593}, - {4.933333, 1.000002384, 0.999999523, 1.059999943, 1.057740927, 0.968472958}, - {4.9375, 1.000002742, 0.999999642, 1.059999943, 1.057747006, 0.968478262}, - {4.941667, 1.000003099, 0.999999762, 1.059999943, 1.057753086, 0.968483627}, - {4.945833, 1.000003338, 0.999999881, 1.059999943, 1.057759166, 0.968488932}, - {4.95, 1.000003576, 0.99999994, 1.059999943, 1.057765245, 0.968494236}, - {4.954167, 1.000003815, 1, 1.059999943, 1.057771325, 0.968499541}, - {4.958333, 1.000004053, 1.000000119, 1.059999943, 1.057777405, 0.968504846}, - {4.9625, 1.000004292, 1.000000119, 1.059999943, 1.057783484, 0.968510091}, - {4.966667, 1.000004411, 1.000000238, 1.059999943, 1.057789564, 0.968515337}, - {4.970833, 1.00000453, 1.000000238, 1.059999943, 1.057795525, 0.968520582}, - {4.975, 1.000004649, 1.000000238, 1.059999943, 1.057801604, 0.968525767}, - {4.979167, 1.000004768, 1.000000238, 1.059999943, 1.057807565, 0.968530953}, - {4.983333, 1.000004768, 1.000000238, 1.059999943, 1.057813525, 0.968536079}, - {4.9875, 1.000004888, 1.000000238, 1.059999943, 1.057819366, 0.968541205}, - {4.991667, 1.000004888, 1.000000238, 1.059999943, 1.057825327, 0.968546331}, - {4.995833, 1.000004768, 1.000000238, 1.059999943, 1.057831168, 0.968551338}, - {5, 1.000004768, 1.000000119, 1.059999943, 1.057837009, 0.968556404}, - {5.004167, 1.000004649, 1.000000119, 1.059999943, 1.057842851, 0.968561411}, - {5.008333, 1.000004649, 1, 1.059999943, 1.057848573, 0.968566358}, - {5.0125, 1.00000453, 1, 1.059999943, 1.057854295, 0.968571305}, - {5.016667, 1.000004292, 0.999999881, 1.059999943, 1.057860017, 0.968576252}, - {5.020833, 1.000004172, 0.999999821, 1.059999943, 1.057865739, 0.96858108}, - {5.025, 1.000003934, 0.999999702, 1.059999943, 1.057871342, 0.968585908}, - {5.029167, 1.000003815, 0.999999583, 1.059999943, 1.057876945, 0.968590677}, - {5.033333, 1.000003576, 0.999999464, 1.059999943, 1.057882428, 0.968595505}, - {5.0375, 1.000003338, 0.999999344, 1.059999943, 1.057887912, 0.968600154}, - {5.041667, 1.000003099, 0.999999225, 1.059999943, 1.057893395, 0.968604863}, - {5.045833, 1.000002742, 0.999999046, 1.059999943, 1.05789876, 0.968609512}, - {5.05, 1.000002503, 0.999998927, 1.059999943, 1.057904243, 0.968614161}, - {5.054167, 1.000002146, 0.999998748, 1.059999943, 1.057909489, 0.968618691}, - {5.058333, 1.000001788, 0.999998629, 1.059999943, 1.057914734, 0.968623221}, - {5.0625, 1.00000155, 0.99999845, 1.059999943, 1.057919979, 0.968627691}, - {5.066667, 1.000001192, 0.999998331, 1.059999943, 1.057925224, 0.968632162}, - {5.070833, 1.000000834, 0.999998152, 1.059999943, 1.05793035, 0.968636572}, - {5.075, 1.000000477, 0.999997973, 1.059999943, 1.057935357, 0.968640924}, - {5.079167, 1, 0.999997795, 1.059999943, 1.057940483, 0.968645275}, - {5.083333, 0.999999642, 0.999997616, 1.059999943, 1.05794549, 0.968649566}, - {5.0875, 0.999999285, 0.999997497, 1.059999943, 1.057950377, 0.968653798}, - {5.091667, 0.999998868, 0.999997318, 1.059999943, 1.057955265, 0.96865803}, - {5.095833, 0.99999851, 0.999997139, 1.059999943, 1.057960153, 0.968662202}, - {5.1, 0.999998093, 0.99999696, 1.059999943, 1.057964921, 0.968666315}, - {5.104167, 0.999997675, 0.999996781, 1.059999943, 1.057969689, 0.968670428}, - {5.108333, 0.999997318, 0.999996603, 1.059999943, 1.057974458, 0.968674481}, - {5.1125, 0.999996901, 0.999996483, 1.059999943, 1.057979107, 0.968678534}, - {5.116667, 0.999996543, 0.999996305, 1.059999943, 1.057983756, 0.968682528}, - {5.120833, 0.999996126, 0.999996126, 1.059999943, 1.057988405, 0.968686461}, - {5.125, 0.999995768, 0.999996006, 1.059999943, 1.057992935, 0.968690395}, - {5.129167, 0.999995351, 0.999995828, 1.059999943, 1.057997465, 0.96869427}, - {5.133333, 0.999994993, 0.999995708, 1.059999943, 1.058001995, 0.968698204}, - {5.1375, 0.999994636, 0.99999553, 1.059999943, 1.058006406, 0.968702018}, - {5.141667, 0.999994278, 0.99999541, 1.059999943, 1.058010936, 0.968705833}, - {5.145833, 0.99999398, 0.999995291, 1.059999943, 1.058015227, 0.968709588}, - {5.15, 0.999993622, 0.999995172, 1.059999943, 1.058019638, 0.968713343}, - {5.154167, 0.999993324, 0.999995053, 1.059999943, 1.05802393, 0.968717039}, - {5.158333, 0.999993026, 0.999994934, 1.059999943, 1.058028221, 0.968720734}, - {5.1625, 0.999992728, 0.999994814, 1.059999943, 1.058032513, 0.96872443}, - {5.166667, 0.99999249, 0.999994755, 1.059999943, 1.058036804, 0.968728065}, - {5.170833, 0.999992192, 0.999994636, 1.059999943, 1.058040977, 0.968731701}, - {5.175, 0.999991953, 0.999994576, 1.059999943, 1.058045149, 0.968735278}, - {5.179167, 0.999991715, 0.999994457, 1.059999943, 1.058049321, 0.968738854}, - {5.183333, 0.999991536, 0.999994397, 1.059999943, 1.058053613, 0.96874243}, - {5.1875, 0.999991357, 0.999994338, 1.059999943, 1.058057666, 0.968746006}, - {5.191667, 0.999991179, 0.999994278, 1.059999943, 1.058061838, 0.968749523}, - {5.195833, 0.999991, 0.999994278, 1.059999943, 1.058065891, 0.96875304}, - {5.2, 0.99999088, 0.999994218, 1.059999943, 1.058070064, 0.968756557}, - {5.204167, 0.999990761, 0.999994218, 1.059999943, 1.058074117, 0.968760014}, - {5.208333, 0.999990642, 0.999994159, 1.059999943, 1.05807817, 0.96876353}, - {5.2125, 0.999990523, 0.999994159, 1.059999943, 1.058082342, 0.968766987}, - {5.216667, 0.999990463, 0.999994159, 1.059999943, 1.058086395, 0.968770444}, - {5.220833, 0.999990404, 0.999994159, 1.059999943, 1.058090448, 0.968773901}, - {5.225, 0.999990404, 0.999994159, 1.059999943, 1.058094502, 0.968777359}, - {5.229167, 0.999990404, 0.999994218, 1.059999943, 1.058098555, 0.968780756}, - {5.233333, 0.999990404, 0.999994218, 1.059999943, 1.058102608, 0.968784213}, - {5.2375, 0.999990404, 0.999994278, 1.059999943, 1.058106661, 0.968787611}, - {5.241667, 0.999990463, 0.999994278, 1.059999943, 1.058110714, 0.968791068}, - {5.245833, 0.999990523, 0.999994338, 1.059999943, 1.058114767, 0.968794465}, - {5.25, 0.999990582, 0.999994397, 1.059999943, 1.05811882, 0.968797863}, - {5.254167, 0.999990702, 0.999994457, 1.059999943, 1.058122993, 0.96880132}, - {5.258333, 0.999990821, 0.999994516, 1.059999943, 1.058127046, 0.968804717}, - {5.2625, 0.99999094, 0.999994636, 1.059999943, 1.058131099, 0.968808115}, - {5.266667, 0.999991059, 0.999994695, 1.059999943, 1.058135152, 0.968811572}, - {5.270833, 0.999991238, 0.999994814, 1.059999943, 1.058139324, 0.968814969}, - {5.275, 0.999991417, 0.999994874, 1.059999943, 1.058143377, 0.968818367}, - {5.279167, 0.999991596, 0.999994993, 1.059999943, 1.05814755, 0.968821824}, - {5.283333, 0.999991775, 0.999995112, 1.059999943, 1.058151722, 0.968825221}, - {5.2875, 0.999992013, 0.999995172, 1.059999943, 1.058155775, 0.968828678}, - {5.291667, 0.999992192, 0.999995291, 1.059999943, 1.058159947, 0.968832135}, - {5.295833, 0.99999243, 0.99999541, 1.059999943, 1.05816412, 0.968835533}, - {5.3, 0.999992669, 0.99999553, 1.059999943, 1.058168292, 0.96883899}, - {5.304167, 0.999992907, 0.999995649, 1.059999943, 1.058172584, 0.968842447}, - {5.308333, 0.999993205, 0.999995768, 1.059999943, 1.058176756, 0.968845904}, - {5.3125, 0.999993443, 0.999995947, 1.059999943, 1.058180928, 0.968849361}, - {5.316667, 0.999993682, 0.999996066, 1.059999943, 1.05818522, 0.968852818}, - {5.320833, 0.99999398, 0.999996185, 1.059999943, 1.058189511, 0.968856335}, - {5.325, 0.999994278, 0.999996305, 1.059999943, 1.058193684, 0.968859792}, - {5.329167, 0.999994576, 0.999996483, 1.059999943, 1.058197975, 0.968863249}, - {5.333333, 0.999994814, 0.999996603, 1.059999943, 1.058202267, 0.968866766}, - {5.3375, 0.999995112, 0.999996722, 1.059999943, 1.058206558, 0.968870223}, - {5.341667, 0.99999541, 0.999996841, 1.059999943, 1.058210969, 0.968873739}, - {5.345833, 0.999995708, 0.99999702, 1.059999943, 1.058215261, 0.968877256}, - {5.35, 0.999996006, 0.999997139, 1.059999943, 1.058219552, 0.968880713}, - {5.354167, 0.999996305, 0.999997258, 1.059999943, 1.058223963, 0.96888423}, - {5.358333, 0.999996543, 0.999997377, 1.059999943, 1.058228374, 0.968887746}, - {5.3625, 0.999996841, 0.999997556, 1.059999943, 1.058232665, 0.968891263}, - {5.366667, 0.999997139, 0.999997675, 1.059999943, 1.058237076, 0.96889478}, - {5.370833, 0.999997377, 0.999997795, 1.059999943, 1.058241487, 0.968898296}, - {5.375, 0.999997675, 0.999997914, 1.059999943, 1.058245897, 0.968901813}, - {5.379167, 0.999997914, 0.999998033, 1.059999943, 1.058250308, 0.96890533}, - {5.383333, 0.999998212, 0.999998152, 1.059999943, 1.058254719, 0.968908846}, - {5.3875, 0.99999845, 0.999998271, 1.059999943, 1.05825913, 0.968912363}, - {5.391667, 0.999998689, 0.999998391, 1.059999943, 1.05826354, 0.96891588}, - {5.395833, 0.999998927, 0.99999845, 1.059999943, 1.058267951, 0.968919396}, - {5.4, 0.999999166, 0.999998569, 1.059999943, 1.058272362, 0.968922913}, - {5.404167, 0.999999344, 0.999998689, 1.059999943, 1.058276773, 0.96892643}, - {5.408333, 0.999999583, 0.999998748, 1.059999943, 1.058281183, 0.968929946}, - {5.4125, 0.999999762, 0.999998868, 1.059999943, 1.058285594, 0.968933463}, - {5.416667, 0.99999994, 0.999998927, 1.059999943, 1.058290124, 0.96893698}, - {5.420833, 1.000000119, 0.999998987, 1.059999943, 1.058294535, 0.968940437}, - {5.425, 1.000000238, 0.999999046, 1.059999943, 1.058298945, 0.968943954}, - {5.429167, 1.000000477, 0.999999166, 1.059999943, 1.058303356, 0.968947411}, - {5.433333, 1.000000596, 0.999999225, 1.059999943, 1.058307767, 0.968950927}, - {5.4375, 1.000000715, 0.999999225, 1.059999943, 1.058312178, 0.968954384}, - {5.441667, 1.000000834, 0.999999285, 1.059999943, 1.058316469, 0.968957841}, - {5.445833, 1.000000954, 0.999999344, 1.059999943, 1.05832088, 0.968961239}, - {5.45, 1.000000954, 0.999999404, 1.059999943, 1.058325291, 0.968964696}, - {5.454167, 1.000001073, 0.999999404, 1.059999943, 1.058329582, 0.968968093}, - {5.458333, 1.000001192, 0.999999464, 1.059999943, 1.058333993, 0.96897155}, - {5.4625, 1.000001192, 0.999999464, 1.059999943, 1.058338284, 0.968974948}, - {5.466667, 1.000001192, 0.999999464, 1.059999943, 1.058342576, 0.968978286}, - {5.470833, 1.000001311, 0.999999464, 1.059999943, 1.058346868, 0.968981683}, - {5.475, 1.000001311, 0.999999464, 1.059999943, 1.058351159, 0.968985021}, - {5.479167, 1.000001311, 0.999999464, 1.059999943, 1.058355451, 0.968988359}, - {5.483333, 1.000001192, 0.999999464, 1.059999943, 1.058359742, 0.968991697}, - {5.4875, 1.000001192, 0.999999464, 1.059999943, 1.058363914, 0.968994975}, - {5.491667, 1.000001192, 0.999999464, 1.059999943, 1.058368206, 0.968998313}, - {5.495833, 1.000001073, 0.999999404, 1.059999943, 1.058372378, 0.969001532}, - {5.5, 1.000001073, 0.999999404, 1.059999943, 1.058376551, 0.96900481}, - {5.504167, 1.000000954, 0.999999344, 1.059999943, 1.058380723, 0.969008029}, - {5.508333, 1.000000954, 0.999999285, 1.059999943, 1.058384776, 0.969011247}, - {5.5125, 1.000000834, 0.999999285, 1.059999943, 1.058388948, 0.969014466}, - {5.516667, 1.000000715, 0.999999225, 1.059999943, 1.058393002, 0.969017625}, - {5.520833, 1.000000596, 0.999999166, 1.059999943, 1.058397055, 0.969020784}, - {5.525, 1.000000477, 0.999999106, 1.059999943, 1.058401108, 0.969023883}, - {5.529167, 1.000000358, 0.999999046, 1.059999943, 1.058405161, 0.969026983}, - {5.533333, 1.000000238, 0.999998987, 1.059999943, 1.058409095, 0.969030082}, - {5.5375, 1.000000119, 0.999998927, 1.059999943, 1.058413029, 0.969033182}, - {5.541667, 0.99999994, 0.999998868, 1.059999943, 1.058416963, 0.969036222}, - {5.545833, 0.999999762, 0.999998808, 1.059999943, 1.058420897, 0.969039261}, - {5.55, 0.999999583, 0.999998748, 1.059999943, 1.05842483, 0.969042242}, - {5.554167, 0.999999404, 0.999998629, 1.059999943, 1.058428645, 0.969045222}, - {5.558333, 0.999999225, 0.999998569, 1.059999943, 1.05843246, 0.969048202}, - {5.5625, 0.999999046, 0.99999851, 1.059999943, 1.058436275, 0.969051123}, - {5.566667, 0.999998868, 0.99999845, 1.059999943, 1.058440089, 0.969054043}, - {5.570833, 0.999998689, 0.999998331, 1.059999943, 1.058443785, 0.969056964}, - {5.575, 0.99999851, 0.999998271, 1.059999943, 1.05844748, 0.969059825}, - {5.579167, 0.999998331, 0.999998152, 1.059999943, 1.058451176, 0.969062686}, - {5.583333, 0.999998152, 0.999998093, 1.059999943, 1.058454871, 0.969065487}, - {5.5875, 0.999997914, 0.999998033, 1.059999943, 1.058458567, 0.969068289}, - {5.591667, 0.999997735, 0.999997914, 1.059999943, 1.058462143, 0.96907109}, - {5.595833, 0.999997556, 0.999997854, 1.059999943, 1.058465838, 0.969073892}, - {5.6, 0.999997377, 0.999997795, 1.059999943, 1.058469415, 0.969076633}, - {5.604167, 0.999997199, 0.999997675, 1.059999943, 1.058472872, 0.969079316}, - {5.608333, 0.99999702, 0.999997616, 1.059999943, 1.058476448, 0.969082057}, - {5.6125, 0.999996841, 0.999997556, 1.059999943, 1.058480024, 0.96908474}, - {5.616667, 0.999996662, 0.999997497, 1.059999943, 1.058483481, 0.969087422}, - {5.620833, 0.999996483, 0.999997377, 1.059999943, 1.058486938, 0.969090104}, - {5.625, 0.999996305, 0.999997318, 1.059999943, 1.058490396, 0.969092727}, - {5.629167, 0.999996126, 0.999997258, 1.059999943, 1.058493853, 0.969095349}, - {5.633333, 0.999996006, 0.999997199, 1.059999943, 1.05849731, 0.969097972}, - {5.6375, 0.999995828, 0.999997139, 1.059999943, 1.058500648, 0.969100535}, - {5.641667, 0.999995708, 0.999997079, 1.059999943, 1.058503985, 0.969103098}, - {5.645833, 0.99999553, 0.99999702, 1.059999943, 1.058507323, 0.969105661}, - {5.65, 0.99999541, 0.99999696, 1.059999943, 1.05851078, 0.969108224}, - {5.654167, 0.999995291, 0.999996901, 1.059999943, 1.058514118, 0.969110727}, - {5.658333, 0.999995172, 0.999996901, 1.059999943, 1.058517337, 0.969113231}, - {5.6625, 0.999995053, 0.999996841, 1.059999943, 1.058520675, 0.969115734}, - {5.666667, 0.999994934, 0.999996781, 1.059999943, 1.058524013, 0.969118238}, - {5.670833, 0.999994874, 0.999996781, 1.059999943, 1.058527231, 0.969120741}, - {5.675, 0.999994755, 0.999996722, 1.059999943, 1.058530569, 0.969123185}, - {5.679167, 0.999994695, 0.999996722, 1.059999943, 1.058533788, 0.969125628}, - {5.683333, 0.999994636, 0.999996662, 1.059999943, 1.058537006, 0.969128072}, - {5.6875, 0.999994576, 0.999996662, 1.059999943, 1.058540225, 0.969130516}, - {5.691667, 0.999994516, 0.999996662, 1.059999943, 1.058543444, 0.96913296}, - {5.695833, 0.999994457, 0.999996603, 1.059999943, 1.058546662, 0.969135344}, - {5.7, 0.999994397, 0.999996603, 1.059999943, 1.05855, 0.969137788}, - {5.704167, 0.999994397, 0.999996603, 1.059999943, 1.0585531, 0.969140172}, - {5.708333, 0.999994397, 0.999996603, 1.059999943, 1.058556318, 0.969142616}, - {5.7125, 0.999994397, 0.999996603, 1.059999943, 1.058559537, 0.969145}, - {5.716667, 0.999994397, 0.999996603, 1.059999943, 1.058562756, 0.969147384}, - {5.720833, 0.999994397, 0.999996662, 1.059999943, 1.058565974, 0.969149768}, - {5.725, 0.999994397, 0.999996662, 1.059999943, 1.058569193, 0.969152153}, - {5.729167, 0.999994457, 0.999996662, 1.059999943, 1.058572292, 0.969154537}, - {5.733333, 0.999994457, 0.999996722, 1.059999943, 1.058575511, 0.969156861}, - {5.7375, 0.999994516, 0.999996722, 1.059999943, 1.05857873, 0.969159245}, - {5.741667, 0.999994576, 0.999996781, 1.059999943, 1.058581948, 0.96916163}, - {5.745833, 0.999994636, 0.999996781, 1.059999943, 1.058585048, 0.969164014}, - {5.75, 0.999994695, 0.999996841, 1.059999943, 1.058588266, 0.969166338}, - {5.754167, 0.999994755, 0.999996901, 1.059999943, 1.058591485, 0.969168723}, - {5.758333, 0.999994874, 0.999996901, 1.059999943, 1.058594704, 0.969171047}, - {5.7625, 0.999994934, 0.99999696, 1.059999943, 1.058597922, 0.969173431}, - {5.766667, 0.999995053, 0.99999702, 1.059999943, 1.058601022, 0.969175816}, - {5.770833, 0.999995112, 0.999997079, 1.059999943, 1.05860424, 0.96917814}, - {5.775, 0.999995232, 0.999997139, 1.059999943, 1.058607459, 0.969180524}, - {5.779167, 0.999995351, 0.999997199, 1.059999943, 1.058610678, 0.969182849}, - {5.783333, 0.99999547, 0.999997258, 1.059999943, 1.058613896, 0.969185233}, - {5.7875, 0.999995589, 0.999997318, 1.059999943, 1.058617115, 0.969187558}, - {5.791667, 0.999995708, 0.999997377, 1.059999943, 1.058620334, 0.969189942}, - {5.795833, 0.999995828, 0.999997437, 1.059999943, 1.058623552, 0.969192326}, - {5.8, 0.999995947, 0.999997497, 1.059999943, 1.058626771, 0.969194651}, - {5.804167, 0.999996126, 0.999997556, 1.059999943, 1.05862999, 0.969197035}, - {5.808333, 0.999996245, 0.999997616, 1.059999943, 1.058633208, 0.969199359}, - {5.8125, 0.999996364, 0.999997675, 1.059999943, 1.058636427, 0.969201744}, - {5.816667, 0.999996543, 0.999997795, 1.059999943, 1.058639646, 0.969204128}, - {5.820833, 0.999996662, 0.999997854, 1.059999943, 1.058642983, 0.969206452}, - {5.825, 0.999996781, 0.999997914, 1.059999943, 1.058646202, 0.969208837}, - {5.829167, 0.99999696, 0.999997973, 1.059999943, 1.058649421, 0.969211221}, - {5.833333, 0.999997079, 0.999998033, 1.059999943, 1.058652639, 0.969213545}, - {5.8375, 0.999997199, 0.999998093, 1.059999943, 1.058655977, 0.96921593}, - {5.841667, 0.999997377, 0.999998212, 1.059999943, 1.058659196, 0.969218314}, - {5.845833, 0.999997497, 0.999998271, 1.059999943, 1.058662415, 0.969220638}, - {5.85, 0.999997675, 0.999998331, 1.059999943, 1.058665752, 0.969223022}, - {5.854167, 0.999997795, 0.999998391, 1.059999943, 1.058668971, 0.969225407}, - {5.858333, 0.999997914, 0.99999845, 1.059999943, 1.058672309, 0.969227791}, - {5.8625, 0.999998033, 0.99999851, 1.059999943, 1.058675528, 0.969230115}, - {5.866667, 0.999998152, 0.999998569, 1.059999943, 1.058678746, 0.9692325}, - {5.870833, 0.999998331, 0.999998629, 1.059999943, 1.058682084, 0.969234824}, - {5.875, 0.99999845, 0.999998689, 1.059999943, 1.058685303, 0.969237208}, - {5.879167, 0.999998569, 0.999998748, 1.059999943, 1.058688641, 0.969239593}, - {5.883333, 0.999998629, 0.999998808, 1.059999943, 1.058691859, 0.969241917}, - {5.8875, 0.999998748, 0.999998868, 1.059999943, 1.058695078, 0.969244301}, - {5.891667, 0.999998868, 0.999998927, 1.059999943, 1.058698416, 0.969246626}, - {5.895833, 0.999998987, 0.999998987, 1.059999943, 1.058701634, 0.96924895}, - {5.9, 0.999999046, 0.999998987, 1.059999943, 1.058704853, 0.969251335}, - {5.904167, 0.999999166, 0.999999046, 1.059999943, 1.058708191, 0.969253659}, - {5.908333, 0.999999225, 0.999999106, 1.059999943, 1.05871141, 0.969255984}, - {5.9125, 0.999999344, 0.999999106, 1.059999943, 1.058714628, 0.969258308}, - {5.916667, 0.999999404, 0.999999166, 1.059999943, 1.058717847, 0.969260633}, - {5.920833, 0.999999464, 0.999999166, 1.059999943, 1.058721066, 0.969262958}, - {5.925, 0.999999523, 0.999999225, 1.059999943, 1.058724284, 0.969265282}, - {5.929167, 0.999999583, 0.999999225, 1.059999943, 1.058727503, 0.969267547}, - {5.933333, 0.999999642, 0.999999285, 1.059999943, 1.058730721, 0.969269872}, - {5.9375, 0.999999642, 0.999999285, 1.059999943, 1.05873394, 0.969272137}, - {5.941667, 0.999999702, 0.999999285, 1.059999943, 1.058737159, 0.969274402}, - {5.945833, 0.999999702, 0.999999344, 1.059999943, 1.058740377, 0.969276667}, - {5.95, 0.999999762, 0.999999344, 1.059999943, 1.058743477, 0.969278991}, - {5.954167, 0.999999762, 0.999999344, 1.059999943, 1.058746696, 0.969281197}, - {5.958333, 0.999999762, 0.999999344, 1.059999943, 1.058749795, 0.969283462}, - {5.9625, 0.999999762, 0.999999344, 1.059999943, 1.058753014, 0.969285727}, - {5.966667, 0.999999762, 0.999999344, 1.059999943, 1.058756113, 0.969287932}, - {5.970833, 0.999999762, 0.999999344, 1.059999943, 1.058759212, 0.969290137}, - {5.975, 0.999999762, 0.999999344, 1.059999943, 1.058762312, 0.969292343}, - {5.979167, 0.999999762, 0.999999344, 1.059999943, 1.058765411, 0.969294548}, - {5.983333, 0.999999702, 0.999999344, 1.059999943, 1.058768511, 0.969296753}, - {5.9875, 0.999999702, 0.999999285, 1.059999943, 1.05877161, 0.969298959}, - {5.991667, 0.999999642, 0.999999285, 1.059999943, 1.05877471, 0.969301105}, - {5.995833, 0.999999583, 0.999999285, 1.059999943, 1.05877769, 0.96930325}, - {6, 0.999999583, 0.999999225, 1.059999943, 1.058780789, 0.969305396}, - {6.004167, 0.999999523, 0.999999225, 1.059999943, 1.05878377, 0.969307542}, - {6.008333, 0.999999464, 0.999999225, 1.059999943, 1.05878675, 0.969309628}, - {6.0125, 0.999999404, 0.999999166, 1.059999943, 1.05878973, 0.969311774}, - {6.016667, 0.999999344, 0.999999166, 1.059999943, 1.05879271, 0.96931386}, - {6.020833, 0.999999285, 0.999999106, 1.059999943, 1.058795691, 0.969315946}, - {6.025, 0.999999166, 0.999999106, 1.059999943, 1.058798671, 0.969318032}, - {6.029167, 0.999999106, 0.999999046, 1.059999943, 1.058801532, 0.969320059}, - {6.033333, 0.999999046, 0.999999046, 1.059999943, 1.058804512, 0.969322145}, - {6.0375, 0.999998987, 0.999998987, 1.059999943, 1.058807373, 0.969324172}, - {6.041667, 0.999998868, 0.999998927, 1.059999943, 1.058810234, 0.969326198}, - {6.045833, 0.999998808, 0.999998927, 1.059999943, 1.058813095, 0.969328165}, - {6.05, 0.999998689, 0.999998868, 1.059999943, 1.058815956, 0.969330192}, - {6.054167, 0.999998629, 0.999998808, 1.059999943, 1.058818817, 0.969332159}, - {6.058333, 0.99999851, 0.999998808, 1.059999943, 1.058821678, 0.969334126}, - {6.0625, 0.99999845, 0.999998748, 1.059999943, 1.05882442, 0.969336092}, - {6.066667, 0.999998331, 0.999998689, 1.059999943, 1.058827281, 0.969338059}, - {6.070833, 0.999998271, 0.999998689, 1.059999943, 1.058830023, 0.969339967}, - {6.075, 0.999998152, 0.999998629, 1.059999943, 1.058832765, 0.969341874}, - {6.079167, 0.999998093, 0.999998569, 1.059999943, 1.058835626, 0.969343781}, - {6.083333, 0.999997973, 0.999998569, 1.059999943, 1.058838367, 0.969345689}, - {6.0875, 0.999997914, 0.99999851, 1.059999943, 1.05884099, 0.969347596}, - {6.091667, 0.999997795, 0.99999845, 1.059999943, 1.058843732, 0.969349504}, - {6.095833, 0.999997735, 0.99999845, 1.059999943, 1.058846474, 0.969351351}, - {6.1, 0.999997675, 0.999998391, 1.059999943, 1.058849096, 0.969353199}, - {6.104167, 0.999997556, 0.999998391, 1.059999943, 1.058851838, 0.969355047}, - {6.108333, 0.999997497, 0.999998331, 1.059999943, 1.058854461, 0.969356894}, - {6.1125, 0.999997377, 0.999998271, 1.059999943, 1.058857083, 0.969358683}, - {6.116667, 0.999997318, 0.999998271, 1.059999943, 1.058859706, 0.96936053}, - {6.120833, 0.999997258, 0.999998212, 1.059999943, 1.058862329, 0.969362319}, - {6.125, 0.999997199, 0.999998212, 1.059999943, 1.058864951, 0.969364107}, - {6.129167, 0.999997139, 0.999998152, 1.059999943, 1.058867574, 0.969365895}, - {6.133333, 0.99999702, 0.999998152, 1.059999943, 1.058870196, 0.969367683}, - {6.1375, 0.99999696, 0.999998152, 1.059999943, 1.058872819, 0.969369411}, - {6.141667, 0.999996901, 0.999998093, 1.059999943, 1.058875322, 0.9693712}, - {6.145833, 0.999996901, 0.999998093, 1.059999943, 1.058877945, 0.969372928}, - {6.15, 0.999996841, 0.999998033, 1.059999943, 1.058880448, 0.969374716}, - {6.154167, 0.999996781, 0.999998033, 1.059999943, 1.058883071, 0.969376445}, - {6.158333, 0.999996722, 0.999998033, 1.059999943, 1.058885574, 0.969378173}, - {6.1625, 0.999996722, 0.999998033, 1.059999943, 1.058888078, 0.969379902}, - {6.166667, 0.999996662, 0.999997973, 1.059999943, 1.0588907, 0.969381571}, - {6.170833, 0.999996603, 0.999997973, 1.059999943, 1.058893204, 0.969383299}, - {6.175, 0.999996603, 0.999997973, 1.059999943, 1.058895707, 0.969385028}, - {6.179167, 0.999996603, 0.999997973, 1.059999943, 1.058898211, 0.969386697}, - {6.183333, 0.999996543, 0.999997973, 1.059999943, 1.058900714, 0.969388425}, - {6.1875, 0.999996543, 0.999997973, 1.059999943, 1.058903217, 0.969390094}, - {6.191667, 0.999996543, 0.999997973, 1.059999943, 1.058905721, 0.969391763}, - {6.195833, 0.999996543, 0.999997973, 1.059999943, 1.058908105, 0.969393432}, - {6.2, 0.999996543, 0.999997973, 1.059999943, 1.058910608, 0.969395101}, - {6.204167, 0.999996543, 0.999997973, 1.059999943, 1.058913112, 0.96939677}, - {6.208333, 0.999996543, 0.999997973, 1.059999943, 1.058915615, 0.969398439}, - {6.2125, 0.999996543, 0.999998033, 1.059999943, 1.058918118, 0.969400108}, - {6.216667, 0.999996603, 0.999998033, 1.059999943, 1.058920503, 0.969401777}, - {6.220833, 0.999996603, 0.999998033, 1.059999943, 1.058923006, 0.969403446}, - {6.225, 0.999996603, 0.999998033, 1.059999943, 1.058925509, 0.969405115}, - {6.229167, 0.999996662, 0.999998093, 1.059999943, 1.058927894, 0.969406724}, - {6.233333, 0.999996722, 0.999998093, 1.059999943, 1.058930397, 0.969408393}, - {6.2375, 0.999996722, 0.999998093, 1.059999943, 1.0589329, 0.969410062}, - {6.241667, 0.999996781, 0.999998152, 1.059999943, 1.058935285, 0.969411671}, - {6.245833, 0.999996781, 0.999998152, 1.059999943, 1.058937788, 0.96941334}, - {6.25, 0.999996841, 0.999998152, 1.059999943, 1.058940291, 0.969414949}, - {6.254167, 0.999996901, 0.999998212, 1.059999943, 1.058942676, 0.969416618}, - {6.258333, 0.99999696, 0.999998212, 1.059999943, 1.058945179, 0.969418228}, - {6.2625, 0.99999702, 0.999998271, 1.059999943, 1.058947563, 0.969419897}, - {6.266667, 0.999997079, 0.999998271, 1.059999943, 1.058950067, 0.969421506}, - {6.270833, 0.999997139, 0.999998331, 1.059999943, 1.058952451, 0.969423175}, - {6.275, 0.999997199, 0.999998331, 1.059999943, 1.058954954, 0.969424784}, - {6.279167, 0.999997258, 0.999998391, 1.059999943, 1.058957458, 0.969426453}, - {6.283333, 0.999997318, 0.99999845, 1.059999943, 1.058959842, 0.969428062}, - {6.2875, 0.999997377, 0.99999845, 1.059999943, 1.058962345, 0.969429672}, - {6.291667, 0.999997437, 0.99999851, 1.059999943, 1.058964729, 0.969431341}, - {6.295833, 0.999997497, 0.99999851, 1.059999943, 1.058967233, 0.96943295}, - {6.3, 0.999997556, 0.999998569, 1.059999943, 1.058969617, 0.969434559}, - {6.304167, 0.999997675, 0.999998629, 1.059999943, 1.05897212, 0.969436228}, - {6.308333, 0.999997735, 0.999998629, 1.059999943, 1.058974504, 0.969437838}, - {6.3125, 0.999997795, 0.999998689, 1.059999943, 1.058977008, 0.969439447}, - {6.316667, 0.999997854, 0.999998689, 1.059999943, 1.058979511, 0.969441116}, - {6.320833, 0.999997914, 0.999998748, 1.059999943, 1.058981895, 0.969442725}, - {6.325, 0.999998033, 0.999998808, 1.059999943, 1.058984399, 0.969444335}, - {6.329167, 0.999998093, 0.999998808, 1.059999943, 1.058986783, 0.969445944}, - {6.333333, 0.999998152, 0.999998868, 1.059999943, 1.058989286, 0.969447553}, - {6.3375, 0.999998212, 0.999998868, 1.059999943, 1.058991671, 0.969449222}, - {6.341667, 0.999998271, 0.999998927, 1.059999943, 1.058994174, 0.969450831}, - {6.345833, 0.999998331, 0.999998927, 1.059999943, 1.058996558, 0.969452441}, - {6.35, 0.999998391, 0.999998987, 1.059999943, 1.058999062, 0.96945405}, - {6.354167, 0.99999845, 0.999998987, 1.059999943, 1.059001446, 0.969455659}, - {6.358333, 0.99999851, 0.999999046, 1.059999943, 1.05900383, 0.969457269}, - {6.3625, 0.999998569, 0.999999046, 1.059999943, 1.059006333, 0.969458878}, - {6.366667, 0.999998629, 0.999999106, 1.059999943, 1.059008718, 0.969460487}, - {6.370833, 0.999998689, 0.999999106, 1.059999943, 1.059011221, 0.969462097}, - {6.375, 0.999998748, 0.999999166, 1.059999943, 1.059013605, 0.969463706}, - {6.379167, 0.999998808, 0.999999166, 1.059999943, 1.059015989, 0.969465256}, - {6.383333, 0.999998868, 0.999999225, 1.059999943, 1.059018493, 0.969466865}, - {6.3875, 0.999998927, 0.999999225, 1.059999943, 1.059020877, 0.969468474}, - {6.391667, 0.999998927, 0.999999225, 1.059999943, 1.059023261, 0.969470024}, - {6.395833, 0.999998987, 0.999999285, 1.059999943, 1.059025645, 0.969471633}, - {6.4, 0.999999046, 0.999999285, 1.059999943, 1.059028029, 0.969473183}, - {6.404167, 0.999999046, 0.999999285, 1.059999943, 1.059030533, 0.969474792}, - {6.408333, 0.999999106, 0.999999344, 1.059999943, 1.059032917, 0.969476342}, - {6.4125, 0.999999106, 0.999999344, 1.059999943, 1.059035301, 0.969477892}, - {6.416667, 0.999999166, 0.999999344, 1.059999943, 1.059037685, 0.969479501}, - {6.420833, 0.999999166, 0.999999344, 1.059999943, 1.05904007, 0.969481051}, - {6.425, 0.999999225, 0.999999344, 1.059999943, 1.059042335, 0.969482601}, - {6.429167, 0.999999225, 0.999999404, 1.059999943, 1.059044719, 0.96948415}, - {6.433333, 0.999999225, 0.999999404, 1.059999943, 1.059047103, 0.9694857}, - {6.4375, 0.999999225, 0.999999404, 1.059999943, 1.059049487, 0.96948719}, - {6.441667, 0.999999225, 0.999999404, 1.059999943, 1.059051752, 0.96948874}, - {6.445833, 0.999999285, 0.999999404, 1.059999943, 1.059054136, 0.96949029}, - {6.45, 0.999999285, 0.999999404, 1.059999943, 1.05905652, 0.96949178}, - {6.454167, 0.999999285, 0.999999404, 1.059999943, 1.059058785, 0.96949327}, - {6.458333, 0.999999225, 0.999999404, 1.059999943, 1.05906117, 0.96949482}, - {6.4625, 0.999999225, 0.999999404, 1.059999943, 1.059063435, 0.96949631}, - {6.466667, 0.999999225, 0.999999404, 1.059999943, 1.0590657, 0.9694978}, - {6.470833, 0.999999225, 0.999999404, 1.059999943, 1.059067965, 0.96949929}, - {6.475, 0.999999225, 0.999999344, 1.059999943, 1.059070349, 0.96950078}, - {6.479167, 0.999999225, 0.999999344, 1.059999943, 1.059072614, 0.96950227}, - {6.483333, 0.999999166, 0.999999344, 1.059999943, 1.059074879, 0.969503701}, - {6.4875, 0.999999166, 0.999999344, 1.059999943, 1.059077144, 0.969505191}, - {6.491667, 0.999999106, 0.999999344, 1.059999943, 1.059079289, 0.969506621}, - {6.495833, 0.999999106, 0.999999344, 1.059999943, 1.059081554, 0.969508052}, - {6.5, 0.999999046, 0.999999285, 1.059999943, 1.059083819, 0.969509542}, - {6.504167, 0.999999046, 0.999999285, 1.059999943, 1.059086084, 0.969510913}, - {6.508333, 0.999998987, 0.999999285, 1.059999943, 1.05908823, 0.969512343}, - {6.5125, 0.999998987, 0.999999285, 1.059999943, 1.059090495, 0.969513774}, - {6.516667, 0.999998927, 0.999999225, 1.059999943, 1.059092641, 0.969515204}, - {6.520833, 0.999998927, 0.999999225, 1.059999943, 1.059094787, 0.969516575}, - {6.525, 0.999998868, 0.999999225, 1.059999943, 1.059097052, 0.969518006}, - {6.529167, 0.999998808, 0.999999225, 1.059999943, 1.059099197, 0.969519377}, - {6.533333, 0.999998808, 0.999999166, 1.059999943, 1.059101343, 0.969520748}, - {6.5375, 0.999998748, 0.999999166, 1.059999943, 1.059103489, 0.969522119}, - {6.541667, 0.999998689, 0.999999166, 1.059999943, 1.059105635, 0.969523489}, - {6.545833, 0.999998689, 0.999999106, 1.059999943, 1.05910778, 0.96952486}, - {6.55, 0.999998629, 0.999999106, 1.059999943, 1.059109926, 0.969526231}, - {6.554167, 0.999998569, 0.999999106, 1.059999943, 1.059111953, 0.969527543}, - {6.558333, 0.999998569, 0.999999046, 1.059999943, 1.059114099, 0.969528914}, - {6.5625, 0.99999851, 0.999999046, 1.059999943, 1.059116125, 0.969530225}, - {6.566667, 0.99999845, 0.999999046, 1.059999943, 1.059118271, 0.969531536}, - {6.570833, 0.999998391, 0.999998987, 1.059999943, 1.059120297, 0.969532847}, - {6.575, 0.999998391, 0.999998987, 1.059999943, 1.059122443, 0.969534159}, - {6.579167, 0.999998331, 0.999998987, 1.059999943, 1.05912447, 0.96953547}, - {6.583333, 0.999998271, 0.999998927, 1.059999943, 1.059126496, 0.969536781}, - {6.5875, 0.999998271, 0.999998927, 1.059999943, 1.059128523, 0.969538093}, - {6.591667, 0.999998212, 0.999998927, 1.059999943, 1.059130669, 0.969539344}, - {6.595833, 0.999998152, 0.999998927, 1.059999943, 1.059132695, 0.969540656}, - {6.6, 0.999998152, 0.999998868, 1.059999943, 1.059134722, 0.969541907}, - {6.604167, 0.999998093, 0.999998868, 1.059999943, 1.059136629, 0.969543159}, - {6.608333, 0.999998093, 0.999998868, 1.059999943, 1.059138656, 0.96954447}, - {6.6125, 0.999998033, 0.999998868, 1.059999943, 1.059140682, 0.969545722}, - {6.616667, 0.999998033, 0.999998808, 1.059999943, 1.059142709, 0.969546974}, - {6.620833, 0.999997973, 0.999998808, 1.059999943, 1.059144616, 0.969548166}, - {6.625, 0.999997973, 0.999998808, 1.059999943, 1.059146643, 0.969549418}, - {6.629167, 0.999997914, 0.999998808, 1.059999943, 1.059148669, 0.969550669}, - {6.633333, 0.999997914, 0.999998808, 1.059999943, 1.059150577, 0.969551921}, - {6.6375, 0.999997854, 0.999998808, 1.059999943, 1.059152603, 0.969553113}, - {6.641667, 0.999997854, 0.999998748, 1.059999943, 1.059154511, 0.969554365}, - {6.645833, 0.999997854, 0.999998748, 1.059999943, 1.059156418, 0.969555557}, - {6.65, 0.999997795, 0.999998748, 1.059999943, 1.059158444, 0.969556749}, - {6.654167, 0.999997795, 0.999998748, 1.059999943, 1.059160352, 0.969558001}, - {6.658333, 0.999997795, 0.999998748, 1.059999943, 1.059162259, 0.969559193}, - {6.6625, 0.999997795, 0.999998748, 1.059999943, 1.059164166, 0.969560385}, - {6.666667, 0.999997795, 0.999998748, 1.059999943, 1.059166193, 0.969561577}, - {6.670833, 0.999997795, 0.999998748, 1.059999943, 1.0591681, 0.969562769}, - {6.675, 0.999997795, 0.999998748, 1.059999943, 1.059170008, 0.969563961}, - {6.679167, 0.999997795, 0.999998748, 1.059999943, 1.059171915, 0.969565153}, - {6.683333, 0.999997795, 0.999998748, 1.059999943, 1.059173822, 0.969566345}, - {6.6875, 0.999997795, 0.999998748, 1.059999943, 1.05917573, 0.969567478}, - {6.691667, 0.999997795, 0.999998748, 1.059999943, 1.059177637, 0.96956867}, - {6.695833, 0.999997795, 0.999998748, 1.059999943, 1.059179544, 0.969569862}, - {6.7, 0.999997795, 0.999998808, 1.059999943, 1.059181452, 0.969571054}, - {6.704167, 0.999997795, 0.999998808, 1.059999943, 1.059183359, 0.969572186}, - {6.708333, 0.999997795, 0.999998808, 1.059999943, 1.059185266, 0.969573379}, - {6.7125, 0.999997854, 0.999998808, 1.059999943, 1.059187055, 0.969574511}, - {6.716667, 0.999997854, 0.999998808, 1.059999943, 1.059188962, 0.969575703}, - {6.720833, 0.999997854, 0.999998808, 1.059999943, 1.059190869, 0.969576836}, - {6.725, 0.999997854, 0.999998868, 1.059999943, 1.059192777, 0.969578028}, - {6.729167, 0.999997914, 0.999998868, 1.059999943, 1.059194684, 0.96957916}, - {6.733333, 0.999997914, 0.999998868, 1.059999943, 1.059196472, 0.969580352}, - {6.7375, 0.999997973, 0.999998868, 1.059999943, 1.05919838, 0.969581485}, - {6.741667, 0.999997973, 0.999998868, 1.059999943, 1.059200287, 0.969582617}, - {6.745833, 0.999997973, 0.999998927, 1.059999943, 1.059202075, 0.96958375}, - {6.75, 0.999998033, 0.999998927, 1.059999943, 1.059203982, 0.969584942}, - {6.754167, 0.999998033, 0.999998927, 1.059999943, 1.05920589, 0.969586074}, - {6.758333, 0.999998093, 0.999998987, 1.059999943, 1.059207678, 0.969587207}, - {6.7625, 0.999998093, 0.999998987, 1.059999943, 1.059209585, 0.969588339}, - {6.766667, 0.999998152, 0.999998987, 1.059999943, 1.059211493, 0.969589531}, - {6.770833, 0.999998212, 0.999998987, 1.059999943, 1.059213281, 0.969590664}, - {6.775, 0.999998212, 0.999999046, 1.059999943, 1.059215188, 0.969591796}, - {6.779167, 0.999998271, 0.999999046, 1.059999943, 1.059216976, 0.969592929}, - {6.783333, 0.999998271, 0.999999046, 1.059999943, 1.059218884, 0.969594061}, - {6.7875, 0.999998331, 0.999999106, 1.059999943, 1.059220791, 0.969595194}, - {6.791667, 0.999998331, 0.999999106, 1.059999943, 1.059222579, 0.969596326}, - {6.795833, 0.999998391, 0.999999106, 1.059999943, 1.059224486, 0.969597459}, - {6.8, 0.99999845, 0.999999166, 1.059999943, 1.059226274, 0.969598591}, - {6.804167, 0.99999845, 0.999999166, 1.059999943, 1.059228182, 0.969599724}, - {6.808333, 0.99999851, 0.999999166, 1.059999943, 1.05922997, 0.969600856}, - {6.8125, 0.99999851, 0.999999166, 1.059999943, 1.059231758, 0.969601989}, - {6.816667, 0.999998569, 0.999999225, 1.059999943, 1.059233665, 0.969603121}, - {6.820833, 0.999998629, 0.999999225, 1.059999943, 1.059235454, 0.969604194}, - {6.825, 0.999998629, 0.999999225, 1.059999943, 1.059237361, 0.969605327}, - {6.829167, 0.999998689, 0.999999285, 1.059999943, 1.059239149, 0.969606459}, - {6.833333, 0.999998689, 0.999999285, 1.059999943, 1.059240937, 0.969607592}, - {6.8375, 0.999998748, 0.999999285, 1.059999943, 1.059242845, 0.969608724}, - {6.841667, 0.999998748, 0.999999285, 1.059999943, 1.059244633, 0.969609797}, - {6.845833, 0.999998808, 0.999999344, 1.059999943, 1.059246421, 0.969610929}, - {6.85, 0.999998808, 0.999999344, 1.059999943, 1.059248328, 0.969612062}, - {6.854167, 0.999998868, 0.999999344, 1.059999943, 1.059250116, 0.969613135}, - {6.858333, 0.999998868, 0.999999344, 1.059999943, 1.059251904, 0.969614267}, - {6.8625, 0.999998927, 0.999999404, 1.059999943, 1.059253693, 0.96961534}, - {6.866667, 0.999998927, 0.999999404, 1.059999943, 1.0592556, 0.969616473}, - {6.870833, 0.999998987, 0.999999404, 1.059999943, 1.059257388, 0.969617546}, - {6.875, 0.999998987, 0.999999404, 1.059999943, 1.059259176, 0.969618618}, - {6.879167, 0.999998987, 0.999999404, 1.059999943, 1.059260964, 0.969619751}, - {6.883333, 0.999999046, 0.999999464, 1.059999943, 1.059262753, 0.969620824}, - {6.8875, 0.999999046, 0.999999464, 1.059999943, 1.059264541, 0.969621897}, - {6.891667, 0.999999046, 0.999999464, 1.059999943, 1.059266329, 0.96962297}, - {6.895833, 0.999999106, 0.999999464, 1.059999943, 1.059268117, 0.969624102}, - {6.9, 0.999999106, 0.999999464, 1.059999943, 1.059269905, 0.969625175}, - {6.904167, 0.999999106, 0.999999464, 1.059999943, 1.059271693, 0.969626248}, - {6.908333, 0.999999106, 0.999999464, 1.059999943, 1.059273481, 0.969627321}, - {6.9125, 0.999999106, 0.999999464, 1.059999943, 1.05927515, 0.969628394}, - {6.916667, 0.999999166, 0.999999464, 1.059999943, 1.059276938, 0.969629467}, - {6.920833, 0.999999166, 0.999999464, 1.059999943, 1.059278727, 0.96963048}, - {6.925, 0.999999166, 0.999999464, 1.059999943, 1.059280515, 0.969631553}, - {6.929167, 0.999999166, 0.999999523, 1.059999943, 1.059282184, 0.969632626}, - {6.933333, 0.999999166, 0.999999523, 1.059999943, 1.059283972, 0.969633639}, - {6.9375, 0.999999166, 0.999999523, 1.059999943, 1.05928576, 0.969634712}, - {6.941667, 0.999999166, 0.999999523, 1.059999943, 1.059287429, 0.969635725}, - {6.945833, 0.999999166, 0.999999523, 1.059999943, 1.059289217, 0.969636798}, - {6.95, 0.999999166, 0.999999523, 1.059999943, 1.059290886, 0.969637811}, - {6.954167, 0.999999166, 0.999999464, 1.059999943, 1.059292555, 0.969638884}, - {6.958333, 0.999999166, 0.999999464, 1.059999943, 1.059294343, 0.969639897}, - {6.9625, 0.999999166, 0.999999464, 1.059999943, 1.059296012, 0.969640911}, - {6.966667, 0.999999106, 0.999999464, 1.059999943, 1.059297681, 0.969641924}, - {6.970833, 0.999999106, 0.999999464, 1.059999943, 1.059299469, 0.969642937}, - {6.975, 0.999999106, 0.999999464, 1.059999943, 1.059301138, 0.96964395}, - {6.979167, 0.999999106, 0.999999464, 1.059999943, 1.059302807, 0.969644964}, - {6.983333, 0.999999106, 0.999999464, 1.059999943, 1.059304476, 0.969645977}, - {6.9875, 0.999999106, 0.999999464, 1.059999943, 1.059306145, 0.969646931}, - {6.991667, 0.999999046, 0.999999464, 1.059999943, 1.059307814, 0.969647944}, - {6.995833, 0.999999046, 0.999999464, 1.059999943, 1.059309483, 0.969648957}, - {7, 0.999999046, 0.999999464, 1.059999943, 1.059311152, 0.969649911}, - {7.004167, 0.999999046, 0.999999404, 1.059999943, 1.05931282, 0.969650924}, - {7.008333, 0.999998987, 0.999999404, 1.059999943, 1.05931437, 0.969651878}, - {7.0125, 0.999998987, 0.999999404, 1.059999943, 1.059316039, 0.969652832}, - {7.016667, 0.999998987, 0.999999404, 1.059999943, 1.059317708, 0.969653785}, - {7.020833, 0.999998927, 0.999999404, 1.059999943, 1.059319258, 0.969654799}, - {7.025, 0.999998927, 0.999999404, 1.059999943, 1.059320927, 0.969655752}, - {7.029167, 0.999998927, 0.999999404, 1.059999943, 1.059322596, 0.969656706}, - {7.033333, 0.999998868, 0.999999344, 1.059999943, 1.059324145, 0.96965766}, - {7.0375, 0.999998868, 0.999999344, 1.059999943, 1.059325695, 0.969658554}, - {7.041667, 0.999998868, 0.999999344, 1.059999943, 1.059327364, 0.969659507}, - {7.045833, 0.999998808, 0.999999344, 1.059999943, 1.059328914, 0.969660461}, - {7.05, 0.999998808, 0.999999344, 1.059999943, 1.059330583, 0.969661415}, - {7.054167, 0.999998808, 0.999999344, 1.059999943, 1.059332132, 0.969662309}, - {7.058333, 0.999998748, 0.999999344, 1.059999943, 1.059333682, 0.969663262}, - {7.0625, 0.999998748, 0.999999285, 1.059999943, 1.059335232, 0.969664156}, - {7.066667, 0.999998748, 0.999999285, 1.059999943, 1.059336782, 0.96966511}, - {7.070833, 0.999998689, 0.999999285, 1.059999943, 1.059338331, 0.969666004}, - {7.075, 0.999998689, 0.999999285, 1.059999943, 1.059339881, 0.969666898}, - {7.079167, 0.999998689, 0.999999285, 1.059999943, 1.059341431, 0.969667792}, - {7.083333, 0.999998689, 0.999999285, 1.059999943, 1.05934298, 0.969668686}, - {7.0875, 0.999998629, 0.999999285, 1.059999943, 1.05934453, 0.96966958}, - {7.091667, 0.999998629, 0.999999285, 1.059999943, 1.05934608, 0.969670475}, - {7.095833, 0.999998629, 0.999999225, 1.059999943, 1.05934763, 0.969671369}, - {7.1, 0.999998629, 0.999999225, 1.059999943, 1.059349179, 0.969672263}, - {7.104167, 0.999998569, 0.999999225, 1.059999943, 1.05935061, 0.969673157}, - {7.108333, 0.999998569, 0.999999225, 1.059999943, 1.05935216, 0.969674051}, - {7.1125, 0.999998569, 0.999999225, 1.059999943, 1.059353709, 0.969674945}, - {7.116667, 0.999998569, 0.999999225, 1.059999943, 1.05935514, 0.969675779}, - {7.120833, 0.999998569, 0.999999225, 1.059999943, 1.059356689, 0.969676673}, - {7.125, 0.99999851, 0.999999225, 1.059999943, 1.059358239, 0.969677508}, - {7.129167, 0.99999851, 0.999999225, 1.059999943, 1.05935967, 0.969678402}, - {7.133333, 0.99999851, 0.999999225, 1.059999943, 1.059361219, 0.969679236}, - {7.1375, 0.99999851, 0.999999225, 1.059999943, 1.05936265, 0.96968013}, - {7.141667, 0.99999851, 0.999999225, 1.059999943, 1.0593642, 0.969680965}, - {7.145833, 0.99999851, 0.999999225, 1.059999943, 1.05936563, 0.969681799}, - {7.15, 0.99999851, 0.999999225, 1.059999943, 1.059367061, 0.969682693}, - {7.154167, 0.99999851, 0.999999225, 1.059999943, 1.05936861, 0.969683528}, - {7.158333, 0.99999851, 0.999999225, 1.059999943, 1.059370041, 0.969684362}, - {7.1625, 0.99999851, 0.999999225, 1.059999943, 1.059371471, 0.969685197}, - {7.166667, 0.99999851, 0.999999225, 1.059999943, 1.059373021, 0.969686031}, - {7.170833, 0.99999851, 0.999999225, 1.059999943, 1.059374452, 0.969686925}, - {7.175, 0.99999851, 0.999999225, 1.059999943, 1.059375882, 0.96968776}, - {7.179167, 0.99999851, 0.999999225, 1.059999943, 1.059377313, 0.969688594}, - {7.183333, 0.99999851, 0.999999225, 1.059999943, 1.059378743, 0.969689429}, - {7.1875, 0.99999851, 0.999999225, 1.059999943, 1.059380174, 0.969690263}, - {7.191667, 0.99999851, 0.999999225, 1.059999943, 1.059381723, 0.969691038}, - {7.195833, 0.99999851, 0.999999225, 1.059999943, 1.059383154, 0.969691873}, - {7.2, 0.99999851, 0.999999225, 1.059999943, 1.059384584, 0.969692707}, - {7.204167, 0.999998569, 0.999999285, 1.059999943, 1.059386015, 0.969693542}, - {7.208333, 0.999998569, 0.999999285, 1.059999943, 1.059387445, 0.969694376}, - {7.2125, 0.999998569, 0.999999285, 1.059999943, 1.059388876, 0.96969521}, - {7.216667, 0.999998569, 0.999999285, 1.059999943, 1.059390306, 0.969695985}, - {7.220833, 0.999998569, 0.999999285, 1.059999943, 1.059391737, 0.96969682}, - {7.225, 0.999998629, 0.999999285, 1.059999943, 1.059393168, 0.969697654}, - {7.229167, 0.999998629, 0.999999285, 1.059999943, 1.059394598, 0.969698429}, - {7.233333, 0.999998629, 0.999999285, 1.059999943, 1.059396029, 0.969699264}, - {7.2375, 0.999998629, 0.999999285, 1.059999943, 1.059397459, 0.969700098}, - {7.241667, 0.999998689, 0.999999344, 1.059999943, 1.05939877, 0.969700873}, - {7.245833, 0.999998689, 0.999999344, 1.059999943, 1.059400201, 0.969701707}, - {7.25, 0.999998689, 0.999999344, 1.059999943, 1.059401631, 0.969702482}, - {7.254167, 0.999998689, 0.999999344, 1.059999943, 1.059403062, 0.969703317}, - {7.258333, 0.999998748, 0.999999344, 1.059999943, 1.059404492, 0.969704092}, - {7.2625, 0.999998748, 0.999999344, 1.059999943, 1.059405923, 0.969704926}, - {7.266667, 0.999998748, 0.999999404, 1.059999943, 1.059407234, 0.969705701}, - {7.270833, 0.999998808, 0.999999404, 1.059999943, 1.059408665, 0.969706535}, - {7.275, 0.999998808, 0.999999404, 1.059999943, 1.059410095, 0.96970731}, - {7.279167, 0.999998808, 0.999999404, 1.059999943, 1.059411526, 0.969708145}, - {7.283333, 0.999998808, 0.999999404, 1.059999943, 1.059412837, 0.96970892}, - {7.2875, 0.999998868, 0.999999404, 1.059999943, 1.059414268, 0.969709694}, - {7.291667, 0.999998868, 0.999999404, 1.059999943, 1.059415698, 0.969710529}, - {7.295833, 0.999998868, 0.999999464, 1.059999943, 1.059417009, 0.969711304}, - {7.3, 0.999998927, 0.999999464, 1.059999943, 1.05941844, 0.969712079}, - {7.304167, 0.999998927, 0.999999464, 1.059999943, 1.05941987, 0.969712853}, - {7.308333, 0.999998927, 0.999999464, 1.059999943, 1.059421182, 0.969713688}, - {7.3125, 0.999998987, 0.999999464, 1.059999943, 1.059422612, 0.969714463}, - {7.316667, 0.999998987, 0.999999464, 1.059999943, 1.059423923, 0.969715238}, - {7.320833, 0.999998987, 0.999999523, 1.059999943, 1.059425354, 0.969716012}, - {7.325, 0.999998987, 0.999999523, 1.059999943, 1.059426665, 0.969716787}, - {7.329167, 0.999999046, 0.999999523, 1.059999943, 1.059428096, 0.969717562}, - {7.333333, 0.999999046, 0.999999523, 1.059999943, 1.059429407, 0.969718337}, - {7.3375, 0.999999046, 0.999999523, 1.059999943, 1.059430838, 0.969719112}, - {7.341667, 0.999999046, 0.999999523, 1.059999943, 1.059432149, 0.969719887}, - {7.345833, 0.999999106, 0.999999523, 1.059999943, 1.059433579, 0.969720662}, - {7.35, 0.999999106, 0.999999523, 1.059999943, 1.059434891, 0.969721437}, - {7.354167, 0.999999106, 0.999999523, 1.059999943, 1.059436321, 0.969722211}, - {7.358333, 0.999999106, 0.999999583, 1.059999943, 1.059437633, 0.969722986}, - {7.3625, 0.999999166, 0.999999583, 1.059999943, 1.059438944, 0.969723761}, - {7.366667, 0.999999166, 0.999999583, 1.059999943, 1.059440374, 0.969724536}, - {7.370833, 0.999999166, 0.999999583, 1.059999943, 1.059441686, 0.969725251}, - {7.375, 0.999999166, 0.999999583, 1.059999943, 1.059442997, 0.969726026}, - {7.379167, 0.999999166, 0.999999583, 1.059999943, 1.059444308, 0.969726801}, - {7.383333, 0.999999166, 0.999999583, 1.059999943, 1.05944562, 0.969727576}, - {7.3875, 0.999999225, 0.999999583, 1.059999943, 1.05944705, 0.969728291}, - {7.391667, 0.999999225, 0.999999583, 1.059999943, 1.059448361, 0.969729066}, - {7.395833, 0.999999225, 0.999999583, 1.059999943, 1.059449673, 0.969729781}, - {7.4, 0.999999225, 0.999999583, 1.059999943, 1.059450984, 0.969730556}, - {7.404167, 0.999999225, 0.999999583, 1.059999943, 1.059452295, 0.969731271}, - {7.408333, 0.999999225, 0.999999583, 1.059999943, 1.059453607, 0.969732046}, - {7.4125, 0.999999225, 0.999999583, 1.059999943, 1.059454918, 0.969732761}, - {7.416667, 0.999999225, 0.999999583, 1.059999943, 1.059456229, 0.969733536}, - {7.420833, 0.999999225, 0.999999583, 1.059999943, 1.059457541, 0.969734252}, - {7.425, 0.999999225, 0.999999583, 1.059999943, 1.059458852, 0.969734967}, - {7.429167, 0.999999225, 0.999999583, 1.059999943, 1.059460163, 0.969735682}, - {7.433333, 0.999999225, 0.999999583, 1.059999943, 1.059461474, 0.969736457}, - {7.4375, 0.999999225, 0.999999583, 1.059999943, 1.059462786, 0.969737172}, - {7.441667, 0.999999225, 0.999999583, 1.059999943, 1.059463978, 0.969737887}, - {7.445833, 0.999999225, 0.999999583, 1.059999943, 1.059465289, 0.969738603}, - {7.45, 0.999999225, 0.999999583, 1.059999943, 1.0594666, 0.969739318}, - {7.454167, 0.999999225, 0.999999583, 1.059999943, 1.059467912, 0.969740033}, - {7.458333, 0.999999225, 0.999999583, 1.059999943, 1.059469104, 0.969740748}, - {7.4625, 0.999999225, 0.999999583, 1.059999943, 1.059470415, 0.969741464}, - {7.466667, 0.999999225, 0.999999583, 1.059999943, 1.059471726, 0.969742179}, - {7.470833, 0.999999225, 0.999999583, 1.059999943, 1.059472919, 0.969742835}, - {7.475, 0.999999225, 0.999999583, 1.059999943, 1.05947423, 0.96974355}, - {7.479167, 0.999999166, 0.999999583, 1.059999943, 1.059475422, 0.969744265}, - {7.483333, 0.999999166, 0.999999583, 1.059999943, 1.059476733, 0.96974498}, - {7.4875, 0.999999166, 0.999999583, 1.059999943, 1.059477925, 0.969745636}, - {7.491667, 0.999999166, 0.999999583, 1.059999943, 1.059479117, 0.969746351}, - {7.495833, 0.999999166, 0.999999583, 1.059999943, 1.059480429, 0.969747007}, - {7.5, 0.999999166, 0.999999583, 1.059999943, 1.059481621, 0.969747722}, - {7.504167, 0.999999166, 0.999999583, 1.059999943, 1.059482932, 0.969748378}, - {7.508333, 0.999999166, 0.999999583, 1.059999943, 1.059484124, 0.969749093}, - {7.5125, 0.999999106, 0.999999583, 1.059999943, 1.059485316, 0.969749749}, - {7.516667, 0.999999106, 0.999999583, 1.059999943, 1.059486508, 0.969750404}, - {7.520833, 0.999999106, 0.999999523, 1.059999943, 1.0594877, 0.96975106}, - {7.525, 0.999999106, 0.999999523, 1.059999943, 1.059489012, 0.969751775}, - {7.529167, 0.999999106, 0.999999523, 1.059999943, 1.059490204, 0.969752431}, - {7.533333, 0.999999106, 0.999999523, 1.059999943, 1.059491396, 0.969753087}, - {7.5375, 0.999999106, 0.999999523, 1.059999943, 1.059492588, 0.969753742}, - {7.541667, 0.999999046, 0.999999523, 1.059999943, 1.05949378, 0.969754398}, - {7.545833, 0.999999046, 0.999999523, 1.059999943, 1.059494972, 0.969755054}, - {7.55, 0.999999046, 0.999999523, 1.059999943, 1.059496164, 0.969755709}, - {7.554167, 0.999999046, 0.999999523, 1.059999943, 1.059497356, 0.969756365}, - {7.558333, 0.999999046, 0.999999523, 1.059999943, 1.059498549, 0.96975702}, - {7.5625, 0.999999046, 0.999999523, 1.059999943, 1.059499741, 0.969757676}, - {7.566667, 0.999999046, 0.999999523, 1.059999943, 1.059500813, 0.969758272}, - {7.570833, 0.999998987, 0.999999523, 1.059999943, 1.059502006, 0.969758928}, - {7.575, 0.999998987, 0.999999523, 1.059999943, 1.059503198, 0.969759583}, - {7.579167, 0.999998987, 0.999999523, 1.059999943, 1.05950439, 0.969760239}, - {7.583333, 0.999998987, 0.999999523, 1.059999943, 1.059505582, 0.969760835}, - {7.5875, 0.999998987, 0.999999523, 1.059999943, 1.059506655, 0.969761491}, - {7.591667, 0.999998987, 0.999999523, 1.059999943, 1.059507847, 0.969762087}, - {7.595833, 0.999998987, 0.999999523, 1.059999943, 1.059509039, 0.969762743}, - {7.6, 0.999998987, 0.999999523, 1.059999943, 1.059510112, 0.969763339}, - {7.604167, 0.999998987, 0.999999523, 1.059999943, 1.059511304, 0.969763994}, - {7.608333, 0.999998987, 0.999999464, 1.059999943, 1.059512377, 0.96976459}, - {7.6125, 0.999998987, 0.999999464, 1.059999943, 1.059513569, 0.969765246}, - {7.616667, 0.999998927, 0.999999464, 1.059999943, 1.059514642, 0.969765842}, - {7.620833, 0.999998927, 0.999999464, 1.059999943, 1.059515834, 0.969766438}, - {7.625, 0.999998927, 0.999999464, 1.059999943, 1.059516907, 0.969767094}, - {7.629167, 0.999998927, 0.999999464, 1.059999943, 1.059518099, 0.96976769}, - {7.633333, 0.999998927, 0.999999464, 1.059999943, 1.059519172, 0.969768286}, - {7.6375, 0.999998927, 0.999999464, 1.059999943, 1.059520364, 0.969768882}, - {7.641667, 0.999998927, 0.999999464, 1.059999943, 1.059521437, 0.969769537}, - {7.645833, 0.999998927, 0.999999464, 1.059999943, 1.05952251, 0.969770134}, - {7.65, 0.999998927, 0.999999523, 1.059999943, 1.059523702, 0.96977073}, - {7.654167, 0.999998927, 0.999999523, 1.059999943, 1.059524775, 0.969771326}, - {7.658333, 0.999998927, 0.999999523, 1.059999943, 1.059525847, 0.969771922}, - {7.6625, 0.999998927, 0.999999523, 1.059999943, 1.05952704, 0.969772518}, - {7.666667, 0.999998987, 0.999999523, 1.059999943, 1.059528112, 0.969773114}, - {7.670833, 0.999998987, 0.999999523, 1.059999943, 1.059529185, 0.96977371}, - {7.675, 0.999998987, 0.999999523, 1.059999943, 1.059530258, 0.969774306}, - {7.679167, 0.999998987, 0.999999523, 1.059999943, 1.05953145, 0.969774902}, - {7.683333, 0.999998987, 0.999999523, 1.059999943, 1.059532523, 0.969775498}, - {7.6875, 0.999998987, 0.999999523, 1.059999943, 1.059533596, 0.969776094}, - {7.691667, 0.999998987, 0.999999523, 1.059999943, 1.059534669, 0.96977669}, - {7.695833, 0.999998987, 0.999999523, 1.059999943, 1.059535742, 0.969777226}, - {7.7, 0.999998987, 0.999999523, 1.059999943, 1.059536815, 0.969777822}, - {7.704167, 0.999998987, 0.999999523, 1.059999943, 1.059538007, 0.969778419}, - {7.708333, 0.999998987, 0.999999523, 1.059999943, 1.05953908, 0.969779015}, - {7.7125, 0.999999046, 0.999999523, 1.059999943, 1.059540153, 0.969779611}, - {7.716667, 0.999999046, 0.999999523, 1.059999943, 1.059541225, 0.969780147}, - {7.720833, 0.999999046, 0.999999523, 1.059999943, 1.059542298, 0.969780743}, - {7.725, 0.999999046, 0.999999523, 1.059999943, 1.059543371, 0.969781339}, - {7.729167, 0.999999046, 0.999999523, 1.059999943, 1.059544444, 0.969781935}, - {7.733333, 0.999999046, 0.999999583, 1.059999943, 1.059545517, 0.969782472}, - {7.7375, 0.999999046, 0.999999583, 1.059999943, 1.05954659, 0.969783068}, - {7.741667, 0.999999106, 0.999999583, 1.059999943, 1.059547663, 0.969783604}, - {7.745833, 0.999999106, 0.999999583, 1.059999943, 1.059548736, 0.9697842}, - {7.75, 0.999999106, 0.999999583, 1.059999943, 1.059549809, 0.969784796}, - {7.754167, 0.999999106, 0.999999583, 1.059999943, 1.059550762, 0.969785333}, - {7.758333, 0.999999106, 0.999999583, 1.059999943, 1.059551835, 0.969785929}, - {7.7625, 0.999999106, 0.999999583, 1.059999943, 1.059552908, 0.969786465}, - {7.766667, 0.999999106, 0.999999583, 1.059999943, 1.059553981, 0.969787061}, - {7.770833, 0.999999166, 0.999999583, 1.059999943, 1.059555054, 0.969787598}, - {7.775, 0.999999166, 0.999999583, 1.059999943, 1.059556127, 0.969788194}, - {7.779167, 0.999999166, 0.999999583, 1.059999943, 1.059557199, 0.96978873}, - {7.783333, 0.999999166, 0.999999642, 1.059999943, 1.059558153, 0.969789326}, - {7.7875, 0.999999166, 0.999999642, 1.059999943, 1.059559226, 0.969789863}, - {7.791667, 0.999999166, 0.999999642, 1.059999943, 1.059560299, 0.969790399}, - {7.795833, 0.999999225, 0.999999642, 1.059999943, 1.059561372, 0.969790995}, - {7.8, 0.999999225, 0.999999642, 1.059999943, 1.059562325, 0.969791532}, - {7.804167, 0.999999225, 0.999999642, 1.059999943, 1.059563398, 0.969792128}, - {7.808333, 0.999999225, 0.999999642, 1.059999943, 1.059564471, 0.969792664}, - {7.8125, 0.999999225, 0.999999642, 1.059999943, 1.059565425, 0.9697932}, - {7.816667, 0.999999225, 0.999999642, 1.059999943, 1.059566498, 0.969793737}, - {7.820833, 0.999999225, 0.999999642, 1.059999943, 1.059567571, 0.969794333}, - {7.825, 0.999999285, 0.999999642, 1.059999943, 1.059568524, 0.969794869}, - {7.829167, 0.999999285, 0.999999642, 1.059999943, 1.059569597, 0.969795406}, - {7.833333, 0.999999285, 0.999999642, 1.059999943, 1.05957067, 0.969795942}, - {7.8375, 0.999999285, 0.999999642, 1.059999943, 1.059571624, 0.969796479}, - {7.841667, 0.999999285, 0.999999702, 1.059999943, 1.059572697, 0.969797075}, - {7.845833, 0.999999285, 0.999999702, 1.059999943, 1.05957365, 0.969797611}, - {7.85, 0.999999285, 0.999999702, 1.059999943, 1.059574723, 0.969798148}, - {7.854167, 0.999999285, 0.999999702, 1.059999943, 1.059575677, 0.969798684}, - {7.858333, 0.999999285, 0.999999702, 1.059999943, 1.05957675, 0.969799221}, - {7.8625, 0.999999344, 0.999999702, 1.059999943, 1.059577703, 0.969799757}, - {7.866667, 0.999999344, 0.999999702, 1.059999943, 1.059578776, 0.969800293}, - {7.870833, 0.999999344, 0.999999702, 1.059999943, 1.05957973, 0.96980083}, - {7.875, 0.999999344, 0.999999702, 1.059999943, 1.059580684, 0.969801366}, - {7.879167, 0.999999344, 0.999999702, 1.059999943, 1.059581757, 0.969801903}, - {7.883333, 0.999999344, 0.999999702, 1.059999943, 1.05958271, 0.969802439}, - {7.8875, 0.999999344, 0.999999702, 1.059999943, 1.059583664, 0.969802916}, - {7.891667, 0.999999344, 0.999999702, 1.059999943, 1.059584737, 0.969803452}, - {7.895833, 0.999999344, 0.999999702, 1.059999943, 1.059585691, 0.969803989}, - {7.9, 0.999999344, 0.999999702, 1.059999943, 1.059586644, 0.969804525}, - {7.904167, 0.999999344, 0.999999702, 1.059999943, 1.059587717, 0.969805062}, - {7.908333, 0.999999344, 0.999999702, 1.059999943, 1.059588671, 0.969805539}, - {7.9125, 0.999999344, 0.999999702, 1.059999943, 1.059589624, 0.969806075}, - {7.916667, 0.999999344, 0.999999702, 1.059999943, 1.059590578, 0.969806612}, - {7.920833, 0.999999344, 0.999999702, 1.059999943, 1.059591532, 0.969807088}, - {7.925, 0.999999344, 0.999999702, 1.059999943, 1.059592605, 0.969807625}, - {7.929167, 0.999999344, 0.999999702, 1.059999943, 1.059593558, 0.969808161}, - {7.933333, 0.999999344, 0.999999702, 1.059999943, 1.059594512, 0.969808638}, - {7.9375, 0.999999344, 0.999999702, 1.059999943, 1.059595466, 0.969809175}, - {7.941667, 0.999999344, 0.999999702, 1.059999943, 1.059596419, 0.969809651}, - {7.945833, 0.999999344, 0.999999702, 1.059999943, 1.059597373, 0.969810188}, - {7.95, 0.999999344, 0.999999702, 1.059999943, 1.059598327, 0.969810665}, - {7.954167, 0.999999344, 0.999999702, 1.059999943, 1.05959928, 0.969811141}, - {7.958333, 0.999999344, 0.999999702, 1.059999943, 1.059600234, 0.969811678}, - {7.9625, 0.999999344, 0.999999702, 1.059999943, 1.059601188, 0.969812155}, - {7.966667, 0.999999344, 0.999999702, 1.059999943, 1.059602141, 0.969812691}, - {7.970833, 0.999999344, 0.999999702, 1.059999943, 1.059603095, 0.969813168}, - {7.975, 0.999999344, 0.999999702, 1.059999943, 1.05960393, 0.969813645}, - {7.979167, 0.999999344, 0.999999702, 1.059999943, 1.059604883, 0.969814122}, - {7.983333, 0.999999344, 0.999999702, 1.059999943, 1.059605837, 0.969814658}, - {7.9875, 0.999999344, 0.999999702, 1.059999943, 1.059606791, 0.969815135}, - {7.991667, 0.999999344, 0.999999702, 1.059999943, 1.059607744, 0.969815612}, - {7.995833, 0.999999344, 0.999999702, 1.059999943, 1.059608579, 0.969816089}, - {8, 0.999999344, 0.999999702, 1.059999943, 1.059609532, 0.969816566}, - {8.004167, 0.999999285, 0.999999702, 1.059999943, 1.059610486, 0.969817042}, - {8.008333, 0.999999285, 0.999999702, 1.059999943, 1.05961144, 0.969817519}, - {8.0125, 0.999999285, 0.999999702, 1.059999943, 1.059612274, 0.969817996}, - {8.016667, 0.999999285, 0.999999702, 1.059999943, 1.059613228, 0.969818473}, - {8.020833, 0.999999285, 0.999999702, 1.059999943, 1.059614182, 0.96981895}, - {8.025, 0.999999285, 0.999999702, 1.059999943, 1.059615016, 0.969819427}, - {8.029167, 0.999999285, 0.999999702, 1.059999943, 1.05961597, 0.969819903}, - {8.033333, 0.999999285, 0.999999702, 1.059999943, 1.059616804, 0.96982038}, - {8.0375, 0.999999285, 0.999999642, 1.059999943, 1.059617758, 0.969820857}, - {8.041667, 0.999999285, 0.999999642, 1.059999943, 1.059618592, 0.969821274}, - {8.045833, 0.999999285, 0.999999642, 1.059999943, 1.059619546, 0.969821751}, - {8.05, 0.999999285, 0.999999642, 1.059999943, 1.05962038, 0.969822228}, - {8.054167, 0.999999285, 0.999999642, 1.059999943, 1.059621334, 0.969822705}, - {8.058333, 0.999999285, 0.999999642, 1.059999943, 1.059622169, 0.969823182}, - {8.0625, 0.999999285, 0.999999642, 1.059999943, 1.059623122, 0.969823599}, - {8.066667, 0.999999285, 0.999999642, 1.059999943, 1.059623957, 0.969824076}, - {8.070833, 0.999999285, 0.999999642, 1.059999943, 1.059624791, 0.969824493}, - {8.075, 0.999999285, 0.999999642, 1.059999943, 1.059625745, 0.96982497}, - {8.079167, 0.999999225, 0.999999642, 1.059999943, 1.059626579, 0.969825447}, - {8.083333, 0.999999225, 0.999999642, 1.059999943, 1.059627414, 0.969825864}, - {8.0875, 0.999999225, 0.999999642, 1.059999943, 1.059628367, 0.969826341}, - {8.091667, 0.999999225, 0.999999642, 1.059999943, 1.059629202, 0.969826758}, - {8.095833, 0.999999225, 0.999999642, 1.059999943, 1.059630036, 0.969827235}, - {8.1, 0.999999225, 0.999999642, 1.059999943, 1.05963099, 0.969827652}, - {8.104167, 0.999999225, 0.999999642, 1.059999943, 1.059631824, 0.969828129}, - {8.108333, 0.999999225, 0.999999642, 1.059999943, 1.059632659, 0.969828546}, - {8.1125, 0.999999225, 0.999999642, 1.059999943, 1.059633493, 0.969829023}, - {8.116667, 0.999999225, 0.999999642, 1.059999943, 1.059634328, 0.96982944}, - {8.120833, 0.999999225, 0.999999642, 1.059999943, 1.059635162, 0.969829857}, - {8.125, 0.999999225, 0.999999642, 1.059999943, 1.059636116, 0.969830334}, - {8.129167, 0.999999225, 0.999999642, 1.059999943, 1.05963695, 0.969830751}, - {8.133333, 0.999999225, 0.999999642, 1.059999943, 1.059637785, 0.969831169}, - {8.1375, 0.999999225, 0.999999642, 1.059999943, 1.059638619, 0.969831645}, - {8.141667, 0.999999225, 0.999999642, 1.059999943, 1.059639454, 0.969832063}, - {8.145833, 0.999999225, 0.999999642, 1.059999943, 1.059640288, 0.96983248}, - {8.15, 0.999999225, 0.999999642, 1.059999943, 1.059641123, 0.969832897}, - {8.154167, 0.999999285, 0.999999642, 1.059999943, 1.059641957, 0.969833374}, - {8.158333, 0.999999285, 0.999999642, 1.059999943, 1.059642792, 0.969833791}, - {8.1625, 0.999999285, 0.999999642, 1.059999943, 1.059643626, 0.969834208}, - {8.166667, 0.999999285, 0.999999642, 1.059999943, 1.059644461, 0.969834626}, - {8.170833, 0.999999285, 0.999999702, 1.059999943, 1.059645295, 0.969835043}, - {8.175, 0.999999285, 0.999999702, 1.059999943, 1.05964613, 0.96983546}, - {8.179167, 0.999999285, 0.999999702, 1.059999943, 1.059646964, 0.969835877}, - {8.183333, 0.999999285, 0.999999702, 1.059999943, 1.059647799, 0.969836354}, - {8.1875, 0.999999285, 0.999999702, 1.059999943, 1.059648633, 0.969836771}, - {8.191667, 0.999999285, 0.999999702, 1.059999943, 1.059649467, 0.969837189}, - {8.195833, 0.999999285, 0.999999702, 1.059999943, 1.059650302, 0.969837606}, - {8.2, 0.999999285, 0.999999702, 1.059999943, 1.059651017, 0.969838023}, - {8.204167, 0.999999285, 0.999999702, 1.059999943, 1.059651852, 0.96983844}, - {8.208333, 0.999999285, 0.999999702, 1.059999943, 1.059652686, 0.969838858}, - {8.2125, 0.999999285, 0.999999702, 1.059999943, 1.059653521, 0.969839275}, - {8.216667, 0.999999285, 0.999999702, 1.059999943, 1.059654355, 0.969839692}, - {8.220833, 0.999999344, 0.999999702, 1.059999943, 1.05965519, 0.969840109}, - {8.225, 0.999999344, 0.999999702, 1.059999943, 1.059655905, 0.969840527}, - {8.229167, 0.999999344, 0.999999702, 1.059999943, 1.059656739, 0.969840884}, - {8.233333, 0.999999344, 0.999999702, 1.059999943, 1.059657574, 0.969841301}, - {8.2375, 0.999999344, 0.999999702, 1.059999943, 1.059658408, 0.969841719}, - {8.241667, 0.999999344, 0.999999702, 1.059999943, 1.059659123, 0.969842136}, - {8.245833, 0.999999344, 0.999999702, 1.059999943, 1.059659958, 0.969842553}, - {8.25, 0.999999344, 0.999999702, 1.059999943, 1.059660792, 0.96984297}, - {8.254167, 0.999999344, 0.999999702, 1.059999943, 1.059661508, 0.969843388}, - {8.258333, 0.999999344, 0.999999702, 1.059999943, 1.059662342, 0.969843745}, - {8.2625, 0.999999344, 0.999999702, 1.059999943, 1.059663177, 0.969844162}, - {8.266667, 0.999999344, 0.999999702, 1.059999943, 1.059663892, 0.96984458}, - {8.270833, 0.999999404, 0.999999702, 1.059999943, 1.059664726, 0.969844997}, - {8.275, 0.999999404, 0.999999762, 1.059999943, 1.059665561, 0.969845355}, - {8.279167, 0.999999404, 0.999999762, 1.059999943, 1.059666276, 0.969845772}, - {8.283333, 0.999999404, 0.999999762, 1.059999943, 1.05966711, 0.969846189}, - {8.2875, 0.999999404, 0.999999762, 1.059999943, 1.059667826, 0.969846606}, - {8.291667, 0.999999404, 0.999999762, 1.059999943, 1.05966866, 0.969846964}, - {8.295833, 0.999999404, 0.999999762, 1.059999943, 1.059669495, 0.969847381}, - {8.3, 0.999999404, 0.999999762, 1.059999943, 1.05967021, 0.969847798}, - {8.304167, 0.999999404, 0.999999762, 1.059999943, 1.059671044, 0.969848156}, - {8.308333, 0.999999404, 0.999999762, 1.059999943, 1.05967176, 0.969848573}, - {8.3125, 0.999999404, 0.999999762, 1.059999943, 1.059672594, 0.969848931}, - {8.316667, 0.999999404, 0.999999762, 1.059999943, 1.059673309, 0.969849348}, - {8.320833, 0.999999404, 0.999999762, 1.059999943, 1.059674144, 0.969849765}, - {8.325, 0.999999464, 0.999999762, 1.059999943, 1.059674859, 0.969850123}, - {8.329167, 0.999999464, 0.999999762, 1.059999943, 1.059675574, 0.96985054}, - {8.333333, 0.999999464, 0.999999762, 1.059999943, 1.059676409, 0.969850898}, - {8.3375, 0.999999464, 0.999999762, 1.059999943, 1.059677124, 0.969851315}, - {8.341667, 0.999999464, 0.999999762, 1.059999943, 1.059677958, 0.969851673}, - {8.345833, 0.999999464, 0.999999762, 1.059999943, 1.059678674, 0.96985209}, - {8.35, 0.999999464, 0.999999762, 1.059999943, 1.059679389, 0.969852448}, - {8.354167, 0.999999464, 0.999999762, 1.059999943, 1.059680223, 0.969852865}, - {8.358333, 0.999999464, 0.999999762, 1.059999943, 1.059680939, 0.969853222}, - {8.3625, 0.999999464, 0.999999762, 1.059999943, 1.059681654, 0.96985358}, - {8.366667, 0.999999464, 0.999999762, 1.059999943, 1.059682488, 0.969853997}, - {8.370833, 0.999999464, 0.999999762, 1.059999943, 1.059683204, 0.969854355}, - {8.375, 0.999999464, 0.999999762, 1.059999943, 1.059683919, 0.969854712}, - {8.379167, 0.999999464, 0.999999762, 1.059999943, 1.059684753, 0.96985513}, - {8.383333, 0.999999464, 0.999999762, 1.059999943, 1.059685469, 0.969855487}, - {8.3875, 0.999999464, 0.999999762, 1.059999943, 1.059686184, 0.969855845}, - {8.391667, 0.999999464, 0.999999762, 1.059999943, 1.059686899, 0.969856262}, - {8.395833, 0.999999464, 0.999999762, 1.059999943, 1.059687614, 0.96985662}, - {8.4, 0.999999464, 0.999999762, 1.059999943, 1.059688449, 0.969856977}, - {8.404167, 0.999999464, 0.999999762, 1.059999943, 1.059689164, 0.969857335}, - {8.408333, 0.999999464, 0.999999762, 1.059999943, 1.059689879, 0.969857752}, - {8.4125, 0.999999464, 0.999999762, 1.059999943, 1.059690595, 0.96985811}, - {8.416667, 0.999999464, 0.999999762, 1.059999943, 1.05969131, 0.969858468}, - {8.420833, 0.999999464, 0.999999762, 1.059999943, 1.059692025, 0.969858825}, - {8.425, 0.999999464, 0.999999762, 1.059999943, 1.05969274, 0.969859183}, - {8.429167, 0.999999464, 0.999999762, 1.059999943, 1.059693456, 0.96985954}, - {8.433333, 0.999999464, 0.999999762, 1.059999943, 1.059694171, 0.969859898}, - {8.4375, 0.999999464, 0.999999762, 1.059999943, 1.059694886, 0.969860256}, - {8.441667, 0.999999464, 0.999999762, 1.059999943, 1.059695601, 0.969860613}, - {8.445833, 0.999999464, 0.999999762, 1.059999943, 1.059696317, 0.969860971}, - {8.45, 0.999999464, 0.999999762, 1.059999943, 1.059697032, 0.969861329}, - {8.454167, 0.999999464, 0.999999762, 1.059999943, 1.059697747, 0.969861686}, - {8.458333, 0.999999464, 0.999999762, 1.059999943, 1.059698462, 0.969862044}, - {8.4625, 0.999999464, 0.999999762, 1.059999943, 1.059699178, 0.969862401}, - {8.466667, 0.999999464, 0.999999762, 1.059999943, 1.059699893, 0.969862759}, - {8.470833, 0.999999464, 0.999999762, 1.059999943, 1.059700608, 0.969863117}, - {8.475, 0.999999464, 0.999999762, 1.059999943, 1.059701324, 0.969863474}, - {8.479167, 0.999999464, 0.999999762, 1.059999943, 1.059702039, 0.969863832}, - {8.483333, 0.999999464, 0.999999762, 1.059999943, 1.059702754, 0.96986419}, - {8.4875, 0.999999464, 0.999999762, 1.059999943, 1.059703469, 0.969864547}, - {8.491667, 0.999999464, 0.999999762, 1.059999943, 1.059704065, 0.969864845}, - {8.495833, 0.999999464, 0.999999762, 1.059999943, 1.059704781, 0.969865203}, - {8.5, 0.999999464, 0.999999762, 1.059999943, 1.059705496, 0.969865561}, - {8.504167, 0.999999464, 0.999999762, 1.059999943, 1.059706211, 0.969865918}, - {8.508333, 0.999999464, 0.999999762, 1.059999943, 1.059706926, 0.969866216}, - {8.5125, 0.999999464, 0.999999762, 1.059999943, 1.059707522, 0.969866574}, - {8.516667, 0.999999464, 0.999999762, 1.059999943, 1.059708238, 0.969866931}, - {8.520833, 0.999999464, 0.999999762, 1.059999943, 1.059708953, 0.969867229}, - {8.525, 0.999999464, 0.999999762, 1.059999943, 1.059709549, 0.969867587}, - {8.529167, 0.999999464, 0.999999762, 1.059999943, 1.059710264, 0.969867945}, - {8.533333, 0.999999464, 0.999999762, 1.059999943, 1.059710979, 0.969868243}, - {8.5375, 0.999999464, 0.999999762, 1.059999943, 1.059711576, 0.9698686}, - {8.541667, 0.999999464, 0.999999762, 1.059999943, 1.059712291, 0.969868958}, - {8.545833, 0.999999464, 0.999999762, 1.059999943, 1.059713006, 0.969869256}, - {8.55, 0.999999464, 0.999999762, 1.059999943, 1.059713602, 0.969869614}, - {8.554167, 0.999999464, 0.999999762, 1.059999943, 1.059714317, 0.969869912}, - {8.558333, 0.999999464, 0.999999762, 1.059999943, 1.059715033, 0.969870269}, - {8.5625, 0.999999464, 0.999999762, 1.059999943, 1.059715629, 0.969870567}, - {8.566667, 0.999999464, 0.999999762, 1.059999943, 1.059716344, 0.969870925}, - {8.570833, 0.999999464, 0.999999762, 1.059999943, 1.05971694, 0.969871223}, - {8.575, 0.999999464, 0.999999762, 1.059999943, 1.059717655, 0.969871581}, - {8.579167, 0.999999464, 0.999999762, 1.059999943, 1.059718251, 0.969871879}, - {8.583333, 0.999999464, 0.999999762, 1.059999943, 1.059718966, 0.969872236}, - {8.5875, 0.999999464, 0.999999762, 1.059999943, 1.059719563, 0.969872534}, - {8.591667, 0.999999464, 0.999999762, 1.059999943, 1.059720278, 0.969872832}, - {8.595833, 0.999999464, 0.999999762, 1.059999943, 1.059720874, 0.96987319}, - {8.6, 0.999999464, 0.999999762, 1.059999943, 1.059721589, 0.969873488}, - {8.604167, 0.999999464, 0.999999762, 1.059999943, 1.059722185, 0.969873846}, - {8.608333, 0.999999464, 0.999999762, 1.059999943, 1.059722781, 0.969874144}, - {8.6125, 0.999999464, 0.999999762, 1.059999943, 1.059723496, 0.969874442}, - {8.616667, 0.999999464, 0.999999762, 1.059999943, 1.059724092, 0.969874799}, - {8.620833, 0.999999464, 0.999999762, 1.059999943, 1.059724808, 0.969875097}, - {8.625, 0.999999464, 0.999999762, 1.059999943, 1.059725404, 0.969875395}, - {8.629167, 0.999999464, 0.999999762, 1.059999943, 1.059726, 0.969875693}, - {8.633333, 0.999999464, 0.999999762, 1.059999943, 1.059726715, 0.969876051}, - {8.6375, 0.999999464, 0.999999762, 1.059999943, 1.059727311, 0.969876349}, - {8.641667, 0.999999464, 0.999999762, 1.059999943, 1.059727907, 0.969876647}, - {8.645833, 0.999999464, 0.999999762, 1.059999943, 1.059728622, 0.969876945}, - {8.65, 0.999999464, 0.999999762, 1.059999943, 1.059729218, 0.969877303}, - {8.654167, 0.999999464, 0.999999762, 1.059999943, 1.059729815, 0.969877601}, - {8.658333, 0.999999464, 0.999999762, 1.059999943, 1.05973053, 0.969877899}, - {8.6625, 0.999999464, 0.999999762, 1.059999943, 1.059731126, 0.969878197}, - {8.666667, 0.999999464, 0.999999762, 1.059999943, 1.059731722, 0.969878495}, - {8.670833, 0.999999464, 0.999999762, 1.059999943, 1.059732318, 0.969878793}, - {8.675, 0.999999464, 0.999999762, 1.059999943, 1.059733033, 0.969879091}, - {8.679167, 0.999999464, 0.999999762, 1.059999943, 1.059733629, 0.969879448}, - {8.683333, 0.999999464, 0.999999762, 1.059999943, 1.059734225, 0.969879746}, - {8.6875, 0.999999464, 0.999999762, 1.059999943, 1.059734821, 0.969880044}, - {8.691667, 0.999999464, 0.999999762, 1.059999943, 1.059735417, 0.969880342}, - {8.695833, 0.999999464, 0.999999762, 1.059999943, 1.059736013, 0.969880641}, - {8.7, 0.999999464, 0.999999762, 1.059999943, 1.059736729, 0.969880939}, - {8.704167, 0.999999464, 0.999999762, 1.059999943, 1.059737325, 0.969881237}, - {8.708333, 0.999999523, 0.999999821, 1.059999943, 1.059737921, 0.969881535}, - {8.7125, 0.999999523, 0.999999821, 1.059999943, 1.059738517, 0.969881833}, - {8.716667, 0.999999523, 0.999999821, 1.059999943, 1.059739113, 0.969882131}, - {8.720833, 0.999999523, 0.999999821, 1.059999943, 1.059739709, 0.969882429}, - {8.725, 0.999999523, 0.999999821, 1.059999943, 1.059740305, 0.969882727}, - {8.729167, 0.999999523, 0.999999821, 1.059999943, 1.059740901, 0.969883025}, - {8.733333, 0.999999523, 0.999999821, 1.059999943, 1.059741616, 0.969883323}, - {8.7375, 0.999999523, 0.999999821, 1.059999943, 1.059742212, 0.969883621}, - {8.741667, 0.999999523, 0.999999821, 1.059999943, 1.059742808, 0.969883919}, - {8.745833, 0.999999523, 0.999999821, 1.059999943, 1.059743404, 0.969884217}, - {8.75, 0.999999523, 0.999999821, 1.059999943, 1.059744, 0.969884515}, - {8.754167, 0.999999523, 0.999999821, 1.059999943, 1.059744596, 0.969884813}, - {8.758333, 0.999999523, 0.999999821, 1.059999943, 1.059745193, 0.969885051}, - {8.7625, 0.999999523, 0.999999821, 1.059999943, 1.059745789, 0.969885349}, - {8.766667, 0.999999523, 0.999999821, 1.059999943, 1.059746385, 0.969885647}, - {8.770833, 0.999999523, 0.999999821, 1.059999943, 1.059746981, 0.969885945}, - {8.775, 0.999999523, 0.999999821, 1.059999943, 1.059747577, 0.969886243}, - {8.779167, 0.999999523, 0.999999821, 1.059999943, 1.059748173, 0.969886541}, - {8.783333, 0.999999523, 0.999999821, 1.059999943, 1.059748769, 0.96988678}, - {8.7875, 0.999999523, 0.999999821, 1.059999943, 1.059749246, 0.969887078}, - {8.791667, 0.999999523, 0.999999821, 1.059999943, 1.059749842, 0.969887376}, - {8.795833, 0.999999583, 0.999999821, 1.059999943, 1.059750438, 0.969887674}, - {8.8, 0.999999583, 0.999999821, 1.059999943, 1.059751034, 0.969887972}, - {8.804167, 0.999999583, 0.999999821, 1.059999943, 1.05975163, 0.96988821}, - {8.808333, 0.999999583, 0.999999821, 1.059999943, 1.059752226, 0.969888508}, - {8.8125, 0.999999583, 0.999999821, 1.059999943, 1.059752822, 0.969888806}, - {8.816667, 0.999999583, 0.999999821, 1.059999943, 1.059753418, 0.969889104}, - {8.820833, 0.999999583, 0.999999821, 1.059999943, 1.059753895, 0.969889343}, - {8.825, 0.999999583, 0.999999821, 1.059999943, 1.059754491, 0.969889641}, - {8.829167, 0.999999583, 0.999999821, 1.059999943, 1.059755087, 0.969889939}, - {8.833333, 0.999999583, 0.999999821, 1.059999943, 1.059755683, 0.969890177}, - {8.8375, 0.999999583, 0.999999821, 1.059999943, 1.059756279, 0.969890475}, - {8.841667, 0.999999583, 0.999999821, 1.059999943, 1.059756875, 0.969890773}, - {8.845833, 0.999999583, 0.999999821, 1.059999943, 1.059757352, 0.969891012}, - {8.85, 0.999999583, 0.999999821, 1.059999943, 1.059757948, 0.96989131}, - {8.854167, 0.999999583, 0.999999821, 1.059999943, 1.059758544, 0.969891608}, - {8.858333, 0.999999583, 0.999999821, 1.059999943, 1.05975914, 0.969891846}, - {8.8625, 0.999999583, 0.999999821, 1.059999943, 1.059759617, 0.969892144}, - {8.866667, 0.999999583, 0.999999821, 1.059999943, 1.059760213, 0.969892383}, - {8.870833, 0.999999583, 0.999999821, 1.059999943, 1.059760809, 0.969892681}, - {8.875, 0.999999583, 0.999999821, 1.059999943, 1.059761286, 0.969892919}, - {8.879167, 0.999999583, 0.999999821, 1.059999943, 1.059761882, 0.969893217}, - {8.883333, 0.999999583, 0.999999821, 1.059999943, 1.059762478, 0.969893456}, - {8.8875, 0.999999583, 0.999999821, 1.059999943, 1.059762955, 0.969893754}, - {8.891667, 0.999999583, 0.999999821, 1.059999943, 1.059763551, 0.969893992}, - {8.895833, 0.999999583, 0.999999821, 1.059999943, 1.059764147, 0.96989429}, - {8.9, 0.999999583, 0.999999821, 1.059999943, 1.059764624, 0.969894528}, - {8.904167, 0.999999583, 0.999999821, 1.059999943, 1.05976522, 0.969894826}, - {8.908333, 0.999999583, 0.999999821, 1.059999943, 1.059765697, 0.969895065}, - {8.9125, 0.999999583, 0.999999821, 1.059999943, 1.059766293, 0.969895363}, - {8.916667, 0.999999583, 0.999999821, 1.059999943, 1.059766889, 0.969895601}, - {8.920833, 0.999999583, 0.999999821, 1.059999943, 1.059767365, 0.96989584}, - {8.925, 0.999999583, 0.999999821, 1.059999943, 1.059767962, 0.969896138}, - {8.929167, 0.999999583, 0.999999821, 1.059999943, 1.059768438, 0.969896376}, - {8.933333, 0.999999583, 0.999999821, 1.059999943, 1.059769034, 0.969896674}, - {8.9375, 0.999999583, 0.999999821, 1.059999943, 1.059769511, 0.969896913}, - {8.941667, 0.999999583, 0.999999821, 1.059999943, 1.059770107, 0.969897151}, - {8.945833, 0.999999583, 0.999999821, 1.059999943, 1.059770584, 0.969897449}, - {8.95, 0.999999583, 0.999999821, 1.059999943, 1.05977118, 0.969897687}, - {8.954167, 0.999999583, 0.999999821, 1.059999943, 1.059771657, 0.969897926}, - {8.958333, 0.999999583, 0.999999821, 1.059999943, 1.059772253, 0.969898224}, - {8.9625, 0.999999583, 0.999999821, 1.059999943, 1.05977273, 0.969898462}, - {8.966667, 0.999999583, 0.999999821, 1.059999943, 1.059773326, 0.969898701}, - {8.970833, 0.999999583, 0.999999821, 1.059999943, 1.059773803, 0.969898939}, - {8.975, 0.999999583, 0.999999821, 1.059999943, 1.05977428, 0.969899237}, - {8.979167, 0.999999583, 0.999999821, 1.059999943, 1.059774876, 0.969899476}, - {8.983333, 0.999999583, 0.999999821, 1.059999943, 1.059775352, 0.969899714}, - {8.9875, 0.999999583, 0.999999821, 1.059999943, 1.059775949, 0.969899952}, - {8.991667, 0.999999583, 0.999999821, 1.059999943, 1.059776425, 0.969900191}, - {8.995833, 0.999999583, 0.999999821, 1.059999943, 1.059776902, 0.969900429}, - {9, 0.999999583, 0.999999821, 1.059999943, 1.059777498, 0.969900727}, - {9.004167, 0.999999583, 0.999999821, 1.059999943, 1.059777975, 0.969900966}, - {9.008333, 0.999999583, 0.999999821, 1.059999943, 1.059778452, 0.969901204}, - {9.0125, 0.999999583, 0.999999821, 1.059999943, 1.059779048, 0.969901443}, - {9.016667, 0.999999583, 0.999999821, 1.059999943, 1.059779525, 0.969901681}, - {9.020833, 0.999999583, 0.999999821, 1.059999943, 1.059780002, 0.969901919}, - {9.025, 0.999999583, 0.999999821, 1.059999943, 1.059780598, 0.969902158}, - {9.029167, 0.999999583, 0.999999821, 1.059999943, 1.059781075, 0.969902396}, - {9.033333, 0.999999583, 0.999999821, 1.059999943, 1.059781551, 0.969902635}, - {9.0375, 0.999999583, 0.999999821, 1.059999943, 1.059782028, 0.969902873}, - {9.041667, 0.999999583, 0.999999821, 1.059999943, 1.059782505, 0.969903171}, - {9.045833, 0.999999583, 0.999999821, 1.059999943, 1.059783101, 0.969903409}, - {9.05, 0.999999583, 0.999999821, 1.059999943, 1.059783578, 0.969903648}, - {9.054167, 0.999999583, 0.999999821, 1.059999943, 1.059784055, 0.969903886}, - {9.058333, 0.999999583, 0.999999821, 1.059999943, 1.059784532, 0.969904125}, - {9.0625, 0.999999583, 0.999999821, 1.059999943, 1.059785128, 0.969904363}, - {9.066667, 0.999999583, 0.999999821, 1.059999943, 1.059785604, 0.969904542}, - {9.070833, 0.999999583, 0.999999821, 1.059999943, 1.059786081, 0.96990478}, - {9.075, 0.999999583, 0.999999821, 1.059999943, 1.059786558, 0.969905019}, - {9.079167, 0.999999583, 0.999999821, 1.059999943, 1.059787035, 0.969905257}, - {9.083333, 0.999999583, 0.999999821, 1.059999943, 1.059787512, 0.969905496}, - {9.0875, 0.999999583, 0.999999821, 1.059999943, 1.059787989, 0.969905734}, - {9.091667, 0.999999583, 0.999999821, 1.059999943, 1.059788466, 0.969905972}, - {9.095833, 0.999999583, 0.999999821, 1.059999943, 1.059789062, 0.969906211}, - {9.1, 0.999999583, 0.999999821, 1.059999943, 1.059789538, 0.969906449}, - {9.104167, 0.999999583, 0.999999821, 1.059999943, 1.059790015, 0.969906688}, - {9.108333, 0.999999583, 0.999999821, 1.059999943, 1.059790492, 0.969906926}, - {9.1125, 0.999999583, 0.999999821, 1.059999943, 1.059790969, 0.969907105}, - {9.116667, 0.999999583, 0.999999821, 1.059999943, 1.059791446, 0.969907343}, - {9.120833, 0.999999583, 0.999999821, 1.059999943, 1.059791923, 0.969907582}, - {9.125, 0.999999583, 0.999999821, 1.059999943, 1.059792399, 0.96990782}, - {9.129167, 0.999999583, 0.999999821, 1.059999943, 1.059792876, 0.969908059}, - {9.133333, 0.999999583, 0.999999821, 1.059999943, 1.059793353, 0.969908297}, - {9.1375, 0.999999583, 0.999999821, 1.059999943, 1.05979383, 0.969908476}, - {9.141667, 0.999999583, 0.999999821, 1.059999943, 1.059794307, 0.969908714}, - {9.145833, 0.999999583, 0.999999821, 1.059999943, 1.059794784, 0.969908953}, - {9.15, 0.999999583, 0.999999821, 1.059999943, 1.05979526, 0.969909191}, - {9.154167, 0.999999583, 0.999999821, 1.059999943, 1.059795737, 0.96990937}, - {9.158333, 0.999999583, 0.999999821, 1.059999943, 1.059796214, 0.969909608}, - {9.1625, 0.999999583, 0.999999821, 1.059999943, 1.059796691, 0.969909847}, - {9.166667, 0.999999642, 0.999999821, 1.059999943, 1.059797168, 0.969910085}, - {9.170833, 0.999999642, 0.999999821, 1.059999943, 1.059797645, 0.969910264}, - {9.175, 0.999999642, 0.999999821, 1.059999943, 1.059798121, 0.969910502}, - {9.179167, 0.999999642, 0.999999821, 1.059999943, 1.059798598, 0.969910741}, - {9.183333, 0.999999642, 0.999999881, 1.059999943, 1.059799075, 0.96991092}, - {9.1875, 0.999999642, 0.999999881, 1.059999943, 1.059799433, 0.969911158}, - {9.191667, 0.999999642, 0.999999881, 1.059999943, 1.05979991, 0.969911397}, - {9.195833, 0.999999642, 0.999999881, 1.059999943, 1.059800386, 0.969911575}, - {9.2, 0.999999642, 0.999999881, 1.059999943, 1.059800863, 0.969911814}, - {9.204167, 0.999999642, 0.999999881, 1.059999943, 1.05980134, 0.969912052}, - {9.208333, 0.999999642, 0.999999881, 1.059999943, 1.059801817, 0.969912231}, - {9.2125, 0.999999642, 0.999999881, 1.059999943, 1.059802294, 0.969912469}, - {9.216667, 0.999999642, 0.999999881, 1.059999943, 1.059802771, 0.969912708}, - {9.220833, 0.999999642, 0.999999881, 1.059999943, 1.059803128, 0.969912887}, - {9.225, 0.999999642, 0.999999881, 1.059999943, 1.059803605, 0.969913125}, - {9.229167, 0.999999642, 0.999999881, 1.059999943, 1.059804082, 0.969913304}, - {9.233333, 0.999999642, 0.999999881, 1.059999943, 1.059804559, 0.969913542}, - {9.2375, 0.999999642, 0.999999881, 1.059999943, 1.059805036, 0.969913781}, - {9.241667, 0.999999642, 0.999999881, 1.059999943, 1.059805393, 0.96991396}, - {9.245833, 0.999999642, 0.999999881, 1.059999943, 1.05980587, 0.969914198}, - {9.25, 0.999999642, 0.999999881, 1.059999943, 1.059806347, 0.969914377}, - {9.254167, 0.999999642, 0.999999881, 1.059999943, 1.059806824, 0.969914615}, - {9.258333, 0.999999642, 0.999999881, 1.059999943, 1.059807181, 0.969914794}, - {9.2625, 0.999999642, 0.999999881, 1.059999943, 1.059807658, 0.969915032}, - {9.266667, 0.999999642, 0.999999881, 1.059999943, 1.059808135, 0.969915211}, - {9.270833, 0.999999642, 0.999999881, 1.059999943, 1.059808612, 0.96991545}, - {9.275, 0.999999642, 0.999999881, 1.059999943, 1.05980897, 0.969915628}, - {9.279167, 0.999999642, 0.999999881, 1.059999943, 1.059809446, 0.969915867}, - {9.283333, 0.999999642, 0.999999881, 1.059999943, 1.059809923, 0.969916046}, - {9.2875, 0.999999642, 0.999999881, 1.059999943, 1.059810281, 0.969916284}, - {9.291667, 0.999999642, 0.999999881, 1.059999943, 1.059810758, 0.969916463}, - {9.295833, 0.999999642, 0.999999881, 1.059999943, 1.059811234, 0.969916701}, - {9.3, 0.999999642, 0.999999881, 1.059999943, 1.059811592, 0.96991688}, - {9.304167, 0.999999642, 0.999999881, 1.059999943, 1.059812069, 0.969917119}, - {9.308333, 0.999999642, 0.999999881, 1.059999943, 1.059812546, 0.969917297}, - {9.3125, 0.999999642, 0.999999881, 1.059999943, 1.059812903, 0.969917536}, - {9.316667, 0.999999642, 0.999999881, 1.059999943, 1.05981338, 0.969917715}, - {9.320833, 0.999999642, 0.999999881, 1.059999943, 1.059813857, 0.969917893}, - {9.325, 0.999999702, 0.999999881, 1.059999943, 1.059814215, 0.969918132}, - {9.329167, 0.999999702, 0.999999881, 1.059999943, 1.059814692, 0.969918311}, - {9.333333, 0.999999702, 0.999999881, 1.059999943, 1.059815168, 0.969918489}, - {9.3375, 0.999999702, 0.999999881, 1.059999943, 1.059815526, 0.969918728}, - {9.341667, 0.999999702, 0.999999881, 1.059999943, 1.059816003, 0.969918907}, - {9.345833, 0.999999702, 0.999999881, 1.059999943, 1.05981636, 0.969919145}, - {9.35, 0.999999702, 0.999999881, 1.059999943, 1.059816837, 0.969919324}, - {9.354167, 0.999999702, 0.999999881, 1.059999943, 1.059817195, 0.969919503}, - {9.358333, 0.999999702, 0.999999881, 1.059999943, 1.059817672, 0.969919741}, - {9.3625, 0.999999702, 0.999999881, 1.059999943, 1.059818029, 0.96991992}, - {9.366667, 0.999999702, 0.999999881, 1.059999943, 1.059818506, 0.969920099}, - {9.370833, 0.999999702, 0.999999881, 1.059999943, 1.059818983, 0.969920278}, - {9.375, 0.999999702, 0.999999881, 1.059999943, 1.059819341, 0.969920516}, - {9.379167, 0.999999702, 0.999999881, 1.059999943, 1.059819818, 0.969920695}, - {9.383333, 0.999999702, 0.999999881, 1.059999943, 1.059820175, 0.969920874}, - {9.3875, 0.999999702, 0.999999881, 1.059999943, 1.059820652, 0.969921112}, - {9.391667, 0.999999702, 0.999999881, 1.059999943, 1.05982101, 0.969921291}, - {9.395833, 0.999999702, 0.999999881, 1.059999943, 1.059821367, 0.96992147}, - {9.4, 0.999999702, 0.999999881, 1.059999943, 1.059821844, 0.969921649}, - {9.404167, 0.999999702, 0.999999881, 1.059999943, 1.059822202, 0.969921827}, - {9.408333, 0.999999702, 0.999999881, 1.059999943, 1.059822679, 0.969922066}, - {9.4125, 0.999999702, 0.999999881, 1.059999943, 1.059823036, 0.969922245}, - {9.416667, 0.999999702, 0.999999881, 1.059999943, 1.059823513, 0.969922423}, - {9.420833, 0.999999702, 0.999999881, 1.059999943, 1.059823871, 0.969922602}, - {9.425, 0.999999702, 0.999999881, 1.059999943, 1.059824228, 0.969922781}, - {9.429167, 0.999999702, 0.999999881, 1.059999943, 1.059824705, 0.969923019}, - {9.433333, 0.999999702, 0.999999881, 1.059999943, 1.059825063, 0.969923198}, - {9.4375, 0.999999702, 0.999999881, 1.059999943, 1.05982554, 0.969923377}, - {9.441667, 0.999999702, 0.999999881, 1.059999943, 1.059825897, 0.969923556}, - {9.445833, 0.999999702, 0.999999881, 1.059999943, 1.059826255, 0.969923735}, - {9.45, 0.999999702, 0.999999881, 1.059999943, 1.059826732, 0.969923913}, - {9.454167, 0.999999702, 0.999999881, 1.059999943, 1.059827089, 0.969924092}, - {9.458333, 0.999999702, 0.999999881, 1.059999943, 1.059827447, 0.969924271}, - {9.4625, 0.999999702, 0.999999881, 1.059999943, 1.059827924, 0.96992451}, - {9.466667, 0.999999702, 0.999999881, 1.059999943, 1.059828281, 0.969924688}, - {9.470833, 0.999999702, 0.999999881, 1.059999943, 1.059828639, 0.969924867}, - {9.475, 0.999999702, 0.999999881, 1.059999943, 1.059829116, 0.969925046}, - {9.479167, 0.999999702, 0.999999881, 1.059999943, 1.059829474, 0.969925225}, - {9.483333, 0.999999702, 0.999999881, 1.059999943, 1.059829831, 0.969925404}, - {9.4875, 0.999999702, 0.999999881, 1.059999943, 1.059830308, 0.969925582}, - {9.491667, 0.999999702, 0.999999881, 1.059999943, 1.059830666, 0.969925761}, - {9.495833, 0.999999702, 0.999999881, 1.059999943, 1.059831023, 0.96992594}, - {9.5, 0.999999702, 0.999999881, 1.059999943, 1.059831381, 0.969926119}, - {9.504167, 0.999999702, 0.999999881, 1.059999943, 1.059831858, 0.969926298}, - {9.508333, 0.999999702, 0.999999881, 1.059999943, 1.059832215, 0.969926476}, - {9.5125, 0.999999702, 0.999999881, 1.059999943, 1.059832573, 0.969926655}, - {9.516667, 0.999999702, 0.999999881, 1.059999943, 1.059832931, 0.969926834}, - {9.520833, 0.999999702, 0.999999881, 1.059999943, 1.059833407, 0.969927013}, - {9.525, 0.999999702, 0.999999881, 1.059999943, 1.059833765, 0.969927192}, - {9.529167, 0.999999702, 0.999999881, 1.059999943, 1.059834123, 0.969927371}, - {9.533333, 0.999999702, 0.999999881, 1.059999943, 1.05983448, 0.969927549}, - {9.5375, 0.999999702, 0.999999881, 1.059999943, 1.059834838, 0.969927728}, - {9.541667, 0.999999702, 0.999999881, 1.059999943, 1.059835315, 0.969927907}, - {9.545833, 0.999999702, 0.999999881, 1.059999943, 1.059835672, 0.969928086}, - {9.55, 0.999999702, 0.999999881, 1.059999943, 1.05983603, 0.969928265}, - {9.554167, 0.999999702, 0.999999881, 1.059999943, 1.059836388, 0.969928384}, - {9.558333, 0.999999702, 0.999999881, 1.059999943, 1.059836745, 0.969928563}, - {9.5625, 0.999999702, 0.999999881, 1.059999943, 1.059837103, 0.969928741}, - {9.566667, 0.999999702, 0.999999881, 1.059999943, 1.059837461, 0.96992892}, - {9.570833, 0.999999702, 0.999999881, 1.059999943, 1.059837937, 0.969929099}, - {9.575, 0.999999702, 0.999999881, 1.059999943, 1.059838295, 0.969929278}, - {9.579167, 0.999999702, 0.999999881, 1.059999943, 1.059838653, 0.969929457}, - {9.583333, 0.999999702, 0.999999881, 1.059999943, 1.05983901, 0.969929636}, - {9.5875, 0.999999702, 0.999999881, 1.059999943, 1.059839368, 0.969929755}, - {9.591667, 0.999999702, 0.999999881, 1.059999943, 1.059839725, 0.969929934}, - {9.595833, 0.999999702, 0.999999881, 1.059999943, 1.059840083, 0.969930112}, - {9.6, 0.999999702, 0.999999881, 1.059999943, 1.059840441, 0.969930291}, - {9.604167, 0.999999702, 0.999999881, 1.059999943, 1.059840798, 0.96993047}, - {9.608333, 0.999999702, 0.999999881, 1.059999943, 1.059841156, 0.969930649}, - {9.6125, 0.999999702, 0.999999881, 1.059999943, 1.059841514, 0.969930768}, - {9.616667, 0.999999702, 0.999999881, 1.059999943, 1.059841871, 0.969930947}, - {9.620833, 0.999999702, 0.999999881, 1.059999943, 1.059842229, 0.969931126}, - {9.625, 0.999999702, 0.999999881, 1.059999943, 1.059842587, 0.969931304}, - {9.629167, 0.999999702, 0.999999881, 1.059999943, 1.059842944, 0.969931424}, - {9.633333, 0.999999702, 0.999999881, 1.059999943, 1.059843421, 0.969931602}, - {9.6375, 0.999999702, 0.999999881, 1.059999943, 1.059843779, 0.969931781}, - {9.641667, 0.999999702, 0.999999881, 1.059999943, 1.059844136, 0.96993196}, - {9.645833, 0.999999702, 0.999999881, 1.059999943, 1.059844494, 0.969932139}, - {9.65, 0.999999702, 0.999999881, 1.059999943, 1.059844851, 0.969932258}, - {9.654167, 0.999999702, 0.999999881, 1.059999943, 1.05984509, 0.969932437}, - {9.658333, 0.999999702, 0.999999881, 1.059999943, 1.059845448, 0.969932616}, - {9.6625, 0.999999702, 0.999999881, 1.059999943, 1.059845805, 0.969932735}, - {9.666667, 0.999999702, 0.999999881, 1.059999943, 1.059846163, 0.969932914}, - {9.670833, 0.999999702, 0.999999881, 1.059999943, 1.05984652, 0.969933093}, - {9.675, 0.999999702, 0.999999881, 1.059999943, 1.059846878, 0.969933271}, - {9.679167, 0.999999702, 0.999999881, 1.059999943, 1.059847236, 0.969933391}, - {9.683333, 0.999999702, 0.999999881, 1.059999943, 1.059847593, 0.969933569}, - {9.6875, 0.999999702, 0.999999881, 1.059999943, 1.059847951, 0.969933748}, - {9.691667, 0.999999702, 0.999999881, 1.059999943, 1.059848309, 0.969933867}, - {9.695833, 0.999999702, 0.999999881, 1.059999943, 1.059848666, 0.969934046}, - {9.7, 0.999999702, 0.999999881, 1.059999943, 1.059849024, 0.969934225}, - {9.704167, 0.999999702, 0.999999881, 1.059999943, 1.059849381, 0.969934344}, - {9.708333, 0.999999702, 0.999999881, 1.059999943, 1.059849739, 0.969934523}, - {9.7125, 0.999999702, 0.999999881, 1.059999943, 1.059849977, 0.969934702}, - {9.716667, 0.999999702, 0.999999881, 1.059999943, 1.059850335, 0.969934821}, - {9.720833, 0.999999702, 0.999999881, 1.059999943, 1.059850693, 0.969935}, - {9.725, 0.999999702, 0.999999881, 1.059999943, 1.05985105, 0.969935119}, - {9.729167, 0.999999702, 0.999999881, 1.059999943, 1.059851408, 0.969935298}, - {9.733333, 0.999999702, 0.999999881, 1.059999943, 1.059851766, 0.969935477}, - {9.7375, 0.999999762, 0.999999881, 1.059999943, 1.059852123, 0.969935596}, - {9.741667, 0.999999762, 0.999999881, 1.059999943, 1.059852481, 0.969935775}, - {9.745833, 0.999999762, 0.999999881, 1.059999943, 1.059852719, 0.969935894}, - {9.75, 0.999999762, 0.999999881, 1.059999943, 1.059853077, 0.969936073}, - {9.754167, 0.999999762, 0.999999881, 1.059999943, 1.059853435, 0.969936252}, - {9.758333, 0.999999762, 0.999999881, 1.059999943, 1.059853792, 0.969936371}, - {9.7625, 0.999999762, 0.999999881, 1.059999943, 1.05985415, 0.96993655}, - {9.766667, 0.999999762, 0.999999881, 1.059999943, 1.059854388, 0.969936669}, - {9.770833, 0.999999762, 0.999999881, 1.059999943, 1.059854746, 0.969936848}, - {9.775, 0.999999762, 0.999999881, 1.059999943, 1.059855103, 0.969936967}, - {9.779167, 0.999999762, 0.999999881, 1.059999943, 1.059855461, 0.969937146}, - {9.783333, 0.999999762, 0.999999881, 1.059999943, 1.059855819, 0.969937325}, - {9.7875, 0.999999762, 0.999999881, 1.059999943, 1.059856057, 0.969937444}, - {9.791667, 0.999999762, 0.999999881, 1.059999943, 1.059856415, 0.969937623}, - {9.795833, 0.999999762, 0.999999881, 1.059999943, 1.059856772, 0.969937742}, - {9.8, 0.999999762, 0.999999881, 1.059999943, 1.05985713, 0.969937921}, - {9.804167, 0.999999762, 0.999999881, 1.059999943, 1.059857368, 0.96993804}, - {9.808333, 0.999999762, 0.999999881, 1.059999943, 1.059857726, 0.969938219}, - {9.8125, 0.999999762, 0.999999881, 1.059999943, 1.059858084, 0.969938338}, - {9.816667, 0.999999762, 0.999999881, 1.059999943, 1.059858441, 0.969938517}, - {9.820833, 0.999999762, 0.999999881, 1.059999943, 1.05985868, 0.969938636}, - {9.825, 0.999999762, 0.999999881, 1.059999943, 1.059859037, 0.969938755}, - {9.829167, 0.999999762, 0.999999881, 1.059999943, 1.059859395, 0.969938934}, - {9.833333, 0.999999762, 0.999999881, 1.059999943, 1.059859633, 0.969939053}, - {9.8375, 0.999999762, 0.999999881, 1.059999943, 1.059859991, 0.969939232}, - {9.841667, 0.999999762, 0.99999994, 1.059999943, 1.059860349, 0.969939351}, - {9.845833, 0.999999762, 0.99999994, 1.059999943, 1.059860587, 0.96993953}, - {9.85, 0.999999762, 0.99999994, 1.059999943, 1.059860945, 0.969939649}, - {9.854167, 0.999999762, 0.99999994, 1.059999943, 1.059861302, 0.969939828}, - {9.858333, 0.999999762, 0.99999994, 1.059999943, 1.059861541, 0.969939947}, - {9.8625, 0.999999762, 0.99999994, 1.059999943, 1.059861898, 0.969940066}, - {9.866667, 0.999999762, 0.99999994, 1.059999943, 1.059862256, 0.969940245}, - {9.870833, 0.999999762, 0.99999994, 1.059999943, 1.059862494, 0.969940364}, - {9.875, 0.999999762, 0.99999994, 1.059999943, 1.059862852, 0.969940543}, - {9.879167, 0.999999762, 0.99999994, 1.059999943, 1.05986321, 0.969940662}, - {9.883333, 0.999999762, 0.99999994, 1.059999943, 1.059863448, 0.969940782}, - {9.8875, 0.999999762, 0.99999994, 1.059999943, 1.059863806, 0.96994096}, - {9.891667, 0.999999762, 0.99999994, 1.059999943, 1.059864044, 0.96994108}, - {9.895833, 0.999999762, 0.99999994, 1.059999943, 1.059864402, 0.969941199}, - {9.9, 0.999999762, 0.99999994, 1.059999943, 1.059864759, 0.969941378}, - {9.904167, 0.999999762, 0.99999994, 1.059999943, 1.059864998, 0.969941497}, - {9.908333, 0.999999762, 0.99999994, 1.059999943, 1.059865355, 0.969941616}, - {9.9125, 0.999999762, 0.99999994, 1.059999943, 1.059865594, 0.969941795}, - {9.916667, 0.999999762, 0.99999994, 1.059999943, 1.059865952, 0.969941914}, - {9.920833, 0.999999762, 0.99999994, 1.059999943, 1.05986619, 0.969942033}, - {9.925, 0.999999762, 0.99999994, 1.059999943, 1.059866548, 0.969942212}, - {9.929167, 0.999999762, 0.99999994, 1.059999943, 1.059866905, 0.969942331}, - {9.933333, 0.999999762, 0.99999994, 1.059999943, 1.059867144, 0.969942451}, - {9.9375, 0.999999762, 0.99999994, 1.059999943, 1.059867501, 0.969942629}, - {9.941667, 0.999999762, 0.99999994, 1.059999943, 1.05986774, 0.969942749}, - {9.945833, 0.999999762, 0.99999994, 1.059999943, 1.059868097, 0.969942868}, - {9.95, 0.999999762, 0.99999994, 1.059999943, 1.059868336, 0.969942987}, - {9.954167, 0.999999762, 0.99999994, 1.059999943, 1.059868693, 0.969943166}, - {9.958333, 0.999999762, 0.99999994, 1.059999943, 1.059868932, 0.969943285}, - {9.9625, 0.999999762, 0.99999994, 1.059999943, 1.059869289, 0.969943404}, - {9.966667, 0.999999762, 0.99999994, 1.059999943, 1.059869528, 0.969943583}, - {9.970833, 0.999999762, 0.99999994, 1.059999943, 1.059869885, 0.969943702}, - {9.975, 0.999999762, 0.99999994, 1.059999943, 1.059870124, 0.969943821}, - {9.979167, 0.999999762, 0.99999994, 1.059999943, 1.059870481, 0.969943941}, - {9.983333, 0.999999762, 0.99999994, 1.059999943, 1.05987072, 0.96994406}, - {9.9875, 0.999999762, 0.99999994, 1.059999943, 1.059871078, 0.969944239}, - {9.991667, 0.999999762, 0.99999994, 1.059999943, 1.059871316, 0.969944358}, - {9.995833, 0.999999762, 0.99999994, 1.059999943, 1.059871554, 0.969944477}, - {10, 0.999999762, 0.99999994, 1.059999943, 1.059871912, 0.969944596}}; +namespace Example2 +{ + double reference_tol = 1e-6; + std::vector> reference_solution = { + {0, 1, 1, 1.059999943, 1.059997797, 0.969999611}, + {0.004167, 0.99999994, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, + {0.008333, 0.999999881, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, + {0.0125, 0.999999821, 0.99999994, 1.059999943, 1.059997797, 0.969999611}, + {0.016667, 0.999999762, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.020833, 0.999999702, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.025, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.029167, 0.999999642, 0.999999881, 1.059999943, 1.059997797, 0.969999611}, + {0.033333, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.0375, 0.999999583, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.041667, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.045833, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.05, 0.999999523, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.054167, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.058333, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.0625, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.066667, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.070833, 0.999999464, 0.999999821, 1.059999943, 1.059997797, 0.969999611}, + {0.075, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.079167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.083333, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.0875, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.091667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.095833, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.1, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.104167, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.108333, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.1125, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.116667, 0.999999344, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.120833, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.125, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.129167, 0.999999404, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.133333, 0.999999464, 0.999999762, 1.059999943, 1.059996843, 0.969999015}, + {0.1375, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.141667, 0.999999464, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.145833, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.15, 0.999999523, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.154167, 0.999999583, 0.999999821, 1.059999943, 1.059996843, 0.969999015}, + {0.158333, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.1625, 0.999999642, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.166667, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.170833, 0.999999702, 0.999999881, 1.059999943, 1.059996843, 0.969999015}, + {0.175, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.179167, 0.999999762, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.183333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.1875, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.191667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.195833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.2, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.204167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.208333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.2125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.216667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.220833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.225, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.229167, 1.000000119, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.233333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.2375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.241667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.245833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.25, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.254167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.258333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.2625, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.266667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.270833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.275, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.279167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.283333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.2875, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.291667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.295833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.3, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.304167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.308333, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.3125, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.316667, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.320833, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.325, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.329167, 1.000000358, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.333333, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.3375, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.341667, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.345833, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.35, 1.000000238, 1.000000119, 1.059999943, 1.059996843, 0.969999015}, + {0.354167, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.358333, 1.000000238, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.3625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.366667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.370833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.379167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.383333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.3875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.391667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.395833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.4, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.404167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.408333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.4125, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.416667, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.420833, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.425, 0.99999994, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.429167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.433333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.4375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.441667, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.445833, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.45, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.454167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.458333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.4625, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.466667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.470833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.475, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.479167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.483333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.4875, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.491667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.495833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.5, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.504167, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.508333, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.5125, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.516667, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.520833, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.525, 0.999999821, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.529167, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.533333, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.5375, 0.999999881, 0.99999994, 1.059999943, 1.059996843, 0.969999015}, + {0.541667, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.545833, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.55, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.554167, 0.999999881, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.558333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.5625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.566667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.570833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.575, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.579167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.583333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.5875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.591667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.595833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.604167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.608333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.616667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.620833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.629167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.633333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.641667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.645833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.65, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.654167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.658333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6625, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.666667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.670833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.675, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.679167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.683333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.6875, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.691667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.695833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.704167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.708333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7125, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.716667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.720833, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.725, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.729167, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.733333, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7375, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.741667, 1.000000119, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.745833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.75, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.754167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.758333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.766667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.770833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.775, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.779167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.783333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.7875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.791667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.795833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.804167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.808333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8125, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.816667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.820833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.825, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.829167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.833333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.841667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.845833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.85, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.854167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.858333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8625, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.866667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.870833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.879167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.883333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.8875, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.891667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.895833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.904167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.908333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9125, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.916667, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.920833, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.925, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.929167, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.933333, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9375, 0.99999994, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.941667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.945833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.95, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.954167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.958333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9625, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.966667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.970833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.975, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.979167, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.983333, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.9875, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.991667, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {0.995833, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {1, 1, 1, 1.059999943, 1.059996843, 0.969999015}, + {1.004167, 1.000062704, 1.000325799, 1.059999943, 0.820292711, 0.000147394}, + {1.008333, 1.000121474, 1.00065136, 1.059999943, 0.818987548, 0.000146861}, + {1.0125, 1.000176668, 1.00097692, 1.059999943, 0.81781584, 0.000146359}, + {1.016667, 1.000228524, 1.001302361, 1.059999943, 0.816757917, 0.000145887}, + {1.020833, 1.000277519, 1.001627564, 1.059999943, 0.815796912, 0.000145443}, + {1.025, 1.000323892, 1.001952767, 1.059999943, 0.814918101, 0.000145025}, + {1.029167, 1.000367641, 1.00227797, 1.059999943, 0.814109504, 0.000144631}, + {1.033333, 1.000409126, 1.002602816, 1.059999943, 0.813361049, 0.000144261}, + {1.0375, 1.000448585, 1.002927661, 1.059999943, 0.812663555, 0.000143912}, + {1.041667, 1.000486016, 1.003252506, 1.059999943, 0.812009811, 0.000143584}, + {1.045833, 1.000521541, 1.003576994, 1.059999943, 0.811393619, 0.000143274}, + {1.05, 1.000555277, 1.003901601, 1.059999943, 0.810793042, 0.000142972}, + {1.054167, 1.000587344, 1.004225969, 1.059999943, 0.810252428, 0.000142705}, + {1.058333, 1.000617743, 1.004550219, 1.059999943, 0.809719265, 0.000142443}, + {1.0625, 1.000646591, 1.004874468, 1.059999943, 0.809195876, 0.000142186}, + {1.066667, 1.000674009, 1.005198598, 1.059999943, 0.808710635, 0.000141957}, + {1.070833, 1.000699759, 1.00552249, 1.059999943, 0.808222353, 0.000141725}, + {1.075, 1.000724196, 1.005846381, 1.059999943, 0.807762384, 0.000141516}, + {1.079167, 1.000747085, 1.006170154, 1.059999943, 0.807305813, 0.000141309}, + {1.083333, 1.000768542, 1.006493688, 1.059999943, 0.806858957, 0.000141109}, + {1.0875, 1.000788689, 1.006817341, 1.059999943, 0.806420326, 0.000140917}, + {1.091667, 1.000807405, 1.007140756, 1.059999943, 0.805988908, 0.000140729}, + {1.095833, 1.00082469, 1.007463932, 1.059999943, 0.805563867, 0.000140547}, + {1.1, 1.000840545, 1.007787228, 1.059999943, 0.80514407, 0.00014037}, + {1.104167, 1.000855803, 1.007198334, 1.059999943, 1.032057166, 0.922393143}, + {1.108333, 1.000866055, 1.006641626, 1.059999943, 1.033476114, 0.924479365}, + {1.1125, 1.000872135, 1.006110191, 1.059999943, 1.034744263, 0.926455021}, + {1.116667, 1.000874519, 1.005599022, 1.059999943, 1.035876513, 0.928305149}, + {1.120833, 1.000873804, 1.005103946, 1.059999943, 1.036886334, 0.930021584}, + {1.125, 1.000870109, 1.004621744, 1.059999943, 1.03778708, 0.93160224}, + {1.129167, 1.00086391, 1.004150152, 1.059999943, 1.038589478, 0.933047175}, + {1.133333, 1.000855207, 1.003687382, 1.059999943, 1.039303541, 0.934358716}, + {1.1375, 1.00084424, 1.003232241, 1.059999943, 1.039938688, 0.935541749}, + {1.141667, 1.000831127, 1.002783775, 1.059999943, 1.040502787, 0.936601043}, + {1.145833, 1.000815868, 1.002342105, 1.059999943, 1.041002631, 0.937542081}, + {1.15, 1.000798583, 1.001906633, 1.059999943, 1.041444898, 0.938371241}, + {1.154167, 1.000779152, 1.001477718, 1.059999943, 1.041862607, 0.939153254}, + {1.158333, 1.000757694, 1.001055717, 1.059999943, 1.042177677, 0.939717412}, + {1.1625, 1.00073421, 1.000641108, 1.059999943, 1.042499781, 0.940296471}, + {1.166667, 1.00070858, 1.000234604, 1.059999943, 1.04273808, 0.940686703}, + {1.170833, 1.000681043, 0.999836862, 1.059999943, 1.042981267, 0.941086531}, + {1.175, 1.000651479, 0.999448657, 1.059999943, 1.043155313, 0.941323221}, + {1.179167, 1.000619888, 0.999070704, 1.059999943, 1.043332696, 0.94156599}, + {1.183333, 1.00058639, 0.998704076, 1.059999943, 1.043452263, 0.941668034}, + {1.1875, 1.000550866, 0.998349309, 1.059999943, 1.043573976, 0.941773772}, + {1.191667, 1.000513554, 0.998007417, 1.059999943, 1.04364717, 0.941758871}, + {1.195833, 1.000474334, 0.997679114, 1.059999943, 1.043721676, 0.941746056}, + {1.2, 1.000433326, 0.997365177, 1.059999943, 1.043755054, 0.941630721}, + {1.204167, 1.000390649, 0.997066259, 1.059999943, 1.043789148, 0.941516459}, + {1.208333, 1.000346303, 0.996783197, 1.059999943, 1.043788195, 0.941316426}, + {1.2125, 1.000300407, 0.996516407, 1.059999943, 1.043780208, 0.941099048}, + {1.216667, 1.000253201, 0.996266425, 1.059999943, 1.043764353, 0.940862536}, + {1.220833, 1.000204682, 0.996034026, 1.059999943, 1.04372108, 0.940563142}, + {1.225, 1.000154972, 0.995819211, 1.059999943, 1.043678045, 0.940263927}, + {1.229167, 1.000104189, 0.995622635, 1.059999943, 1.043612003, 0.939915836}, + {1.233333, 1.000052571, 0.995444477, 1.059999943, 1.043545961, 0.9395684}, + {1.2375, 1.000000119, 0.995284915, 1.059999943, 1.043460965, 0.939185202}, + {1.241667, 0.999947131, 0.99514401, 1.059999943, 1.043376088, 0.938803017}, + {1.245833, 0.999893785, 0.995021999, 1.059999943, 1.043275952, 0.938397586}, + {1.25, 0.999840021, 0.994918644, 1.059999943, 1.043175936, 0.937993705}, + {1.254167, 0.999786258, 0.994834065, 1.059999943, 1.043063998, 0.937578082}, + {1.258333, 0.999732554, 0.994768023, 1.059999943, 1.042952418, 0.937164783}, + {1.2625, 0.999679089, 0.99472034, 1.059999943, 1.042832136, 0.936750293}, + {1.266667, 0.999625981, 0.994690776, 1.059999943, 1.042712331, 0.936338663}, + {1.270833, 0.999573588, 0.994678915, 1.059999943, 1.042586803, 0.935935795}, + {1.275, 0.999521911, 0.994684458, 1.059999943, 1.042461753, 0.935536265}, + {1.279167, 0.999471188, 0.994706929, 1.059999943, 1.042333841, 0.935154021}, + {1.283333, 0.999421597, 0.99474597, 1.059999943, 1.042206645, 0.934775829}, + {1.2875, 0.999373257, 0.994800925, 1.059999943, 1.042078972, 0.934422433}, + {1.291667, 0.999326408, 0.994871318, 1.059999943, 1.041952252, 0.934073329}, + {1.295833, 0.999281168, 0.994956493, 1.059999943, 1.04182744, 0.933755577}, + {1.3, 0.999237716, 0.995055914, 1.059999943, 1.041703463, 0.933442354}, + {1.304167, 0.999196231, 0.995168865, 1.059999943, 1.041583538, 0.933165789}, + {1.308333, 0.999156773, 0.99529469, 1.059999943, 1.041464686, 0.932893932}, + {1.3125, 0.99911952, 0.995432615, 1.059999943, 1.041351557, 0.932662845}, + {1.316667, 0.999084651, 0.995582044, 1.059999943, 1.0412395, 0.932436347}, + {1.320833, 0.999052227, 0.995742023, 1.059999943, 1.041135073, 0.932253957}, + {1.325, 0.999022365, 0.995912075, 1.059999943, 1.041031599, 0.932075918}, + {1.329167, 0.998995245, 0.996091127, 1.059999943, 1.040937185, 0.931943953}, + {1.333333, 0.998970926, 0.996278644, 1.059999943, 1.040843606, 0.93181622}, + {1.3375, 0.998949409, 0.99647367, 1.059999943, 1.040760398, 0.931735754}, + {1.341667, 0.998930931, 0.996675611, 1.059999943, 1.040678024, 0.931658983}, + {1.345833, 0.998915493, 0.996883333, 1.059999943, 1.040607095, 0.931629896}, + {1.35, 0.998903096, 0.997096419, 1.059999943, 1.040536761, 0.931604028}, + {1.354167, 0.998893857, 0.997313857, 1.059999943, 1.040478826, 0.931625366}, + {1.358333, 0.998887837, 0.997534931, 1.059999943, 1.040421486, 0.931649446}, + {1.3625, 0.998884976, 0.997758746, 1.059999943, 1.04037714, 0.931719601}, + {1.366667, 0.998885393, 0.997984767, 1.059999943, 1.040333271, 0.931791902}, + {1.370833, 0.998889029, 0.99821198, 1.059999943, 1.040302992, 0.931908667}, + {1.375, 0.998895884, 0.998439848, 1.059999943, 1.04027307, 0.932026923}, + {1.379167, 0.998906016, 0.998667419, 1.059999943, 1.040257096, 0.932187438}, + {1.383333, 0.998919308, 0.998894155, 1.059999943, 1.04024148, 0.932348847}, + {1.3875, 0.998935759, 0.999119222, 1.059999943, 1.04023993, 0.932549894}, + {1.391667, 0.998955429, 0.999342144, 1.059999943, 1.040238619, 0.932751417}, + {1.395833, 0.998978078, 0.999561965, 1.059999943, 1.040251493, 0.932989478}, + {1.4, 0.999003768, 0.99977833, 1.059999943, 1.040264487, 0.933227539}, + {1.404167, 0.999032319, 0.999990404, 1.059999943, 1.040291786, 0.933498859}, + {1.408333, 0.999063849, 1.000197768, 1.059999943, 1.040318966, 0.933769703}, + {1.4125, 0.999098003, 1.000399709, 1.059999943, 1.040360212, 0.934070349}, + {1.416667, 0.999134898, 1.000595927, 1.059999943, 1.040401459, 0.934370279}, + {1.420833, 0.999174297, 1.000785589, 1.059999943, 1.040456295, 0.934696198}, + {1.425, 0.999216139, 1.000968456, 1.059999943, 1.040511131, 0.935021162}, + {1.429167, 0.999260247, 1.001143932, 1.059999943, 1.0405792, 0.935368419}, + {1.433333, 0.999306619, 1.001311779, 1.059999943, 1.040647149, 0.935714424}, + {1.4375, 0.999354899, 1.001471519, 1.059999943, 1.040727735, 0.936078966}, + {1.441667, 0.999405086, 1.001622796, 1.059999943, 1.040808201, 0.936442196}, + {1.445833, 0.999457002, 1.001765251, 1.059999943, 1.040900707, 0.936819971}, + {1.45, 0.999510527, 1.001898766, 1.059999943, 1.040993094, 0.937196553}, + {1.454167, 0.999565363, 1.002022862, 1.059999943, 1.041096687, 0.937583864}, + {1.458333, 0.999621451, 1.002137542, 1.059999943, 1.041200042, 0.937969863}, + {1.4625, 0.999678612, 1.002242565, 1.059999943, 1.041313887, 0.938363016}, + {1.466667, 0.999736667, 1.002337694, 1.059999943, 1.041427493, 0.938754976}, + {1.470833, 0.999795318, 1.00242281, 1.059999943, 1.041550517, 0.939150274}, + {1.475, 0.999854624, 1.002497911, 1.059999943, 1.041673303, 0.939544678}, + {1.479167, 0.999914169, 1.002563, 1.059999943, 1.041804552, 0.939938962}, + {1.483333, 0.999973893, 1.002618074, 1.059999943, 1.041935563, 0.940332353}, + {1.4875, 1.000033617, 1.002663016, 1.059999943, 1.042073965, 0.940722287}, + {1.491667, 1.000093102, 1.002697945, 1.059999943, 1.042212009, 0.941111684}, + {1.495833, 1.000152111, 1.002722979, 1.059999943, 1.042356133, 0.941494226}, + {1.5, 1.000210524, 1.002738118, 1.059999943, 1.042500138, 0.941876531}, + {1.504167, 1.000268221, 1.002743721, 1.059999943, 1.042649031, 0.94224906}, + {1.508333, 1.000325084, 1.002739787, 1.059999943, 1.042797565, 0.94262141}, + {1.5125, 1.000380635, 1.002726674, 1.059999943, 1.042949796, 0.942981184}, + {1.516667, 1.000434995, 1.002704382, 1.059999943, 1.043101668, 0.943341076}, + {1.520833, 1.000487924, 1.002673268, 1.059999943, 1.043255925, 0.943685651}, + {1.525, 1.000539184, 1.002633691, 1.059999943, 1.043409944, 0.944030523}, + {1.529167, 1.000588775, 1.002585888, 1.059999943, 1.043564916, 0.944357812}, + {1.533333, 1.000636339, 1.002530217, 1.059999943, 1.04371953, 0.944685459}, + {1.5375, 1.000681877, 1.002466917, 1.059999943, 1.043873787, 0.944993436}, + {1.541667, 1.00072515, 1.002396464, 1.059999943, 1.044027925, 0.94530189}, + {1.545833, 1.000766158, 1.002319217, 1.059999943, 1.044180274, 0.945588708}, + {1.55, 1.000804663, 1.002235413, 1.059999943, 1.044332385, 0.945876181}, + {1.554167, 1.000840664, 1.002145648, 1.059999943, 1.044481516, 0.946140409}, + {1.558333, 1.000873923, 1.002050281, 1.059999943, 1.044630408, 0.946405232}, + {1.5625, 1.000904441, 1.001949787, 1.059999943, 1.044775009, 0.946645617}, + {1.566667, 1.000932097, 1.001844525, 1.059999943, 1.044919491, 0.946886659}, + {1.570833, 1.000956893, 1.001735091, 1.059999943, 1.045058489, 0.94710207}, + {1.575, 1.000978589, 1.001621723, 1.059999943, 1.045197368, 0.947318256}, + {1.579167, 1.000997186, 1.001505017, 1.059999943, 1.045329809, 0.947508216}, + {1.583333, 1.001012683, 1.00138545, 1.059999943, 1.045461893, 0.947698712}, + {1.5875, 1.001025081, 1.001263499, 1.059999943, 1.045586586, 0.947862685}, + {1.591667, 1.00103426, 1.001139522, 1.059999943, 1.045711041, 0.948027253}, + {1.595833, 1.00104022, 1.001014113, 1.059999943, 1.04582727, 0.948165178}, + {1.6, 1.001043081, 1.000887513, 1.059999943, 1.04594326, 0.94830364}, + {1.604167, 1.001042604, 1.000760436, 1.059999943, 1.046050191, 0.948415816}, + {1.608333, 1.001038909, 1.000633121, 1.059999943, 1.046156883, 0.948528349}, + {1.6125, 1.001032114, 1.000506163, 1.059999943, 1.04625392, 0.948615313}, + {1.616667, 1.00102222, 1.00037992, 1.059999943, 1.046350837, 0.948702633}, + {1.620833, 1.001009107, 1.000254869, 1.059999943, 1.046437621, 0.948765159}, + {1.625, 1.000993013, 1.000131369, 1.059999943, 1.046524167, 0.948828101}, + {1.629167, 1.000973821, 1.000009775, 1.059999943, 1.046600223, 0.9488675}, + {1.633333, 1.000951767, 0.999890447, 1.059999943, 1.046676159, 0.948907197}, + {1.6375, 1.000926971, 0.99977386, 1.059999943, 1.046741486, 0.948924899}, + {1.641667, 1.000899315, 0.999660254, 1.059999943, 1.046806693, 0.94894284}, + {1.645833, 1.000869036, 0.999550045, 1.059999943, 1.046861053, 0.948940635}, + {1.65, 1.000836134, 0.999443412, 1.059999943, 1.046915293, 0.948938608}, + {1.654167, 1.000800848, 0.999340832, 1.059999943, 1.046958923, 0.948918402}, + {1.658333, 1.000763297, 0.999242425, 1.059999943, 1.047002435, 0.948898375}, + {1.6625, 1.000723481, 0.999148488, 1.059999943, 1.047035456, 0.948862374}, + {1.666667, 1.00068152, 0.9990592, 1.059999943, 1.047068477, 0.948826551}, + {1.670833, 1.00063777, 0.9989748, 1.059999943, 1.047091246, 0.94877708}, + {1.675, 1.000592232, 0.998895526, 1.059999943, 1.047114015, 0.948727787}, + {1.679167, 1.000545025, 0.998821437, 1.059999943, 1.047126889, 0.948667228}, + {1.683333, 1.000496387, 0.998752713, 1.059999943, 1.047140002, 0.948606968}, + {1.6875, 1.000446439, 0.998689532, 1.059999943, 1.047143579, 0.948537946}, + {1.691667, 1.000395298, 0.998631895, 1.059999943, 1.047147393, 0.948469162}, + {1.695833, 1.000343204, 0.998579919, 1.059999943, 1.047142267, 0.94839412}, + {1.7, 1.000290275, 0.998533607, 1.059999943, 1.04713738, 0.948319435}, + {1.704167, 1.00023663, 0.998493075, 1.059999943, 1.047124386, 0.948240876}, + {1.708333, 1.000182509, 0.998458266, 1.059999943, 1.04711163, 0.948162794}, + {1.7125, 1.00012815, 0.998429179, 1.059999943, 1.047091365, 0.948083282}, + {1.716667, 1.000073671, 0.998405755, 1.059999943, 1.047071218, 0.948004186}, + {1.720833, 1.000019193, 0.998387992, 1.059999943, 1.047044516, 0.947925985}, + {1.725, 0.999964893, 0.998375833, 1.059999943, 1.047018051, 0.94784826}, + {1.729167, 0.999910951, 0.998369098, 1.059999943, 1.046985745, 0.947773576}, + {1.733333, 0.999857545, 0.998367786, 1.059999943, 1.046953559, 0.947699487}, + {1.7375, 0.999804854, 0.99837172, 1.059999943, 1.046916485, 0.947630346}, + {1.741667, 0.999752998, 0.998380721, 1.059999943, 1.046879649, 0.9475618}, + {1.745833, 0.999702215, 0.998394728, 1.059999943, 1.046838641, 0.947500169}, + {1.75, 0.999652505, 0.998413563, 1.059999943, 1.046797872, 0.947439015}, + {1.754167, 0.999604166, 0.998436928, 1.059999943, 1.046753883, 0.947386384}, + {1.758333, 0.999557257, 0.998464823, 1.059999943, 1.046710134, 0.94733429}, + {1.7625, 0.999511898, 0.99849689, 1.059999943, 1.046664119, 0.94729203}, + {1.766667, 0.999468327, 0.99853301, 1.059999943, 1.046618223, 0.947250366}, + {1.770833, 0.999426544, 0.998572886, 1.059999943, 1.046570897, 0.94721967}, + {1.775, 0.999386728, 0.998616397, 1.059999943, 1.04652369, 0.94718951}, + {1.779167, 0.999348998, 0.998663187, 1.059999943, 1.046476007, 0.94717133}, + {1.783333, 0.999313474, 0.998713076, 1.059999943, 1.046428561, 0.947153628}, + {1.7875, 0.999280155, 0.998765886, 1.059999943, 1.046381354, 0.947148621}, + {1.791667, 0.99924922, 0.998821259, 1.059999943, 1.046334267, 0.947143972}, + {1.795833, 0.999220729, 0.998879015, 1.059999943, 1.04628849, 0.947152495}, + {1.8, 0.999194741, 0.998938859, 1.059999943, 1.046242714, 0.947161376}, + {1.804167, 0.999171317, 0.999000549, 1.059999943, 1.046199083, 0.947183728}, + {1.808333, 0.999150515, 0.999063849, 1.059999943, 1.046155453, 0.947206259}, + {1.8125, 0.999132395, 0.99912852, 1.059999943, 1.046114683, 0.947242379}, + {1.816667, 0.999116957, 0.999194264, 1.059999943, 1.046073914, 0.947278678}, + {1.820833, 0.999104321, 0.999260843, 1.059999943, 1.04603672, 0.947328329}, + {1.825, 0.999094367, 0.999328017, 1.059999943, 1.045999646, 0.947378159}, + {1.829167, 0.999087214, 0.999395549, 1.059999943, 1.045966744, 0.947441041}, + {1.833333, 0.999082804, 0.99946326, 1.059999943, 1.045933962, 0.947503924}, + {1.8375, 0.999081135, 0.999530792, 1.059999943, 1.045906067, 0.947579503}, + {1.841667, 0.999082267, 0.999598026, 1.059999943, 1.045878291, 0.947655022}, + {1.845833, 0.999086082, 0.999664605, 1.059999943, 1.04585588, 0.947742462}, + {1.85, 0.999092579, 0.999730527, 1.059999943, 1.045833588, 0.947829902}, + {1.854167, 0.999101698, 0.999795437, 1.059999943, 1.045817137, 0.947928607}, + {1.858333, 0.999113441, 0.999859154, 1.059999943, 1.045800805, 0.948027134}, + {1.8625, 0.999127686, 0.999921501, 1.059999943, 1.045790911, 0.948136032}, + {1.866667, 0.999144435, 0.999982357, 1.059999943, 1.045781016, 0.94824481}, + {1.870833, 0.999163568, 1.000041485, 1.059999943, 1.045777917, 0.948362947}, + {1.875, 0.999185085, 1.000098825, 1.059999943, 1.045774817, 0.948480964}, + {1.879167, 0.999208808, 1.000154018, 1.059999943, 1.045778871, 0.948607385}, + {1.883333, 0.999234676, 1.000207067, 1.059999943, 1.045782804, 0.948733509}, + {1.8875, 0.999262571, 1.000257969, 1.059999943, 1.04579401, 0.948866963}, + {1.891667, 0.999292433, 1.000306368, 1.059999943, 1.045805335, 0.949000239}, + {1.895833, 0.999324083, 1.000352263, 1.059999943, 1.045823932, 0.949139595}, + {1.9, 0.999357522, 1.000395656, 1.059999943, 1.045842528, 0.949278772}, + {1.904167, 0.999392569, 1.000436306, 1.059999943, 1.045868516, 0.949423015}, + {1.908333, 0.999429107, 1.000474215, 1.059999943, 1.045894504, 0.94956696}, + {1.9125, 0.999466956, 1.000509381, 1.059999943, 1.045927644, 0.94971478}, + {1.916667, 0.999506116, 1.000541568, 1.059999943, 1.045960903, 0.949862361}, + {1.920833, 0.999546349, 1.000570893, 1.059999943, 1.046001196, 0.950012624}, + {1.925, 0.999587536, 1.000597358, 1.059999943, 1.046041489, 0.950162709}, + {1.929167, 0.999629557, 1.000620842, 1.059999943, 1.046088696, 0.950314343}, + {1.933333, 0.999672294, 1.000641465, 1.059999943, 1.046135783, 0.950465679}, + {1.9375, 0.999715626, 1.000658989, 1.059999943, 1.046189427, 0.950617552}, + {1.941667, 0.999759376, 1.000673771, 1.059999943, 1.046242952, 0.950769186}, + {1.945833, 0.999803364, 1.000685453, 1.059999943, 1.046302676, 0.950920165}, + {1.95, 0.999847531, 1.000694394, 1.059999943, 1.046362281, 0.951070964}, + {1.954167, 0.999891698, 1.000700474, 1.059999943, 1.046427488, 0.951220155}, + {1.958333, 0.999935806, 1.000703812, 1.059999943, 1.046492577, 0.951369166}, + {1.9625, 0.999979556, 1.000704408, 1.059999943, 1.046562791, 0.951515555}, + {1.966667, 1.000023007, 1.000702381, 1.059999943, 1.046632886, 0.951661825}, + {1.970833, 1.000065923, 1.000697732, 1.059999943, 1.046707511, 0.951804578}, + {1.975, 1.000108123, 1.000690579, 1.059999943, 1.046782017, 0.951947272}, + {1.979167, 1.000149608, 1.000681162, 1.059999943, 1.046860218, 0.952085614}, + {1.983333, 1.000190258, 1.00066936, 1.059999943, 1.046938419, 0.952223837}, + {1.9875, 1.000229836, 1.000655293, 1.059999943, 1.04701972, 0.952357054}, + {1.991667, 1.00026834, 1.0006392, 1.059999943, 1.047100902, 0.952490211}, + {1.995833, 1.000305653, 1.0006212, 1.059999943, 1.047184587, 0.952617645}, + {2, 1.000341535, 1.000601172, 1.059999943, 1.047268033, 0.95274508}, + {2.004167, 1.000376105, 1.000579476, 1.059999943, 1.047353268, 0.952866316}, + {2.008333, 1.000409007, 1.000556231, 1.059999943, 1.047438383, 0.952987432}, + {2.0125, 1.000440478, 1.000531435, 1.059999943, 1.047524452, 0.953101993}, + {2.016667, 1.000470161, 1.000505209, 1.059999943, 1.047610402, 0.953216493}, + {2.020833, 1.000498056, 1.000477791, 1.059999943, 1.04769671, 0.95332408}, + {2.025, 1.000524282, 1.0004493, 1.059999943, 1.047782779, 0.953431606}, + {2.029167, 1.000548482, 1.000419736, 1.059999943, 1.047868609, 0.953531981}, + {2.033333, 1.000570774, 1.000389457, 1.059999943, 1.047954082, 0.953632295}, + {2.0375, 1.00059104, 1.000358343, 1.059999943, 1.048038721, 0.953725338}, + {2.041667, 1.000609279, 1.000326633, 1.059999943, 1.048123121, 0.953818321}, + {2.045833, 1.000625491, 1.000294566, 1.059999943, 1.048205853, 0.953904033}, + {2.05, 1.000639558, 1.000262022, 1.059999943, 1.048288465, 0.953989685}, + {2.054167, 1.000651479, 1.000229359, 1.059999943, 1.048368931, 0.954068124}, + {2.058333, 1.000661254, 1.000196576, 1.059999943, 1.048449159, 0.954146564}, + {2.0625, 1.000668883, 1.000163794, 1.059999943, 1.048526645, 0.954217851}, + {2.066667, 1.000674367, 1.000131249, 1.059999943, 1.048604012, 0.954289198}, + {2.070833, 1.000677705, 1.000098944, 1.059999943, 1.04867816, 0.95435369}, + {2.075, 1.000678897, 1.000066876, 1.059999943, 1.048752069, 0.954418182}, + {2.079167, 1.000677943, 1.000035405, 1.059999943, 1.048822403, 0.954476118}, + {2.083333, 1.000674844, 1.000004411, 1.059999943, 1.048892617, 0.954534054}, + {2.0875, 1.000669718, 0.999974191, 1.059999943, 1.048958778, 0.95458585}, + {2.091667, 1.000662565, 0.999944627, 1.059999943, 1.04902482, 0.954637706}, + {2.095833, 1.000653505, 0.999915957, 1.059999943, 1.049086452, 0.954683781}, + {2.1, 1.000642419, 0.999888122, 1.059999943, 1.049148083, 0.954729974}, + {2.104167, 1.000629425, 0.99986136, 1.059999943, 1.049205065, 0.954770863}, + {2.108333, 1.000614524, 0.99983561, 1.059999943, 1.049262047, 0.954811871}, + {2.1125, 1.000597954, 0.999810994, 1.059999943, 1.049314141, 0.954848111}, + {2.116667, 1.000579715, 0.999787509, 1.059999943, 1.049366236, 0.95488447}, + {2.120833, 1.000559807, 0.999765277, 1.059999943, 1.049413323, 0.954916656}, + {2.125, 1.000538349, 0.999744296, 1.059999943, 1.049460411, 0.954948962}, + {2.129167, 1.000515461, 0.999724627, 1.059999943, 1.049502373, 0.954977632}, + {2.133333, 1.000491142, 0.999706268, 1.059999943, 1.049544454, 0.955006421}, + {2.1375, 1.000465512, 0.999689341, 1.059999943, 1.049581409, 0.955032229}, + {2.141667, 1.00043869, 0.999673724, 1.059999943, 1.049618363, 0.955058157}, + {2.145833, 1.000410795, 0.999659538, 1.059999943, 1.049650192, 0.955081642}, + {2.15, 1.000381947, 0.999646723, 1.059999943, 1.04968214, 0.955105186}, + {2.154167, 1.000352144, 0.999635339, 1.059999943, 1.049709082, 0.955126941}, + {2.158333, 1.000321388, 0.999625385, 1.059999943, 1.049736142, 0.955148816}, + {2.1625, 1.000290155, 0.999616802, 1.059999943, 1.049758196, 0.95516938}, + {2.166667, 1.000258207, 0.999609649, 1.059999943, 1.049780369, 0.955190122}, + {2.170833, 1.000225663, 0.999603808, 1.059999943, 1.049797893, 0.95521003}, + {2.175, 1.000192881, 0.999599397, 1.059999943, 1.049815416, 0.955230057}, + {2.179167, 1.00015974, 0.999596238, 1.059999943, 1.04982841, 0.955249846}, + {2.183333, 1.000126481, 0.99959439, 1.059999943, 1.049841523, 0.955269754}, + {2.1875, 1.000093102, 0.999593854, 1.059999943, 1.049850345, 0.9552899}, + {2.191667, 1.000059724, 0.99959451, 1.059999943, 1.049859285, 0.955310106}, + {2.195833, 1.000026464, 0.999596357, 1.059999943, 1.049864173, 0.955330908}, + {2.2, 0.999993443, 0.999599338, 1.059999943, 1.04986918, 0.95535183}, + {2.204167, 0.99996078, 0.999603391, 1.059999943, 1.049870491, 0.955373764}, + {2.208333, 0.999928474, 0.999608517, 1.059999943, 1.049871922, 0.955395818}, + {2.2125, 0.999896765, 0.999614656, 1.059999943, 1.049870014, 0.955419123}, + {2.216667, 0.999865592, 0.999621749, 1.059999943, 1.049868107, 0.955442548}, + {2.220833, 0.999835193, 0.999629676, 1.059999943, 1.049863338, 0.955467582}, + {2.225, 0.99980551, 0.999638438, 1.059999943, 1.04985857, 0.955492675}, + {2.229167, 0.999776721, 0.999648035, 1.059999943, 1.049851298, 0.955519617}, + {2.233333, 0.999748886, 0.999658287, 1.059999943, 1.049844027, 0.955546558}, + {2.2375, 0.999722064, 0.999669194, 1.059999943, 1.049834609, 0.955575585}, + {2.241667, 0.999696374, 0.999680698, 1.059999943, 1.049825192, 0.955604613}, + {2.245833, 0.999671817, 0.999692738, 1.059999943, 1.049814105, 0.955635786}, + {2.25, 0.999648452, 0.999705255, 1.059999943, 1.049803138, 0.955667019}, + {2.254167, 0.999626398, 0.999718189, 1.059999943, 1.04979074, 0.955700517}, + {2.258333, 0.999605656, 0.999731421, 1.059999943, 1.049778461, 0.955734015}, + {2.2625, 0.999586284, 0.999744952, 1.059999943, 1.049765348, 0.955769777}, + {2.266667, 0.999568343, 0.99975878, 1.059999943, 1.049752116, 0.95580554}, + {2.270833, 0.999551892, 0.999772727, 1.059999943, 1.049738646, 0.955843627}, + {2.275, 0.999536932, 0.999786794, 1.059999943, 1.049725056, 0.955881715}, + {2.279167, 0.999523461, 0.99980098, 1.059999943, 1.049711585, 0.955922067}, + {2.283333, 0.9995116, 0.999815106, 1.059999943, 1.049698114, 0.95596242}, + {2.2875, 0.999501228, 0.999829233, 1.059999943, 1.049685001, 0.956004977}, + {2.291667, 0.999492526, 0.99984324, 1.059999943, 1.049672008, 0.956047535}, + {2.295833, 0.999485373, 0.999857128, 1.059999943, 1.049659848, 0.956092179}, + {2.3, 0.999479771, 0.999870837, 1.059999943, 1.049647689, 0.956136823}, + {2.304167, 0.999475837, 0.999884367, 1.059999943, 1.049636841, 0.956183434}, + {2.308333, 0.999473453, 0.99989754, 1.059999943, 1.049625993, 0.956230044}, + {2.3125, 0.999472618, 0.999910474, 1.059999943, 1.049616814, 0.956278563}, + {2.316667, 0.999473393, 0.99992305, 1.059999943, 1.049607515, 0.956327021}, + {2.320833, 0.999475658, 0.999935269, 1.059999943, 1.049600363, 0.956377208}, + {2.325, 0.999479473, 0.999947071, 1.059999943, 1.04959321, 0.956427336}, + {2.329167, 0.999484777, 0.999958456, 1.059999943, 1.049588203, 0.956479013}, + {2.333333, 0.999491513, 0.999969423, 1.059999943, 1.049583435, 0.95653069}, + {2.3375, 0.999499619, 0.999979854, 1.059999943, 1.049581051, 0.956583738}, + {2.341667, 0.999509156, 0.999989808, 1.059999943, 1.049578905, 0.956636727}, + {2.345833, 0.999519944, 0.999999285, 1.059999943, 1.049579382, 0.956690967}, + {2.35, 0.999532104, 1.000008225, 1.059999943, 1.049579978, 0.956745088}, + {2.354167, 0.999545395, 1.00001657, 1.059999943, 1.049583673, 0.956800282}, + {2.358333, 0.999559939, 1.000024438, 1.059999943, 1.049587369, 0.956855416}, + {2.3625, 0.999575555, 1.00003171, 1.059999943, 1.049594283, 0.956911385}, + {2.366667, 0.999592185, 1.000038385, 1.059999943, 1.049601197, 0.956967354}, + {2.370833, 0.999609828, 1.000044584, 1.059999943, 1.049611449, 0.957023919}, + {2.375, 0.999628425, 1.000050187, 1.059999943, 1.049621701, 0.957080424}, + {2.379167, 0.999647856, 1.000055313, 1.059999943, 1.04963541, 0.957137406}, + {2.383333, 0.999668062, 1.000059724, 1.059999943, 1.049649119, 0.957194388}, + {2.3875, 0.999688923, 1.000063777, 1.059999943, 1.049666286, 0.957251668}, + {2.391667, 0.9997105, 1.000067115, 1.059999943, 1.049683571, 0.957308888}, + {2.395833, 0.999732614, 1.000070095, 1.059999943, 1.049704194, 0.957366169}, + {2.4, 0.999755204, 1.000072479, 1.059999943, 1.049724817, 0.957423508}, + {2.404167, 0.999778271, 1.000074387, 1.059999943, 1.049748898, 0.957480788}, + {2.408333, 0.999801636, 1.000075817, 1.059999943, 1.049772978, 0.957538009}, + {2.4125, 0.999825239, 1.000076771, 1.059999943, 1.049800277, 0.95759505}, + {2.416667, 0.999849081, 1.000077248, 1.059999943, 1.049827695, 0.957652092}, + {2.420833, 0.999873042, 1.000077367, 1.059999943, 1.049858212, 0.957708836}, + {2.425, 0.999897003, 1.000077009, 1.059999943, 1.04988873, 0.95776552}, + {2.429167, 0.999920964, 1.000076294, 1.059999943, 1.049922347, 0.957821786}, + {2.433333, 0.999944866, 1.000075221, 1.059999943, 1.049955845, 0.957877994}, + {2.4375, 0.999968529, 1.000073791, 1.059999943, 1.049992204, 0.957933664}, + {2.441667, 0.999991953, 1.000072002, 1.059999943, 1.050028443, 0.957989335}, + {2.445833, 1.00001514, 1.000069976, 1.059999943, 1.050067425, 0.95804435}, + {2.45, 1.000037909, 1.000067711, 1.059999943, 1.050106287, 0.958099365}, + {2.454167, 1.000060201, 1.000065088, 1.059999943, 1.050147414, 0.958153665}, + {2.458333, 1.000082016, 1.000062346, 1.059999943, 1.050188541, 0.958207965}, + {2.4625, 1.000103235, 1.000059366, 1.059999943, 1.050231814, 0.95826143}, + {2.466667, 1.000123858, 1.000056148, 1.059999943, 1.050274968, 0.958314896}, + {2.470833, 1.000143886, 1.00005281, 1.059999943, 1.05031991, 0.958367527}, + {2.475, 1.000163078, 1.000049353, 1.059999943, 1.050364733, 0.958420157}, + {2.479167, 1.000181556, 1.000045776, 1.059999943, 1.050411105, 0.958471894}, + {2.483333, 1.000199199, 1.000042081, 1.059999943, 1.050457358, 0.958523631}, + {2.4875, 1.000216007, 1.000038385, 1.059999943, 1.050504684, 0.958574474}, + {2.491667, 1.000231862, 1.000034571, 1.059999943, 1.050552011, 0.958625317}, + {2.495833, 1.000246763, 1.000030875, 1.059999943, 1.050600171, 0.958675206}, + {2.5, 1.00026083, 1.000027061, 1.059999943, 1.050648332, 0.958725095}, + {2.504167, 1.000273705, 1.000023246, 1.059999943, 1.05069685, 0.95877403}, + {2.508333, 1.000285625, 1.000019431, 1.059999943, 1.050745368, 0.958822966}, + {2.5125, 1.000296593, 1.000015616, 1.059999943, 1.050794125, 0.958871007}, + {2.516667, 1.000306368, 1.00001204, 1.059999943, 1.050842762, 0.958919048}, + {2.520833, 1.00031507, 1.000008345, 1.059999943, 1.050891161, 0.958966136}, + {2.525, 1.0003227, 1.000004768, 1.059999943, 1.050939679, 0.959013283}, + {2.529167, 1.000329256, 1.000001431, 1.059999943, 1.050987601, 0.959059477}, + {2.533333, 1.00033462, 0.999998033, 1.059999943, 1.051035523, 0.95910567}, + {2.5375, 1.000338912, 0.999994814, 1.059999943, 1.05108285, 0.95915097}, + {2.541667, 1.000342131, 0.999991655, 1.059999943, 1.051129937, 0.95919627}, + {2.545833, 1.000344157, 0.999988675, 1.059999943, 1.05117619, 0.959240735}, + {2.55, 1.00034523, 0.999985814, 1.059999943, 1.051222205, 0.9592852}, + {2.554167, 1.000345111, 0.999983132, 1.059999943, 1.051267147, 0.95932889}, + {2.558333, 1.000343919, 0.999980509, 1.059999943, 1.05131197, 0.95937252}, + {2.5625, 1.000341654, 0.999978125, 1.059999943, 1.051355243, 0.959415317}, + {2.566667, 1.000338316, 0.999975801, 1.059999943, 1.051398516, 0.959458172}, + {2.570833, 1.000334024, 0.999973655, 1.059999943, 1.05144012, 0.959500253}, + {2.575, 1.00032866, 0.999971688, 1.059999943, 1.051481724, 0.959542274}, + {2.579167, 1.000322461, 0.99996978, 1.059999943, 1.05152142, 0.95958364}, + {2.583333, 1.000315309, 0.999968112, 1.059999943, 1.051561117, 0.959624946}, + {2.5875, 1.000307202, 0.999966502, 1.059999943, 1.051598668, 0.959665537}, + {2.591667, 1.000298262, 0.999965072, 1.059999943, 1.051636338, 0.959706128}, + {2.595833, 1.000288486, 0.99996376, 1.059999943, 1.051671743, 0.959746063}, + {2.6, 1.000277996, 0.999962568, 1.059999943, 1.051707149, 0.959785938}, + {2.604167, 1.000266671, 0.999961555, 1.059999943, 1.05174017, 0.959825158}, + {2.608333, 1.00025475, 0.999960601, 1.059999943, 1.05177331, 0.959864378}, + {2.6125, 1.000242114, 0.999959767, 1.059999943, 1.051804066, 0.959902942}, + {2.616667, 1.000228882, 0.999958992, 1.059999943, 1.051834702, 0.959941506}, + {2.620833, 1.000215173, 0.999958396, 1.059999943, 1.051862955, 0.959979355}, + {2.625, 1.000200868, 0.9999578, 1.059999943, 1.051891327, 0.960017264}, + {2.629167, 1.000186086, 0.999957323, 1.059999943, 1.051917076, 0.960054517}, + {2.633333, 1.000170946, 0.999956906, 1.059999943, 1.051942945, 0.96009171}, + {2.6375, 1.000155449, 0.999956608, 1.059999943, 1.05196619, 0.960128307}, + {2.641667, 1.000139713, 0.99995631, 1.059999943, 1.051989555, 0.960164905}, + {2.645833, 1.00012362, 0.999956071, 1.059999943, 1.052010417, 0.960200846}, + {2.65, 1.000107288, 0.999955833, 1.059999943, 1.052031398, 0.960236788}, + {2.654167, 1.000090957, 0.999955654, 1.059999943, 1.052049875, 0.960272133}, + {2.658333, 1.000074387, 0.999955535, 1.059999943, 1.052068353, 0.96030736}, + {2.6625, 1.000057936, 0.999955356, 1.059999943, 1.052084565, 0.96034205}, + {2.666667, 1.000041366, 0.999955237, 1.059999943, 1.052100658, 0.96037668}, + {2.670833, 1.000024796, 0.999955118, 1.059999943, 1.052114606, 0.960410595}, + {2.675, 1.000008464, 0.999954998, 1.059999943, 1.052128553, 0.96044457}, + {2.679167, 0.999992192, 0.999954879, 1.059999943, 1.052140355, 0.960477889}, + {2.683333, 0.999976158, 0.9999547, 1.059999943, 1.052152157, 0.960511148}, + {2.6875, 0.999960363, 0.999954522, 1.059999943, 1.052162051, 0.960543811}, + {2.691667, 0.999944866, 0.999954283, 1.059999943, 1.052171826, 0.960576415}, + {2.695833, 0.999929667, 0.999954045, 1.059999943, 1.052179813, 0.960608363}, + {2.7, 0.999914825, 0.999953806, 1.059999943, 1.0521878, 0.960640311}, + {2.704167, 0.99990046, 0.999953449, 1.059999943, 1.052194119, 0.960671544}, + {2.708333, 0.999886453, 0.999953091, 1.059999943, 1.052200437, 0.960702837}, + {2.7125, 0.999872983, 0.999952734, 1.059999943, 1.052205324, 0.960733414}, + {2.716667, 0.999860048, 0.999952257, 1.059999943, 1.052210212, 0.960763991}, + {2.720833, 0.999847651, 0.99995178, 1.059999943, 1.052213669, 0.960793912}, + {2.725, 0.999835789, 0.999951303, 1.059999943, 1.052217245, 0.960823774}, + {2.729167, 0.999824584, 0.999950707, 1.059999943, 1.052219629, 0.96085304}, + {2.733333, 0.999813974, 0.999950111, 1.059999943, 1.052222133, 0.960882246}, + {2.7375, 0.99980408, 0.999949455, 1.059999943, 1.052223682, 0.960910857}, + {2.741667, 0.999794781, 0.99994874, 1.059999943, 1.052225232, 0.960939467}, + {2.745833, 0.999786258, 0.999947965, 1.059999943, 1.052226067, 0.960967422}, + {2.75, 0.99977839, 0.99994719, 1.059999943, 1.05222702, 0.960995376}, + {2.754167, 0.999771297, 0.999946415, 1.059999943, 1.052227378, 0.961022794}, + {2.758333, 0.99976486, 0.999945581, 1.059999943, 1.052227855, 0.961050153}, + {2.7625, 0.999759257, 0.999944746, 1.059999943, 1.052228093, 0.961076915}, + {2.766667, 0.999754369, 0.999943852, 1.059999943, 1.052228212, 0.961103737}, + {2.770833, 0.999750197, 0.999942958, 1.059999943, 1.052228451, 0.961130023}, + {2.775, 0.999746859, 0.999942064, 1.059999943, 1.05222857, 0.961156309}, + {2.779167, 0.999744236, 0.99994117, 1.059999943, 1.052228928, 0.961182117}, + {2.783333, 0.999742389, 0.999940276, 1.059999943, 1.052229404, 0.961207926}, + {2.7875, 0.999741256, 0.999939382, 1.059999943, 1.05223012, 0.961233318}, + {2.791667, 0.999740899, 0.999938548, 1.059999943, 1.052230954, 0.961258709}, + {2.795833, 0.999741256, 0.999937713, 1.059999943, 1.052232265, 0.961283743}, + {2.8, 0.999742389, 0.999936879, 1.059999943, 1.052233577, 0.961308777}, + {2.804167, 0.999744177, 0.999936104, 1.059999943, 1.052235723, 0.961333513}, + {2.808333, 0.99974668, 0.999935329, 1.059999943, 1.052237868, 0.96135819}, + {2.8125, 0.999749899, 0.999934673, 1.059999943, 1.052240968, 0.961382687}, + {2.816667, 0.999753714, 0.999934018, 1.059999943, 1.052244067, 0.961407185}, + {2.820833, 0.999758184, 0.999933481, 1.059999943, 1.05224812, 0.961431503}, + {2.825, 0.99976331, 0.999932945, 1.059999943, 1.052252293, 0.961455822}, + {2.829167, 0.999768972, 0.999932528, 1.059999943, 1.052257657, 0.961480081}, + {2.833333, 0.99977529, 0.99993217, 1.059999943, 1.052263141, 0.961504281}, + {2.8375, 0.999782085, 0.999931931, 1.059999943, 1.052269816, 0.96152848}, + {2.841667, 0.999789417, 0.999931753, 1.059999943, 1.052276611, 0.96155268}, + {2.845833, 0.999797225, 0.999931633, 1.059999943, 1.052284718, 0.961576939}, + {2.85, 0.99980545, 0.999931693, 1.059999943, 1.052292943, 0.961601198}, + {2.854167, 0.999814153, 0.999931812, 1.059999943, 1.052302599, 0.961625576}, + {2.858333, 0.999823272, 0.999932051, 1.059999943, 1.052312374, 0.961649954}, + {2.8625, 0.99983269, 0.999932349, 1.059999943, 1.05232358, 0.961674511}, + {2.866667, 0.999842465, 0.999932826, 1.059999943, 1.052334905, 0.961699069}, + {2.870833, 0.999852538, 0.999933422, 1.059999943, 1.052347779, 0.961723924}, + {2.875, 0.999862909, 0.999934137, 1.059999943, 1.052360773, 0.961748719}, + {2.879167, 0.999873459, 0.999934912, 1.059999943, 1.052375197, 0.961773872}, + {2.883333, 0.999884188, 0.999935865, 1.059999943, 1.052389741, 0.961799026}, + {2.8875, 0.999895096, 0.999936938, 1.059999943, 1.052405953, 0.961824536}, + {2.891667, 0.999906182, 0.999938071, 1.059999943, 1.052422047, 0.961850047}, + {2.895833, 0.999917269, 0.999939382, 1.059999943, 1.052439809, 0.961876035}, + {2.9, 0.999928474, 0.999940813, 1.059999943, 1.052457571, 0.961901963}, + {2.904167, 0.99993968, 0.999942362, 1.059999943, 1.052476883, 0.961928368}, + {2.908333, 0.999950886, 0.999944031, 1.059999943, 1.052496195, 0.961954772}, + {2.9125, 0.999962032, 0.99994576, 1.059999943, 1.052517056, 0.961981714}, + {2.916667, 0.999973118, 0.999947608, 1.059999943, 1.052537918, 0.962008655}, + {2.920833, 0.999984086, 0.999949634, 1.059999943, 1.052560091, 0.962036073}, + {2.925, 0.999994934, 0.999951661, 1.059999943, 1.052582264, 0.962063551}, + {2.929167, 1.000005603, 0.999953866, 1.059999943, 1.052605867, 0.962091565}, + {2.933333, 1.000016093, 0.999956131, 1.059999943, 1.052629471, 0.962119579}, + {2.9375, 1.000026345, 0.999958456, 1.059999943, 1.052654147, 0.96214813}, + {2.941667, 1.000036359, 0.999960899, 1.059999943, 1.052678943, 0.962176681}, + {2.945833, 1.000046015, 0.999963343, 1.059999943, 1.052704811, 0.962205768}, + {2.95, 1.000055432, 0.999965906, 1.059999943, 1.05273068, 0.962234914}, + {2.954167, 1.000064492, 0.999968529, 1.059999943, 1.052757502, 0.962264597}, + {2.958333, 1.000073314, 0.999971151, 1.059999943, 1.052784204, 0.962294281}, + {2.9625, 1.000081658, 0.999973834, 1.059999943, 1.052811861, 0.96232444}, + {2.966667, 1.000089645, 0.999976575, 1.059999943, 1.052839518, 0.96235466}, + {2.970833, 1.000097156, 0.999979317, 1.059999943, 1.052867889, 0.962385356}, + {2.975, 1.000104308, 0.999982119, 1.059999943, 1.052896142, 0.962416053}, + {2.979167, 1.000111103, 0.99998486, 1.059999943, 1.052924991, 0.962447166}, + {2.983333, 1.000117302, 0.999987602, 1.059999943, 1.05295372, 0.96247834}, + {2.9875, 1.000123143, 0.999990344, 1.059999943, 1.052983046, 0.96250993}, + {2.991667, 1.000128508, 0.999993086, 1.059999943, 1.053012133, 0.962541461}, + {2.995833, 1.000133276, 0.999995768, 1.059999943, 1.053041577, 0.962573409}, + {3, 1.000137687, 0.99999845, 1.059999943, 1.053071022, 0.962605298}, + {3.004167, 1.000141501, 1.000001073, 1.059999943, 1.053100467, 0.962637544}, + {3.008333, 1.000144958, 1.000003576, 1.059999943, 1.053129911, 0.96266973}, + {3.0125, 1.00014782, 1.00000608, 1.059999943, 1.053159356, 0.962702215}, + {3.016667, 1.000150084, 1.000008464, 1.059999943, 1.053188682, 0.96273464}, + {3.020833, 1.000151992, 1.000010729, 1.059999943, 1.053217888, 0.962767243}, + {3.025, 1.000153303, 1.000012994, 1.059999943, 1.053246975, 0.962799788}, + {3.029167, 1.000154138, 1.00001514, 1.059999943, 1.053275824, 0.962832451}, + {3.033333, 1.000154495, 1.000017047, 1.059999943, 1.053304553, 0.962865114}, + {3.0375, 1.000154376, 1.000018954, 1.059999943, 1.053332806, 0.962897778}, + {3.041667, 1.00015378, 1.000020742, 1.059999943, 1.053361058, 0.962930441}, + {3.045833, 1.000152707, 1.000022411, 1.059999943, 1.053388596, 0.962962985}, + {3.05, 1.000151157, 1.000023961, 1.059999943, 1.053416252, 0.962995529}, + {3.054167, 1.000149131, 1.000025272, 1.059999943, 1.053443074, 0.963027895}, + {3.058333, 1.000146747, 1.000026464, 1.059999943, 1.053469896, 0.96306026}, + {3.0625, 1.000143886, 1.000027537, 1.059999943, 1.053495884, 0.963092387}, + {3.066667, 1.000140548, 1.000028491, 1.059999943, 1.053521872, 0.963124454}, + {3.070833, 1.000136852, 1.000029206, 1.059999943, 1.053546906, 0.963156223}, + {3.075, 1.000132799, 1.000029802, 1.059999943, 1.053571939, 0.963187933}, + {3.079167, 1.000128388, 1.000030279, 1.059999943, 1.053595901, 0.963219225}, + {3.083333, 1.00012362, 1.000030518, 1.059999943, 1.053619981, 0.963250518}, + {3.0875, 1.000118494, 1.000030637, 1.059999943, 1.053642869, 0.963281274}, + {3.091667, 1.00011313, 1.000030518, 1.059999943, 1.053665638, 0.96331203}, + {3.095833, 1.000107408, 1.000030398, 1.059999943, 1.053687334, 0.963342249}, + {3.1, 1.000101447, 1.000029922, 1.059999943, 1.05370903, 0.963372409}, + {3.104167, 1.000095248, 1.000029445, 1.059999943, 1.053729534, 0.963401914}, + {3.108333, 1.000088811, 1.00002861, 1.059999943, 1.053750038, 0.963431358}, + {3.1125, 1.000082135, 1.000027776, 1.059999943, 1.05376935, 0.963460147}, + {3.116667, 1.00007534, 1.000026703, 1.059999943, 1.053788543, 0.963488877}, + {3.120833, 1.000068426, 1.000025511, 1.059999943, 1.053806543, 0.963516891}, + {3.125, 1.000061274, 1.000024199, 1.059999943, 1.053824544, 0.963544846}, + {3.129167, 1.000054121, 1.00002265, 1.059999943, 1.053841352, 0.963571966}, + {3.133333, 1.00004673, 1.0000211, 1.059999943, 1.053858042, 0.963599026}, + {3.1375, 1.000039339, 1.000019312, 1.059999943, 1.053873539, 0.963625252}, + {3.141667, 1.000031948, 1.000017405, 1.059999943, 1.053889036, 0.963651478}, + {3.145833, 1.000024557, 1.000015378, 1.059999943, 1.053903341, 0.96367681}, + {3.15, 1.000017047, 1.000013232, 1.059999943, 1.053917527, 0.963702083}, + {3.154167, 1.000009656, 1.000010967, 1.059999943, 1.05393064, 0.963726461}, + {3.158333, 1.000002265, 1.000008702, 1.059999943, 1.053943753, 0.96375078}, + {3.1625, 0.999994993, 1.000006199, 1.059999943, 1.053955674, 0.963774204}, + {3.166667, 0.999987721, 1.000003695, 1.059999943, 1.053967595, 0.963797569}, + {3.170833, 0.999980628, 1.000001073, 1.059999943, 1.053978443, 0.96382004}, + {3.175, 0.999973595, 0.99999845, 1.059999943, 1.053989291, 0.963842452}, + {3.179167, 0.999966741, 0.999995708, 1.059999943, 1.053999186, 0.963863909}, + {3.183333, 0.999960005, 0.999992967, 1.059999943, 1.054008961, 0.963885427}, + {3.1875, 0.999953508, 0.999990165, 1.059999943, 1.054017901, 0.963905931}, + {3.191667, 0.999947131, 0.999987304, 1.059999943, 1.054026842, 0.963926494}, + {3.195833, 0.999941051, 0.999984443, 1.059999943, 1.054034948, 0.963946104}, + {3.2, 0.99993515, 0.999981582, 1.059999943, 1.054042935, 0.963965714}, + {3.204167, 0.999929488, 0.999978721, 1.059999943, 1.054050326, 0.963984489}, + {3.208333, 0.999924064, 0.99997592, 1.059999943, 1.054057598, 0.964003205}, + {3.2125, 0.999918878, 0.999973059, 1.059999943, 1.054064274, 0.964021087}, + {3.216667, 0.99991399, 0.999970257, 1.059999943, 1.05407095, 0.964039028}, + {3.220833, 0.999909461, 0.999967515, 1.059999943, 1.054077029, 0.964056134}, + {3.225, 0.999905109, 0.999964774, 1.059999943, 1.054083109, 0.9640733}, + {3.229167, 0.999901116, 0.999962151, 1.059999943, 1.054088712, 0.964089692}, + {3.233333, 0.99989748, 0.999959528, 1.059999943, 1.054094434, 0.964106083}, + {3.2375, 0.999894083, 0.999957025, 1.059999943, 1.054099679, 0.964121819}, + {3.241667, 0.999891043, 0.999954581, 1.059999943, 1.054105043, 0.964137554}, + {3.245833, 0.999888361, 0.999952257, 1.059999943, 1.054110169, 0.964152753}, + {3.25, 0.999885976, 0.999949992, 1.059999943, 1.054115295, 0.964167893}, + {3.254167, 0.99988389, 0.999947846, 1.059999943, 1.054120183, 0.964182556}, + {3.258333, 0.999882162, 0.999945819, 1.059999943, 1.05412519, 0.964197218}, + {3.2625, 0.999880791, 0.999943972, 1.059999943, 1.054130197, 0.964211464}, + {3.266667, 0.999879777, 0.999942183, 1.059999943, 1.054135203, 0.964225709}, + {3.270833, 0.999879003, 0.999940515, 1.059999943, 1.05414021, 0.964239597}, + {3.275, 0.999878645, 0.999939024, 1.059999943, 1.054145336, 0.964253485}, + {3.279167, 0.999878585, 0.999937654, 1.059999943, 1.054150581, 0.964267135}, + {3.283333, 0.999878824, 0.999936461, 1.059999943, 1.054155827, 0.964280784}, + {3.2875, 0.99987942, 0.999935389, 1.059999943, 1.05416131, 0.964294255}, + {3.291667, 0.999880314, 0.999934435, 1.059999943, 1.054166913, 0.964307725}, + {3.295833, 0.999881506, 0.99993366, 1.059999943, 1.054172874, 0.964321136}, + {3.3, 0.999882996, 0.999933064, 1.059999943, 1.054178715, 0.964334488}, + {3.304167, 0.999884784, 0.999932647, 1.059999943, 1.054185152, 0.964347899}, + {3.308333, 0.99988687, 0.999932349, 1.059999943, 1.054191589, 0.96436131}, + {3.3125, 0.999889195, 0.99993223, 1.059999943, 1.054198503, 0.964374721}, + {3.316667, 0.999891758, 0.99993223, 1.059999943, 1.054205418, 0.964388251}, + {3.320833, 0.999894619, 0.999932468, 1.059999943, 1.054212928, 0.964401841}, + {3.325, 0.999897718, 0.999932766, 1.059999943, 1.054220438, 0.964415491}, + {3.329167, 0.999900997, 0.999933302, 1.059999943, 1.054228544, 0.964429319}, + {3.333333, 0.999904513, 0.999933958, 1.059999943, 1.05423677, 0.964443207}, + {3.3375, 0.999908209, 0.999934793, 1.059999943, 1.054245591, 0.964457333}, + {3.341667, 0.999912143, 0.999935746, 1.059999943, 1.054254532, 0.964471459}, + {3.345833, 0.999916196, 0.999936819, 1.059999943, 1.054264188, 0.964485943}, + {3.35, 0.999920428, 0.999938071, 1.059999943, 1.054273725, 0.964500487}, + {3.354167, 0.999924839, 0.999939442, 1.059999943, 1.054284096, 0.964515388}, + {3.358333, 0.999929368, 0.999940991, 1.059999943, 1.054294467, 0.964530289}, + {3.3625, 0.999933958, 0.999942601, 1.059999943, 1.054305673, 0.964545608}, + {3.366667, 0.999938726, 0.999944389, 1.059999943, 1.054316878, 0.964560986}, + {3.370833, 0.999943495, 0.999946237, 1.059999943, 1.054328799, 0.96457684}, + {3.375, 0.999948382, 0.999948204, 1.059999943, 1.05434072, 0.964592695}, + {3.379167, 0.99995333, 0.99995029, 1.059999943, 1.054353476, 0.964609027}, + {3.383333, 0.999958336, 0.999952435, 1.059999943, 1.054366231, 0.964625418}, + {3.3875, 0.999963343, 0.9999547, 1.059999943, 1.054379702, 0.964642286}, + {3.391667, 0.99996835, 0.999957025, 1.059999943, 1.054393172, 0.964659154}, + {3.395833, 0.999973357, 0.999959409, 1.059999943, 1.054407358, 0.964676619}, + {3.4, 0.999978364, 0.999961853, 1.059999943, 1.054421663, 0.964694023}, + {3.404167, 0.99998337, 0.999964416, 1.059999943, 1.054436564, 0.964712024}, + {3.408333, 0.999988258, 0.999966919, 1.059999943, 1.054451585, 0.964729965}, + {3.4125, 0.999993145, 0.999969542, 1.059999943, 1.054467201, 0.964748502}, + {3.416667, 0.999997973, 0.999972165, 1.059999943, 1.054482818, 0.964766979}, + {3.420833, 1.000002623, 0.999974787, 1.059999943, 1.05449903, 0.964785993}, + {3.425, 1.000007272, 0.99997741, 1.059999943, 1.054515243, 0.964805067}, + {3.429167, 1.000011802, 0.999980092, 1.059999943, 1.054532051, 0.964824557}, + {3.433333, 1.000016212, 0.999982715, 1.059999943, 1.05454886, 0.964844108}, + {3.4375, 1.000020385, 0.999985337, 1.059999943, 1.054566145, 0.964864075}, + {3.441667, 1.000024557, 0.99998796, 1.059999943, 1.05458343, 0.964884043}, + {3.445833, 1.000028491, 0.999990523, 1.059999943, 1.054601192, 0.964904487}, + {3.45, 1.000032306, 0.999993026, 1.059999943, 1.054618955, 0.964924872}, + {3.454167, 1.000036001, 0.99999553, 1.059999943, 1.054637074, 0.964945674}, + {3.458333, 1.000039458, 0.999997973, 1.059999943, 1.054655194, 0.964966476}, + {3.4625, 1.000042677, 1.000000358, 1.059999943, 1.054673672, 0.964987576}, + {3.466667, 1.000045776, 1.000002623, 1.059999943, 1.05469203, 0.965008676}, + {3.470833, 1.000048637, 1.000004888, 1.059999943, 1.054710627, 0.965030074}, + {3.475, 1.000051379, 1.000007033, 1.059999943, 1.054729342, 0.965051472}, + {3.479167, 1.000053883, 1.00000906, 1.059999943, 1.054748058, 0.965073049}, + {3.483333, 1.000056148, 1.000010967, 1.059999943, 1.054766893, 0.965094686}, + {3.4875, 1.000058174, 1.000012875, 1.059999943, 1.054785728, 0.965116441}, + {3.491667, 1.000059962, 1.000014544, 1.059999943, 1.054804564, 0.965138137}, + {3.495833, 1.000061631, 1.000016212, 1.059999943, 1.054823399, 0.965160012}, + {3.5, 1.000063062, 1.000017762, 1.059999943, 1.054842234, 0.965181828}, + {3.504167, 1.000064135, 1.000019193, 1.059999943, 1.054861069, 0.965203702}, + {3.508333, 1.000065088, 1.000020504, 1.059999943, 1.054879785, 0.965225518}, + {3.5125, 1.000065804, 1.000021577, 1.059999943, 1.054898381, 0.965247333}, + {3.516667, 1.00006628, 1.00002265, 1.059999943, 1.054916978, 0.965269089}, + {3.520833, 1.000066638, 1.000023603, 1.059999943, 1.054935336, 0.965290785}, + {3.525, 1.000066638, 1.000024319, 1.059999943, 1.054953694, 0.965312481}, + {3.529167, 1.000066519, 1.000025034, 1.059999943, 1.054971695, 0.965333939}, + {3.533333, 1.000066161, 1.000025511, 1.059999943, 1.054989815, 0.965355456}, + {3.5375, 1.000065565, 1.000025988, 1.059999943, 1.055007458, 0.965376675}, + {3.541667, 1.000064731, 1.000026226, 1.059999943, 1.05502522, 0.965397954}, + {3.545833, 1.000063777, 1.000026345, 1.059999943, 1.055042505, 0.965418875}, + {3.55, 1.000062585, 1.000026345, 1.059999943, 1.055059791, 0.965439796}, + {3.554167, 1.000061154, 1.000026226, 1.059999943, 1.055076599, 0.96546036}, + {3.558333, 1.000059605, 1.000025868, 1.059999943, 1.055093408, 0.965480924}, + {3.5625, 1.000057936, 1.000025511, 1.059999943, 1.055109739, 0.96550107}, + {3.566667, 1.000056028, 1.000025034, 1.059999943, 1.055126071, 0.965521216}, + {3.570833, 1.000054002, 1.000024438, 1.059999943, 1.055141807, 0.965540946}, + {3.575, 1.000051737, 1.000023603, 1.059999943, 1.055157542, 0.965560615}, + {3.579167, 1.000049353, 1.000022769, 1.059999943, 1.055172682, 0.965579808}, + {3.583333, 1.000046968, 1.000021815, 1.059999943, 1.055187941, 0.965598941}, + {3.5875, 1.000044346, 1.000020742, 1.059999943, 1.055202484, 0.965617597}, + {3.591667, 1.000041604, 1.00001955, 1.059999943, 1.055217028, 0.965636253}, + {3.595833, 1.000038743, 1.000018358, 1.059999943, 1.055230856, 0.965654254}, + {3.6, 1.000035763, 1.000016928, 1.059999943, 1.055244803, 0.965672314}, + {3.604167, 1.000032783, 1.000015497, 1.059999943, 1.055258155, 0.965689778}, + {3.608333, 1.000029683, 1.000014067, 1.059999943, 1.055271387, 0.965707242}, + {3.6125, 1.000026464, 1.000012398, 1.059999943, 1.055284023, 0.965724051}, + {3.616667, 1.000023246, 1.000010729, 1.059999943, 1.055296659, 0.965740919}, + {3.620833, 1.000019908, 1.00000906, 1.059999943, 1.05530858, 0.965757132}, + {3.625, 1.000016689, 1.000007272, 1.059999943, 1.055320621, 0.965773344}, + {3.629167, 1.000013232, 1.000005484, 1.059999943, 1.055331945, 0.965788901}, + {3.633333, 1.000009894, 1.000003695, 1.059999943, 1.05534327, 0.965804458}, + {3.6375, 1.000006557, 1.000001788, 1.059999943, 1.055353999, 0.965819418}, + {3.641667, 1.000003099, 0.999999821, 1.059999943, 1.055364728, 0.965834379}, + {3.645833, 0.999999762, 0.999997914, 1.059999943, 1.055374861, 0.965848684}, + {3.65, 0.999996424, 0.999995947, 1.059999943, 1.055384994, 0.965862989}, + {3.654167, 0.999993086, 0.99999398, 1.059999943, 1.05539453, 0.965876758}, + {3.658333, 0.999989808, 0.999992013, 1.059999943, 1.055404067, 0.965890467}, + {3.6625, 0.999986589, 0.999990106, 1.059999943, 1.055413008, 0.96590358}, + {3.666667, 0.99998343, 0.999988139, 1.059999943, 1.055422068, 0.965916753}, + {3.670833, 0.99998033, 0.999986231, 1.059999943, 1.055430532, 0.96592927}, + {3.675, 0.999977291, 0.999984324, 1.059999943, 1.055438995, 0.965941906}, + {3.679167, 0.99997431, 0.999982417, 1.059999943, 1.055447102, 0.965953946}, + {3.683333, 0.999971449, 0.999980628, 1.059999943, 1.055455089, 0.965965986}, + {3.6875, 0.999968648, 0.99997884, 1.059999943, 1.055462718, 0.96597755}, + {3.691667, 0.999965966, 0.999977052, 1.059999943, 1.055470347, 0.965989113}, + {3.695833, 0.999963403, 0.999975383, 1.059999943, 1.0554775, 0.966000199}, + {3.7, 0.999960959, 0.999973774, 1.059999943, 1.055484772, 0.966011345}, + {3.704167, 0.999958634, 0.999972165, 1.059999943, 1.055491686, 0.966022074}, + {3.708333, 0.999956429, 0.999970675, 1.059999943, 1.0554986, 0.966032803}, + {3.7125, 0.999954343, 0.999969244, 1.059999943, 1.055505276, 0.966043115}, + {3.716667, 0.999952376, 0.999967873, 1.059999943, 1.055511951, 0.966053486}, + {3.720833, 0.999950588, 0.999966621, 1.059999943, 1.055518389, 0.966063559}, + {3.725, 0.999948919, 0.999965429, 1.059999943, 1.055524826, 0.966073573}, + {3.729167, 0.999947369, 0.999964297, 1.059999943, 1.055531144, 0.966083348}, + {3.733333, 0.999945998, 0.999963284, 1.059999943, 1.055537462, 0.966093183}, + {3.7375, 0.999944806, 0.99996233, 1.059999943, 1.055543542, 0.966102719}, + {3.741667, 0.999943733, 0.999961495, 1.059999943, 1.055549741, 0.966112316}, + {3.745833, 0.99994278, 0.99996078, 1.059999943, 1.05555594, 0.966121733}, + {3.75, 0.999942005, 0.999960124, 1.059999943, 1.055562019, 0.96613121}, + {3.754167, 0.999941409, 0.999959588, 1.059999943, 1.055568218, 0.966140509}, + {3.758333, 0.999940932, 0.999959111, 1.059999943, 1.055574417, 0.966149867}, + {3.7625, 0.999940634, 0.999958754, 1.059999943, 1.055580616, 0.966159105}, + {3.766667, 0.999940515, 0.999958515, 1.059999943, 1.055586815, 0.966168404}, + {3.770833, 0.999940455, 0.999958336, 1.059999943, 1.055593133, 0.966177642}, + {3.775, 0.999940634, 0.999958277, 1.059999943, 1.055599332, 0.966186941}, + {3.779167, 0.999940932, 0.999958336, 1.059999943, 1.055605888, 0.966196239}, + {3.783333, 0.999941349, 0.999958456, 1.059999943, 1.055612326, 0.966205537}, + {3.7875, 0.999941945, 0.999958634, 1.059999943, 1.055619001, 0.966214955}, + {3.791667, 0.999942601, 0.999958992, 1.059999943, 1.055625558, 0.966224313}, + {3.795833, 0.999943495, 0.999959409, 1.059999943, 1.055632472, 0.96623385}, + {3.8, 0.999944448, 0.999959886, 1.059999943, 1.055639386, 0.966243386}, + {3.804167, 0.999945521, 0.999960482, 1.059999943, 1.055646539, 0.966253042}, + {3.808333, 0.999946773, 0.999961138, 1.059999943, 1.055653691, 0.966262698}, + {3.8125, 0.999948084, 0.999961853, 1.059999943, 1.055661082, 0.966272593}, + {3.816667, 0.999949574, 0.999962687, 1.059999943, 1.055668592, 0.966282427}, + {3.820833, 0.999951124, 0.999963582, 1.059999943, 1.055676341, 0.966292501}, + {3.825, 0.999952734, 0.999964535, 1.059999943, 1.05568409, 0.966302633}, + {3.829167, 0.999954522, 0.999965608, 1.059999943, 1.055692196, 0.966312945}, + {3.833333, 0.99995631, 0.999966681, 1.059999943, 1.055700302, 0.966323256}, + {3.8375, 0.999958277, 0.999967813, 1.059999943, 1.055708766, 0.966333866}, + {3.841667, 0.999960244, 0.999969065, 1.059999943, 1.05571723, 0.966344476}, + {3.845833, 0.99996227, 0.999970317, 1.059999943, 1.055726051, 0.966355324}, + {3.85, 0.999964416, 0.999971569, 1.059999943, 1.055734873, 0.966366172}, + {3.854167, 0.999966562, 0.999972939, 1.059999943, 1.055744052, 0.966377318}, + {3.858333, 0.999968827, 0.99997431, 1.059999943, 1.055753231, 0.966388464}, + {3.8625, 0.999971092, 0.999975681, 1.059999943, 1.055762768, 0.966399908}, + {3.866667, 0.999973357, 0.999977112, 1.059999943, 1.055772305, 0.966411352}, + {3.870833, 0.999975681, 0.999978602, 1.059999943, 1.055782318, 0.966423094}, + {3.875, 0.999978065, 0.999980032, 1.059999943, 1.055792212, 0.966434777}, + {3.879167, 0.99998039, 0.999981523, 1.059999943, 1.055802464, 0.966446817}, + {3.883333, 0.999982774, 0.999983013, 1.059999943, 1.055812836, 0.966458797}, + {3.8875, 0.999985158, 0.999984503, 1.059999943, 1.055823445, 0.966471076}, + {3.891667, 0.999987483, 0.999985993, 1.059999943, 1.055834055, 0.966483355}, + {3.895833, 0.999989867, 0.999987483, 1.059999943, 1.055845022, 0.966495872}, + {3.9, 0.999992192, 0.999988973, 1.059999943, 1.055855989, 0.966508389}, + {3.904167, 0.999994457, 0.999990404, 1.059999943, 1.055867195, 0.966521144}, + {3.908333, 0.999996722, 0.999991834, 1.059999943, 1.055878401, 0.966533899}, + {3.9125, 0.999998987, 0.999993265, 1.059999943, 1.055889964, 0.966546893}, + {3.916667, 1.000001192, 0.999994636, 1.059999943, 1.055901527, 0.966559887}, + {3.920833, 1.000003338, 0.999996006, 1.059999943, 1.055913329, 0.96657306}, + {3.925, 1.000005364, 0.999997318, 1.059999943, 1.055925012, 0.966586232}, + {3.929167, 1.000007391, 0.999998569, 1.059999943, 1.055937052, 0.966599584}, + {3.933333, 1.000009298, 0.999999821, 1.059999943, 1.055949092, 0.966612935}, + {3.9375, 1.000011206, 1.000001073, 1.059999943, 1.055961251, 0.966626406}, + {3.941667, 1.000012994, 1.000002146, 1.059999943, 1.055973411, 0.966639876}, + {3.945833, 1.000014782, 1.000003219, 1.059999943, 1.055985689, 0.966653466}, + {3.95, 1.000016451, 1.000004292, 1.059999943, 1.055998087, 0.966666996}, + {3.954167, 1.000018001, 1.000005245, 1.059999943, 1.056010485, 0.966680646}, + {3.958333, 1.000019431, 1.000006199, 1.059999943, 1.056022882, 0.966694295}, + {3.9625, 1.000020742, 1.000007033, 1.059999943, 1.056035399, 0.966708004}, + {3.966667, 1.000022054, 1.000007868, 1.059999943, 1.056047916, 0.966721654}, + {3.970833, 1.000023246, 1.000008583, 1.059999943, 1.056060433, 0.966735363}, + {3.975, 1.000024319, 1.000009179, 1.059999943, 1.05607295, 0.966749012}, + {3.979167, 1.000025272, 1.000009775, 1.059999943, 1.056085467, 0.966762662}, + {3.983333, 1.000026226, 1.000010371, 1.059999943, 1.056097984, 0.966776311}, + {3.9875, 1.000026941, 1.000010729, 1.059999943, 1.056110501, 0.966789901}, + {3.991667, 1.000027657, 1.000011206, 1.059999943, 1.056123018, 0.966803432}, + {3.995833, 1.000028133, 1.000011444, 1.059999943, 1.056135416, 0.966816902}, + {4, 1.00002861, 1.000011802, 1.059999943, 1.056147814, 0.966830373}, + {4.004167, 1.000028968, 1.000011921, 1.059999943, 1.056160092, 0.966843724}, + {4.008333, 1.000029206, 1.00001204, 1.059999943, 1.056172371, 0.966857076}, + {4.0125, 1.000029325, 1.00001204, 1.059999943, 1.05618453, 0.966870248}, + {4.016667, 1.000029325, 1.00001204, 1.059999943, 1.05619669, 0.966883421}, + {4.020833, 1.000029206, 1.00001204, 1.059999943, 1.056208611, 0.966896355}, + {4.025, 1.000029087, 1.000011802, 1.059999943, 1.056220651, 0.966909349}, + {4.029167, 1.000028729, 1.000011683, 1.059999943, 1.056232333, 0.966922104}, + {4.033333, 1.000028372, 1.000011325, 1.059999943, 1.056244135, 0.96693486}, + {4.0375, 1.000027895, 1.000011086, 1.059999943, 1.056255579, 0.966947377}, + {4.041667, 1.000027299, 1.00001061, 1.059999943, 1.056267142, 0.966959894}, + {4.045833, 1.000026703, 1.000010252, 1.059999943, 1.056278348, 0.966972113}, + {4.05, 1.000025868, 1.000009656, 1.059999943, 1.056289673, 0.966984391}, + {4.054167, 1.000025034, 1.000009179, 1.059999943, 1.05630064, 0.966996372}, + {4.058333, 1.000024199, 1.000008583, 1.059999943, 1.056311607, 0.967008293}, + {4.0625, 1.000023127, 1.000007987, 1.059999943, 1.056322336, 0.967019975}, + {4.066667, 1.000022054, 1.000007272, 1.059999943, 1.056332946, 0.967031598}, + {4.070833, 1.000020981, 1.000006557, 1.059999943, 1.056343317, 0.967042983}, + {4.075, 1.000019789, 1.000005722, 1.059999943, 1.056353688, 0.967054307}, + {4.079167, 1.000018477, 1.000005007, 1.059999943, 1.056363702, 0.967065334}, + {4.083333, 1.000017166, 1.000004172, 1.059999943, 1.056373835, 0.967076361}, + {4.0875, 1.000015855, 1.000003338, 1.059999943, 1.056383491, 0.96708709}, + {4.091667, 1.000014424, 1.000002384, 1.059999943, 1.056393266, 0.967097759}, + {4.095833, 1.000012875, 1.00000155, 1.059999943, 1.056402564, 0.96710813}, + {4.1, 1.000011444, 1.000000596, 1.059999943, 1.056411982, 0.967118561}, + {4.104167, 1.000009894, 0.999999702, 1.059999943, 1.056421041, 0.967128575}, + {4.108333, 1.000008345, 0.999998748, 1.059999943, 1.056430101, 0.967138648}, + {4.1125, 1.000006676, 0.999997795, 1.059999943, 1.056438804, 0.967148364}, + {4.116667, 1.000005126, 0.999996841, 1.059999943, 1.056447506, 0.967158079}, + {4.120833, 1.000003457, 0.999995887, 1.059999943, 1.056455851, 0.967167497}, + {4.125, 1.000001907, 0.999994934, 1.059999943, 1.056464314, 0.967176914}, + {4.129167, 1.000000238, 0.99999398, 1.059999943, 1.056472301, 0.967185974}, + {4.133333, 0.999998629, 0.999993026, 1.059999943, 1.056480408, 0.967195094}, + {4.1375, 0.99999696, 0.999992073, 1.059999943, 1.056488156, 0.967203915}, + {4.141667, 0.999995351, 0.999991119, 1.059999943, 1.056496024, 0.967212737}, + {4.145833, 0.999993742, 0.999990225, 1.059999943, 1.056503415, 0.96722126}, + {4.15, 0.999992192, 0.999989331, 1.059999943, 1.056510925, 0.967229784}, + {4.154167, 0.999990582, 0.999988496, 1.059999943, 1.056518197, 0.967238069}, + {4.158333, 0.999989092, 0.999987602, 1.059999943, 1.05652535, 0.967246294}, + {4.1625, 0.999987602, 0.999986827, 1.059999943, 1.056532383, 0.967254341}, + {4.166667, 0.999986112, 0.999985993, 1.059999943, 1.056539297, 0.967262328}, + {4.170833, 0.999984682, 0.999985278, 1.059999943, 1.056546092, 0.967270136}, + {4.175, 0.999983311, 0.999984503, 1.059999943, 1.056552887, 0.967277944}, + {4.179167, 0.99998194, 0.999983847, 1.059999943, 1.056559324, 0.967285573}, + {4.183333, 0.999980688, 0.999983191, 1.059999943, 1.056565881, 0.967293143}, + {4.1875, 0.999979436, 0.999982536, 1.059999943, 1.056572318, 0.967300594}, + {4.191667, 0.999978304, 0.99998194, 1.059999943, 1.056578636, 0.967307985}, + {4.195833, 0.999977171, 0.999981403, 1.059999943, 1.056584835, 0.967315257}, + {4.2, 0.999976099, 0.999980927, 1.059999943, 1.056591034, 0.967322528}, + {4.204167, 0.999975145, 0.99998045, 1.059999943, 1.056597114, 0.967329681}, + {4.208333, 0.999974191, 0.999980032, 1.059999943, 1.056603193, 0.967336833}, + {4.2125, 0.999973357, 0.999979675, 1.059999943, 1.056609154, 0.967343867}, + {4.216667, 0.999972522, 0.999979317, 1.059999943, 1.056615233, 0.9673509}, + {4.220833, 0.999971867, 0.999979079, 1.059999943, 1.056621075, 0.967357814}, + {4.225, 0.999971211, 0.99997884, 1.059999943, 1.056627035, 0.967364788}, + {4.229167, 0.999970615, 0.999978602, 1.059999943, 1.056632876, 0.967371643}, + {4.233333, 0.999970138, 0.999978483, 1.059999943, 1.056638718, 0.967378557}, + {4.2375, 0.999969721, 0.999978364, 1.059999943, 1.056644559, 0.967385411}, + {4.241667, 0.999969363, 0.999978304, 1.059999943, 1.0566504, 0.967392266}, + {4.245833, 0.999969125, 0.999978304, 1.059999943, 1.056656241, 0.96739912}, + {4.25, 0.999968886, 0.999978364, 1.059999943, 1.056662083, 0.967405975}, + {4.254167, 0.999968767, 0.999978423, 1.059999943, 1.056668043, 0.96741277}, + {4.258333, 0.999968767, 0.999978542, 1.059999943, 1.056673884, 0.967419624}, + {4.2625, 0.999968767, 0.999978721, 1.059999943, 1.056679845, 0.967426479}, + {4.266667, 0.999968886, 0.9999789, 1.059999943, 1.056685805, 0.967433393}, + {4.270833, 0.999969065, 0.999979138, 1.059999943, 1.056691766, 0.967440307}, + {4.275, 0.999969304, 0.999979436, 1.059999943, 1.056697726, 0.967447221}, + {4.279167, 0.999969602, 0.999979734, 1.059999943, 1.056703806, 0.967454195}, + {4.283333, 0.999970019, 0.999980092, 1.059999943, 1.056710005, 0.967461169}, + {4.2875, 0.999970436, 0.99998045, 1.059999943, 1.056716204, 0.967468202}, + {4.291667, 0.999970973, 0.999980867, 1.059999943, 1.056722403, 0.967475235}, + {4.295833, 0.999971569, 0.999981344, 1.059999943, 1.056728721, 0.967482388}, + {4.3, 0.999972165, 0.999981821, 1.059999943, 1.056735039, 0.967489481}, + {4.304167, 0.99997288, 0.999982297, 1.059999943, 1.056741476, 0.967496693}, + {4.308333, 0.999973595, 0.999982834, 1.059999943, 1.056748033, 0.967503965}, + {4.3125, 0.99997443, 0.99998343, 1.059999943, 1.056754589, 0.967511296}, + {4.316667, 0.999975264, 0.999983966, 1.059999943, 1.056761265, 0.967518628}, + {4.320833, 0.999976158, 0.999984562, 1.059999943, 1.05676806, 0.967526019}, + {4.325, 0.999977052, 0.999985158, 1.059999943, 1.056774855, 0.967533469}, + {4.329167, 0.999978006, 0.999985814, 1.059999943, 1.056781769, 0.967541039}, + {4.333333, 0.999979019, 0.99998647, 1.059999943, 1.056788683, 0.967548549}, + {4.3375, 0.999980092, 0.999987125, 1.059999943, 1.056795835, 0.967556238}, + {4.341667, 0.999981165, 0.999987781, 1.059999943, 1.056802988, 0.967563868}, + {4.345833, 0.999982238, 0.999988437, 1.059999943, 1.05681026, 0.967571676}, + {4.35, 0.99998337, 0.999989092, 1.059999943, 1.056817532, 0.967579424}, + {4.354167, 0.999984503, 0.999989808, 1.059999943, 1.056824923, 0.967587292}, + {4.358333, 0.999985635, 0.999990463, 1.059999943, 1.056832433, 0.96759516}, + {4.3625, 0.999986768, 0.999991119, 1.059999943, 1.056840062, 0.967603147}, + {4.366667, 0.99998796, 0.999991834, 1.059999943, 1.056847572, 0.967611134}, + {4.370833, 0.999989152, 0.99999249, 1.059999943, 1.05685544, 0.96761924}, + {4.375, 0.999990284, 0.999993145, 1.059999943, 1.056863189, 0.967627347}, + {4.379167, 0.999991477, 0.999993801, 1.059999943, 1.056871057, 0.967635512}, + {4.383333, 0.999992669, 0.999994457, 1.059999943, 1.056878924, 0.967643678}, + {4.3875, 0.999993801, 0.999995053, 1.059999943, 1.056887031, 0.967651904}, + {4.391667, 0.999994993, 0.999995708, 1.059999943, 1.056895137, 0.967660189}, + {4.395833, 0.999996126, 0.999996305, 1.059999943, 1.056903243, 0.967668533}, + {4.4, 0.999997199, 0.999996901, 1.059999943, 1.056911469, 0.967676818}, + {4.404167, 0.999998331, 0.999997437, 1.059999943, 1.056919694, 0.967685223}, + {4.408333, 0.999999404, 0.999997973, 1.059999943, 1.056928039, 0.967693627}, + {4.4125, 1.000000477, 0.99999851, 1.059999943, 1.056936383, 0.967702031}, + {4.416667, 1.000001431, 0.999999046, 1.059999943, 1.056944847, 0.967710495}, + {4.420833, 1.000002384, 0.999999523, 1.059999943, 1.056953311, 0.967718959}, + {4.425, 1.000003338, 0.99999994, 1.059999943, 1.056961775, 0.967727423}, + {4.429167, 1.000004292, 1.000000358, 1.059999943, 1.056970239, 0.967735887}, + {4.433333, 1.000005126, 1.000000834, 1.059999943, 1.056978822, 0.96774435}, + {4.4375, 1.00000596, 1.000001192, 1.059999943, 1.056987405, 0.967752874}, + {4.441667, 1.000006795, 1.00000155, 1.059999943, 1.056995988, 0.967761338}, + {4.445833, 1.00000751, 1.000001907, 1.059999943, 1.057004571, 0.967769802}, + {4.45, 1.000008225, 1.000002146, 1.059999943, 1.057013154, 0.967778325}, + {4.454167, 1.000008821, 1.000002384, 1.059999943, 1.057021856, 0.967786729}, + {4.458333, 1.000009537, 1.000002623, 1.059999943, 1.057030439, 0.967795193}, + {4.4625, 1.000010014, 1.000002861, 1.059999943, 1.057039022, 0.967803597}, + {4.466667, 1.00001049, 1.000003099, 1.059999943, 1.057047606, 0.967812002}, + {4.470833, 1.000010967, 1.000003219, 1.059999943, 1.057056189, 0.967820346}, + {4.475, 1.000011325, 1.000003338, 1.059999943, 1.057064891, 0.967828691}, + {4.479167, 1.000011683, 1.000003457, 1.059999943, 1.057073355, 0.967836976}, + {4.483333, 1.00001204, 1.000003457, 1.059999943, 1.057081938, 0.967845261}, + {4.4875, 1.000012279, 1.000003457, 1.059999943, 1.057090402, 0.967853487}, + {4.491667, 1.000012398, 1.000003576, 1.059999943, 1.057098866, 0.967861652}, + {4.495833, 1.000012517, 1.000003457, 1.059999943, 1.057107329, 0.967869759}, + {4.5, 1.000012636, 1.000003457, 1.059999943, 1.057115674, 0.967877865}, + {4.504167, 1.000012636, 1.000003338, 1.059999943, 1.057124019, 0.967885852}, + {4.508333, 1.000012636, 1.000003219, 1.059999943, 1.057132244, 0.967893839}, + {4.5125, 1.000012517, 1.000003099, 1.059999943, 1.05714047, 0.967901707}, + {4.516667, 1.000012398, 1.00000298, 1.059999943, 1.057148695, 0.967909634}, + {4.520833, 1.000012279, 1.000002861, 1.059999943, 1.057156801, 0.967917383}, + {4.525, 1.00001204, 1.000002623, 1.059999943, 1.057164907, 0.967925131}, + {4.529167, 1.000011802, 1.000002384, 1.059999943, 1.057172775, 0.967932701}, + {4.533333, 1.000011444, 1.000002146, 1.059999943, 1.057180762, 0.967940331}, + {4.5375, 1.000011086, 1.000001907, 1.059999943, 1.057188511, 0.967947781}, + {4.541667, 1.00001061, 1.000001669, 1.059999943, 1.057196379, 0.967955291}, + {4.545833, 1.000010252, 1.000001311, 1.059999943, 1.057204008, 0.967962623}, + {4.55, 1.000009775, 1.000001073, 1.059999943, 1.057211638, 0.967969894}, + {4.554167, 1.000009179, 1.000000715, 1.059999943, 1.057219148, 0.967977107}, + {4.558333, 1.000008583, 1.000000358, 1.059999943, 1.057226539, 0.967984259}, + {4.5625, 1.000007987, 1, 1.059999943, 1.05723393, 0.967991292}, + {4.566667, 1.000007391, 0.999999642, 1.059999943, 1.057241201, 0.967998326}, + {4.570833, 1.000006795, 0.999999285, 1.059999943, 1.057248354, 0.96800518}, + {4.575, 1.00000608, 0.999998927, 1.059999943, 1.057255507, 0.968012035}, + {4.579167, 1.000005364, 0.99999851, 1.059999943, 1.05726254, 0.968018711}, + {4.583333, 1.000004649, 0.999998152, 1.059999943, 1.057269454, 0.968025446}, + {4.5875, 1.000003934, 0.999997735, 1.059999943, 1.057276249, 0.968031943}, + {4.591667, 1.000003219, 0.999997318, 1.059999943, 1.057283044, 0.968038499}, + {4.595833, 1.000002384, 0.999996901, 1.059999943, 1.05728972, 0.968044877}, + {4.6, 1.00000155, 0.999996543, 1.059999943, 1.057296276, 0.968051314}, + {4.604167, 1.000000834, 0.999996126, 1.059999943, 1.057302833, 0.968057513}, + {4.608333, 1, 0.999995708, 1.059999943, 1.05730927, 0.968063772}, + {4.6125, 0.999999166, 0.999995351, 1.059999943, 1.057315469, 0.968069851}, + {4.616667, 0.999998391, 0.999994934, 1.059999943, 1.057321787, 0.968075991}, + {4.620833, 0.999997556, 0.999994576, 1.059999943, 1.057327986, 0.968081951}, + {4.625, 0.999996781, 0.999994159, 1.059999943, 1.057334065, 0.968087912}, + {4.629167, 0.999995947, 0.999993801, 1.059999943, 1.057340026, 0.968093693}, + {4.633333, 0.999995172, 0.999993443, 1.059999943, 1.057345986, 0.968099535}, + {4.6375, 0.999994397, 0.999993086, 1.059999943, 1.057351828, 0.968105197}, + {4.641667, 0.999993622, 0.999992728, 1.059999943, 1.057357669, 0.968110919}, + {4.645833, 0.999992847, 0.99999243, 1.059999943, 1.057363391, 0.968116522}, + {4.65, 0.999992132, 0.999992073, 1.059999943, 1.057369113, 0.968122065}, + {4.654167, 0.999991417, 0.999991775, 1.059999943, 1.057374716, 0.968127549}, + {4.658333, 0.999990702, 0.999991477, 1.059999943, 1.057380199, 0.968133032}, + {4.6625, 0.999989986, 0.999991238, 1.059999943, 1.057385683, 0.968138397}, + {4.666667, 0.999989331, 0.99999094, 1.059999943, 1.057391167, 0.968143761}, + {4.670833, 0.999988735, 0.999990702, 1.059999943, 1.057396531, 0.968149066}, + {4.675, 0.999988079, 0.999990463, 1.059999943, 1.057401896, 0.968154311}, + {4.679167, 0.999987543, 0.999990284, 1.059999943, 1.057407141, 0.968159497}, + {4.683333, 0.999986947, 0.999990046, 1.059999943, 1.057412386, 0.968164742}, + {4.6875, 0.99998647, 0.999989867, 1.059999943, 1.057417631, 0.968169868}, + {4.691667, 0.999985993, 0.999989748, 1.059999943, 1.057422876, 0.968174994}, + {4.695833, 0.999985516, 0.999989569, 1.059999943, 1.057428002, 0.96818006}, + {4.7, 0.999985099, 0.99998945, 1.059999943, 1.057433128, 0.968185127}, + {4.704167, 0.999984741, 0.999989331, 1.059999943, 1.057438135, 0.968190134}, + {4.708333, 0.999984384, 0.999989271, 1.059999943, 1.057443261, 0.96819514}, + {4.7125, 0.999984086, 0.999989212, 1.059999943, 1.057448268, 0.968200147}, + {4.716667, 0.999983788, 0.999989152, 1.059999943, 1.057453275, 0.968205154}, + {4.720833, 0.999983549, 0.999989092, 1.059999943, 1.057458401, 0.968210101}, + {4.725, 0.99998337, 0.999989092, 1.059999943, 1.057463408, 0.968215048}, + {4.729167, 0.999983191, 0.999989092, 1.059999943, 1.057468414, 0.968219936}, + {4.733333, 0.999983072, 0.999989152, 1.059999943, 1.057473421, 0.968224883}, + {4.7375, 0.999982953, 0.999989152, 1.059999943, 1.057478428, 0.96822983}, + {4.741667, 0.999982953, 0.999989212, 1.059999943, 1.057483435, 0.968234718}, + {4.745833, 0.999982953, 0.999989331, 1.059999943, 1.057488441, 0.968239665}, + {4.75, 0.999982953, 0.99998939, 1.059999943, 1.057493448, 0.968244553}, + {4.754167, 0.999983013, 0.99998951, 1.059999943, 1.057498455, 0.9682495}, + {4.758333, 0.999983132, 0.999989629, 1.059999943, 1.057503462, 0.968254387}, + {4.7625, 0.999983251, 0.999989748, 1.059999943, 1.057508588, 0.968259335}, + {4.766667, 0.99998343, 0.999989927, 1.059999943, 1.057513714, 0.968264282}, + {4.770833, 0.999983609, 0.999990106, 1.059999943, 1.057518721, 0.968269229}, + {4.775, 0.999983847, 0.999990284, 1.059999943, 1.057523847, 0.968274176}, + {4.779167, 0.999984086, 0.999990463, 1.059999943, 1.057529092, 0.968279123}, + {4.783333, 0.999984384, 0.999990642, 1.059999943, 1.057534218, 0.96828413}, + {4.7875, 0.999984741, 0.99999088, 1.059999943, 1.057539463, 0.968289077}, + {4.791667, 0.999985099, 0.999991119, 1.059999943, 1.057544589, 0.968294084}, + {4.795833, 0.999985456, 0.999991357, 1.059999943, 1.057549953, 0.96829915}, + {4.8, 0.999985874, 0.999991596, 1.059999943, 1.057555199, 0.968304157}, + {4.804167, 0.999986291, 0.999991834, 1.059999943, 1.057560563, 0.968309224}, + {4.808333, 0.999986768, 0.999992073, 1.059999943, 1.057565928, 0.96831429}, + {4.8125, 0.999987245, 0.999992371, 1.059999943, 1.057571292, 0.968319356}, + {4.816667, 0.999987721, 0.999992609, 1.059999943, 1.057576656, 0.968324482}, + {4.820833, 0.999988198, 0.999992907, 1.059999943, 1.05758214, 0.968329608}, + {4.825, 0.999988735, 0.999993205, 1.059999943, 1.057587624, 0.968334734}, + {4.829167, 0.999989271, 0.999993503, 1.059999943, 1.057593226, 0.96833992}, + {4.833333, 0.999989808, 0.999993742, 1.059999943, 1.05759871, 0.968345046}, + {4.8375, 0.999990404, 0.99999404, 1.059999943, 1.057604432, 0.968350291}, + {4.841667, 0.99999094, 0.999994338, 1.059999943, 1.057610035, 0.968355477}, + {4.845833, 0.999991536, 0.999994636, 1.059999943, 1.057615757, 0.968360722}, + {4.85, 0.999992132, 0.999994934, 1.059999943, 1.05762136, 0.968365967}, + {4.854167, 0.999992728, 0.999995232, 1.059999943, 1.057627201, 0.968371212}, + {4.858333, 0.999993265, 0.99999547, 1.059999943, 1.057632923, 0.968376517}, + {4.8625, 0.999993861, 0.999995768, 1.059999943, 1.057638764, 0.968381822}, + {4.866667, 0.999994457, 0.999996066, 1.059999943, 1.057644606, 0.968387127}, + {4.870833, 0.999995053, 0.999996305, 1.059999943, 1.057650447, 0.968392432}, + {4.875, 0.999995649, 0.999996603, 1.059999943, 1.057656288, 0.968397737}, + {4.879167, 0.999996185, 0.999996841, 1.059999943, 1.057662249, 0.968403101}, + {4.883333, 0.999996781, 0.999997139, 1.059999943, 1.057668209, 0.968408465}, + {4.8875, 0.999997318, 0.999997377, 1.059999943, 1.05767417, 0.96841383}, + {4.891667, 0.999997854, 0.999997616, 1.059999943, 1.05768013, 0.968419194}, + {4.895833, 0.999998391, 0.999997854, 1.059999943, 1.05768621, 0.968424559}, + {4.9, 0.999998927, 0.999998093, 1.059999943, 1.05769217, 0.968429923}, + {4.904167, 0.999999404, 0.999998271, 1.059999943, 1.05769825, 0.968435287}, + {4.908333, 0.999999881, 0.99999851, 1.059999943, 1.057704329, 0.968440712}, + {4.9125, 1.000000358, 0.999998689, 1.059999943, 1.057710409, 0.968446076}, + {4.916667, 1.000000834, 0.999998868, 1.059999943, 1.057716489, 0.96845144}, + {4.920833, 1.000001192, 0.999999046, 1.059999943, 1.057722569, 0.968456805}, + {4.925, 1.000001669, 0.999999225, 1.059999943, 1.057728648, 0.968462229}, + {4.929167, 1.000002027, 0.999999404, 1.059999943, 1.057734728, 0.968467593}, + {4.933333, 1.000002384, 0.999999523, 1.059999943, 1.057740927, 0.968472958}, + {4.9375, 1.000002742, 0.999999642, 1.059999943, 1.057747006, 0.968478262}, + {4.941667, 1.000003099, 0.999999762, 1.059999943, 1.057753086, 0.968483627}, + {4.945833, 1.000003338, 0.999999881, 1.059999943, 1.057759166, 0.968488932}, + {4.95, 1.000003576, 0.99999994, 1.059999943, 1.057765245, 0.968494236}, + {4.954167, 1.000003815, 1, 1.059999943, 1.057771325, 0.968499541}, + {4.958333, 1.000004053, 1.000000119, 1.059999943, 1.057777405, 0.968504846}, + {4.9625, 1.000004292, 1.000000119, 1.059999943, 1.057783484, 0.968510091}, + {4.966667, 1.000004411, 1.000000238, 1.059999943, 1.057789564, 0.968515337}, + {4.970833, 1.00000453, 1.000000238, 1.059999943, 1.057795525, 0.968520582}, + {4.975, 1.000004649, 1.000000238, 1.059999943, 1.057801604, 0.968525767}, + {4.979167, 1.000004768, 1.000000238, 1.059999943, 1.057807565, 0.968530953}, + {4.983333, 1.000004768, 1.000000238, 1.059999943, 1.057813525, 0.968536079}, + {4.9875, 1.000004888, 1.000000238, 1.059999943, 1.057819366, 0.968541205}, + {4.991667, 1.000004888, 1.000000238, 1.059999943, 1.057825327, 0.968546331}, + {4.995833, 1.000004768, 1.000000238, 1.059999943, 1.057831168, 0.968551338}, + {5, 1.000004768, 1.000000119, 1.059999943, 1.057837009, 0.968556404}, + {5.004167, 1.000004649, 1.000000119, 1.059999943, 1.057842851, 0.968561411}, + {5.008333, 1.000004649, 1, 1.059999943, 1.057848573, 0.968566358}, + {5.0125, 1.00000453, 1, 1.059999943, 1.057854295, 0.968571305}, + {5.016667, 1.000004292, 0.999999881, 1.059999943, 1.057860017, 0.968576252}, + {5.020833, 1.000004172, 0.999999821, 1.059999943, 1.057865739, 0.96858108}, + {5.025, 1.000003934, 0.999999702, 1.059999943, 1.057871342, 0.968585908}, + {5.029167, 1.000003815, 0.999999583, 1.059999943, 1.057876945, 0.968590677}, + {5.033333, 1.000003576, 0.999999464, 1.059999943, 1.057882428, 0.968595505}, + {5.0375, 1.000003338, 0.999999344, 1.059999943, 1.057887912, 0.968600154}, + {5.041667, 1.000003099, 0.999999225, 1.059999943, 1.057893395, 0.968604863}, + {5.045833, 1.000002742, 0.999999046, 1.059999943, 1.05789876, 0.968609512}, + {5.05, 1.000002503, 0.999998927, 1.059999943, 1.057904243, 0.968614161}, + {5.054167, 1.000002146, 0.999998748, 1.059999943, 1.057909489, 0.968618691}, + {5.058333, 1.000001788, 0.999998629, 1.059999943, 1.057914734, 0.968623221}, + {5.0625, 1.00000155, 0.99999845, 1.059999943, 1.057919979, 0.968627691}, + {5.066667, 1.000001192, 0.999998331, 1.059999943, 1.057925224, 0.968632162}, + {5.070833, 1.000000834, 0.999998152, 1.059999943, 1.05793035, 0.968636572}, + {5.075, 1.000000477, 0.999997973, 1.059999943, 1.057935357, 0.968640924}, + {5.079167, 1, 0.999997795, 1.059999943, 1.057940483, 0.968645275}, + {5.083333, 0.999999642, 0.999997616, 1.059999943, 1.05794549, 0.968649566}, + {5.0875, 0.999999285, 0.999997497, 1.059999943, 1.057950377, 0.968653798}, + {5.091667, 0.999998868, 0.999997318, 1.059999943, 1.057955265, 0.96865803}, + {5.095833, 0.99999851, 0.999997139, 1.059999943, 1.057960153, 0.968662202}, + {5.1, 0.999998093, 0.99999696, 1.059999943, 1.057964921, 0.968666315}, + {5.104167, 0.999997675, 0.999996781, 1.059999943, 1.057969689, 0.968670428}, + {5.108333, 0.999997318, 0.999996603, 1.059999943, 1.057974458, 0.968674481}, + {5.1125, 0.999996901, 0.999996483, 1.059999943, 1.057979107, 0.968678534}, + {5.116667, 0.999996543, 0.999996305, 1.059999943, 1.057983756, 0.968682528}, + {5.120833, 0.999996126, 0.999996126, 1.059999943, 1.057988405, 0.968686461}, + {5.125, 0.999995768, 0.999996006, 1.059999943, 1.057992935, 0.968690395}, + {5.129167, 0.999995351, 0.999995828, 1.059999943, 1.057997465, 0.96869427}, + {5.133333, 0.999994993, 0.999995708, 1.059999943, 1.058001995, 0.968698204}, + {5.1375, 0.999994636, 0.99999553, 1.059999943, 1.058006406, 0.968702018}, + {5.141667, 0.999994278, 0.99999541, 1.059999943, 1.058010936, 0.968705833}, + {5.145833, 0.99999398, 0.999995291, 1.059999943, 1.058015227, 0.968709588}, + {5.15, 0.999993622, 0.999995172, 1.059999943, 1.058019638, 0.968713343}, + {5.154167, 0.999993324, 0.999995053, 1.059999943, 1.05802393, 0.968717039}, + {5.158333, 0.999993026, 0.999994934, 1.059999943, 1.058028221, 0.968720734}, + {5.1625, 0.999992728, 0.999994814, 1.059999943, 1.058032513, 0.96872443}, + {5.166667, 0.99999249, 0.999994755, 1.059999943, 1.058036804, 0.968728065}, + {5.170833, 0.999992192, 0.999994636, 1.059999943, 1.058040977, 0.968731701}, + {5.175, 0.999991953, 0.999994576, 1.059999943, 1.058045149, 0.968735278}, + {5.179167, 0.999991715, 0.999994457, 1.059999943, 1.058049321, 0.968738854}, + {5.183333, 0.999991536, 0.999994397, 1.059999943, 1.058053613, 0.96874243}, + {5.1875, 0.999991357, 0.999994338, 1.059999943, 1.058057666, 0.968746006}, + {5.191667, 0.999991179, 0.999994278, 1.059999943, 1.058061838, 0.968749523}, + {5.195833, 0.999991, 0.999994278, 1.059999943, 1.058065891, 0.96875304}, + {5.2, 0.99999088, 0.999994218, 1.059999943, 1.058070064, 0.968756557}, + {5.204167, 0.999990761, 0.999994218, 1.059999943, 1.058074117, 0.968760014}, + {5.208333, 0.999990642, 0.999994159, 1.059999943, 1.05807817, 0.96876353}, + {5.2125, 0.999990523, 0.999994159, 1.059999943, 1.058082342, 0.968766987}, + {5.216667, 0.999990463, 0.999994159, 1.059999943, 1.058086395, 0.968770444}, + {5.220833, 0.999990404, 0.999994159, 1.059999943, 1.058090448, 0.968773901}, + {5.225, 0.999990404, 0.999994159, 1.059999943, 1.058094502, 0.968777359}, + {5.229167, 0.999990404, 0.999994218, 1.059999943, 1.058098555, 0.968780756}, + {5.233333, 0.999990404, 0.999994218, 1.059999943, 1.058102608, 0.968784213}, + {5.2375, 0.999990404, 0.999994278, 1.059999943, 1.058106661, 0.968787611}, + {5.241667, 0.999990463, 0.999994278, 1.059999943, 1.058110714, 0.968791068}, + {5.245833, 0.999990523, 0.999994338, 1.059999943, 1.058114767, 0.968794465}, + {5.25, 0.999990582, 0.999994397, 1.059999943, 1.05811882, 0.968797863}, + {5.254167, 0.999990702, 0.999994457, 1.059999943, 1.058122993, 0.96880132}, + {5.258333, 0.999990821, 0.999994516, 1.059999943, 1.058127046, 0.968804717}, + {5.2625, 0.99999094, 0.999994636, 1.059999943, 1.058131099, 0.968808115}, + {5.266667, 0.999991059, 0.999994695, 1.059999943, 1.058135152, 0.968811572}, + {5.270833, 0.999991238, 0.999994814, 1.059999943, 1.058139324, 0.968814969}, + {5.275, 0.999991417, 0.999994874, 1.059999943, 1.058143377, 0.968818367}, + {5.279167, 0.999991596, 0.999994993, 1.059999943, 1.05814755, 0.968821824}, + {5.283333, 0.999991775, 0.999995112, 1.059999943, 1.058151722, 0.968825221}, + {5.2875, 0.999992013, 0.999995172, 1.059999943, 1.058155775, 0.968828678}, + {5.291667, 0.999992192, 0.999995291, 1.059999943, 1.058159947, 0.968832135}, + {5.295833, 0.99999243, 0.99999541, 1.059999943, 1.05816412, 0.968835533}, + {5.3, 0.999992669, 0.99999553, 1.059999943, 1.058168292, 0.96883899}, + {5.304167, 0.999992907, 0.999995649, 1.059999943, 1.058172584, 0.968842447}, + {5.308333, 0.999993205, 0.999995768, 1.059999943, 1.058176756, 0.968845904}, + {5.3125, 0.999993443, 0.999995947, 1.059999943, 1.058180928, 0.968849361}, + {5.316667, 0.999993682, 0.999996066, 1.059999943, 1.05818522, 0.968852818}, + {5.320833, 0.99999398, 0.999996185, 1.059999943, 1.058189511, 0.968856335}, + {5.325, 0.999994278, 0.999996305, 1.059999943, 1.058193684, 0.968859792}, + {5.329167, 0.999994576, 0.999996483, 1.059999943, 1.058197975, 0.968863249}, + {5.333333, 0.999994814, 0.999996603, 1.059999943, 1.058202267, 0.968866766}, + {5.3375, 0.999995112, 0.999996722, 1.059999943, 1.058206558, 0.968870223}, + {5.341667, 0.99999541, 0.999996841, 1.059999943, 1.058210969, 0.968873739}, + {5.345833, 0.999995708, 0.99999702, 1.059999943, 1.058215261, 0.968877256}, + {5.35, 0.999996006, 0.999997139, 1.059999943, 1.058219552, 0.968880713}, + {5.354167, 0.999996305, 0.999997258, 1.059999943, 1.058223963, 0.96888423}, + {5.358333, 0.999996543, 0.999997377, 1.059999943, 1.058228374, 0.968887746}, + {5.3625, 0.999996841, 0.999997556, 1.059999943, 1.058232665, 0.968891263}, + {5.366667, 0.999997139, 0.999997675, 1.059999943, 1.058237076, 0.96889478}, + {5.370833, 0.999997377, 0.999997795, 1.059999943, 1.058241487, 0.968898296}, + {5.375, 0.999997675, 0.999997914, 1.059999943, 1.058245897, 0.968901813}, + {5.379167, 0.999997914, 0.999998033, 1.059999943, 1.058250308, 0.96890533}, + {5.383333, 0.999998212, 0.999998152, 1.059999943, 1.058254719, 0.968908846}, + {5.3875, 0.99999845, 0.999998271, 1.059999943, 1.05825913, 0.968912363}, + {5.391667, 0.999998689, 0.999998391, 1.059999943, 1.05826354, 0.96891588}, + {5.395833, 0.999998927, 0.99999845, 1.059999943, 1.058267951, 0.968919396}, + {5.4, 0.999999166, 0.999998569, 1.059999943, 1.058272362, 0.968922913}, + {5.404167, 0.999999344, 0.999998689, 1.059999943, 1.058276773, 0.96892643}, + {5.408333, 0.999999583, 0.999998748, 1.059999943, 1.058281183, 0.968929946}, + {5.4125, 0.999999762, 0.999998868, 1.059999943, 1.058285594, 0.968933463}, + {5.416667, 0.99999994, 0.999998927, 1.059999943, 1.058290124, 0.96893698}, + {5.420833, 1.000000119, 0.999998987, 1.059999943, 1.058294535, 0.968940437}, + {5.425, 1.000000238, 0.999999046, 1.059999943, 1.058298945, 0.968943954}, + {5.429167, 1.000000477, 0.999999166, 1.059999943, 1.058303356, 0.968947411}, + {5.433333, 1.000000596, 0.999999225, 1.059999943, 1.058307767, 0.968950927}, + {5.4375, 1.000000715, 0.999999225, 1.059999943, 1.058312178, 0.968954384}, + {5.441667, 1.000000834, 0.999999285, 1.059999943, 1.058316469, 0.968957841}, + {5.445833, 1.000000954, 0.999999344, 1.059999943, 1.05832088, 0.968961239}, + {5.45, 1.000000954, 0.999999404, 1.059999943, 1.058325291, 0.968964696}, + {5.454167, 1.000001073, 0.999999404, 1.059999943, 1.058329582, 0.968968093}, + {5.458333, 1.000001192, 0.999999464, 1.059999943, 1.058333993, 0.96897155}, + {5.4625, 1.000001192, 0.999999464, 1.059999943, 1.058338284, 0.968974948}, + {5.466667, 1.000001192, 0.999999464, 1.059999943, 1.058342576, 0.968978286}, + {5.470833, 1.000001311, 0.999999464, 1.059999943, 1.058346868, 0.968981683}, + {5.475, 1.000001311, 0.999999464, 1.059999943, 1.058351159, 0.968985021}, + {5.479167, 1.000001311, 0.999999464, 1.059999943, 1.058355451, 0.968988359}, + {5.483333, 1.000001192, 0.999999464, 1.059999943, 1.058359742, 0.968991697}, + {5.4875, 1.000001192, 0.999999464, 1.059999943, 1.058363914, 0.968994975}, + {5.491667, 1.000001192, 0.999999464, 1.059999943, 1.058368206, 0.968998313}, + {5.495833, 1.000001073, 0.999999404, 1.059999943, 1.058372378, 0.969001532}, + {5.5, 1.000001073, 0.999999404, 1.059999943, 1.058376551, 0.96900481}, + {5.504167, 1.000000954, 0.999999344, 1.059999943, 1.058380723, 0.969008029}, + {5.508333, 1.000000954, 0.999999285, 1.059999943, 1.058384776, 0.969011247}, + {5.5125, 1.000000834, 0.999999285, 1.059999943, 1.058388948, 0.969014466}, + {5.516667, 1.000000715, 0.999999225, 1.059999943, 1.058393002, 0.969017625}, + {5.520833, 1.000000596, 0.999999166, 1.059999943, 1.058397055, 0.969020784}, + {5.525, 1.000000477, 0.999999106, 1.059999943, 1.058401108, 0.969023883}, + {5.529167, 1.000000358, 0.999999046, 1.059999943, 1.058405161, 0.969026983}, + {5.533333, 1.000000238, 0.999998987, 1.059999943, 1.058409095, 0.969030082}, + {5.5375, 1.000000119, 0.999998927, 1.059999943, 1.058413029, 0.969033182}, + {5.541667, 0.99999994, 0.999998868, 1.059999943, 1.058416963, 0.969036222}, + {5.545833, 0.999999762, 0.999998808, 1.059999943, 1.058420897, 0.969039261}, + {5.55, 0.999999583, 0.999998748, 1.059999943, 1.05842483, 0.969042242}, + {5.554167, 0.999999404, 0.999998629, 1.059999943, 1.058428645, 0.969045222}, + {5.558333, 0.999999225, 0.999998569, 1.059999943, 1.05843246, 0.969048202}, + {5.5625, 0.999999046, 0.99999851, 1.059999943, 1.058436275, 0.969051123}, + {5.566667, 0.999998868, 0.99999845, 1.059999943, 1.058440089, 0.969054043}, + {5.570833, 0.999998689, 0.999998331, 1.059999943, 1.058443785, 0.969056964}, + {5.575, 0.99999851, 0.999998271, 1.059999943, 1.05844748, 0.969059825}, + {5.579167, 0.999998331, 0.999998152, 1.059999943, 1.058451176, 0.969062686}, + {5.583333, 0.999998152, 0.999998093, 1.059999943, 1.058454871, 0.969065487}, + {5.5875, 0.999997914, 0.999998033, 1.059999943, 1.058458567, 0.969068289}, + {5.591667, 0.999997735, 0.999997914, 1.059999943, 1.058462143, 0.96907109}, + {5.595833, 0.999997556, 0.999997854, 1.059999943, 1.058465838, 0.969073892}, + {5.6, 0.999997377, 0.999997795, 1.059999943, 1.058469415, 0.969076633}, + {5.604167, 0.999997199, 0.999997675, 1.059999943, 1.058472872, 0.969079316}, + {5.608333, 0.99999702, 0.999997616, 1.059999943, 1.058476448, 0.969082057}, + {5.6125, 0.999996841, 0.999997556, 1.059999943, 1.058480024, 0.96908474}, + {5.616667, 0.999996662, 0.999997497, 1.059999943, 1.058483481, 0.969087422}, + {5.620833, 0.999996483, 0.999997377, 1.059999943, 1.058486938, 0.969090104}, + {5.625, 0.999996305, 0.999997318, 1.059999943, 1.058490396, 0.969092727}, + {5.629167, 0.999996126, 0.999997258, 1.059999943, 1.058493853, 0.969095349}, + {5.633333, 0.999996006, 0.999997199, 1.059999943, 1.05849731, 0.969097972}, + {5.6375, 0.999995828, 0.999997139, 1.059999943, 1.058500648, 0.969100535}, + {5.641667, 0.999995708, 0.999997079, 1.059999943, 1.058503985, 0.969103098}, + {5.645833, 0.99999553, 0.99999702, 1.059999943, 1.058507323, 0.969105661}, + {5.65, 0.99999541, 0.99999696, 1.059999943, 1.05851078, 0.969108224}, + {5.654167, 0.999995291, 0.999996901, 1.059999943, 1.058514118, 0.969110727}, + {5.658333, 0.999995172, 0.999996901, 1.059999943, 1.058517337, 0.969113231}, + {5.6625, 0.999995053, 0.999996841, 1.059999943, 1.058520675, 0.969115734}, + {5.666667, 0.999994934, 0.999996781, 1.059999943, 1.058524013, 0.969118238}, + {5.670833, 0.999994874, 0.999996781, 1.059999943, 1.058527231, 0.969120741}, + {5.675, 0.999994755, 0.999996722, 1.059999943, 1.058530569, 0.969123185}, + {5.679167, 0.999994695, 0.999996722, 1.059999943, 1.058533788, 0.969125628}, + {5.683333, 0.999994636, 0.999996662, 1.059999943, 1.058537006, 0.969128072}, + {5.6875, 0.999994576, 0.999996662, 1.059999943, 1.058540225, 0.969130516}, + {5.691667, 0.999994516, 0.999996662, 1.059999943, 1.058543444, 0.96913296}, + {5.695833, 0.999994457, 0.999996603, 1.059999943, 1.058546662, 0.969135344}, + {5.7, 0.999994397, 0.999996603, 1.059999943, 1.05855, 0.969137788}, + {5.704167, 0.999994397, 0.999996603, 1.059999943, 1.0585531, 0.969140172}, + {5.708333, 0.999994397, 0.999996603, 1.059999943, 1.058556318, 0.969142616}, + {5.7125, 0.999994397, 0.999996603, 1.059999943, 1.058559537, 0.969145}, + {5.716667, 0.999994397, 0.999996603, 1.059999943, 1.058562756, 0.969147384}, + {5.720833, 0.999994397, 0.999996662, 1.059999943, 1.058565974, 0.969149768}, + {5.725, 0.999994397, 0.999996662, 1.059999943, 1.058569193, 0.969152153}, + {5.729167, 0.999994457, 0.999996662, 1.059999943, 1.058572292, 0.969154537}, + {5.733333, 0.999994457, 0.999996722, 1.059999943, 1.058575511, 0.969156861}, + {5.7375, 0.999994516, 0.999996722, 1.059999943, 1.05857873, 0.969159245}, + {5.741667, 0.999994576, 0.999996781, 1.059999943, 1.058581948, 0.96916163}, + {5.745833, 0.999994636, 0.999996781, 1.059999943, 1.058585048, 0.969164014}, + {5.75, 0.999994695, 0.999996841, 1.059999943, 1.058588266, 0.969166338}, + {5.754167, 0.999994755, 0.999996901, 1.059999943, 1.058591485, 0.969168723}, + {5.758333, 0.999994874, 0.999996901, 1.059999943, 1.058594704, 0.969171047}, + {5.7625, 0.999994934, 0.99999696, 1.059999943, 1.058597922, 0.969173431}, + {5.766667, 0.999995053, 0.99999702, 1.059999943, 1.058601022, 0.969175816}, + {5.770833, 0.999995112, 0.999997079, 1.059999943, 1.05860424, 0.96917814}, + {5.775, 0.999995232, 0.999997139, 1.059999943, 1.058607459, 0.969180524}, + {5.779167, 0.999995351, 0.999997199, 1.059999943, 1.058610678, 0.969182849}, + {5.783333, 0.99999547, 0.999997258, 1.059999943, 1.058613896, 0.969185233}, + {5.7875, 0.999995589, 0.999997318, 1.059999943, 1.058617115, 0.969187558}, + {5.791667, 0.999995708, 0.999997377, 1.059999943, 1.058620334, 0.969189942}, + {5.795833, 0.999995828, 0.999997437, 1.059999943, 1.058623552, 0.969192326}, + {5.8, 0.999995947, 0.999997497, 1.059999943, 1.058626771, 0.969194651}, + {5.804167, 0.999996126, 0.999997556, 1.059999943, 1.05862999, 0.969197035}, + {5.808333, 0.999996245, 0.999997616, 1.059999943, 1.058633208, 0.969199359}, + {5.8125, 0.999996364, 0.999997675, 1.059999943, 1.058636427, 0.969201744}, + {5.816667, 0.999996543, 0.999997795, 1.059999943, 1.058639646, 0.969204128}, + {5.820833, 0.999996662, 0.999997854, 1.059999943, 1.058642983, 0.969206452}, + {5.825, 0.999996781, 0.999997914, 1.059999943, 1.058646202, 0.969208837}, + {5.829167, 0.99999696, 0.999997973, 1.059999943, 1.058649421, 0.969211221}, + {5.833333, 0.999997079, 0.999998033, 1.059999943, 1.058652639, 0.969213545}, + {5.8375, 0.999997199, 0.999998093, 1.059999943, 1.058655977, 0.96921593}, + {5.841667, 0.999997377, 0.999998212, 1.059999943, 1.058659196, 0.969218314}, + {5.845833, 0.999997497, 0.999998271, 1.059999943, 1.058662415, 0.969220638}, + {5.85, 0.999997675, 0.999998331, 1.059999943, 1.058665752, 0.969223022}, + {5.854167, 0.999997795, 0.999998391, 1.059999943, 1.058668971, 0.969225407}, + {5.858333, 0.999997914, 0.99999845, 1.059999943, 1.058672309, 0.969227791}, + {5.8625, 0.999998033, 0.99999851, 1.059999943, 1.058675528, 0.969230115}, + {5.866667, 0.999998152, 0.999998569, 1.059999943, 1.058678746, 0.9692325}, + {5.870833, 0.999998331, 0.999998629, 1.059999943, 1.058682084, 0.969234824}, + {5.875, 0.99999845, 0.999998689, 1.059999943, 1.058685303, 0.969237208}, + {5.879167, 0.999998569, 0.999998748, 1.059999943, 1.058688641, 0.969239593}, + {5.883333, 0.999998629, 0.999998808, 1.059999943, 1.058691859, 0.969241917}, + {5.8875, 0.999998748, 0.999998868, 1.059999943, 1.058695078, 0.969244301}, + {5.891667, 0.999998868, 0.999998927, 1.059999943, 1.058698416, 0.969246626}, + {5.895833, 0.999998987, 0.999998987, 1.059999943, 1.058701634, 0.96924895}, + {5.9, 0.999999046, 0.999998987, 1.059999943, 1.058704853, 0.969251335}, + {5.904167, 0.999999166, 0.999999046, 1.059999943, 1.058708191, 0.969253659}, + {5.908333, 0.999999225, 0.999999106, 1.059999943, 1.05871141, 0.969255984}, + {5.9125, 0.999999344, 0.999999106, 1.059999943, 1.058714628, 0.969258308}, + {5.916667, 0.999999404, 0.999999166, 1.059999943, 1.058717847, 0.969260633}, + {5.920833, 0.999999464, 0.999999166, 1.059999943, 1.058721066, 0.969262958}, + {5.925, 0.999999523, 0.999999225, 1.059999943, 1.058724284, 0.969265282}, + {5.929167, 0.999999583, 0.999999225, 1.059999943, 1.058727503, 0.969267547}, + {5.933333, 0.999999642, 0.999999285, 1.059999943, 1.058730721, 0.969269872}, + {5.9375, 0.999999642, 0.999999285, 1.059999943, 1.05873394, 0.969272137}, + {5.941667, 0.999999702, 0.999999285, 1.059999943, 1.058737159, 0.969274402}, + {5.945833, 0.999999702, 0.999999344, 1.059999943, 1.058740377, 0.969276667}, + {5.95, 0.999999762, 0.999999344, 1.059999943, 1.058743477, 0.969278991}, + {5.954167, 0.999999762, 0.999999344, 1.059999943, 1.058746696, 0.969281197}, + {5.958333, 0.999999762, 0.999999344, 1.059999943, 1.058749795, 0.969283462}, + {5.9625, 0.999999762, 0.999999344, 1.059999943, 1.058753014, 0.969285727}, + {5.966667, 0.999999762, 0.999999344, 1.059999943, 1.058756113, 0.969287932}, + {5.970833, 0.999999762, 0.999999344, 1.059999943, 1.058759212, 0.969290137}, + {5.975, 0.999999762, 0.999999344, 1.059999943, 1.058762312, 0.969292343}, + {5.979167, 0.999999762, 0.999999344, 1.059999943, 1.058765411, 0.969294548}, + {5.983333, 0.999999702, 0.999999344, 1.059999943, 1.058768511, 0.969296753}, + {5.9875, 0.999999702, 0.999999285, 1.059999943, 1.05877161, 0.969298959}, + {5.991667, 0.999999642, 0.999999285, 1.059999943, 1.05877471, 0.969301105}, + {5.995833, 0.999999583, 0.999999285, 1.059999943, 1.05877769, 0.96930325}, + {6, 0.999999583, 0.999999225, 1.059999943, 1.058780789, 0.969305396}, + {6.004167, 0.999999523, 0.999999225, 1.059999943, 1.05878377, 0.969307542}, + {6.008333, 0.999999464, 0.999999225, 1.059999943, 1.05878675, 0.969309628}, + {6.0125, 0.999999404, 0.999999166, 1.059999943, 1.05878973, 0.969311774}, + {6.016667, 0.999999344, 0.999999166, 1.059999943, 1.05879271, 0.96931386}, + {6.020833, 0.999999285, 0.999999106, 1.059999943, 1.058795691, 0.969315946}, + {6.025, 0.999999166, 0.999999106, 1.059999943, 1.058798671, 0.969318032}, + {6.029167, 0.999999106, 0.999999046, 1.059999943, 1.058801532, 0.969320059}, + {6.033333, 0.999999046, 0.999999046, 1.059999943, 1.058804512, 0.969322145}, + {6.0375, 0.999998987, 0.999998987, 1.059999943, 1.058807373, 0.969324172}, + {6.041667, 0.999998868, 0.999998927, 1.059999943, 1.058810234, 0.969326198}, + {6.045833, 0.999998808, 0.999998927, 1.059999943, 1.058813095, 0.969328165}, + {6.05, 0.999998689, 0.999998868, 1.059999943, 1.058815956, 0.969330192}, + {6.054167, 0.999998629, 0.999998808, 1.059999943, 1.058818817, 0.969332159}, + {6.058333, 0.99999851, 0.999998808, 1.059999943, 1.058821678, 0.969334126}, + {6.0625, 0.99999845, 0.999998748, 1.059999943, 1.05882442, 0.969336092}, + {6.066667, 0.999998331, 0.999998689, 1.059999943, 1.058827281, 0.969338059}, + {6.070833, 0.999998271, 0.999998689, 1.059999943, 1.058830023, 0.969339967}, + {6.075, 0.999998152, 0.999998629, 1.059999943, 1.058832765, 0.969341874}, + {6.079167, 0.999998093, 0.999998569, 1.059999943, 1.058835626, 0.969343781}, + {6.083333, 0.999997973, 0.999998569, 1.059999943, 1.058838367, 0.969345689}, + {6.0875, 0.999997914, 0.99999851, 1.059999943, 1.05884099, 0.969347596}, + {6.091667, 0.999997795, 0.99999845, 1.059999943, 1.058843732, 0.969349504}, + {6.095833, 0.999997735, 0.99999845, 1.059999943, 1.058846474, 0.969351351}, + {6.1, 0.999997675, 0.999998391, 1.059999943, 1.058849096, 0.969353199}, + {6.104167, 0.999997556, 0.999998391, 1.059999943, 1.058851838, 0.969355047}, + {6.108333, 0.999997497, 0.999998331, 1.059999943, 1.058854461, 0.969356894}, + {6.1125, 0.999997377, 0.999998271, 1.059999943, 1.058857083, 0.969358683}, + {6.116667, 0.999997318, 0.999998271, 1.059999943, 1.058859706, 0.96936053}, + {6.120833, 0.999997258, 0.999998212, 1.059999943, 1.058862329, 0.969362319}, + {6.125, 0.999997199, 0.999998212, 1.059999943, 1.058864951, 0.969364107}, + {6.129167, 0.999997139, 0.999998152, 1.059999943, 1.058867574, 0.969365895}, + {6.133333, 0.99999702, 0.999998152, 1.059999943, 1.058870196, 0.969367683}, + {6.1375, 0.99999696, 0.999998152, 1.059999943, 1.058872819, 0.969369411}, + {6.141667, 0.999996901, 0.999998093, 1.059999943, 1.058875322, 0.9693712}, + {6.145833, 0.999996901, 0.999998093, 1.059999943, 1.058877945, 0.969372928}, + {6.15, 0.999996841, 0.999998033, 1.059999943, 1.058880448, 0.969374716}, + {6.154167, 0.999996781, 0.999998033, 1.059999943, 1.058883071, 0.969376445}, + {6.158333, 0.999996722, 0.999998033, 1.059999943, 1.058885574, 0.969378173}, + {6.1625, 0.999996722, 0.999998033, 1.059999943, 1.058888078, 0.969379902}, + {6.166667, 0.999996662, 0.999997973, 1.059999943, 1.0588907, 0.969381571}, + {6.170833, 0.999996603, 0.999997973, 1.059999943, 1.058893204, 0.969383299}, + {6.175, 0.999996603, 0.999997973, 1.059999943, 1.058895707, 0.969385028}, + {6.179167, 0.999996603, 0.999997973, 1.059999943, 1.058898211, 0.969386697}, + {6.183333, 0.999996543, 0.999997973, 1.059999943, 1.058900714, 0.969388425}, + {6.1875, 0.999996543, 0.999997973, 1.059999943, 1.058903217, 0.969390094}, + {6.191667, 0.999996543, 0.999997973, 1.059999943, 1.058905721, 0.969391763}, + {6.195833, 0.999996543, 0.999997973, 1.059999943, 1.058908105, 0.969393432}, + {6.2, 0.999996543, 0.999997973, 1.059999943, 1.058910608, 0.969395101}, + {6.204167, 0.999996543, 0.999997973, 1.059999943, 1.058913112, 0.96939677}, + {6.208333, 0.999996543, 0.999997973, 1.059999943, 1.058915615, 0.969398439}, + {6.2125, 0.999996543, 0.999998033, 1.059999943, 1.058918118, 0.969400108}, + {6.216667, 0.999996603, 0.999998033, 1.059999943, 1.058920503, 0.969401777}, + {6.220833, 0.999996603, 0.999998033, 1.059999943, 1.058923006, 0.969403446}, + {6.225, 0.999996603, 0.999998033, 1.059999943, 1.058925509, 0.969405115}, + {6.229167, 0.999996662, 0.999998093, 1.059999943, 1.058927894, 0.969406724}, + {6.233333, 0.999996722, 0.999998093, 1.059999943, 1.058930397, 0.969408393}, + {6.2375, 0.999996722, 0.999998093, 1.059999943, 1.0589329, 0.969410062}, + {6.241667, 0.999996781, 0.999998152, 1.059999943, 1.058935285, 0.969411671}, + {6.245833, 0.999996781, 0.999998152, 1.059999943, 1.058937788, 0.96941334}, + {6.25, 0.999996841, 0.999998152, 1.059999943, 1.058940291, 0.969414949}, + {6.254167, 0.999996901, 0.999998212, 1.059999943, 1.058942676, 0.969416618}, + {6.258333, 0.99999696, 0.999998212, 1.059999943, 1.058945179, 0.969418228}, + {6.2625, 0.99999702, 0.999998271, 1.059999943, 1.058947563, 0.969419897}, + {6.266667, 0.999997079, 0.999998271, 1.059999943, 1.058950067, 0.969421506}, + {6.270833, 0.999997139, 0.999998331, 1.059999943, 1.058952451, 0.969423175}, + {6.275, 0.999997199, 0.999998331, 1.059999943, 1.058954954, 0.969424784}, + {6.279167, 0.999997258, 0.999998391, 1.059999943, 1.058957458, 0.969426453}, + {6.283333, 0.999997318, 0.99999845, 1.059999943, 1.058959842, 0.969428062}, + {6.2875, 0.999997377, 0.99999845, 1.059999943, 1.058962345, 0.969429672}, + {6.291667, 0.999997437, 0.99999851, 1.059999943, 1.058964729, 0.969431341}, + {6.295833, 0.999997497, 0.99999851, 1.059999943, 1.058967233, 0.96943295}, + {6.3, 0.999997556, 0.999998569, 1.059999943, 1.058969617, 0.969434559}, + {6.304167, 0.999997675, 0.999998629, 1.059999943, 1.05897212, 0.969436228}, + {6.308333, 0.999997735, 0.999998629, 1.059999943, 1.058974504, 0.969437838}, + {6.3125, 0.999997795, 0.999998689, 1.059999943, 1.058977008, 0.969439447}, + {6.316667, 0.999997854, 0.999998689, 1.059999943, 1.058979511, 0.969441116}, + {6.320833, 0.999997914, 0.999998748, 1.059999943, 1.058981895, 0.969442725}, + {6.325, 0.999998033, 0.999998808, 1.059999943, 1.058984399, 0.969444335}, + {6.329167, 0.999998093, 0.999998808, 1.059999943, 1.058986783, 0.969445944}, + {6.333333, 0.999998152, 0.999998868, 1.059999943, 1.058989286, 0.969447553}, + {6.3375, 0.999998212, 0.999998868, 1.059999943, 1.058991671, 0.969449222}, + {6.341667, 0.999998271, 0.999998927, 1.059999943, 1.058994174, 0.969450831}, + {6.345833, 0.999998331, 0.999998927, 1.059999943, 1.058996558, 0.969452441}, + {6.35, 0.999998391, 0.999998987, 1.059999943, 1.058999062, 0.96945405}, + {6.354167, 0.99999845, 0.999998987, 1.059999943, 1.059001446, 0.969455659}, + {6.358333, 0.99999851, 0.999999046, 1.059999943, 1.05900383, 0.969457269}, + {6.3625, 0.999998569, 0.999999046, 1.059999943, 1.059006333, 0.969458878}, + {6.366667, 0.999998629, 0.999999106, 1.059999943, 1.059008718, 0.969460487}, + {6.370833, 0.999998689, 0.999999106, 1.059999943, 1.059011221, 0.969462097}, + {6.375, 0.999998748, 0.999999166, 1.059999943, 1.059013605, 0.969463706}, + {6.379167, 0.999998808, 0.999999166, 1.059999943, 1.059015989, 0.969465256}, + {6.383333, 0.999998868, 0.999999225, 1.059999943, 1.059018493, 0.969466865}, + {6.3875, 0.999998927, 0.999999225, 1.059999943, 1.059020877, 0.969468474}, + {6.391667, 0.999998927, 0.999999225, 1.059999943, 1.059023261, 0.969470024}, + {6.395833, 0.999998987, 0.999999285, 1.059999943, 1.059025645, 0.969471633}, + {6.4, 0.999999046, 0.999999285, 1.059999943, 1.059028029, 0.969473183}, + {6.404167, 0.999999046, 0.999999285, 1.059999943, 1.059030533, 0.969474792}, + {6.408333, 0.999999106, 0.999999344, 1.059999943, 1.059032917, 0.969476342}, + {6.4125, 0.999999106, 0.999999344, 1.059999943, 1.059035301, 0.969477892}, + {6.416667, 0.999999166, 0.999999344, 1.059999943, 1.059037685, 0.969479501}, + {6.420833, 0.999999166, 0.999999344, 1.059999943, 1.05904007, 0.969481051}, + {6.425, 0.999999225, 0.999999344, 1.059999943, 1.059042335, 0.969482601}, + {6.429167, 0.999999225, 0.999999404, 1.059999943, 1.059044719, 0.96948415}, + {6.433333, 0.999999225, 0.999999404, 1.059999943, 1.059047103, 0.9694857}, + {6.4375, 0.999999225, 0.999999404, 1.059999943, 1.059049487, 0.96948719}, + {6.441667, 0.999999225, 0.999999404, 1.059999943, 1.059051752, 0.96948874}, + {6.445833, 0.999999285, 0.999999404, 1.059999943, 1.059054136, 0.96949029}, + {6.45, 0.999999285, 0.999999404, 1.059999943, 1.05905652, 0.96949178}, + {6.454167, 0.999999285, 0.999999404, 1.059999943, 1.059058785, 0.96949327}, + {6.458333, 0.999999225, 0.999999404, 1.059999943, 1.05906117, 0.96949482}, + {6.4625, 0.999999225, 0.999999404, 1.059999943, 1.059063435, 0.96949631}, + {6.466667, 0.999999225, 0.999999404, 1.059999943, 1.0590657, 0.9694978}, + {6.470833, 0.999999225, 0.999999404, 1.059999943, 1.059067965, 0.96949929}, + {6.475, 0.999999225, 0.999999344, 1.059999943, 1.059070349, 0.96950078}, + {6.479167, 0.999999225, 0.999999344, 1.059999943, 1.059072614, 0.96950227}, + {6.483333, 0.999999166, 0.999999344, 1.059999943, 1.059074879, 0.969503701}, + {6.4875, 0.999999166, 0.999999344, 1.059999943, 1.059077144, 0.969505191}, + {6.491667, 0.999999106, 0.999999344, 1.059999943, 1.059079289, 0.969506621}, + {6.495833, 0.999999106, 0.999999344, 1.059999943, 1.059081554, 0.969508052}, + {6.5, 0.999999046, 0.999999285, 1.059999943, 1.059083819, 0.969509542}, + {6.504167, 0.999999046, 0.999999285, 1.059999943, 1.059086084, 0.969510913}, + {6.508333, 0.999998987, 0.999999285, 1.059999943, 1.05908823, 0.969512343}, + {6.5125, 0.999998987, 0.999999285, 1.059999943, 1.059090495, 0.969513774}, + {6.516667, 0.999998927, 0.999999225, 1.059999943, 1.059092641, 0.969515204}, + {6.520833, 0.999998927, 0.999999225, 1.059999943, 1.059094787, 0.969516575}, + {6.525, 0.999998868, 0.999999225, 1.059999943, 1.059097052, 0.969518006}, + {6.529167, 0.999998808, 0.999999225, 1.059999943, 1.059099197, 0.969519377}, + {6.533333, 0.999998808, 0.999999166, 1.059999943, 1.059101343, 0.969520748}, + {6.5375, 0.999998748, 0.999999166, 1.059999943, 1.059103489, 0.969522119}, + {6.541667, 0.999998689, 0.999999166, 1.059999943, 1.059105635, 0.969523489}, + {6.545833, 0.999998689, 0.999999106, 1.059999943, 1.05910778, 0.96952486}, + {6.55, 0.999998629, 0.999999106, 1.059999943, 1.059109926, 0.969526231}, + {6.554167, 0.999998569, 0.999999106, 1.059999943, 1.059111953, 0.969527543}, + {6.558333, 0.999998569, 0.999999046, 1.059999943, 1.059114099, 0.969528914}, + {6.5625, 0.99999851, 0.999999046, 1.059999943, 1.059116125, 0.969530225}, + {6.566667, 0.99999845, 0.999999046, 1.059999943, 1.059118271, 0.969531536}, + {6.570833, 0.999998391, 0.999998987, 1.059999943, 1.059120297, 0.969532847}, + {6.575, 0.999998391, 0.999998987, 1.059999943, 1.059122443, 0.969534159}, + {6.579167, 0.999998331, 0.999998987, 1.059999943, 1.05912447, 0.96953547}, + {6.583333, 0.999998271, 0.999998927, 1.059999943, 1.059126496, 0.969536781}, + {6.5875, 0.999998271, 0.999998927, 1.059999943, 1.059128523, 0.969538093}, + {6.591667, 0.999998212, 0.999998927, 1.059999943, 1.059130669, 0.969539344}, + {6.595833, 0.999998152, 0.999998927, 1.059999943, 1.059132695, 0.969540656}, + {6.6, 0.999998152, 0.999998868, 1.059999943, 1.059134722, 0.969541907}, + {6.604167, 0.999998093, 0.999998868, 1.059999943, 1.059136629, 0.969543159}, + {6.608333, 0.999998093, 0.999998868, 1.059999943, 1.059138656, 0.96954447}, + {6.6125, 0.999998033, 0.999998868, 1.059999943, 1.059140682, 0.969545722}, + {6.616667, 0.999998033, 0.999998808, 1.059999943, 1.059142709, 0.969546974}, + {6.620833, 0.999997973, 0.999998808, 1.059999943, 1.059144616, 0.969548166}, + {6.625, 0.999997973, 0.999998808, 1.059999943, 1.059146643, 0.969549418}, + {6.629167, 0.999997914, 0.999998808, 1.059999943, 1.059148669, 0.969550669}, + {6.633333, 0.999997914, 0.999998808, 1.059999943, 1.059150577, 0.969551921}, + {6.6375, 0.999997854, 0.999998808, 1.059999943, 1.059152603, 0.969553113}, + {6.641667, 0.999997854, 0.999998748, 1.059999943, 1.059154511, 0.969554365}, + {6.645833, 0.999997854, 0.999998748, 1.059999943, 1.059156418, 0.969555557}, + {6.65, 0.999997795, 0.999998748, 1.059999943, 1.059158444, 0.969556749}, + {6.654167, 0.999997795, 0.999998748, 1.059999943, 1.059160352, 0.969558001}, + {6.658333, 0.999997795, 0.999998748, 1.059999943, 1.059162259, 0.969559193}, + {6.6625, 0.999997795, 0.999998748, 1.059999943, 1.059164166, 0.969560385}, + {6.666667, 0.999997795, 0.999998748, 1.059999943, 1.059166193, 0.969561577}, + {6.670833, 0.999997795, 0.999998748, 1.059999943, 1.0591681, 0.969562769}, + {6.675, 0.999997795, 0.999998748, 1.059999943, 1.059170008, 0.969563961}, + {6.679167, 0.999997795, 0.999998748, 1.059999943, 1.059171915, 0.969565153}, + {6.683333, 0.999997795, 0.999998748, 1.059999943, 1.059173822, 0.969566345}, + {6.6875, 0.999997795, 0.999998748, 1.059999943, 1.05917573, 0.969567478}, + {6.691667, 0.999997795, 0.999998748, 1.059999943, 1.059177637, 0.96956867}, + {6.695833, 0.999997795, 0.999998748, 1.059999943, 1.059179544, 0.969569862}, + {6.7, 0.999997795, 0.999998808, 1.059999943, 1.059181452, 0.969571054}, + {6.704167, 0.999997795, 0.999998808, 1.059999943, 1.059183359, 0.969572186}, + {6.708333, 0.999997795, 0.999998808, 1.059999943, 1.059185266, 0.969573379}, + {6.7125, 0.999997854, 0.999998808, 1.059999943, 1.059187055, 0.969574511}, + {6.716667, 0.999997854, 0.999998808, 1.059999943, 1.059188962, 0.969575703}, + {6.720833, 0.999997854, 0.999998808, 1.059999943, 1.059190869, 0.969576836}, + {6.725, 0.999997854, 0.999998868, 1.059999943, 1.059192777, 0.969578028}, + {6.729167, 0.999997914, 0.999998868, 1.059999943, 1.059194684, 0.96957916}, + {6.733333, 0.999997914, 0.999998868, 1.059999943, 1.059196472, 0.969580352}, + {6.7375, 0.999997973, 0.999998868, 1.059999943, 1.05919838, 0.969581485}, + {6.741667, 0.999997973, 0.999998868, 1.059999943, 1.059200287, 0.969582617}, + {6.745833, 0.999997973, 0.999998927, 1.059999943, 1.059202075, 0.96958375}, + {6.75, 0.999998033, 0.999998927, 1.059999943, 1.059203982, 0.969584942}, + {6.754167, 0.999998033, 0.999998927, 1.059999943, 1.05920589, 0.969586074}, + {6.758333, 0.999998093, 0.999998987, 1.059999943, 1.059207678, 0.969587207}, + {6.7625, 0.999998093, 0.999998987, 1.059999943, 1.059209585, 0.969588339}, + {6.766667, 0.999998152, 0.999998987, 1.059999943, 1.059211493, 0.969589531}, + {6.770833, 0.999998212, 0.999998987, 1.059999943, 1.059213281, 0.969590664}, + {6.775, 0.999998212, 0.999999046, 1.059999943, 1.059215188, 0.969591796}, + {6.779167, 0.999998271, 0.999999046, 1.059999943, 1.059216976, 0.969592929}, + {6.783333, 0.999998271, 0.999999046, 1.059999943, 1.059218884, 0.969594061}, + {6.7875, 0.999998331, 0.999999106, 1.059999943, 1.059220791, 0.969595194}, + {6.791667, 0.999998331, 0.999999106, 1.059999943, 1.059222579, 0.969596326}, + {6.795833, 0.999998391, 0.999999106, 1.059999943, 1.059224486, 0.969597459}, + {6.8, 0.99999845, 0.999999166, 1.059999943, 1.059226274, 0.969598591}, + {6.804167, 0.99999845, 0.999999166, 1.059999943, 1.059228182, 0.969599724}, + {6.808333, 0.99999851, 0.999999166, 1.059999943, 1.05922997, 0.969600856}, + {6.8125, 0.99999851, 0.999999166, 1.059999943, 1.059231758, 0.969601989}, + {6.816667, 0.999998569, 0.999999225, 1.059999943, 1.059233665, 0.969603121}, + {6.820833, 0.999998629, 0.999999225, 1.059999943, 1.059235454, 0.969604194}, + {6.825, 0.999998629, 0.999999225, 1.059999943, 1.059237361, 0.969605327}, + {6.829167, 0.999998689, 0.999999285, 1.059999943, 1.059239149, 0.969606459}, + {6.833333, 0.999998689, 0.999999285, 1.059999943, 1.059240937, 0.969607592}, + {6.8375, 0.999998748, 0.999999285, 1.059999943, 1.059242845, 0.969608724}, + {6.841667, 0.999998748, 0.999999285, 1.059999943, 1.059244633, 0.969609797}, + {6.845833, 0.999998808, 0.999999344, 1.059999943, 1.059246421, 0.969610929}, + {6.85, 0.999998808, 0.999999344, 1.059999943, 1.059248328, 0.969612062}, + {6.854167, 0.999998868, 0.999999344, 1.059999943, 1.059250116, 0.969613135}, + {6.858333, 0.999998868, 0.999999344, 1.059999943, 1.059251904, 0.969614267}, + {6.8625, 0.999998927, 0.999999404, 1.059999943, 1.059253693, 0.96961534}, + {6.866667, 0.999998927, 0.999999404, 1.059999943, 1.0592556, 0.969616473}, + {6.870833, 0.999998987, 0.999999404, 1.059999943, 1.059257388, 0.969617546}, + {6.875, 0.999998987, 0.999999404, 1.059999943, 1.059259176, 0.969618618}, + {6.879167, 0.999998987, 0.999999404, 1.059999943, 1.059260964, 0.969619751}, + {6.883333, 0.999999046, 0.999999464, 1.059999943, 1.059262753, 0.969620824}, + {6.8875, 0.999999046, 0.999999464, 1.059999943, 1.059264541, 0.969621897}, + {6.891667, 0.999999046, 0.999999464, 1.059999943, 1.059266329, 0.96962297}, + {6.895833, 0.999999106, 0.999999464, 1.059999943, 1.059268117, 0.969624102}, + {6.9, 0.999999106, 0.999999464, 1.059999943, 1.059269905, 0.969625175}, + {6.904167, 0.999999106, 0.999999464, 1.059999943, 1.059271693, 0.969626248}, + {6.908333, 0.999999106, 0.999999464, 1.059999943, 1.059273481, 0.969627321}, + {6.9125, 0.999999106, 0.999999464, 1.059999943, 1.05927515, 0.969628394}, + {6.916667, 0.999999166, 0.999999464, 1.059999943, 1.059276938, 0.969629467}, + {6.920833, 0.999999166, 0.999999464, 1.059999943, 1.059278727, 0.96963048}, + {6.925, 0.999999166, 0.999999464, 1.059999943, 1.059280515, 0.969631553}, + {6.929167, 0.999999166, 0.999999523, 1.059999943, 1.059282184, 0.969632626}, + {6.933333, 0.999999166, 0.999999523, 1.059999943, 1.059283972, 0.969633639}, + {6.9375, 0.999999166, 0.999999523, 1.059999943, 1.05928576, 0.969634712}, + {6.941667, 0.999999166, 0.999999523, 1.059999943, 1.059287429, 0.969635725}, + {6.945833, 0.999999166, 0.999999523, 1.059999943, 1.059289217, 0.969636798}, + {6.95, 0.999999166, 0.999999523, 1.059999943, 1.059290886, 0.969637811}, + {6.954167, 0.999999166, 0.999999464, 1.059999943, 1.059292555, 0.969638884}, + {6.958333, 0.999999166, 0.999999464, 1.059999943, 1.059294343, 0.969639897}, + {6.9625, 0.999999166, 0.999999464, 1.059999943, 1.059296012, 0.969640911}, + {6.966667, 0.999999106, 0.999999464, 1.059999943, 1.059297681, 0.969641924}, + {6.970833, 0.999999106, 0.999999464, 1.059999943, 1.059299469, 0.969642937}, + {6.975, 0.999999106, 0.999999464, 1.059999943, 1.059301138, 0.96964395}, + {6.979167, 0.999999106, 0.999999464, 1.059999943, 1.059302807, 0.969644964}, + {6.983333, 0.999999106, 0.999999464, 1.059999943, 1.059304476, 0.969645977}, + {6.9875, 0.999999106, 0.999999464, 1.059999943, 1.059306145, 0.969646931}, + {6.991667, 0.999999046, 0.999999464, 1.059999943, 1.059307814, 0.969647944}, + {6.995833, 0.999999046, 0.999999464, 1.059999943, 1.059309483, 0.969648957}, + {7, 0.999999046, 0.999999464, 1.059999943, 1.059311152, 0.969649911}, + {7.004167, 0.999999046, 0.999999404, 1.059999943, 1.05931282, 0.969650924}, + {7.008333, 0.999998987, 0.999999404, 1.059999943, 1.05931437, 0.969651878}, + {7.0125, 0.999998987, 0.999999404, 1.059999943, 1.059316039, 0.969652832}, + {7.016667, 0.999998987, 0.999999404, 1.059999943, 1.059317708, 0.969653785}, + {7.020833, 0.999998927, 0.999999404, 1.059999943, 1.059319258, 0.969654799}, + {7.025, 0.999998927, 0.999999404, 1.059999943, 1.059320927, 0.969655752}, + {7.029167, 0.999998927, 0.999999404, 1.059999943, 1.059322596, 0.969656706}, + {7.033333, 0.999998868, 0.999999344, 1.059999943, 1.059324145, 0.96965766}, + {7.0375, 0.999998868, 0.999999344, 1.059999943, 1.059325695, 0.969658554}, + {7.041667, 0.999998868, 0.999999344, 1.059999943, 1.059327364, 0.969659507}, + {7.045833, 0.999998808, 0.999999344, 1.059999943, 1.059328914, 0.969660461}, + {7.05, 0.999998808, 0.999999344, 1.059999943, 1.059330583, 0.969661415}, + {7.054167, 0.999998808, 0.999999344, 1.059999943, 1.059332132, 0.969662309}, + {7.058333, 0.999998748, 0.999999344, 1.059999943, 1.059333682, 0.969663262}, + {7.0625, 0.999998748, 0.999999285, 1.059999943, 1.059335232, 0.969664156}, + {7.066667, 0.999998748, 0.999999285, 1.059999943, 1.059336782, 0.96966511}, + {7.070833, 0.999998689, 0.999999285, 1.059999943, 1.059338331, 0.969666004}, + {7.075, 0.999998689, 0.999999285, 1.059999943, 1.059339881, 0.969666898}, + {7.079167, 0.999998689, 0.999999285, 1.059999943, 1.059341431, 0.969667792}, + {7.083333, 0.999998689, 0.999999285, 1.059999943, 1.05934298, 0.969668686}, + {7.0875, 0.999998629, 0.999999285, 1.059999943, 1.05934453, 0.96966958}, + {7.091667, 0.999998629, 0.999999285, 1.059999943, 1.05934608, 0.969670475}, + {7.095833, 0.999998629, 0.999999225, 1.059999943, 1.05934763, 0.969671369}, + {7.1, 0.999998629, 0.999999225, 1.059999943, 1.059349179, 0.969672263}, + {7.104167, 0.999998569, 0.999999225, 1.059999943, 1.05935061, 0.969673157}, + {7.108333, 0.999998569, 0.999999225, 1.059999943, 1.05935216, 0.969674051}, + {7.1125, 0.999998569, 0.999999225, 1.059999943, 1.059353709, 0.969674945}, + {7.116667, 0.999998569, 0.999999225, 1.059999943, 1.05935514, 0.969675779}, + {7.120833, 0.999998569, 0.999999225, 1.059999943, 1.059356689, 0.969676673}, + {7.125, 0.99999851, 0.999999225, 1.059999943, 1.059358239, 0.969677508}, + {7.129167, 0.99999851, 0.999999225, 1.059999943, 1.05935967, 0.969678402}, + {7.133333, 0.99999851, 0.999999225, 1.059999943, 1.059361219, 0.969679236}, + {7.1375, 0.99999851, 0.999999225, 1.059999943, 1.05936265, 0.96968013}, + {7.141667, 0.99999851, 0.999999225, 1.059999943, 1.0593642, 0.969680965}, + {7.145833, 0.99999851, 0.999999225, 1.059999943, 1.05936563, 0.969681799}, + {7.15, 0.99999851, 0.999999225, 1.059999943, 1.059367061, 0.969682693}, + {7.154167, 0.99999851, 0.999999225, 1.059999943, 1.05936861, 0.969683528}, + {7.158333, 0.99999851, 0.999999225, 1.059999943, 1.059370041, 0.969684362}, + {7.1625, 0.99999851, 0.999999225, 1.059999943, 1.059371471, 0.969685197}, + {7.166667, 0.99999851, 0.999999225, 1.059999943, 1.059373021, 0.969686031}, + {7.170833, 0.99999851, 0.999999225, 1.059999943, 1.059374452, 0.969686925}, + {7.175, 0.99999851, 0.999999225, 1.059999943, 1.059375882, 0.96968776}, + {7.179167, 0.99999851, 0.999999225, 1.059999943, 1.059377313, 0.969688594}, + {7.183333, 0.99999851, 0.999999225, 1.059999943, 1.059378743, 0.969689429}, + {7.1875, 0.99999851, 0.999999225, 1.059999943, 1.059380174, 0.969690263}, + {7.191667, 0.99999851, 0.999999225, 1.059999943, 1.059381723, 0.969691038}, + {7.195833, 0.99999851, 0.999999225, 1.059999943, 1.059383154, 0.969691873}, + {7.2, 0.99999851, 0.999999225, 1.059999943, 1.059384584, 0.969692707}, + {7.204167, 0.999998569, 0.999999285, 1.059999943, 1.059386015, 0.969693542}, + {7.208333, 0.999998569, 0.999999285, 1.059999943, 1.059387445, 0.969694376}, + {7.2125, 0.999998569, 0.999999285, 1.059999943, 1.059388876, 0.96969521}, + {7.216667, 0.999998569, 0.999999285, 1.059999943, 1.059390306, 0.969695985}, + {7.220833, 0.999998569, 0.999999285, 1.059999943, 1.059391737, 0.96969682}, + {7.225, 0.999998629, 0.999999285, 1.059999943, 1.059393168, 0.969697654}, + {7.229167, 0.999998629, 0.999999285, 1.059999943, 1.059394598, 0.969698429}, + {7.233333, 0.999998629, 0.999999285, 1.059999943, 1.059396029, 0.969699264}, + {7.2375, 0.999998629, 0.999999285, 1.059999943, 1.059397459, 0.969700098}, + {7.241667, 0.999998689, 0.999999344, 1.059999943, 1.05939877, 0.969700873}, + {7.245833, 0.999998689, 0.999999344, 1.059999943, 1.059400201, 0.969701707}, + {7.25, 0.999998689, 0.999999344, 1.059999943, 1.059401631, 0.969702482}, + {7.254167, 0.999998689, 0.999999344, 1.059999943, 1.059403062, 0.969703317}, + {7.258333, 0.999998748, 0.999999344, 1.059999943, 1.059404492, 0.969704092}, + {7.2625, 0.999998748, 0.999999344, 1.059999943, 1.059405923, 0.969704926}, + {7.266667, 0.999998748, 0.999999404, 1.059999943, 1.059407234, 0.969705701}, + {7.270833, 0.999998808, 0.999999404, 1.059999943, 1.059408665, 0.969706535}, + {7.275, 0.999998808, 0.999999404, 1.059999943, 1.059410095, 0.96970731}, + {7.279167, 0.999998808, 0.999999404, 1.059999943, 1.059411526, 0.969708145}, + {7.283333, 0.999998808, 0.999999404, 1.059999943, 1.059412837, 0.96970892}, + {7.2875, 0.999998868, 0.999999404, 1.059999943, 1.059414268, 0.969709694}, + {7.291667, 0.999998868, 0.999999404, 1.059999943, 1.059415698, 0.969710529}, + {7.295833, 0.999998868, 0.999999464, 1.059999943, 1.059417009, 0.969711304}, + {7.3, 0.999998927, 0.999999464, 1.059999943, 1.05941844, 0.969712079}, + {7.304167, 0.999998927, 0.999999464, 1.059999943, 1.05941987, 0.969712853}, + {7.308333, 0.999998927, 0.999999464, 1.059999943, 1.059421182, 0.969713688}, + {7.3125, 0.999998987, 0.999999464, 1.059999943, 1.059422612, 0.969714463}, + {7.316667, 0.999998987, 0.999999464, 1.059999943, 1.059423923, 0.969715238}, + {7.320833, 0.999998987, 0.999999523, 1.059999943, 1.059425354, 0.969716012}, + {7.325, 0.999998987, 0.999999523, 1.059999943, 1.059426665, 0.969716787}, + {7.329167, 0.999999046, 0.999999523, 1.059999943, 1.059428096, 0.969717562}, + {7.333333, 0.999999046, 0.999999523, 1.059999943, 1.059429407, 0.969718337}, + {7.3375, 0.999999046, 0.999999523, 1.059999943, 1.059430838, 0.969719112}, + {7.341667, 0.999999046, 0.999999523, 1.059999943, 1.059432149, 0.969719887}, + {7.345833, 0.999999106, 0.999999523, 1.059999943, 1.059433579, 0.969720662}, + {7.35, 0.999999106, 0.999999523, 1.059999943, 1.059434891, 0.969721437}, + {7.354167, 0.999999106, 0.999999523, 1.059999943, 1.059436321, 0.969722211}, + {7.358333, 0.999999106, 0.999999583, 1.059999943, 1.059437633, 0.969722986}, + {7.3625, 0.999999166, 0.999999583, 1.059999943, 1.059438944, 0.969723761}, + {7.366667, 0.999999166, 0.999999583, 1.059999943, 1.059440374, 0.969724536}, + {7.370833, 0.999999166, 0.999999583, 1.059999943, 1.059441686, 0.969725251}, + {7.375, 0.999999166, 0.999999583, 1.059999943, 1.059442997, 0.969726026}, + {7.379167, 0.999999166, 0.999999583, 1.059999943, 1.059444308, 0.969726801}, + {7.383333, 0.999999166, 0.999999583, 1.059999943, 1.05944562, 0.969727576}, + {7.3875, 0.999999225, 0.999999583, 1.059999943, 1.05944705, 0.969728291}, + {7.391667, 0.999999225, 0.999999583, 1.059999943, 1.059448361, 0.969729066}, + {7.395833, 0.999999225, 0.999999583, 1.059999943, 1.059449673, 0.969729781}, + {7.4, 0.999999225, 0.999999583, 1.059999943, 1.059450984, 0.969730556}, + {7.404167, 0.999999225, 0.999999583, 1.059999943, 1.059452295, 0.969731271}, + {7.408333, 0.999999225, 0.999999583, 1.059999943, 1.059453607, 0.969732046}, + {7.4125, 0.999999225, 0.999999583, 1.059999943, 1.059454918, 0.969732761}, + {7.416667, 0.999999225, 0.999999583, 1.059999943, 1.059456229, 0.969733536}, + {7.420833, 0.999999225, 0.999999583, 1.059999943, 1.059457541, 0.969734252}, + {7.425, 0.999999225, 0.999999583, 1.059999943, 1.059458852, 0.969734967}, + {7.429167, 0.999999225, 0.999999583, 1.059999943, 1.059460163, 0.969735682}, + {7.433333, 0.999999225, 0.999999583, 1.059999943, 1.059461474, 0.969736457}, + {7.4375, 0.999999225, 0.999999583, 1.059999943, 1.059462786, 0.969737172}, + {7.441667, 0.999999225, 0.999999583, 1.059999943, 1.059463978, 0.969737887}, + {7.445833, 0.999999225, 0.999999583, 1.059999943, 1.059465289, 0.969738603}, + {7.45, 0.999999225, 0.999999583, 1.059999943, 1.0594666, 0.969739318}, + {7.454167, 0.999999225, 0.999999583, 1.059999943, 1.059467912, 0.969740033}, + {7.458333, 0.999999225, 0.999999583, 1.059999943, 1.059469104, 0.969740748}, + {7.4625, 0.999999225, 0.999999583, 1.059999943, 1.059470415, 0.969741464}, + {7.466667, 0.999999225, 0.999999583, 1.059999943, 1.059471726, 0.969742179}, + {7.470833, 0.999999225, 0.999999583, 1.059999943, 1.059472919, 0.969742835}, + {7.475, 0.999999225, 0.999999583, 1.059999943, 1.05947423, 0.96974355}, + {7.479167, 0.999999166, 0.999999583, 1.059999943, 1.059475422, 0.969744265}, + {7.483333, 0.999999166, 0.999999583, 1.059999943, 1.059476733, 0.96974498}, + {7.4875, 0.999999166, 0.999999583, 1.059999943, 1.059477925, 0.969745636}, + {7.491667, 0.999999166, 0.999999583, 1.059999943, 1.059479117, 0.969746351}, + {7.495833, 0.999999166, 0.999999583, 1.059999943, 1.059480429, 0.969747007}, + {7.5, 0.999999166, 0.999999583, 1.059999943, 1.059481621, 0.969747722}, + {7.504167, 0.999999166, 0.999999583, 1.059999943, 1.059482932, 0.969748378}, + {7.508333, 0.999999166, 0.999999583, 1.059999943, 1.059484124, 0.969749093}, + {7.5125, 0.999999106, 0.999999583, 1.059999943, 1.059485316, 0.969749749}, + {7.516667, 0.999999106, 0.999999583, 1.059999943, 1.059486508, 0.969750404}, + {7.520833, 0.999999106, 0.999999523, 1.059999943, 1.0594877, 0.96975106}, + {7.525, 0.999999106, 0.999999523, 1.059999943, 1.059489012, 0.969751775}, + {7.529167, 0.999999106, 0.999999523, 1.059999943, 1.059490204, 0.969752431}, + {7.533333, 0.999999106, 0.999999523, 1.059999943, 1.059491396, 0.969753087}, + {7.5375, 0.999999106, 0.999999523, 1.059999943, 1.059492588, 0.969753742}, + {7.541667, 0.999999046, 0.999999523, 1.059999943, 1.05949378, 0.969754398}, + {7.545833, 0.999999046, 0.999999523, 1.059999943, 1.059494972, 0.969755054}, + {7.55, 0.999999046, 0.999999523, 1.059999943, 1.059496164, 0.969755709}, + {7.554167, 0.999999046, 0.999999523, 1.059999943, 1.059497356, 0.969756365}, + {7.558333, 0.999999046, 0.999999523, 1.059999943, 1.059498549, 0.96975702}, + {7.5625, 0.999999046, 0.999999523, 1.059999943, 1.059499741, 0.969757676}, + {7.566667, 0.999999046, 0.999999523, 1.059999943, 1.059500813, 0.969758272}, + {7.570833, 0.999998987, 0.999999523, 1.059999943, 1.059502006, 0.969758928}, + {7.575, 0.999998987, 0.999999523, 1.059999943, 1.059503198, 0.969759583}, + {7.579167, 0.999998987, 0.999999523, 1.059999943, 1.05950439, 0.969760239}, + {7.583333, 0.999998987, 0.999999523, 1.059999943, 1.059505582, 0.969760835}, + {7.5875, 0.999998987, 0.999999523, 1.059999943, 1.059506655, 0.969761491}, + {7.591667, 0.999998987, 0.999999523, 1.059999943, 1.059507847, 0.969762087}, + {7.595833, 0.999998987, 0.999999523, 1.059999943, 1.059509039, 0.969762743}, + {7.6, 0.999998987, 0.999999523, 1.059999943, 1.059510112, 0.969763339}, + {7.604167, 0.999998987, 0.999999523, 1.059999943, 1.059511304, 0.969763994}, + {7.608333, 0.999998987, 0.999999464, 1.059999943, 1.059512377, 0.96976459}, + {7.6125, 0.999998987, 0.999999464, 1.059999943, 1.059513569, 0.969765246}, + {7.616667, 0.999998927, 0.999999464, 1.059999943, 1.059514642, 0.969765842}, + {7.620833, 0.999998927, 0.999999464, 1.059999943, 1.059515834, 0.969766438}, + {7.625, 0.999998927, 0.999999464, 1.059999943, 1.059516907, 0.969767094}, + {7.629167, 0.999998927, 0.999999464, 1.059999943, 1.059518099, 0.96976769}, + {7.633333, 0.999998927, 0.999999464, 1.059999943, 1.059519172, 0.969768286}, + {7.6375, 0.999998927, 0.999999464, 1.059999943, 1.059520364, 0.969768882}, + {7.641667, 0.999998927, 0.999999464, 1.059999943, 1.059521437, 0.969769537}, + {7.645833, 0.999998927, 0.999999464, 1.059999943, 1.05952251, 0.969770134}, + {7.65, 0.999998927, 0.999999523, 1.059999943, 1.059523702, 0.96977073}, + {7.654167, 0.999998927, 0.999999523, 1.059999943, 1.059524775, 0.969771326}, + {7.658333, 0.999998927, 0.999999523, 1.059999943, 1.059525847, 0.969771922}, + {7.6625, 0.999998927, 0.999999523, 1.059999943, 1.05952704, 0.969772518}, + {7.666667, 0.999998987, 0.999999523, 1.059999943, 1.059528112, 0.969773114}, + {7.670833, 0.999998987, 0.999999523, 1.059999943, 1.059529185, 0.96977371}, + {7.675, 0.999998987, 0.999999523, 1.059999943, 1.059530258, 0.969774306}, + {7.679167, 0.999998987, 0.999999523, 1.059999943, 1.05953145, 0.969774902}, + {7.683333, 0.999998987, 0.999999523, 1.059999943, 1.059532523, 0.969775498}, + {7.6875, 0.999998987, 0.999999523, 1.059999943, 1.059533596, 0.969776094}, + {7.691667, 0.999998987, 0.999999523, 1.059999943, 1.059534669, 0.96977669}, + {7.695833, 0.999998987, 0.999999523, 1.059999943, 1.059535742, 0.969777226}, + {7.7, 0.999998987, 0.999999523, 1.059999943, 1.059536815, 0.969777822}, + {7.704167, 0.999998987, 0.999999523, 1.059999943, 1.059538007, 0.969778419}, + {7.708333, 0.999998987, 0.999999523, 1.059999943, 1.05953908, 0.969779015}, + {7.7125, 0.999999046, 0.999999523, 1.059999943, 1.059540153, 0.969779611}, + {7.716667, 0.999999046, 0.999999523, 1.059999943, 1.059541225, 0.969780147}, + {7.720833, 0.999999046, 0.999999523, 1.059999943, 1.059542298, 0.969780743}, + {7.725, 0.999999046, 0.999999523, 1.059999943, 1.059543371, 0.969781339}, + {7.729167, 0.999999046, 0.999999523, 1.059999943, 1.059544444, 0.969781935}, + {7.733333, 0.999999046, 0.999999583, 1.059999943, 1.059545517, 0.969782472}, + {7.7375, 0.999999046, 0.999999583, 1.059999943, 1.05954659, 0.969783068}, + {7.741667, 0.999999106, 0.999999583, 1.059999943, 1.059547663, 0.969783604}, + {7.745833, 0.999999106, 0.999999583, 1.059999943, 1.059548736, 0.9697842}, + {7.75, 0.999999106, 0.999999583, 1.059999943, 1.059549809, 0.969784796}, + {7.754167, 0.999999106, 0.999999583, 1.059999943, 1.059550762, 0.969785333}, + {7.758333, 0.999999106, 0.999999583, 1.059999943, 1.059551835, 0.969785929}, + {7.7625, 0.999999106, 0.999999583, 1.059999943, 1.059552908, 0.969786465}, + {7.766667, 0.999999106, 0.999999583, 1.059999943, 1.059553981, 0.969787061}, + {7.770833, 0.999999166, 0.999999583, 1.059999943, 1.059555054, 0.969787598}, + {7.775, 0.999999166, 0.999999583, 1.059999943, 1.059556127, 0.969788194}, + {7.779167, 0.999999166, 0.999999583, 1.059999943, 1.059557199, 0.96978873}, + {7.783333, 0.999999166, 0.999999642, 1.059999943, 1.059558153, 0.969789326}, + {7.7875, 0.999999166, 0.999999642, 1.059999943, 1.059559226, 0.969789863}, + {7.791667, 0.999999166, 0.999999642, 1.059999943, 1.059560299, 0.969790399}, + {7.795833, 0.999999225, 0.999999642, 1.059999943, 1.059561372, 0.969790995}, + {7.8, 0.999999225, 0.999999642, 1.059999943, 1.059562325, 0.969791532}, + {7.804167, 0.999999225, 0.999999642, 1.059999943, 1.059563398, 0.969792128}, + {7.808333, 0.999999225, 0.999999642, 1.059999943, 1.059564471, 0.969792664}, + {7.8125, 0.999999225, 0.999999642, 1.059999943, 1.059565425, 0.9697932}, + {7.816667, 0.999999225, 0.999999642, 1.059999943, 1.059566498, 0.969793737}, + {7.820833, 0.999999225, 0.999999642, 1.059999943, 1.059567571, 0.969794333}, + {7.825, 0.999999285, 0.999999642, 1.059999943, 1.059568524, 0.969794869}, + {7.829167, 0.999999285, 0.999999642, 1.059999943, 1.059569597, 0.969795406}, + {7.833333, 0.999999285, 0.999999642, 1.059999943, 1.05957067, 0.969795942}, + {7.8375, 0.999999285, 0.999999642, 1.059999943, 1.059571624, 0.969796479}, + {7.841667, 0.999999285, 0.999999702, 1.059999943, 1.059572697, 0.969797075}, + {7.845833, 0.999999285, 0.999999702, 1.059999943, 1.05957365, 0.969797611}, + {7.85, 0.999999285, 0.999999702, 1.059999943, 1.059574723, 0.969798148}, + {7.854167, 0.999999285, 0.999999702, 1.059999943, 1.059575677, 0.969798684}, + {7.858333, 0.999999285, 0.999999702, 1.059999943, 1.05957675, 0.969799221}, + {7.8625, 0.999999344, 0.999999702, 1.059999943, 1.059577703, 0.969799757}, + {7.866667, 0.999999344, 0.999999702, 1.059999943, 1.059578776, 0.969800293}, + {7.870833, 0.999999344, 0.999999702, 1.059999943, 1.05957973, 0.96980083}, + {7.875, 0.999999344, 0.999999702, 1.059999943, 1.059580684, 0.969801366}, + {7.879167, 0.999999344, 0.999999702, 1.059999943, 1.059581757, 0.969801903}, + {7.883333, 0.999999344, 0.999999702, 1.059999943, 1.05958271, 0.969802439}, + {7.8875, 0.999999344, 0.999999702, 1.059999943, 1.059583664, 0.969802916}, + {7.891667, 0.999999344, 0.999999702, 1.059999943, 1.059584737, 0.969803452}, + {7.895833, 0.999999344, 0.999999702, 1.059999943, 1.059585691, 0.969803989}, + {7.9, 0.999999344, 0.999999702, 1.059999943, 1.059586644, 0.969804525}, + {7.904167, 0.999999344, 0.999999702, 1.059999943, 1.059587717, 0.969805062}, + {7.908333, 0.999999344, 0.999999702, 1.059999943, 1.059588671, 0.969805539}, + {7.9125, 0.999999344, 0.999999702, 1.059999943, 1.059589624, 0.969806075}, + {7.916667, 0.999999344, 0.999999702, 1.059999943, 1.059590578, 0.969806612}, + {7.920833, 0.999999344, 0.999999702, 1.059999943, 1.059591532, 0.969807088}, + {7.925, 0.999999344, 0.999999702, 1.059999943, 1.059592605, 0.969807625}, + {7.929167, 0.999999344, 0.999999702, 1.059999943, 1.059593558, 0.969808161}, + {7.933333, 0.999999344, 0.999999702, 1.059999943, 1.059594512, 0.969808638}, + {7.9375, 0.999999344, 0.999999702, 1.059999943, 1.059595466, 0.969809175}, + {7.941667, 0.999999344, 0.999999702, 1.059999943, 1.059596419, 0.969809651}, + {7.945833, 0.999999344, 0.999999702, 1.059999943, 1.059597373, 0.969810188}, + {7.95, 0.999999344, 0.999999702, 1.059999943, 1.059598327, 0.969810665}, + {7.954167, 0.999999344, 0.999999702, 1.059999943, 1.05959928, 0.969811141}, + {7.958333, 0.999999344, 0.999999702, 1.059999943, 1.059600234, 0.969811678}, + {7.9625, 0.999999344, 0.999999702, 1.059999943, 1.059601188, 0.969812155}, + {7.966667, 0.999999344, 0.999999702, 1.059999943, 1.059602141, 0.969812691}, + {7.970833, 0.999999344, 0.999999702, 1.059999943, 1.059603095, 0.969813168}, + {7.975, 0.999999344, 0.999999702, 1.059999943, 1.05960393, 0.969813645}, + {7.979167, 0.999999344, 0.999999702, 1.059999943, 1.059604883, 0.969814122}, + {7.983333, 0.999999344, 0.999999702, 1.059999943, 1.059605837, 0.969814658}, + {7.9875, 0.999999344, 0.999999702, 1.059999943, 1.059606791, 0.969815135}, + {7.991667, 0.999999344, 0.999999702, 1.059999943, 1.059607744, 0.969815612}, + {7.995833, 0.999999344, 0.999999702, 1.059999943, 1.059608579, 0.969816089}, + {8, 0.999999344, 0.999999702, 1.059999943, 1.059609532, 0.969816566}, + {8.004167, 0.999999285, 0.999999702, 1.059999943, 1.059610486, 0.969817042}, + {8.008333, 0.999999285, 0.999999702, 1.059999943, 1.05961144, 0.969817519}, + {8.0125, 0.999999285, 0.999999702, 1.059999943, 1.059612274, 0.969817996}, + {8.016667, 0.999999285, 0.999999702, 1.059999943, 1.059613228, 0.969818473}, + {8.020833, 0.999999285, 0.999999702, 1.059999943, 1.059614182, 0.96981895}, + {8.025, 0.999999285, 0.999999702, 1.059999943, 1.059615016, 0.969819427}, + {8.029167, 0.999999285, 0.999999702, 1.059999943, 1.05961597, 0.969819903}, + {8.033333, 0.999999285, 0.999999702, 1.059999943, 1.059616804, 0.96982038}, + {8.0375, 0.999999285, 0.999999642, 1.059999943, 1.059617758, 0.969820857}, + {8.041667, 0.999999285, 0.999999642, 1.059999943, 1.059618592, 0.969821274}, + {8.045833, 0.999999285, 0.999999642, 1.059999943, 1.059619546, 0.969821751}, + {8.05, 0.999999285, 0.999999642, 1.059999943, 1.05962038, 0.969822228}, + {8.054167, 0.999999285, 0.999999642, 1.059999943, 1.059621334, 0.969822705}, + {8.058333, 0.999999285, 0.999999642, 1.059999943, 1.059622169, 0.969823182}, + {8.0625, 0.999999285, 0.999999642, 1.059999943, 1.059623122, 0.969823599}, + {8.066667, 0.999999285, 0.999999642, 1.059999943, 1.059623957, 0.969824076}, + {8.070833, 0.999999285, 0.999999642, 1.059999943, 1.059624791, 0.969824493}, + {8.075, 0.999999285, 0.999999642, 1.059999943, 1.059625745, 0.96982497}, + {8.079167, 0.999999225, 0.999999642, 1.059999943, 1.059626579, 0.969825447}, + {8.083333, 0.999999225, 0.999999642, 1.059999943, 1.059627414, 0.969825864}, + {8.0875, 0.999999225, 0.999999642, 1.059999943, 1.059628367, 0.969826341}, + {8.091667, 0.999999225, 0.999999642, 1.059999943, 1.059629202, 0.969826758}, + {8.095833, 0.999999225, 0.999999642, 1.059999943, 1.059630036, 0.969827235}, + {8.1, 0.999999225, 0.999999642, 1.059999943, 1.05963099, 0.969827652}, + {8.104167, 0.999999225, 0.999999642, 1.059999943, 1.059631824, 0.969828129}, + {8.108333, 0.999999225, 0.999999642, 1.059999943, 1.059632659, 0.969828546}, + {8.1125, 0.999999225, 0.999999642, 1.059999943, 1.059633493, 0.969829023}, + {8.116667, 0.999999225, 0.999999642, 1.059999943, 1.059634328, 0.96982944}, + {8.120833, 0.999999225, 0.999999642, 1.059999943, 1.059635162, 0.969829857}, + {8.125, 0.999999225, 0.999999642, 1.059999943, 1.059636116, 0.969830334}, + {8.129167, 0.999999225, 0.999999642, 1.059999943, 1.05963695, 0.969830751}, + {8.133333, 0.999999225, 0.999999642, 1.059999943, 1.059637785, 0.969831169}, + {8.1375, 0.999999225, 0.999999642, 1.059999943, 1.059638619, 0.969831645}, + {8.141667, 0.999999225, 0.999999642, 1.059999943, 1.059639454, 0.969832063}, + {8.145833, 0.999999225, 0.999999642, 1.059999943, 1.059640288, 0.96983248}, + {8.15, 0.999999225, 0.999999642, 1.059999943, 1.059641123, 0.969832897}, + {8.154167, 0.999999285, 0.999999642, 1.059999943, 1.059641957, 0.969833374}, + {8.158333, 0.999999285, 0.999999642, 1.059999943, 1.059642792, 0.969833791}, + {8.1625, 0.999999285, 0.999999642, 1.059999943, 1.059643626, 0.969834208}, + {8.166667, 0.999999285, 0.999999642, 1.059999943, 1.059644461, 0.969834626}, + {8.170833, 0.999999285, 0.999999702, 1.059999943, 1.059645295, 0.969835043}, + {8.175, 0.999999285, 0.999999702, 1.059999943, 1.05964613, 0.96983546}, + {8.179167, 0.999999285, 0.999999702, 1.059999943, 1.059646964, 0.969835877}, + {8.183333, 0.999999285, 0.999999702, 1.059999943, 1.059647799, 0.969836354}, + {8.1875, 0.999999285, 0.999999702, 1.059999943, 1.059648633, 0.969836771}, + {8.191667, 0.999999285, 0.999999702, 1.059999943, 1.059649467, 0.969837189}, + {8.195833, 0.999999285, 0.999999702, 1.059999943, 1.059650302, 0.969837606}, + {8.2, 0.999999285, 0.999999702, 1.059999943, 1.059651017, 0.969838023}, + {8.204167, 0.999999285, 0.999999702, 1.059999943, 1.059651852, 0.96983844}, + {8.208333, 0.999999285, 0.999999702, 1.059999943, 1.059652686, 0.969838858}, + {8.2125, 0.999999285, 0.999999702, 1.059999943, 1.059653521, 0.969839275}, + {8.216667, 0.999999285, 0.999999702, 1.059999943, 1.059654355, 0.969839692}, + {8.220833, 0.999999344, 0.999999702, 1.059999943, 1.05965519, 0.969840109}, + {8.225, 0.999999344, 0.999999702, 1.059999943, 1.059655905, 0.969840527}, + {8.229167, 0.999999344, 0.999999702, 1.059999943, 1.059656739, 0.969840884}, + {8.233333, 0.999999344, 0.999999702, 1.059999943, 1.059657574, 0.969841301}, + {8.2375, 0.999999344, 0.999999702, 1.059999943, 1.059658408, 0.969841719}, + {8.241667, 0.999999344, 0.999999702, 1.059999943, 1.059659123, 0.969842136}, + {8.245833, 0.999999344, 0.999999702, 1.059999943, 1.059659958, 0.969842553}, + {8.25, 0.999999344, 0.999999702, 1.059999943, 1.059660792, 0.96984297}, + {8.254167, 0.999999344, 0.999999702, 1.059999943, 1.059661508, 0.969843388}, + {8.258333, 0.999999344, 0.999999702, 1.059999943, 1.059662342, 0.969843745}, + {8.2625, 0.999999344, 0.999999702, 1.059999943, 1.059663177, 0.969844162}, + {8.266667, 0.999999344, 0.999999702, 1.059999943, 1.059663892, 0.96984458}, + {8.270833, 0.999999404, 0.999999702, 1.059999943, 1.059664726, 0.969844997}, + {8.275, 0.999999404, 0.999999762, 1.059999943, 1.059665561, 0.969845355}, + {8.279167, 0.999999404, 0.999999762, 1.059999943, 1.059666276, 0.969845772}, + {8.283333, 0.999999404, 0.999999762, 1.059999943, 1.05966711, 0.969846189}, + {8.2875, 0.999999404, 0.999999762, 1.059999943, 1.059667826, 0.969846606}, + {8.291667, 0.999999404, 0.999999762, 1.059999943, 1.05966866, 0.969846964}, + {8.295833, 0.999999404, 0.999999762, 1.059999943, 1.059669495, 0.969847381}, + {8.3, 0.999999404, 0.999999762, 1.059999943, 1.05967021, 0.969847798}, + {8.304167, 0.999999404, 0.999999762, 1.059999943, 1.059671044, 0.969848156}, + {8.308333, 0.999999404, 0.999999762, 1.059999943, 1.05967176, 0.969848573}, + {8.3125, 0.999999404, 0.999999762, 1.059999943, 1.059672594, 0.969848931}, + {8.316667, 0.999999404, 0.999999762, 1.059999943, 1.059673309, 0.969849348}, + {8.320833, 0.999999404, 0.999999762, 1.059999943, 1.059674144, 0.969849765}, + {8.325, 0.999999464, 0.999999762, 1.059999943, 1.059674859, 0.969850123}, + {8.329167, 0.999999464, 0.999999762, 1.059999943, 1.059675574, 0.96985054}, + {8.333333, 0.999999464, 0.999999762, 1.059999943, 1.059676409, 0.969850898}, + {8.3375, 0.999999464, 0.999999762, 1.059999943, 1.059677124, 0.969851315}, + {8.341667, 0.999999464, 0.999999762, 1.059999943, 1.059677958, 0.969851673}, + {8.345833, 0.999999464, 0.999999762, 1.059999943, 1.059678674, 0.96985209}, + {8.35, 0.999999464, 0.999999762, 1.059999943, 1.059679389, 0.969852448}, + {8.354167, 0.999999464, 0.999999762, 1.059999943, 1.059680223, 0.969852865}, + {8.358333, 0.999999464, 0.999999762, 1.059999943, 1.059680939, 0.969853222}, + {8.3625, 0.999999464, 0.999999762, 1.059999943, 1.059681654, 0.96985358}, + {8.366667, 0.999999464, 0.999999762, 1.059999943, 1.059682488, 0.969853997}, + {8.370833, 0.999999464, 0.999999762, 1.059999943, 1.059683204, 0.969854355}, + {8.375, 0.999999464, 0.999999762, 1.059999943, 1.059683919, 0.969854712}, + {8.379167, 0.999999464, 0.999999762, 1.059999943, 1.059684753, 0.96985513}, + {8.383333, 0.999999464, 0.999999762, 1.059999943, 1.059685469, 0.969855487}, + {8.3875, 0.999999464, 0.999999762, 1.059999943, 1.059686184, 0.969855845}, + {8.391667, 0.999999464, 0.999999762, 1.059999943, 1.059686899, 0.969856262}, + {8.395833, 0.999999464, 0.999999762, 1.059999943, 1.059687614, 0.96985662}, + {8.4, 0.999999464, 0.999999762, 1.059999943, 1.059688449, 0.969856977}, + {8.404167, 0.999999464, 0.999999762, 1.059999943, 1.059689164, 0.969857335}, + {8.408333, 0.999999464, 0.999999762, 1.059999943, 1.059689879, 0.969857752}, + {8.4125, 0.999999464, 0.999999762, 1.059999943, 1.059690595, 0.96985811}, + {8.416667, 0.999999464, 0.999999762, 1.059999943, 1.05969131, 0.969858468}, + {8.420833, 0.999999464, 0.999999762, 1.059999943, 1.059692025, 0.969858825}, + {8.425, 0.999999464, 0.999999762, 1.059999943, 1.05969274, 0.969859183}, + {8.429167, 0.999999464, 0.999999762, 1.059999943, 1.059693456, 0.96985954}, + {8.433333, 0.999999464, 0.999999762, 1.059999943, 1.059694171, 0.969859898}, + {8.4375, 0.999999464, 0.999999762, 1.059999943, 1.059694886, 0.969860256}, + {8.441667, 0.999999464, 0.999999762, 1.059999943, 1.059695601, 0.969860613}, + {8.445833, 0.999999464, 0.999999762, 1.059999943, 1.059696317, 0.969860971}, + {8.45, 0.999999464, 0.999999762, 1.059999943, 1.059697032, 0.969861329}, + {8.454167, 0.999999464, 0.999999762, 1.059999943, 1.059697747, 0.969861686}, + {8.458333, 0.999999464, 0.999999762, 1.059999943, 1.059698462, 0.969862044}, + {8.4625, 0.999999464, 0.999999762, 1.059999943, 1.059699178, 0.969862401}, + {8.466667, 0.999999464, 0.999999762, 1.059999943, 1.059699893, 0.969862759}, + {8.470833, 0.999999464, 0.999999762, 1.059999943, 1.059700608, 0.969863117}, + {8.475, 0.999999464, 0.999999762, 1.059999943, 1.059701324, 0.969863474}, + {8.479167, 0.999999464, 0.999999762, 1.059999943, 1.059702039, 0.969863832}, + {8.483333, 0.999999464, 0.999999762, 1.059999943, 1.059702754, 0.96986419}, + {8.4875, 0.999999464, 0.999999762, 1.059999943, 1.059703469, 0.969864547}, + {8.491667, 0.999999464, 0.999999762, 1.059999943, 1.059704065, 0.969864845}, + {8.495833, 0.999999464, 0.999999762, 1.059999943, 1.059704781, 0.969865203}, + {8.5, 0.999999464, 0.999999762, 1.059999943, 1.059705496, 0.969865561}, + {8.504167, 0.999999464, 0.999999762, 1.059999943, 1.059706211, 0.969865918}, + {8.508333, 0.999999464, 0.999999762, 1.059999943, 1.059706926, 0.969866216}, + {8.5125, 0.999999464, 0.999999762, 1.059999943, 1.059707522, 0.969866574}, + {8.516667, 0.999999464, 0.999999762, 1.059999943, 1.059708238, 0.969866931}, + {8.520833, 0.999999464, 0.999999762, 1.059999943, 1.059708953, 0.969867229}, + {8.525, 0.999999464, 0.999999762, 1.059999943, 1.059709549, 0.969867587}, + {8.529167, 0.999999464, 0.999999762, 1.059999943, 1.059710264, 0.969867945}, + {8.533333, 0.999999464, 0.999999762, 1.059999943, 1.059710979, 0.969868243}, + {8.5375, 0.999999464, 0.999999762, 1.059999943, 1.059711576, 0.9698686}, + {8.541667, 0.999999464, 0.999999762, 1.059999943, 1.059712291, 0.969868958}, + {8.545833, 0.999999464, 0.999999762, 1.059999943, 1.059713006, 0.969869256}, + {8.55, 0.999999464, 0.999999762, 1.059999943, 1.059713602, 0.969869614}, + {8.554167, 0.999999464, 0.999999762, 1.059999943, 1.059714317, 0.969869912}, + {8.558333, 0.999999464, 0.999999762, 1.059999943, 1.059715033, 0.969870269}, + {8.5625, 0.999999464, 0.999999762, 1.059999943, 1.059715629, 0.969870567}, + {8.566667, 0.999999464, 0.999999762, 1.059999943, 1.059716344, 0.969870925}, + {8.570833, 0.999999464, 0.999999762, 1.059999943, 1.05971694, 0.969871223}, + {8.575, 0.999999464, 0.999999762, 1.059999943, 1.059717655, 0.969871581}, + {8.579167, 0.999999464, 0.999999762, 1.059999943, 1.059718251, 0.969871879}, + {8.583333, 0.999999464, 0.999999762, 1.059999943, 1.059718966, 0.969872236}, + {8.5875, 0.999999464, 0.999999762, 1.059999943, 1.059719563, 0.969872534}, + {8.591667, 0.999999464, 0.999999762, 1.059999943, 1.059720278, 0.969872832}, + {8.595833, 0.999999464, 0.999999762, 1.059999943, 1.059720874, 0.96987319}, + {8.6, 0.999999464, 0.999999762, 1.059999943, 1.059721589, 0.969873488}, + {8.604167, 0.999999464, 0.999999762, 1.059999943, 1.059722185, 0.969873846}, + {8.608333, 0.999999464, 0.999999762, 1.059999943, 1.059722781, 0.969874144}, + {8.6125, 0.999999464, 0.999999762, 1.059999943, 1.059723496, 0.969874442}, + {8.616667, 0.999999464, 0.999999762, 1.059999943, 1.059724092, 0.969874799}, + {8.620833, 0.999999464, 0.999999762, 1.059999943, 1.059724808, 0.969875097}, + {8.625, 0.999999464, 0.999999762, 1.059999943, 1.059725404, 0.969875395}, + {8.629167, 0.999999464, 0.999999762, 1.059999943, 1.059726, 0.969875693}, + {8.633333, 0.999999464, 0.999999762, 1.059999943, 1.059726715, 0.969876051}, + {8.6375, 0.999999464, 0.999999762, 1.059999943, 1.059727311, 0.969876349}, + {8.641667, 0.999999464, 0.999999762, 1.059999943, 1.059727907, 0.969876647}, + {8.645833, 0.999999464, 0.999999762, 1.059999943, 1.059728622, 0.969876945}, + {8.65, 0.999999464, 0.999999762, 1.059999943, 1.059729218, 0.969877303}, + {8.654167, 0.999999464, 0.999999762, 1.059999943, 1.059729815, 0.969877601}, + {8.658333, 0.999999464, 0.999999762, 1.059999943, 1.05973053, 0.969877899}, + {8.6625, 0.999999464, 0.999999762, 1.059999943, 1.059731126, 0.969878197}, + {8.666667, 0.999999464, 0.999999762, 1.059999943, 1.059731722, 0.969878495}, + {8.670833, 0.999999464, 0.999999762, 1.059999943, 1.059732318, 0.969878793}, + {8.675, 0.999999464, 0.999999762, 1.059999943, 1.059733033, 0.969879091}, + {8.679167, 0.999999464, 0.999999762, 1.059999943, 1.059733629, 0.969879448}, + {8.683333, 0.999999464, 0.999999762, 1.059999943, 1.059734225, 0.969879746}, + {8.6875, 0.999999464, 0.999999762, 1.059999943, 1.059734821, 0.969880044}, + {8.691667, 0.999999464, 0.999999762, 1.059999943, 1.059735417, 0.969880342}, + {8.695833, 0.999999464, 0.999999762, 1.059999943, 1.059736013, 0.969880641}, + {8.7, 0.999999464, 0.999999762, 1.059999943, 1.059736729, 0.969880939}, + {8.704167, 0.999999464, 0.999999762, 1.059999943, 1.059737325, 0.969881237}, + {8.708333, 0.999999523, 0.999999821, 1.059999943, 1.059737921, 0.969881535}, + {8.7125, 0.999999523, 0.999999821, 1.059999943, 1.059738517, 0.969881833}, + {8.716667, 0.999999523, 0.999999821, 1.059999943, 1.059739113, 0.969882131}, + {8.720833, 0.999999523, 0.999999821, 1.059999943, 1.059739709, 0.969882429}, + {8.725, 0.999999523, 0.999999821, 1.059999943, 1.059740305, 0.969882727}, + {8.729167, 0.999999523, 0.999999821, 1.059999943, 1.059740901, 0.969883025}, + {8.733333, 0.999999523, 0.999999821, 1.059999943, 1.059741616, 0.969883323}, + {8.7375, 0.999999523, 0.999999821, 1.059999943, 1.059742212, 0.969883621}, + {8.741667, 0.999999523, 0.999999821, 1.059999943, 1.059742808, 0.969883919}, + {8.745833, 0.999999523, 0.999999821, 1.059999943, 1.059743404, 0.969884217}, + {8.75, 0.999999523, 0.999999821, 1.059999943, 1.059744, 0.969884515}, + {8.754167, 0.999999523, 0.999999821, 1.059999943, 1.059744596, 0.969884813}, + {8.758333, 0.999999523, 0.999999821, 1.059999943, 1.059745193, 0.969885051}, + {8.7625, 0.999999523, 0.999999821, 1.059999943, 1.059745789, 0.969885349}, + {8.766667, 0.999999523, 0.999999821, 1.059999943, 1.059746385, 0.969885647}, + {8.770833, 0.999999523, 0.999999821, 1.059999943, 1.059746981, 0.969885945}, + {8.775, 0.999999523, 0.999999821, 1.059999943, 1.059747577, 0.969886243}, + {8.779167, 0.999999523, 0.999999821, 1.059999943, 1.059748173, 0.969886541}, + {8.783333, 0.999999523, 0.999999821, 1.059999943, 1.059748769, 0.96988678}, + {8.7875, 0.999999523, 0.999999821, 1.059999943, 1.059749246, 0.969887078}, + {8.791667, 0.999999523, 0.999999821, 1.059999943, 1.059749842, 0.969887376}, + {8.795833, 0.999999583, 0.999999821, 1.059999943, 1.059750438, 0.969887674}, + {8.8, 0.999999583, 0.999999821, 1.059999943, 1.059751034, 0.969887972}, + {8.804167, 0.999999583, 0.999999821, 1.059999943, 1.05975163, 0.96988821}, + {8.808333, 0.999999583, 0.999999821, 1.059999943, 1.059752226, 0.969888508}, + {8.8125, 0.999999583, 0.999999821, 1.059999943, 1.059752822, 0.969888806}, + {8.816667, 0.999999583, 0.999999821, 1.059999943, 1.059753418, 0.969889104}, + {8.820833, 0.999999583, 0.999999821, 1.059999943, 1.059753895, 0.969889343}, + {8.825, 0.999999583, 0.999999821, 1.059999943, 1.059754491, 0.969889641}, + {8.829167, 0.999999583, 0.999999821, 1.059999943, 1.059755087, 0.969889939}, + {8.833333, 0.999999583, 0.999999821, 1.059999943, 1.059755683, 0.969890177}, + {8.8375, 0.999999583, 0.999999821, 1.059999943, 1.059756279, 0.969890475}, + {8.841667, 0.999999583, 0.999999821, 1.059999943, 1.059756875, 0.969890773}, + {8.845833, 0.999999583, 0.999999821, 1.059999943, 1.059757352, 0.969891012}, + {8.85, 0.999999583, 0.999999821, 1.059999943, 1.059757948, 0.96989131}, + {8.854167, 0.999999583, 0.999999821, 1.059999943, 1.059758544, 0.969891608}, + {8.858333, 0.999999583, 0.999999821, 1.059999943, 1.05975914, 0.969891846}, + {8.8625, 0.999999583, 0.999999821, 1.059999943, 1.059759617, 0.969892144}, + {8.866667, 0.999999583, 0.999999821, 1.059999943, 1.059760213, 0.969892383}, + {8.870833, 0.999999583, 0.999999821, 1.059999943, 1.059760809, 0.969892681}, + {8.875, 0.999999583, 0.999999821, 1.059999943, 1.059761286, 0.969892919}, + {8.879167, 0.999999583, 0.999999821, 1.059999943, 1.059761882, 0.969893217}, + {8.883333, 0.999999583, 0.999999821, 1.059999943, 1.059762478, 0.969893456}, + {8.8875, 0.999999583, 0.999999821, 1.059999943, 1.059762955, 0.969893754}, + {8.891667, 0.999999583, 0.999999821, 1.059999943, 1.059763551, 0.969893992}, + {8.895833, 0.999999583, 0.999999821, 1.059999943, 1.059764147, 0.96989429}, + {8.9, 0.999999583, 0.999999821, 1.059999943, 1.059764624, 0.969894528}, + {8.904167, 0.999999583, 0.999999821, 1.059999943, 1.05976522, 0.969894826}, + {8.908333, 0.999999583, 0.999999821, 1.059999943, 1.059765697, 0.969895065}, + {8.9125, 0.999999583, 0.999999821, 1.059999943, 1.059766293, 0.969895363}, + {8.916667, 0.999999583, 0.999999821, 1.059999943, 1.059766889, 0.969895601}, + {8.920833, 0.999999583, 0.999999821, 1.059999943, 1.059767365, 0.96989584}, + {8.925, 0.999999583, 0.999999821, 1.059999943, 1.059767962, 0.969896138}, + {8.929167, 0.999999583, 0.999999821, 1.059999943, 1.059768438, 0.969896376}, + {8.933333, 0.999999583, 0.999999821, 1.059999943, 1.059769034, 0.969896674}, + {8.9375, 0.999999583, 0.999999821, 1.059999943, 1.059769511, 0.969896913}, + {8.941667, 0.999999583, 0.999999821, 1.059999943, 1.059770107, 0.969897151}, + {8.945833, 0.999999583, 0.999999821, 1.059999943, 1.059770584, 0.969897449}, + {8.95, 0.999999583, 0.999999821, 1.059999943, 1.05977118, 0.969897687}, + {8.954167, 0.999999583, 0.999999821, 1.059999943, 1.059771657, 0.969897926}, + {8.958333, 0.999999583, 0.999999821, 1.059999943, 1.059772253, 0.969898224}, + {8.9625, 0.999999583, 0.999999821, 1.059999943, 1.05977273, 0.969898462}, + {8.966667, 0.999999583, 0.999999821, 1.059999943, 1.059773326, 0.969898701}, + {8.970833, 0.999999583, 0.999999821, 1.059999943, 1.059773803, 0.969898939}, + {8.975, 0.999999583, 0.999999821, 1.059999943, 1.05977428, 0.969899237}, + {8.979167, 0.999999583, 0.999999821, 1.059999943, 1.059774876, 0.969899476}, + {8.983333, 0.999999583, 0.999999821, 1.059999943, 1.059775352, 0.969899714}, + {8.9875, 0.999999583, 0.999999821, 1.059999943, 1.059775949, 0.969899952}, + {8.991667, 0.999999583, 0.999999821, 1.059999943, 1.059776425, 0.969900191}, + {8.995833, 0.999999583, 0.999999821, 1.059999943, 1.059776902, 0.969900429}, + {9, 0.999999583, 0.999999821, 1.059999943, 1.059777498, 0.969900727}, + {9.004167, 0.999999583, 0.999999821, 1.059999943, 1.059777975, 0.969900966}, + {9.008333, 0.999999583, 0.999999821, 1.059999943, 1.059778452, 0.969901204}, + {9.0125, 0.999999583, 0.999999821, 1.059999943, 1.059779048, 0.969901443}, + {9.016667, 0.999999583, 0.999999821, 1.059999943, 1.059779525, 0.969901681}, + {9.020833, 0.999999583, 0.999999821, 1.059999943, 1.059780002, 0.969901919}, + {9.025, 0.999999583, 0.999999821, 1.059999943, 1.059780598, 0.969902158}, + {9.029167, 0.999999583, 0.999999821, 1.059999943, 1.059781075, 0.969902396}, + {9.033333, 0.999999583, 0.999999821, 1.059999943, 1.059781551, 0.969902635}, + {9.0375, 0.999999583, 0.999999821, 1.059999943, 1.059782028, 0.969902873}, + {9.041667, 0.999999583, 0.999999821, 1.059999943, 1.059782505, 0.969903171}, + {9.045833, 0.999999583, 0.999999821, 1.059999943, 1.059783101, 0.969903409}, + {9.05, 0.999999583, 0.999999821, 1.059999943, 1.059783578, 0.969903648}, + {9.054167, 0.999999583, 0.999999821, 1.059999943, 1.059784055, 0.969903886}, + {9.058333, 0.999999583, 0.999999821, 1.059999943, 1.059784532, 0.969904125}, + {9.0625, 0.999999583, 0.999999821, 1.059999943, 1.059785128, 0.969904363}, + {9.066667, 0.999999583, 0.999999821, 1.059999943, 1.059785604, 0.969904542}, + {9.070833, 0.999999583, 0.999999821, 1.059999943, 1.059786081, 0.96990478}, + {9.075, 0.999999583, 0.999999821, 1.059999943, 1.059786558, 0.969905019}, + {9.079167, 0.999999583, 0.999999821, 1.059999943, 1.059787035, 0.969905257}, + {9.083333, 0.999999583, 0.999999821, 1.059999943, 1.059787512, 0.969905496}, + {9.0875, 0.999999583, 0.999999821, 1.059999943, 1.059787989, 0.969905734}, + {9.091667, 0.999999583, 0.999999821, 1.059999943, 1.059788466, 0.969905972}, + {9.095833, 0.999999583, 0.999999821, 1.059999943, 1.059789062, 0.969906211}, + {9.1, 0.999999583, 0.999999821, 1.059999943, 1.059789538, 0.969906449}, + {9.104167, 0.999999583, 0.999999821, 1.059999943, 1.059790015, 0.969906688}, + {9.108333, 0.999999583, 0.999999821, 1.059999943, 1.059790492, 0.969906926}, + {9.1125, 0.999999583, 0.999999821, 1.059999943, 1.059790969, 0.969907105}, + {9.116667, 0.999999583, 0.999999821, 1.059999943, 1.059791446, 0.969907343}, + {9.120833, 0.999999583, 0.999999821, 1.059999943, 1.059791923, 0.969907582}, + {9.125, 0.999999583, 0.999999821, 1.059999943, 1.059792399, 0.96990782}, + {9.129167, 0.999999583, 0.999999821, 1.059999943, 1.059792876, 0.969908059}, + {9.133333, 0.999999583, 0.999999821, 1.059999943, 1.059793353, 0.969908297}, + {9.1375, 0.999999583, 0.999999821, 1.059999943, 1.05979383, 0.969908476}, + {9.141667, 0.999999583, 0.999999821, 1.059999943, 1.059794307, 0.969908714}, + {9.145833, 0.999999583, 0.999999821, 1.059999943, 1.059794784, 0.969908953}, + {9.15, 0.999999583, 0.999999821, 1.059999943, 1.05979526, 0.969909191}, + {9.154167, 0.999999583, 0.999999821, 1.059999943, 1.059795737, 0.96990937}, + {9.158333, 0.999999583, 0.999999821, 1.059999943, 1.059796214, 0.969909608}, + {9.1625, 0.999999583, 0.999999821, 1.059999943, 1.059796691, 0.969909847}, + {9.166667, 0.999999642, 0.999999821, 1.059999943, 1.059797168, 0.969910085}, + {9.170833, 0.999999642, 0.999999821, 1.059999943, 1.059797645, 0.969910264}, + {9.175, 0.999999642, 0.999999821, 1.059999943, 1.059798121, 0.969910502}, + {9.179167, 0.999999642, 0.999999821, 1.059999943, 1.059798598, 0.969910741}, + {9.183333, 0.999999642, 0.999999881, 1.059999943, 1.059799075, 0.96991092}, + {9.1875, 0.999999642, 0.999999881, 1.059999943, 1.059799433, 0.969911158}, + {9.191667, 0.999999642, 0.999999881, 1.059999943, 1.05979991, 0.969911397}, + {9.195833, 0.999999642, 0.999999881, 1.059999943, 1.059800386, 0.969911575}, + {9.2, 0.999999642, 0.999999881, 1.059999943, 1.059800863, 0.969911814}, + {9.204167, 0.999999642, 0.999999881, 1.059999943, 1.05980134, 0.969912052}, + {9.208333, 0.999999642, 0.999999881, 1.059999943, 1.059801817, 0.969912231}, + {9.2125, 0.999999642, 0.999999881, 1.059999943, 1.059802294, 0.969912469}, + {9.216667, 0.999999642, 0.999999881, 1.059999943, 1.059802771, 0.969912708}, + {9.220833, 0.999999642, 0.999999881, 1.059999943, 1.059803128, 0.969912887}, + {9.225, 0.999999642, 0.999999881, 1.059999943, 1.059803605, 0.969913125}, + {9.229167, 0.999999642, 0.999999881, 1.059999943, 1.059804082, 0.969913304}, + {9.233333, 0.999999642, 0.999999881, 1.059999943, 1.059804559, 0.969913542}, + {9.2375, 0.999999642, 0.999999881, 1.059999943, 1.059805036, 0.969913781}, + {9.241667, 0.999999642, 0.999999881, 1.059999943, 1.059805393, 0.96991396}, + {9.245833, 0.999999642, 0.999999881, 1.059999943, 1.05980587, 0.969914198}, + {9.25, 0.999999642, 0.999999881, 1.059999943, 1.059806347, 0.969914377}, + {9.254167, 0.999999642, 0.999999881, 1.059999943, 1.059806824, 0.969914615}, + {9.258333, 0.999999642, 0.999999881, 1.059999943, 1.059807181, 0.969914794}, + {9.2625, 0.999999642, 0.999999881, 1.059999943, 1.059807658, 0.969915032}, + {9.266667, 0.999999642, 0.999999881, 1.059999943, 1.059808135, 0.969915211}, + {9.270833, 0.999999642, 0.999999881, 1.059999943, 1.059808612, 0.96991545}, + {9.275, 0.999999642, 0.999999881, 1.059999943, 1.05980897, 0.969915628}, + {9.279167, 0.999999642, 0.999999881, 1.059999943, 1.059809446, 0.969915867}, + {9.283333, 0.999999642, 0.999999881, 1.059999943, 1.059809923, 0.969916046}, + {9.2875, 0.999999642, 0.999999881, 1.059999943, 1.059810281, 0.969916284}, + {9.291667, 0.999999642, 0.999999881, 1.059999943, 1.059810758, 0.969916463}, + {9.295833, 0.999999642, 0.999999881, 1.059999943, 1.059811234, 0.969916701}, + {9.3, 0.999999642, 0.999999881, 1.059999943, 1.059811592, 0.96991688}, + {9.304167, 0.999999642, 0.999999881, 1.059999943, 1.059812069, 0.969917119}, + {9.308333, 0.999999642, 0.999999881, 1.059999943, 1.059812546, 0.969917297}, + {9.3125, 0.999999642, 0.999999881, 1.059999943, 1.059812903, 0.969917536}, + {9.316667, 0.999999642, 0.999999881, 1.059999943, 1.05981338, 0.969917715}, + {9.320833, 0.999999642, 0.999999881, 1.059999943, 1.059813857, 0.969917893}, + {9.325, 0.999999702, 0.999999881, 1.059999943, 1.059814215, 0.969918132}, + {9.329167, 0.999999702, 0.999999881, 1.059999943, 1.059814692, 0.969918311}, + {9.333333, 0.999999702, 0.999999881, 1.059999943, 1.059815168, 0.969918489}, + {9.3375, 0.999999702, 0.999999881, 1.059999943, 1.059815526, 0.969918728}, + {9.341667, 0.999999702, 0.999999881, 1.059999943, 1.059816003, 0.969918907}, + {9.345833, 0.999999702, 0.999999881, 1.059999943, 1.05981636, 0.969919145}, + {9.35, 0.999999702, 0.999999881, 1.059999943, 1.059816837, 0.969919324}, + {9.354167, 0.999999702, 0.999999881, 1.059999943, 1.059817195, 0.969919503}, + {9.358333, 0.999999702, 0.999999881, 1.059999943, 1.059817672, 0.969919741}, + {9.3625, 0.999999702, 0.999999881, 1.059999943, 1.059818029, 0.96991992}, + {9.366667, 0.999999702, 0.999999881, 1.059999943, 1.059818506, 0.969920099}, + {9.370833, 0.999999702, 0.999999881, 1.059999943, 1.059818983, 0.969920278}, + {9.375, 0.999999702, 0.999999881, 1.059999943, 1.059819341, 0.969920516}, + {9.379167, 0.999999702, 0.999999881, 1.059999943, 1.059819818, 0.969920695}, + {9.383333, 0.999999702, 0.999999881, 1.059999943, 1.059820175, 0.969920874}, + {9.3875, 0.999999702, 0.999999881, 1.059999943, 1.059820652, 0.969921112}, + {9.391667, 0.999999702, 0.999999881, 1.059999943, 1.05982101, 0.969921291}, + {9.395833, 0.999999702, 0.999999881, 1.059999943, 1.059821367, 0.96992147}, + {9.4, 0.999999702, 0.999999881, 1.059999943, 1.059821844, 0.969921649}, + {9.404167, 0.999999702, 0.999999881, 1.059999943, 1.059822202, 0.969921827}, + {9.408333, 0.999999702, 0.999999881, 1.059999943, 1.059822679, 0.969922066}, + {9.4125, 0.999999702, 0.999999881, 1.059999943, 1.059823036, 0.969922245}, + {9.416667, 0.999999702, 0.999999881, 1.059999943, 1.059823513, 0.969922423}, + {9.420833, 0.999999702, 0.999999881, 1.059999943, 1.059823871, 0.969922602}, + {9.425, 0.999999702, 0.999999881, 1.059999943, 1.059824228, 0.969922781}, + {9.429167, 0.999999702, 0.999999881, 1.059999943, 1.059824705, 0.969923019}, + {9.433333, 0.999999702, 0.999999881, 1.059999943, 1.059825063, 0.969923198}, + {9.4375, 0.999999702, 0.999999881, 1.059999943, 1.05982554, 0.969923377}, + {9.441667, 0.999999702, 0.999999881, 1.059999943, 1.059825897, 0.969923556}, + {9.445833, 0.999999702, 0.999999881, 1.059999943, 1.059826255, 0.969923735}, + {9.45, 0.999999702, 0.999999881, 1.059999943, 1.059826732, 0.969923913}, + {9.454167, 0.999999702, 0.999999881, 1.059999943, 1.059827089, 0.969924092}, + {9.458333, 0.999999702, 0.999999881, 1.059999943, 1.059827447, 0.969924271}, + {9.4625, 0.999999702, 0.999999881, 1.059999943, 1.059827924, 0.96992451}, + {9.466667, 0.999999702, 0.999999881, 1.059999943, 1.059828281, 0.969924688}, + {9.470833, 0.999999702, 0.999999881, 1.059999943, 1.059828639, 0.969924867}, + {9.475, 0.999999702, 0.999999881, 1.059999943, 1.059829116, 0.969925046}, + {9.479167, 0.999999702, 0.999999881, 1.059999943, 1.059829474, 0.969925225}, + {9.483333, 0.999999702, 0.999999881, 1.059999943, 1.059829831, 0.969925404}, + {9.4875, 0.999999702, 0.999999881, 1.059999943, 1.059830308, 0.969925582}, + {9.491667, 0.999999702, 0.999999881, 1.059999943, 1.059830666, 0.969925761}, + {9.495833, 0.999999702, 0.999999881, 1.059999943, 1.059831023, 0.96992594}, + {9.5, 0.999999702, 0.999999881, 1.059999943, 1.059831381, 0.969926119}, + {9.504167, 0.999999702, 0.999999881, 1.059999943, 1.059831858, 0.969926298}, + {9.508333, 0.999999702, 0.999999881, 1.059999943, 1.059832215, 0.969926476}, + {9.5125, 0.999999702, 0.999999881, 1.059999943, 1.059832573, 0.969926655}, + {9.516667, 0.999999702, 0.999999881, 1.059999943, 1.059832931, 0.969926834}, + {9.520833, 0.999999702, 0.999999881, 1.059999943, 1.059833407, 0.969927013}, + {9.525, 0.999999702, 0.999999881, 1.059999943, 1.059833765, 0.969927192}, + {9.529167, 0.999999702, 0.999999881, 1.059999943, 1.059834123, 0.969927371}, + {9.533333, 0.999999702, 0.999999881, 1.059999943, 1.05983448, 0.969927549}, + {9.5375, 0.999999702, 0.999999881, 1.059999943, 1.059834838, 0.969927728}, + {9.541667, 0.999999702, 0.999999881, 1.059999943, 1.059835315, 0.969927907}, + {9.545833, 0.999999702, 0.999999881, 1.059999943, 1.059835672, 0.969928086}, + {9.55, 0.999999702, 0.999999881, 1.059999943, 1.05983603, 0.969928265}, + {9.554167, 0.999999702, 0.999999881, 1.059999943, 1.059836388, 0.969928384}, + {9.558333, 0.999999702, 0.999999881, 1.059999943, 1.059836745, 0.969928563}, + {9.5625, 0.999999702, 0.999999881, 1.059999943, 1.059837103, 0.969928741}, + {9.566667, 0.999999702, 0.999999881, 1.059999943, 1.059837461, 0.96992892}, + {9.570833, 0.999999702, 0.999999881, 1.059999943, 1.059837937, 0.969929099}, + {9.575, 0.999999702, 0.999999881, 1.059999943, 1.059838295, 0.969929278}, + {9.579167, 0.999999702, 0.999999881, 1.059999943, 1.059838653, 0.969929457}, + {9.583333, 0.999999702, 0.999999881, 1.059999943, 1.05983901, 0.969929636}, + {9.5875, 0.999999702, 0.999999881, 1.059999943, 1.059839368, 0.969929755}, + {9.591667, 0.999999702, 0.999999881, 1.059999943, 1.059839725, 0.969929934}, + {9.595833, 0.999999702, 0.999999881, 1.059999943, 1.059840083, 0.969930112}, + {9.6, 0.999999702, 0.999999881, 1.059999943, 1.059840441, 0.969930291}, + {9.604167, 0.999999702, 0.999999881, 1.059999943, 1.059840798, 0.96993047}, + {9.608333, 0.999999702, 0.999999881, 1.059999943, 1.059841156, 0.969930649}, + {9.6125, 0.999999702, 0.999999881, 1.059999943, 1.059841514, 0.969930768}, + {9.616667, 0.999999702, 0.999999881, 1.059999943, 1.059841871, 0.969930947}, + {9.620833, 0.999999702, 0.999999881, 1.059999943, 1.059842229, 0.969931126}, + {9.625, 0.999999702, 0.999999881, 1.059999943, 1.059842587, 0.969931304}, + {9.629167, 0.999999702, 0.999999881, 1.059999943, 1.059842944, 0.969931424}, + {9.633333, 0.999999702, 0.999999881, 1.059999943, 1.059843421, 0.969931602}, + {9.6375, 0.999999702, 0.999999881, 1.059999943, 1.059843779, 0.969931781}, + {9.641667, 0.999999702, 0.999999881, 1.059999943, 1.059844136, 0.96993196}, + {9.645833, 0.999999702, 0.999999881, 1.059999943, 1.059844494, 0.969932139}, + {9.65, 0.999999702, 0.999999881, 1.059999943, 1.059844851, 0.969932258}, + {9.654167, 0.999999702, 0.999999881, 1.059999943, 1.05984509, 0.969932437}, + {9.658333, 0.999999702, 0.999999881, 1.059999943, 1.059845448, 0.969932616}, + {9.6625, 0.999999702, 0.999999881, 1.059999943, 1.059845805, 0.969932735}, + {9.666667, 0.999999702, 0.999999881, 1.059999943, 1.059846163, 0.969932914}, + {9.670833, 0.999999702, 0.999999881, 1.059999943, 1.05984652, 0.969933093}, + {9.675, 0.999999702, 0.999999881, 1.059999943, 1.059846878, 0.969933271}, + {9.679167, 0.999999702, 0.999999881, 1.059999943, 1.059847236, 0.969933391}, + {9.683333, 0.999999702, 0.999999881, 1.059999943, 1.059847593, 0.969933569}, + {9.6875, 0.999999702, 0.999999881, 1.059999943, 1.059847951, 0.969933748}, + {9.691667, 0.999999702, 0.999999881, 1.059999943, 1.059848309, 0.969933867}, + {9.695833, 0.999999702, 0.999999881, 1.059999943, 1.059848666, 0.969934046}, + {9.7, 0.999999702, 0.999999881, 1.059999943, 1.059849024, 0.969934225}, + {9.704167, 0.999999702, 0.999999881, 1.059999943, 1.059849381, 0.969934344}, + {9.708333, 0.999999702, 0.999999881, 1.059999943, 1.059849739, 0.969934523}, + {9.7125, 0.999999702, 0.999999881, 1.059999943, 1.059849977, 0.969934702}, + {9.716667, 0.999999702, 0.999999881, 1.059999943, 1.059850335, 0.969934821}, + {9.720833, 0.999999702, 0.999999881, 1.059999943, 1.059850693, 0.969935}, + {9.725, 0.999999702, 0.999999881, 1.059999943, 1.05985105, 0.969935119}, + {9.729167, 0.999999702, 0.999999881, 1.059999943, 1.059851408, 0.969935298}, + {9.733333, 0.999999702, 0.999999881, 1.059999943, 1.059851766, 0.969935477}, + {9.7375, 0.999999762, 0.999999881, 1.059999943, 1.059852123, 0.969935596}, + {9.741667, 0.999999762, 0.999999881, 1.059999943, 1.059852481, 0.969935775}, + {9.745833, 0.999999762, 0.999999881, 1.059999943, 1.059852719, 0.969935894}, + {9.75, 0.999999762, 0.999999881, 1.059999943, 1.059853077, 0.969936073}, + {9.754167, 0.999999762, 0.999999881, 1.059999943, 1.059853435, 0.969936252}, + {9.758333, 0.999999762, 0.999999881, 1.059999943, 1.059853792, 0.969936371}, + {9.7625, 0.999999762, 0.999999881, 1.059999943, 1.05985415, 0.96993655}, + {9.766667, 0.999999762, 0.999999881, 1.059999943, 1.059854388, 0.969936669}, + {9.770833, 0.999999762, 0.999999881, 1.059999943, 1.059854746, 0.969936848}, + {9.775, 0.999999762, 0.999999881, 1.059999943, 1.059855103, 0.969936967}, + {9.779167, 0.999999762, 0.999999881, 1.059999943, 1.059855461, 0.969937146}, + {9.783333, 0.999999762, 0.999999881, 1.059999943, 1.059855819, 0.969937325}, + {9.7875, 0.999999762, 0.999999881, 1.059999943, 1.059856057, 0.969937444}, + {9.791667, 0.999999762, 0.999999881, 1.059999943, 1.059856415, 0.969937623}, + {9.795833, 0.999999762, 0.999999881, 1.059999943, 1.059856772, 0.969937742}, + {9.8, 0.999999762, 0.999999881, 1.059999943, 1.05985713, 0.969937921}, + {9.804167, 0.999999762, 0.999999881, 1.059999943, 1.059857368, 0.96993804}, + {9.808333, 0.999999762, 0.999999881, 1.059999943, 1.059857726, 0.969938219}, + {9.8125, 0.999999762, 0.999999881, 1.059999943, 1.059858084, 0.969938338}, + {9.816667, 0.999999762, 0.999999881, 1.059999943, 1.059858441, 0.969938517}, + {9.820833, 0.999999762, 0.999999881, 1.059999943, 1.05985868, 0.969938636}, + {9.825, 0.999999762, 0.999999881, 1.059999943, 1.059859037, 0.969938755}, + {9.829167, 0.999999762, 0.999999881, 1.059999943, 1.059859395, 0.969938934}, + {9.833333, 0.999999762, 0.999999881, 1.059999943, 1.059859633, 0.969939053}, + {9.8375, 0.999999762, 0.999999881, 1.059999943, 1.059859991, 0.969939232}, + {9.841667, 0.999999762, 0.99999994, 1.059999943, 1.059860349, 0.969939351}, + {9.845833, 0.999999762, 0.99999994, 1.059999943, 1.059860587, 0.96993953}, + {9.85, 0.999999762, 0.99999994, 1.059999943, 1.059860945, 0.969939649}, + {9.854167, 0.999999762, 0.99999994, 1.059999943, 1.059861302, 0.969939828}, + {9.858333, 0.999999762, 0.99999994, 1.059999943, 1.059861541, 0.969939947}, + {9.8625, 0.999999762, 0.99999994, 1.059999943, 1.059861898, 0.969940066}, + {9.866667, 0.999999762, 0.99999994, 1.059999943, 1.059862256, 0.969940245}, + {9.870833, 0.999999762, 0.99999994, 1.059999943, 1.059862494, 0.969940364}, + {9.875, 0.999999762, 0.99999994, 1.059999943, 1.059862852, 0.969940543}, + {9.879167, 0.999999762, 0.99999994, 1.059999943, 1.05986321, 0.969940662}, + {9.883333, 0.999999762, 0.99999994, 1.059999943, 1.059863448, 0.969940782}, + {9.8875, 0.999999762, 0.99999994, 1.059999943, 1.059863806, 0.96994096}, + {9.891667, 0.999999762, 0.99999994, 1.059999943, 1.059864044, 0.96994108}, + {9.895833, 0.999999762, 0.99999994, 1.059999943, 1.059864402, 0.969941199}, + {9.9, 0.999999762, 0.99999994, 1.059999943, 1.059864759, 0.969941378}, + {9.904167, 0.999999762, 0.99999994, 1.059999943, 1.059864998, 0.969941497}, + {9.908333, 0.999999762, 0.99999994, 1.059999943, 1.059865355, 0.969941616}, + {9.9125, 0.999999762, 0.99999994, 1.059999943, 1.059865594, 0.969941795}, + {9.916667, 0.999999762, 0.99999994, 1.059999943, 1.059865952, 0.969941914}, + {9.920833, 0.999999762, 0.99999994, 1.059999943, 1.05986619, 0.969942033}, + {9.925, 0.999999762, 0.99999994, 1.059999943, 1.059866548, 0.969942212}, + {9.929167, 0.999999762, 0.99999994, 1.059999943, 1.059866905, 0.969942331}, + {9.933333, 0.999999762, 0.99999994, 1.059999943, 1.059867144, 0.969942451}, + {9.9375, 0.999999762, 0.99999994, 1.059999943, 1.059867501, 0.969942629}, + {9.941667, 0.999999762, 0.99999994, 1.059999943, 1.05986774, 0.969942749}, + {9.945833, 0.999999762, 0.99999994, 1.059999943, 1.059868097, 0.969942868}, + {9.95, 0.999999762, 0.99999994, 1.059999943, 1.059868336, 0.969942987}, + {9.954167, 0.999999762, 0.99999994, 1.059999943, 1.059868693, 0.969943166}, + {9.958333, 0.999999762, 0.99999994, 1.059999943, 1.059868932, 0.969943285}, + {9.9625, 0.999999762, 0.99999994, 1.059999943, 1.059869289, 0.969943404}, + {9.966667, 0.999999762, 0.99999994, 1.059999943, 1.059869528, 0.969943583}, + {9.970833, 0.999999762, 0.99999994, 1.059999943, 1.059869885, 0.969943702}, + {9.975, 0.999999762, 0.99999994, 1.059999943, 1.059870124, 0.969943821}, + {9.979167, 0.999999762, 0.99999994, 1.059999943, 1.059870481, 0.969943941}, + {9.983333, 0.999999762, 0.99999994, 1.059999943, 1.05987072, 0.96994406}, + {9.9875, 0.999999762, 0.99999994, 1.059999943, 1.059871078, 0.969944239}, + {9.991667, 0.999999762, 0.99999994, 1.059999943, 1.059871316, 0.969944358}, + {9.995833, 0.999999762, 0.99999994, 1.059999943, 1.059871554, 0.969944477}, + {10, 0.999999762, 0.99999994, 1.059999943, 1.059871912, 0.969944596}}; +} // namespace Example2 diff --git a/src/Solver/Optimization/DynamicConstraint.cpp b/src/Solver/Optimization/DynamicConstraint.cpp index 5d2e04582..784d4e3f6 100644 --- a/src/Solver/Optimization/DynamicConstraint.cpp +++ b/src/Solver/Optimization/DynamicConstraint.cpp @@ -28,7 +28,7 @@ namespace AnalysisManager bool DynamicConstraint::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { // This code handles one objective function - assert(model_->size_quad() == 1); + assert(model_->sizeQuadrature() == 1); // Number of parameters is size of the system plus 1 fictitious parameter // to store the objective value. diff --git a/src/Solver/Optimization/DynamicObjective.cpp b/src/Solver/Optimization/DynamicObjective.cpp index 0b76d82e0..81ad25cde 100644 --- a/src/Solver/Optimization/DynamicObjective.cpp +++ b/src/Solver/Optimization/DynamicObjective.cpp @@ -28,7 +28,7 @@ namespace AnalysisManager bool DynamicObjective::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { // This code handles one objective function - assert(model_->size_quad() == 1); + assert(model_->sizeQuadrature() == 1); // Number of optimization variables. n = model_->sizeParams(); diff --git a/tests/UnitTests/Solver/Dynamic/IdaTests.hpp b/tests/UnitTests/Solver/Dynamic/IdaTests.hpp index 53c30c68f..6744a92c9 100644 --- a/tests/UnitTests/Solver/Dynamic/IdaTests.hpp +++ b/tests/UnitTests/Solver/Dynamic/IdaTests.hpp @@ -110,132 +110,132 @@ namespace GridKit { } - std::vector& y() + std::vector& y() override { return y_; } - const std::vector& y() const + const std::vector& y() const override { return y_; } - std::vector& yp() + std::vector& yp() override { return yp_; } - const std::vector& yp() const + const std::vector& yp() const override { return yp_; } - std::vector& tag() + std::vector& tag() override { return tag_; } - const std::vector& tag() const + const std::vector& tag() const override { return tag_; } - std::vector& yB() + std::vector& yB() override { return yB_; } - const std::vector& yB() const + const std::vector& yB() const override { return yB_; } - std::vector& ypB() + std::vector& ypB() override { return ypB_; } - const std::vector& ypB() const + const std::vector& ypB() const override { return ypB_; } - std::vector& param() + std::vector& param() override { return param_; } - const std::vector& param() const + const std::vector& param() const override { return param_; } - std::vector& param_up() + std::vector& param_up() override { return param_up_; } - const std::vector& param_up() const + const std::vector& param_up() const override { return param_up_; } - std::vector& param_lo() + std::vector& param_lo() override { return param_lo_; } - const std::vector& param_lo() const + const std::vector& param_lo() const override { return param_lo_; } - std::vector& getResidual() + std::vector& getResidual() override { return f_; } - const std::vector& getResidual() const + const std::vector& getResidual() const override { return f_; } - COO_Matrix& getJacobian() + COO_Matrix& getJacobian() override { return jac_; } - const COO_Matrix& getJacobian() const + const COO_Matrix& getJacobian() const override { return jac_; } - std::vector& getIntegrand() + std::vector& getIntegrand() override { return g_; } - const std::vector& getIntegrand() const + const std::vector& getIntegrand() const override { return g_; } - std::vector& getAdjointResidual() + std::vector& getAdjointResidual() override { return fB_; } - const std::vector& getAdjointResidual() const + const std::vector& getAdjointResidual() const override { return fB_; } - std::vector& getAdjointIntegrand() + std::vector& getAdjointIntegrand() override { return gB_; } - const std::vector& getAdjointIntegrand() const + const std::vector& getAdjointIntegrand() const override { return gB_; } From 9a87777814fec8d2bb9df1375d3e96fadc71e0d8 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan <72402802+nkoukpaizan@users.noreply.github.com> Date: Wed, 14 May 2025 14:37:24 -0400 Subject: [PATCH 022/139] Verify Branch and Load Jacobians computed with Sparse::Variable (#89) --------- Co-authored-by: Alexander Novotny --- .../SparsityPattern/Variable.hpp | 15 ++++ src/Model/PhasorDynamics/Branch/Branch.cpp | 2 + src/Model/PhasorDynamics/Bus/Bus.cpp | 2 + src/Model/PhasorDynamics/Bus/BusInfinite.cpp | 2 + src/Model/PhasorDynamics/BusBase.hpp | 1 + src/Model/PhasorDynamics/Component.hpp | 1 + src/Model/PhasorDynamics/Load/Load.cpp | 2 + src/Utilities/Testing.hpp | 53 +++++++++++++ .../UnitTests/PhasorDynamics/BranchTests.hpp | 79 +++++++++++++++++++ tests/UnitTests/PhasorDynamics/LoadTests.hpp | 54 +++++++++++++ .../PhasorDynamics/runBranchTests.cpp | 1 + .../UnitTests/PhasorDynamics/runLoadTests.cpp | 1 + 12 files changed, 213 insertions(+) diff --git a/src/LinearAlgebra/SparsityPattern/Variable.hpp b/src/LinearAlgebra/SparsityPattern/Variable.hpp index 4015f65af..5b95eb615 100644 --- a/src/LinearAlgebra/SparsityPattern/Variable.hpp +++ b/src/LinearAlgebra/SparsityPattern/Variable.hpp @@ -14,6 +14,8 @@ #include #include +#include + namespace GridKit { namespace Sparse @@ -326,5 +328,18 @@ namespace GridKit } // namespace Sparse } // namespace GridKit +namespace GridKit +{ + template <> + class ScalarTraits + { + public: + typedef double real_type; + typedef double norm_type; + typedef double scalar_type; + }; + +} // namespace GridKit + #include "VariableImplementation.hpp" #include "VariableOperators.hpp" diff --git a/src/Model/PhasorDynamics/Branch/Branch.cpp b/src/Model/PhasorDynamics/Branch/Branch.cpp index 75ccb8d74..0ccbe1a1a 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.cpp +++ b/src/Model/PhasorDynamics/Branch/Branch.cpp @@ -221,6 +221,8 @@ namespace GridKit // Available template instantiations template class Branch; template class Branch; + template class Branch; + template class Branch; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/Bus.cpp b/src/Model/PhasorDynamics/Bus/Bus.cpp index f8005b2b9..7253ee66a 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.cpp +++ b/src/Model/PhasorDynamics/Bus/Bus.cpp @@ -215,6 +215,8 @@ namespace GridKit // Available template instantiations template class Bus; template class Bus; + template class Bus; + template class Bus; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp index 6206813d7..f4f18b83d 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp @@ -195,6 +195,8 @@ namespace GridKit // Available template instantiations template class BusInfinite; template class BusInfinite; + template class BusInfinite; + template class BusInfinite; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 804cbfca4..cd92d1bc1 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -2,6 +2,7 @@ #include +#include #include namespace GridKit diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index c061ff622..eec865bfa 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -2,6 +2,7 @@ #include +#include #include namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index b97b75716..b7c51505f 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -173,6 +173,8 @@ namespace GridKit // Available template instantiations template class Load; template class Load; + template class Load; + template class Load; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Utilities/Testing.hpp b/src/Utilities/Testing.hpp index ce57d2c5f..6f91ef1f4 100644 --- a/src/Utilities/Testing.hpp +++ b/src/Utilities/Testing.hpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include @@ -220,6 +222,57 @@ namespace GridKit return fail == 0; } + /** + * @brief Equatlity comparison between maps with a tolerance for the scalar value + * + * @tparam IdxT + * @tparam RealT + * + * @param[in] a - first map to compare + * @param[in] b - second map to compare + * @param[in] tol - tolerance + * @return bool - true if the maps are equal; false otherwise + */ + template + inline bool isEqual(std::map a, + std::map b, + const RealT tol = std::numeric_limits::epsilon()) + { + int fail = 0; + + if (a.size() != b.size()) + { + fail++; + errs() << "Containers do not have the same size! " + << "a.size() = " << a.size() << ", and " + << "b.size() = " << b.size() << "\n"; + } + + for (const auto& pair_a : a) + { + auto it = b.find(pair_a.first); + if (it != b.end()) + { + if (!isEqual(pair_a.second, it->second, tol)) + { + fail++; + errs() << "Mismatching map values! " + << "a.first = " << pair_a.first << ", " + << "a.second = " << pair_a.second << ", and " + << "b.second = " << it->second << "\n"; + } + } + else + { + fail++; + errs() << "Entry not found in the second container! " + << "a.first = " << pair_a.first << "\n"; + } + } + + return fail == 0; + } + } // namespace Testing } // namespace GridKit diff --git a/tests/UnitTests/PhasorDynamics/BranchTests.hpp b/tests/UnitTests/PhasorDynamics/BranchTests.hpp index 81e2c48eb..2ca571e77 100644 --- a/tests/UnitTests/PhasorDynamics/BranchTests.hpp +++ b/tests/UnitTests/PhasorDynamics/BranchTests.hpp @@ -1,6 +1,7 @@ #include #include +#include #include #include #include @@ -77,6 +78,46 @@ namespace GridKit return success.report(__func__); } + TestOutcome jacobian() + { + TestStatus success = true; + + real_type R{2.0}; ///< Branch series resistance + real_type X{4.0}; ///< Branch series reactance + real_type G{0.2}; ///< Branch shunt conductance + real_type B{1.2}; ///< Branch shunt charging + + Sparse::Variable Vr1{10.0}; ///< Bus-1 real voltage + Sparse::Variable Vi1{20.0}; ///< Bus-1 imaginary voltage + Sparse::Variable Vr2{30.0}; ///< Bus-2 real voltage + Sparse::Variable Vi2{40.0}; ///< Bus-2 imaginary voltage + + Vr1.setVariableNumber(0); ///< Independent variables: first + Vi1.setVariableNumber(1); ///< Independent variables: second + Vr2.setVariableNumber(2); ///< Independent variables: third + Vi2.setVariableNumber(3); ///< Independent variables: fourth + + PhasorDynamics::BusInfinite bus1(Vr1, Vi1); + PhasorDynamics::BusInfinite bus2(Vr2, Vi2); + + PhasorDynamics::Branch branch(&bus1, &bus2, R, X, G, B); + branch.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking + ///< the dependencies + + std::vector residuals{bus1.Ir(), bus1.Ii(), bus2.Ir(), bus2.Ii()}; + std::vector ref = analyticalJacobian(R, X, G, B); + + /// Compare dependencies computed automatically to the ones computed analytically + for (size_t i = 0; i < residuals.size(); ++i) + { + Sparse::Variable res = residuals[i]; + const Sparse::Variable::DependencyMap& dependencies = res.getDependencies(); + success *= (GridKit::Testing::isEqual(dependencies, ref[i])); + } + + return success.report(__func__); + } + TestOutcome accessors() { TestStatus success = true; @@ -139,6 +180,44 @@ namespace GridKit return success.report(__func__); } + + private: + std::vector analyticalJacobian(const real_type R, + const real_type X, + const real_type G, + const real_type B) + { + const real_type b = -X / (R * R + X * X); + const real_type g = R / (R * R + X * X); + + real_type dIr1_dVr1 = -(g + 0.5 * G); + real_type dIr1_dVi1 = (b + 0.5 * B); + real_type dIr1_dVr2 = g; + real_type dIr1_dVi2 = -b; + + real_type dIi1_dVr1 = -(b + 0.5 * B); + real_type dIi1_dVi1 = -(g + 0.5 * G); + real_type dIi1_dVr2 = b; + real_type dIi1_dVi2 = g; + + real_type dIr2_dVr1 = g; + real_type dIr2_dVi1 = -b; + real_type dIr2_dVr2 = -(g + 0.5 * G); + real_type dIr2_dVi2 = (b + 0.5 * B); + + real_type dIi2_dVr1 = b; + real_type dIi2_dVi1 = g; + real_type dIi2_dVr2 = -(b + 0.5 * B); + real_type dIi2_dVi2 = -(g + 0.5 * G); + + std::vector dependencies(4); + dependencies[0] = {{0, dIr1_dVr1}, {1, dIr1_dVi1}, {2, dIr1_dVr2}, {3, dIr1_dVi2}}; + dependencies[1] = {{0, dIi1_dVr1}, {1, dIi1_dVi1}, {2, dIi1_dVr2}, {3, dIi1_dVi2}}; + dependencies[2] = {{0, dIr2_dVr1}, {1, dIr2_dVi1}, {2, dIr2_dVr2}, {3, dIr2_dVi2}}; + dependencies[3] = {{0, dIi2_dVr1}, {1, dIi2_dVi1}, {2, dIi2_dVr2}, {3, dIi2_dVi2}}; + + return dependencies; + } }; // class BranchTest } // namespace Testing diff --git a/tests/UnitTests/PhasorDynamics/LoadTests.hpp b/tests/UnitTests/PhasorDynamics/LoadTests.hpp index 3edc90f17..fa302cdfa 100644 --- a/tests/UnitTests/PhasorDynamics/LoadTests.hpp +++ b/tests/UnitTests/PhasorDynamics/LoadTests.hpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -65,6 +66,59 @@ namespace GridKit return success.report(__func__); } + + TestOutcome jacobian() + { + TestStatus success = true; + + real_type R{2.0}; ///< Load resistance + real_type X{4.0}; ///< Load reactance + + Sparse::Variable Vr{10.0}; ///< Bus real voltage + Sparse::Variable Vi{20.0}; ///< Bus imaginary voltage + + Vr.setVariableNumber(0); ///< Independent variables: first + Vi.setVariableNumber(1); ///< Independent variables: second + + PhasorDynamics::BusInfinite bus(Vr, Vi); + + PhasorDynamics::Load load(&bus, R, X); + load.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking + ///< the dependencies + + std::vector residuals{bus.Ir(), bus.Ii()}; + std::vector ref = analyticalJacobian(R, X); + + /// Compare dependencies computed automatically to the ones computed analytically + for (size_t i = 0; i < residuals.size(); ++i) + { + Sparse::Variable res = residuals[i]; + const Sparse::Variable::DependencyMap& dependencies = res.getDependencies(); + success *= (GridKit::Testing::isEqual(dependencies, ref[i])); + } + + return success.report(__func__); + } + + private: + std::vector analyticalJacobian(const real_type R, + const real_type X) + { + const real_type b = -X / (R * R + X * X); + const real_type g = R / (R * R + X * X); + + real_type dIr_dVr = -g; + real_type dIr_dVi = -b; + + real_type dIi_dVr = b; + real_type dIi_dVi = -g; + + std::vector dependencies(2); + dependencies[0] = {{0, dIr_dVr}, {1, dIr_dVi}}; + dependencies[1] = {{0, dIi_dVr}, {1, dIi_dVi}}; + + return dependencies; + } }; } // namespace Testing diff --git a/tests/UnitTests/PhasorDynamics/runBranchTests.cpp b/tests/UnitTests/PhasorDynamics/runBranchTests.cpp index b70a39ff1..123f5d290 100644 --- a/tests/UnitTests/PhasorDynamics/runBranchTests.cpp +++ b/tests/UnitTests/PhasorDynamics/runBranchTests.cpp @@ -11,6 +11,7 @@ int main() result += test.constructor(); result += test.accessors(); result += test.residual(); + result += test.jacobian(); return result.summary(); } diff --git a/tests/UnitTests/PhasorDynamics/runLoadTests.cpp b/tests/UnitTests/PhasorDynamics/runLoadTests.cpp index 7ad3daf0b..41426a820 100644 --- a/tests/UnitTests/PhasorDynamics/runLoadTests.cpp +++ b/tests/UnitTests/PhasorDynamics/runLoadTests.cpp @@ -10,6 +10,7 @@ int main() result += test.constructor(); result += test.residual(); + result += test.jacobian(); return result.summary(); } From 516cb89fc83aa6762c6c210750513ce11512e740 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan <72402802+nkoukpaizan@users.noreply.github.com> Date: Thu, 15 May 2025 17:11:32 -0400 Subject: [PATCH 023/139] Fix load Jacobian (#108) * Fix load Jacobian. * Upgrade base image id to build a new cache. * Spack concretizer unify. * Rename GH CI test. * Create new local-buildcache and push to it. --- .github/workflows/spack_default_build.yaml | 9 +++++---- tests/UnitTests/PhasorDynamics/LoadTests.hpp | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index fcdb28c9b..445dcc88f 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -1,5 +1,5 @@ # https://spack.readthedocs.io/en/latest/binary_caches.html#spack-build-cache-for-github-actions -name: Spack Ubunutu x86_64 Buildcache +name: CPU tests (Ubunutu x86_64) env: SPACK_COLOR: always @@ -7,7 +7,7 @@ env: # Our repo name contains upper case characters, so we can't use ${{ github.repository }} IMAGE_NAME: gridkit USERNAME: gridkit-bot - BASE_VERSION: ubuntu-24.04-fortran-v0.2.11 + BASE_VERSION: ubuntu-24.04-fortran-v0.2.12 # Until we remove the need to clone submodules to build, this should on be in PRs on: [pull_request] @@ -92,7 +92,7 @@ jobs: permissions: packages: write contents: read - timeout-minutes: 30 + timeout-minutes: 60 strategy: matrix: @@ -127,13 +127,14 @@ jobs: specs: - ${{ matrix.spack_spec }} target=x86_64_v2 concretizer: + unify: true reuse: dependencies config: install_tree: root: /opt/spack padded_length: 128 mirrors: - local-buildcache: oci://${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + local-buildcache: oci://${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.BASE_VERSION }} spack: https://binaries.spack.io/v0.23.1 packages: llvm: diff --git a/tests/UnitTests/PhasorDynamics/LoadTests.hpp b/tests/UnitTests/PhasorDynamics/LoadTests.hpp index fa302cdfa..66e7393ce 100644 --- a/tests/UnitTests/PhasorDynamics/LoadTests.hpp +++ b/tests/UnitTests/PhasorDynamics/LoadTests.hpp @@ -108,9 +108,9 @@ namespace GridKit const real_type g = R / (R * R + X * X); real_type dIr_dVr = -g; - real_type dIr_dVi = -b; + real_type dIr_dVi = b; - real_type dIi_dVr = b; + real_type dIi_dVr = -b; real_type dIi_dVi = -g; std::vector dependencies(2); From ae31acb7d9412f1c0275b9756dc63cfb52239a63 Mon Sep 17 00:00:00 2001 From: Steven Roberts Date: Thu, 22 May 2025 09:48:57 -0700 Subject: [PATCH 024/139] SUNDIALS updates (#105) * Improvements for IDA and KINSOL * Remove N_VGetArrayPointer_Serial calls * Resolve t_init_ issue * Add missing N_VDestroy * Apply pre-commmit fixes * Fix some adjoint memory leaks * Remove unused function * Minor suggestions to SUNDIALS interface (#111) - Create "symmetric" functions for creating and deleting SUNDIALS objects. - Modify RL example to test Ida destructor. --------- Co-authored-by: pelesh --------- Co-authored-by: Steven-Roberts Co-authored-by: pelesh Co-authored-by: Nicholson Koukpaizan Co-authored-by: pelesh --- .github/workflows/spack_default_build.yaml | 1 + .../AdjointSensitivity/AdjointSensitivity.cpp | 5 + .../PowerElectronics/RLCircuit/RLCircuit.cpp | 60 +++--- src/Solver/Dynamic/Ida.cpp | 182 ++++++++---------- src/Solver/Dynamic/Ida.hpp | 149 +++++++------- src/Solver/SteadyState/Kinsol.cpp | 88 ++------- src/Solver/SteadyState/Kinsol.hpp | 27 +-- 7 files changed, 215 insertions(+), 297 deletions(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 445dcc88f..18d31a59b 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -101,6 +101,7 @@ jobs: spack_spec: - gridkit@develop +enzyme ^enzyme@0.0.173 + ^sundials@develop steps: - name: Add LLVM diff --git a/examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp b/examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp index bab5f20df..0565734ed 100644 --- a/examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp +++ b/examples/Experimental/AdjointSensitivity/AdjointSensitivity.cpp @@ -138,5 +138,10 @@ int main() std::cout << "The two results differ beyond solver tolerance!\n"; } + delete idas; + delete bus; + delete gen; + delete model; + return retval; } diff --git a/examples/PowerElectronics/RLCircuit/RLCircuit.cpp b/examples/PowerElectronics/RLCircuit/RLCircuit.cpp index 841395c3a..1bea6597b 100644 --- a/examples/PowerElectronics/RLCircuit/RLCircuit.cpp +++ b/examples/PowerElectronics/RLCircuit/RLCircuit.cpp @@ -14,7 +14,7 @@ #include #include -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { double abs_tol = 1.0e-8; double rel_tol = 1.0e-8; @@ -22,7 +22,7 @@ int main(int argc, char const* argv[]) // TODO:setup as named parameters // Create circuit model - auto* sysmodel = new GridKit::PowerElectronicsModel(rel_tol, abs_tol, use_jac); + GridKit::PowerElectronicsModel sysmodel(rel_tol, abs_tol, use_jac); size_t idoff = 0; @@ -32,7 +32,7 @@ int main(int argc, char const* argv[]) double vinit = 1.0; // inductor - GridKit::Inductor* induct = new GridKit::Inductor(idoff, linit); + GridKit::Inductor* induct = new GridKit::Inductor(idoff, linit); // Form index to node uid realations // input induct->setExternalConnectionNodes(0, 1); @@ -41,22 +41,22 @@ int main(int argc, char const* argv[]) // internal induct->setExternalConnectionNodes(2, 2); // add component - sysmodel->addComponent(induct); + sysmodel.addComponent(induct); // resistor idoff++; - GridKit::Resistor* resis = new GridKit::Resistor(idoff, rinit); + GridKit::Resistor* resis = new GridKit::Resistor(idoff, rinit); // Form index to node uid realations // input resis->setExternalConnectionNodes(0, 0); // output resis->setExternalConnectionNodes(1, 1); // add - sysmodel->addComponent(resis); + sysmodel.addComponent(resis); // voltage source idoff++; - GridKit::VoltageSource* vsource = new GridKit::VoltageSource(idoff, vinit); + GridKit::VoltageSource* vsource = new GridKit::VoltageSource(idoff, vinit); // Form index to node uid realations // input vsource->setExternalConnectionNodes(0, -1); @@ -65,54 +65,54 @@ int main(int argc, char const* argv[]) // internal vsource->setExternalConnectionNodes(2, 3); - sysmodel->addComponent(vsource); + sysmodel.addComponent(vsource); - sysmodel->allocate(4); + sysmodel.allocate(4); - std::cout << sysmodel->y().size() << std::endl; + std::cout << sysmodel.y().size() << std::endl; // Grounding for IDA. If no grounding then circuit is \mu > 1 // v_0 (grounded) // Create Intial points - sysmodel->y()[0] = vinit; // v_1 - sysmodel->y()[1] = vinit; // v_2 - sysmodel->y()[2] = 0.0; // i_L - sysmodel->y()[3] = 0.0; // i_s + sysmodel.y()[0] = vinit; // v_1 + sysmodel.y()[1] = vinit; // v_2 + sysmodel.y()[2] = 0.0; // i_L + sysmodel.y()[3] = 0.0; // i_s - sysmodel->yp()[0] = 0.0; // v'_1 - sysmodel->yp()[1] = 0.0; // v'_2 - sysmodel->yp()[2] = -vinit / linit; // i'_s - sysmodel->yp()[3] = -vinit / linit; // i'_L + sysmodel.yp()[0] = 0.0; // v'_1 + sysmodel.yp()[1] = 0.0; // v'_2 + sysmodel.yp()[2] = -vinit / linit; // i'_s + sysmodel.yp()[3] = -vinit / linit; // i'_L - sysmodel->initialize(); - sysmodel->evaluateResidual(); + sysmodel.initialize(); + sysmodel.evaluateResidual(); std::cout << "Verify Intial Resisdual is Zero: {"; - for (double i : sysmodel->getResidual()) + for (double i : sysmodel.getResidual()) { std::cout << i << ", "; } std::cout << "}\n"; - sysmodel->updateTime(0.0, 1.0); - sysmodel->evaluateJacobian(); + sysmodel.updateTime(0.0, 1.0); + sysmodel.evaluateJacobian(); std::cout << "Intial Jacobian with alpha = 1:\n"; - sysmodel->getJacobian().printMatrix(); + sysmodel.getJacobian().printMatrix(); // Create numerical integrator and configure it for the generator model - AnalysisManager::Sundials::Ida* idas = new AnalysisManager::Sundials::Ida(sysmodel); + AnalysisManager::Sundials::Ida idas(&sysmodel); double t_init = 0.0; double t_final = 1.0; // setup simulation - idas->configureSimulation(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); + idas.configureSimulation(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); - idas->runSimulation(t_final); + idas.runSimulation(t_final); - std::vector& yfinial = sysmodel->y(); + std::vector& yfinial = sysmodel.y(); std::cout << "Final Vector y\n"; for (size_t i = 0; i < yfinial.size(); i++) diff --git a/src/Solver/Dynamic/Ida.cpp b/src/Solver/Dynamic/Ida.cpp index 7cce626df..5bde5db44 100644 --- a/src/Solver/Dynamic/Ida.cpp +++ b/src/Solver/Dynamic/Ida.cpp @@ -25,7 +25,6 @@ namespace AnalysisManager retval = SUNContext_Create(SUN_COMM_NULL, &context_); checkOutput(retval, "SUNContext"); solver_ = IDACreate(context_); - tag_ = NULL; } /** @@ -39,22 +38,10 @@ namespace AnalysisManager template Ida::~Ida() { - N_VDestroy(yy_); - N_VDestroy(yp_); - N_VDestroy(yy0_); - N_VDestroy(yp0_); - if (model_->hasJacobian()) - { - SUNLinSolFree_KLU(linearSolver_); - SUNMatDestroy_Sparse(JacobianMat_); - } - else - { - SUNLinSolFree_Dense(linearSolver_); - SUNMatDestroy_Dense(JacobianMat_); - } - ///@todo this free is needed but on geninfbus this seg faults - // IDAFree(&solver_); + deleteQuadrature(); + deleteAdjoint(); + deleteSimulation(); + deleteBackwardSimulation(); SUNContext_Free(&context_); } @@ -79,7 +66,7 @@ namespace AnalysisManager checkAllocation((void*) yp0_, "N_VClone"); // Dummy initial time; will be overridden. - const sunrealtype t0 = SUN_RCONST(0.0); + const real_type t0 = 0.0; // Allocate and initialize IDA workspace retval = IDAInit(solver_, this->Residual, t0, yy_, yp_); @@ -90,8 +77,8 @@ namespace AnalysisManager checkOutput(retval, "IDASetUserData"); // Set tolerances - sunrealtype rel_tol; - sunrealtype abs_tol; + real_type rel_tol; + real_type abs_tol; model_->setTolerances(rel_tol, abs_tol); ///< \todo Function name should be "getTolerances"! retval = IDASStolerances(solver_, rel_tol, abs_tol); @@ -120,9 +107,7 @@ namespace AnalysisManager } // Set up linear solver - this->configureLinearSolver(); - - return retval; + return this->configureLinearSolver(); } template @@ -207,6 +192,27 @@ namespace AnalysisManager return retval; } + /** + * @brief Run the IDA solver on the given model and produce a solution at + * the given final time. + * + * @tparam ScalarT Scalar data type + * @tparam IdxT Matrix and vector index data type + * @param tf The final simulation time. + * @param nout The number of integration segmentstimes. + * @param step_callback An optional callback which, if provided, will be + * called after each time the IDA solver has been invoked with the value + * of `t` that IDA has calculated the last step at. The provided model will + * be updated with the latest values of `y` and `yp` before the callback is + * invoked. + * @return int zero if successful, error code otherwise. + * + * @note The actual time of the final IDA solution should be somewhat + * close to `tf`, however due to rounding error the precise final time may + * be before or after `tf`. + * + * @todo Consider adding initial time as the function argument, as well. + */ template int Ida::runSimulation(real_type tf, int nout, const std::optional> step_callback) { @@ -216,8 +222,8 @@ namespace AnalysisManager real_type dt = (tf - t_init_) / static_cast(nout); real_type tout = t_init_ + dt; - /* In loop, call IDASolve, print results, and test for error. - * Break out of loop when NOUT preset output times have been reached. */ + // In loop, call IDASolve, print results, and test for error. + // Break out of loop when NOUT preset output times have been reached. // printOutput(0.0); while (nout > iout) { @@ -226,8 +232,9 @@ namespace AnalysisManager if (step_callback.has_value()) { - // The callback may try to observe upated values in the model, so we should update them here - // (At this point, the model's values are one internal integrator step out of date) + // The callback may try to observe upated values in the model, so we + // should update them here (At this point, the model's values are one + // internal integrator step out of date) model_->updateTime(tret, 0.0); copyVec(yy_, model_->y()); copyVec(yp_, model_->yp()); @@ -242,7 +249,7 @@ namespace AnalysisManager } } - // Final copy out. No gaurentee last residual evaluation is final step. + // Final copy out. No guarantee last residual evaluation is final step. model_->updateTime(tf, 0.0); copyVec(yy_, model_->y()); copyVec(yp_, model_->yp()); @@ -254,10 +261,14 @@ namespace AnalysisManager template int Ida::deleteSimulation() { - IDAFree(&solver_); - SUNLinSolFree(linearSolver_); N_VDestroy(yy_); N_VDestroy(yp_); + N_VDestroy(tag_); + N_VDestroy(yy0_); + N_VDestroy(yp0_); + SUNLinSolFree(linearSolver_); + SUNMatDestroy(JacobianMat_); + IDAFree(&solver_); return 0; } @@ -295,7 +306,7 @@ namespace AnalysisManager int retval = 0; // Set all quadratures to zero - N_VConst(SUN_RCONST(0.0), q_); + N_VConst(0.0, q_); // Initialize quadratures retval = IDAQuadReInit(solver_, q_); @@ -380,9 +391,9 @@ namespace AnalysisManager template int Ida::initializeBackwardSimulation(real_type tf) { - int retval = 0; - sunrealtype rel_tol; - sunrealtype abs_tol; + int retval = 0; + real_type rel_tol; + real_type abs_tol; model_->initializeAdjoint(); @@ -522,7 +533,19 @@ namespace AnalysisManager } template - int Ida::Residual(sunrealtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void* user_data) + int Ida::deleteBackwardSimulation() + { + N_VDestroy(yyB_); + N_VDestroy(ypB_); + N_VDestroy(qB_); + SUNLinSolFree(linearSolverB_); + SUNMatDestroy(JacobianMatB_); + + return 0; + } + + template + int Ida::Residual(real_type tres, N_Vector yy, N_Vector yp, N_Vector rr, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -538,7 +561,7 @@ namespace AnalysisManager } template - int Ida::Jac(sunrealtype t, sunrealtype cj, N_Vector yy, N_Vector yp, N_Vector resvec, SUNMatrix J, void* user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) + int Ida::Jac(real_type t, real_type cj, N_Vector yy, N_Vector yp, N_Vector, SUNMatrix J, void* user_data, N_Vector, N_Vector, N_Vector) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -561,25 +584,19 @@ namespace AnalysisManager // Set row pointers sunindextype* rowptrs = SUNSparseMatrix_IndexPointers(J); - for (unsigned int i = 0; i < csrrowdata.size(); i++) - { - rowptrs[i] = csrrowdata[i]; - } + std::copy(csrrowdata.cbegin(), csrrowdata.cend(), rowptrs); sunindextype* colvals = SUNSparseMatrix_IndexValues(J); - sunrealtype* data = SUNSparseMatrix_Data(J); + real_type* data = SUNSparseMatrix_Data(J); // Copy data from model jac to sundials - for (unsigned int i = 0; i < c.size(); i++) - { - colvals[i] = c[i]; - data[i] = val[i]; - } + std::copy(c.cbegin(), c.cend(), colvals); + std::copy(val.cbegin(), val.cend(), data); return 0; } template - int Ida::Integrand(sunrealtype tt, N_Vector yy, N_Vector yp, N_Vector rhsQ, void* user_data) + int Ida::Integrand(real_type tt, N_Vector yy, N_Vector yp, N_Vector rhsQ, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -595,7 +612,7 @@ namespace AnalysisManager } template - int Ida::adjointResidual(sunrealtype tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rrB, void* user_data) + int Ida::adjointResidual(real_type tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rrB, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -613,7 +630,7 @@ namespace AnalysisManager } template - int Ida::adjointIntegrand(sunrealtype tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rhsQB, void* user_data) + int Ida::adjointIntegrand(real_type tt, N_Vector yy, N_Vector yp, N_Vector yyB, N_Vector ypB, N_Vector rhsQB, void* user_data) { GridKit::Model::Evaluator* model = static_cast*>(user_data); @@ -633,41 +650,29 @@ namespace AnalysisManager template void Ida::copyVec(const N_Vector x, std::vector& y) { - const ScalarT* xdata = NV_DATA_S(x); - for (unsigned int i = 0; i < y.size(); ++i) - { - y[i] = xdata[i]; - } + const ScalarT* xdata = N_VGetArrayPointer(x); + std::copy_n(xdata, y.size(), y.begin()); } template void Ida::copyVec(const std::vector& x, N_Vector y) { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - ydata[i] = x[i]; - } + ScalarT* ydata = N_VGetArrayPointer(y); + std::copy(x.cbegin(), x.cend(), ydata); } template void Ida::copyVec(const std::vector& x, N_Vector y) { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - if (x[i]) - ydata[i] = 1.0; - else - ydata[i] = 0.0; - } + ScalarT* ydata = N_VGetArrayPointer(y); + std::copy(x.cbegin(), x.cend(), ydata); } template - void Ida::printOutput(sunrealtype t) + void Ida::printOutput(real_type t) { - sunrealtype* yval = N_VGetArrayPointer_Serial(yy_); - sunrealtype* ypval = N_VGetArrayPointer_Serial(yp_); + real_type* yval = N_VGetArrayPointer(yy_); + real_type* ypval = N_VGetArrayPointer(yp_); std::cout << std::setprecision(5) << std::setw(7) << t << " "; for (IdxT i = 0; i < model_->size(); ++i) @@ -682,10 +687,10 @@ namespace AnalysisManager } template - void Ida::printSpecial(sunrealtype t, N_Vector y) + void Ida::printSpecial(real_type t, N_Vector y) { - sunrealtype* yval = N_VGetArrayPointer_Serial(y); - IdxT N = static_cast(N_VGetLength_Serial(y)); + real_type* yval = N_VGetArrayPointer(y); + IdxT N = static_cast(N_VGetLength(y)); std::cout << "{"; std::cout << std::setprecision(5) << std::setw(7) << t; for (IdxT i = 0; i < N; ++i) @@ -698,35 +703,8 @@ namespace AnalysisManager template void Ida::printFinalStats() { - int retval = 0; - void* mem = solver_; - long int nst; - long int nre; - long int nje; - long int nni; - long int netf; - long int ncfn; - - retval = IDAGetNumSteps(mem, &nst); - checkOutput(retval, "IDAGetNumSteps"); - retval = IDAGetNumResEvals(mem, &nre); - checkOutput(retval, "IDAGetNumResEvals"); - retval = IDAGetNumJacEvals(mem, &nje); - checkOutput(retval, "IDAGetNumJacEvals"); - retval = IDAGetNumNonlinSolvIters(mem, &nni); - checkOutput(retval, "IDAGetNumNonlinSolvIters"); - retval = IDAGetNumErrTestFails(mem, &netf); - checkOutput(retval, "IDAGetNumErrTestFails"); - retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn); - checkOutput(retval, "IDAGetNumNonlinSolvConvFails"); - - // std::cout << "\nFinal Run Statistics: \n\n"; - std::cout << "Number of steps = " << nst << "\n"; - std::cout << "Number of residual evaluations = " << nre << "\n"; - // std::cout << "Number of Jacobian evaluations = " << nje << "\n"; - std::cout << "Number of nonlinear iterations = " << nni << "\n"; - std::cout << "Number of error test failures = " << netf << "\n"; - std::cout << "Number of nonlinear conv. failures = " << ncfn << "\n"; + int retval = IDAPrintAllStats(solver_, stdout, SUN_OUTPUTFORMAT_TABLE); + checkOutput(retval, "IDAPrintAllStats"); } template diff --git a/src/Solver/Dynamic/Ida.hpp b/src/Solver/Dynamic/Ida.hpp index e6d07f579..cd42fe232 100644 --- a/src/Solver/Dynamic/Ida.hpp +++ b/src/Solver/Dynamic/Ida.hpp @@ -36,18 +36,6 @@ namespace AnalysisManager int setIntegrationTime(real_type t_init, real_type t_final, int nout); int initializeSimulation(real_type t0, bool findConsistent = false); - /// @brief Run the IDA solver on the given model and produce a solution at the given final time. - /// @attention `Ida::initializeSimulation` must be called with the initial time (and to find consistent - /// initial conditions if needed) before calling `runSimulation`. - /// @param tf The final time, used to calculate the size of each step IDA should take. The actual time - /// of the final IDA solution should be somewhat close to `tf`, however due to rounding error - /// the precise final time may be before or after `tf`. - /// - /// @param nout The number of times the IDA integrator should be invoked to calculate the solution at `tf`. - /// - /// @param step_callback An optional callback which, if provided, will be called after each time the IDA solver has - /// been invoked with the value of `t` that IDA has calculated the last step at. The provided - /// model will be updated with the latest values of `y` and `yp` before the callback is invoked. int runSimulation(real_type tf, int nout = 1, std::optional> step_callback = {}); int deleteSimulation(); @@ -63,6 +51,7 @@ namespace AnalysisManager int runForwardSimulation(real_type tf, int nout = 1); int runBackwardSimulation(real_type t0); int deleteAdjoint(); + int deleteBackwardSimulation(); int saveInitialCondition() { @@ -95,93 +84,93 @@ namespace AnalysisManager const real_type* getIntegral() const { - return NV_DATA_S(q_); + return N_VGetArrayPointer(q_); } real_type* getIntegral() { - return NV_DATA_S(q_); + return N_VGetArrayPointer(q_); } const real_type* getAdjointIntegral() const { - return NV_DATA_S(qB_); + return N_VGetArrayPointer(qB_); } real_type* getAdjointIntegral() { - return NV_DATA_S(qB_); + return N_VGetArrayPointer(qB_); } - void printOutput(sunrealtype t); - void printSpecial(sunrealtype t, N_Vector x); + void printOutput(real_type t); + void printSpecial(real_type t, N_Vector x); void printFinalStats(); private: - static int Residual(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector rr, - void* user_data); - - static int Jac(sunrealtype t, - sunrealtype cj, - N_Vector yy, - N_Vector yp, - N_Vector resvec, - SUNMatrix J, - void* user_data, - N_Vector tmp1, - N_Vector tmp2, - N_Vector tmp3); - - static int Integrand(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector rhsQ, - void* user_data); - - static int adjointResidual(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector yyB, - N_Vector ypB, - N_Vector rrB, - void* user_data); - - static int adjointIntegrand(sunrealtype t, - N_Vector yy, - N_Vector yp, - N_Vector yyB, - N_Vector ypB, - N_Vector rhsQB, - void* user_data); + static int Residual(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector rr, + void* user_data); + + static int Jac(real_type t, + real_type cj, + N_Vector yy, + N_Vector yp, + N_Vector resvec, + SUNMatrix J, + void* user_data, + N_Vector tmp1, + N_Vector tmp2, + N_Vector tmp3); + + static int Integrand(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector rhsQ, + void* user_data); + + static int adjointResidual(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector yyB, + N_Vector ypB, + N_Vector rrB, + void* user_data); + + static int adjointIntegrand(real_type t, + N_Vector yy, + N_Vector yp, + N_Vector yyB, + N_Vector ypB, + N_Vector rhsQB, + void* user_data); private: - void* solver_; - SUNContext context_; - SUNMatrix JacobianMat_; - SUNMatrix JacobianMatB_; - SUNLinearSolver linearSolver_; - SUNLinearSolver linearSolverB_; - - real_type t_init_; - real_type t_final_; - int nout_; ///< Number of integration outputs - - N_Vector yy_; ///< Solution vector - N_Vector yp_; ///< Solution derivatives vector - N_Vector tag_; ///< Tags differential variables - N_Vector q_; ///< Integrand vector - - N_Vector yy0_; ///< Storage for initial values - N_Vector yp0_; ///< Storage for initial derivatives - - N_Vector yyB_; ///< Adjoint solution vector - N_Vector ypB_; ///< Adjoint solution derivatives vector - N_Vector qB_; ///< Backward integrand vector - - int backwardID_; + void* solver_{}; + SUNContext context_{}; + SUNMatrix JacobianMat_{}; + SUNMatrix JacobianMatB_{}; + SUNLinearSolver linearSolver_{}; + SUNLinearSolver linearSolverB_{}; + + real_type t_init_{}; + real_type t_final_{}; + int nout_{}; ///< Number of integration outputs + + N_Vector yy_{}; ///< Solution vector + N_Vector yp_{}; ///< Solution derivatives vector + N_Vector tag_{}; ///< Tags differential variables + N_Vector q_{}; ///< Integrand vector + + N_Vector yy0_{}; ///< Storage for initial values + N_Vector yp0_{}; ///< Storage for initial derivatives + + N_Vector yyB_{}; ///< Adjoint solution vector + N_Vector ypB_{}; ///< Adjoint solution derivatives vector + N_Vector qB_{}; ///< Backward integrand vector + + int backwardID_{}; private: // static void copyMat(Model::Evaluator::Mat& J, SlsMat Jida); diff --git a/src/Solver/SteadyState/Kinsol.cpp b/src/Solver/SteadyState/Kinsol.cpp index ef39bf04e..67f33982d 100644 --- a/src/Solver/SteadyState/Kinsol.cpp +++ b/src/Solver/SteadyState/Kinsol.cpp @@ -37,23 +37,14 @@ namespace AnalysisManager checkOutput(retval, "SUNContext"); solver_ = KINCreate(context_); - tag_ = NULL; } template Kinsol::~Kinsol() { + deleteSimulation(); SUNContext_Free(&context_); - KINFree(&solver_); - - N_VDestroy_Serial(this->yy_); - N_VDestroy_Serial(this->yy0_); - N_VDestroy_Serial(this->scale_); - - SUNMatDestroy(this->JacobianMat_); - SUNLinSolFree_Dense(this->linearSolver_); - - solver_ = 0; + solver_ = nullptr; } template @@ -93,16 +84,7 @@ namespace AnalysisManager checkOutput(retval, "KINSetScaledStepTol"); // Set up linear solver - JacobianMat_ = SUNDenseMatrix(model_->size(), model_->size(), context_); - checkAllocation((void*) JacobianMat_, "SUNDenseMatrix"); - - linearSolver_ = SUNLinSol_Dense(yy_, JacobianMat_, context_); - checkAllocation((void*) linearSolver_, "SUNLinSol_Dense"); - - retval = KINSetLinearSolver(solver_, linearSolver_, JacobianMat_); - checkOutput(retval, "KINSetLinearSolver"); - - return retval; + return this->configureLinearSolver(); } template @@ -148,10 +130,12 @@ namespace AnalysisManager template int Kinsol::deleteSimulation() { - SUNLinSolFree(linearSolver_); KINFree(&solver_); - N_VDestroy(yy_); - N_VDestroy(scale_); + N_VDestroy(this->yy_); + N_VDestroy(this->yy0_); + N_VDestroy(this->scale_); + SUNMatDestroy(this->JacobianMat_); + SUNLinSolFree_Dense(this->linearSolver_); return 0; } @@ -173,40 +157,21 @@ namespace AnalysisManager template void Kinsol::copyVec(const N_Vector x, std::vector& y) { - const ScalarT* xdata = NV_DATA_S(x); - for (unsigned int i = 0; i < y.size(); ++i) - { - y[i] = xdata[i]; - } + const ScalarT* xdata = N_VGetArrayPointer(x); + std::copy_n(xdata, y.size(), y.begin()); } template void Kinsol::copyVec(const std::vector& x, N_Vector y) { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - ydata[i] = x[i]; - } - } - - template - void Kinsol::copyVec(const std::vector& x, N_Vector y) - { - ScalarT* ydata = NV_DATA_S(y); - for (unsigned int i = 0; i < x.size(); ++i) - { - if (x[i]) - ydata[i] = 1.0; - else - ydata[i] = 0.0; - } + ScalarT* ydata = N_VGetArrayPointer(y); + std::copy_n(x.cbegin(), x.size(), ydata); } template void Kinsol::printOutput() { - sunrealtype* yval = N_VGetArrayPointer_Serial(yy_); + sunrealtype* yval = N_VGetArrayPointer(yy_); std::cout << std::setprecision(5) << std::setw(7); for (IdxT i = 0; i < model_->size(); ++i) @@ -220,7 +185,7 @@ namespace AnalysisManager void Kinsol::printSpecial(sunrealtype t, N_Vector y) { sunrealtype* yval = N_VGetArrayPointer_Serial(y); - IdxT N = N_VGetLength_Serial(y); + IdxT N = static_cast(N_VGetLength_Serial(y)); std::cout << "{"; std::cout << std::setprecision(5) << std::setw(7) << t; for (IdxT i = 0; i < N; ++i) @@ -233,29 +198,8 @@ namespace AnalysisManager template void Kinsol::printFinalStats() { - int retval = 0; - void* mem = solver_; - long int nni; - long int nfe; - long int nje; - long int nlfe; - - // retval = KINGetNumSteps(mem, &nst); - // checkOutput(retval, "KINGetNumSteps"); - retval = KINGetNumNonlinSolvIters(mem, &nni); - checkOutput(retval, "KINGetNumNonlinSolvIters"); - retval = KINGetNumFuncEvals(mem, &nfe); - checkOutput(retval, "KINGetNumFuncEvals"); - retval = KINGetNumJacEvals(mem, &nje); - checkOutput(retval, "KINGetNumJacEvals"); - retval = KINGetNumLinFuncEvals(mem, &nlfe); - checkOutput(retval, "KINGetNumLinFuncEvals"); - - // std::cout << "\nFinal Run Statistics: \n\n"; - std::cout << "Number of nonlinear iterations = " << nni << "\n"; - std::cout << "Number of function evaluations = " << nfe << "\n"; - std::cout << "Number of Jacobian evaluations = " << nje << "\n"; - std::cout << "Number of linear function evals. = " << nlfe << "\n"; + int retval = KINPrintAllStats(solver_, stdout, SUN_OUTPUTFORMAT_TABLE); + checkOutput(retval, "IDAPrintAllStats"); } template diff --git a/src/Solver/SteadyState/Kinsol.hpp b/src/Solver/SteadyState/Kinsol.hpp index b4cb190a2..c43feaee8 100644 --- a/src/Solver/SteadyState/Kinsol.hpp +++ b/src/Solver/SteadyState/Kinsol.hpp @@ -31,6 +31,8 @@ namespace AnalysisManager typedef typename GridKit::ScalarTraits::real_type real_type; + static_assert(std::is_same_v, "real_type must be the same type as sunrealtype"); + public: Kinsol(GridKit::Model::Evaluator* model); ~Kinsol(); @@ -85,22 +87,22 @@ namespace AnalysisManager // const real_type* getIntegral() const // { - // return NV_DATA_S(q_); + // return N_VGetArrayPointer(q_); // } // real_type* getIntegral() // { - // return NV_DATA_S(q_); + // return N_VGetArrayPointer(q_); // } // const real_type* getAdjointIntegral() const // { - // return NV_DATA_S(qB_); + // return N_VGetArrayPointer(qB_); // } // real_type* getAdjointIntegral() // { - // return NV_DATA_S(qB_); + // return N_VGetArrayPointer(qB_); // } void printOutput(); @@ -125,17 +127,16 @@ namespace AnalysisManager // N_Vector rhsQB, void *user_data); private: - void* solver_; - SUNContext context_; - SUNMatrix JacobianMat_; - SUNLinearSolver linearSolver_; + void* solver_{}; + SUNContext context_{}; + SUNMatrix JacobianMat_{}; + SUNLinearSolver linearSolver_{}; - N_Vector yy_; ///< Solution vector - N_Vector scale_; ///< Scaling vector - N_Vector tag_; ///< Tags differential variables - N_Vector q_; ///< Integrand vector + N_Vector yy_{}; ///< Solution vector + N_Vector scale_{}; ///< Scaling vector + N_Vector q_{}; ///< Integrand vector - N_Vector yy0_; ///< Storage for initial values + N_Vector yy0_{}; ///< Storage for initial values private: // static void copyMat(Model::Evaluator::Mat& J, SlsMat Jida); From b38b38ad8d83bdbf049fe0009770d9c29799e3f6 Mon Sep 17 00:00:00 2001 From: pelesh Date: Fri, 23 May 2025 12:22:15 -0400 Subject: [PATCH 025/139] Refactor examples (#110) * Separate MatPower from other test utilities. * Update figure path in power flow example README file. * Fix warning coming from Variable class. * Fix warnings in Matpower tests. * Reduce output from phasor dynamics Example 1 * Minor fixes to DG and microgrid examples. --------- Co-authored-by: pelesh --- examples/PhasorDynamics/Example1/example1.cpp | 40 +++- examples/PhasorDynamics/Example2/example2.cpp | 2 +- .../DistributedGeneratorTest/DGTest.cpp | 27 ++- .../PowerElectronics/Microgrid/Microgrid.cpp | 63 +++-- .../ScaleMicrogrid/ScaleMicrogrid.cpp | 2 +- examples/PowerFlow/Grid3Bus/README.md | 2 +- .../MatPowerTesting/MatPowerTesting.hpp | 218 ++++++++++++++++++ .../MatPowerTesting/test_parse_branch_row.cpp | 4 +- .../MatPowerTesting/test_parse_bus_row.cpp | 4 +- .../MatPowerTesting/test_parse_gen_row.cpp | 4 +- .../test_parse_gencost_row.cpp | 4 +- .../MatPowerTesting/test_parse_matpower.cpp | 4 +- .../SparsityPattern/Variable.hpp | 2 +- src/Model/PowerFlow/Branch/Branch.hpp | 2 +- .../PowerFlow/Generator/GeneratorSlack.cpp | 2 +- src/Model/PowerFlow/MiniGrid/MiniGrid.hpp | 2 +- src/Model/PowerFlow/SystemModelPowerFlow.hpp | 2 +- src/PowerSystemData.hpp | 2 +- src/Utilities/FileIO.hpp | 2 +- src/Utilities/Testing.hpp | 214 +---------------- 20 files changed, 336 insertions(+), 266 deletions(-) create mode 100644 examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp diff --git a/examples/PhasorDynamics/Example1/example1.cpp b/examples/PhasorDynamics/Example1/example1.cpp index 9c9980444..e4f1fef6f 100644 --- a/examples/PhasorDynamics/Example1/example1.cpp +++ b/examples/PhasorDynamics/Example1/example1.cpp @@ -126,6 +126,7 @@ int main() double stop = static_cast(clock()); double error_V = 0.0; // error in |V| + double error_w = 0.0; // error in rotor speed // Read through the simulation data stored in the buffer. // Since we captured by reference, output should be available @@ -141,22 +142,37 @@ int main() if (err > error_V) error_V = err; - std::cout << "GridKit: t = " << data.ti - << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - << ", w = " << (1.0 + data.dw) << "\n"; - std::cout << "Ref : t = " << ref_sol[0] - << ", |V| = " << ref_sol[2] - << ", w = " << ref_sol[1] - << "\n"; - std::cout << "Error in |V| = " - << err - << "\n"; - std::cout << "\n"; + err = std::abs(1.0 + data.dw - ref_sol[1]) / (1.0 + ref_sol[1]); + if (err > error_w) + error_w = err; + + // // Optional output + // std::cout << "GridKit: t = " << data.ti + // << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) + // << ", w = " << (1.0 + data.dw) << "\n"; + // std::cout << "Ref : t = " << ref_sol[0] + // << ", |V| = " << ref_sol[2] + // << ", w = " << ref_sol[1] + // << "\n"; + // std::cout << "Error in |V| = " + // << err + // << "\n"; + // std::cout << "\n"; } + double error_V_allowed = 2e-4; + double error_w_allowed = 1e-4; + + // Tolerances based on Powerworld reference accuracy int status = 0; std::cout << "Max error in |V| = " << error_V << "\n"; - if (error_V > 2e-4) + if (error_V > error_V_allowed) + { + std::cout << "Test failed with error too large!\n"; + status = 1; + } + std::cout << "Max error in w = " << error_w << "\n"; + if (error_w > error_w_allowed) { std::cout << "Test failed with error too large!\n"; status = 1; diff --git a/examples/PhasorDynamics/Example2/example2.cpp b/examples/PhasorDynamics/Example2/example2.cpp index a04103ca7..f661d96c3 100644 --- a/examples/PhasorDynamics/Example2/example2.cpp +++ b/examples/PhasorDynamics/Example2/example2.cpp @@ -183,7 +183,7 @@ int main() } // fileout.close(); - std::cout << "Worst error " << worst_error + std::cout << "Max error " << worst_error << " at time t = " << worst_error_time << "\n"; std::cout << "\n\nComplete in " << (stop - start) / CLOCKS_PER_SEC << " seconds\n"; diff --git a/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp b/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp index 28d0801b0..483c3e39b 100644 --- a/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp +++ b/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp @@ -16,7 +16,7 @@ * @param argv * @return int */ -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { GridKit::DistributedGeneratorParameters parms; @@ -49,12 +49,12 @@ int main(int argc, char const* argv[]) dg->evaluateResidual(); - std::cout << "Output: {"; - for (double i : dg->getResidual()) - { - printf("%e ,", i); - } - std::cout << "}\n"; + // std::cout << "Output: {"; + // for (double i : dg->getResidual()) + // { + // printf("%e ,", i); + // } + // std::cout << "}\n"; // Generated from matlab code with same parameters and inputs std::vector true_vec{3.141592277589793e+02, @@ -74,11 +74,20 @@ int main(int argc, char const* argv[]) 3.337988298081817e+03, 2.684419146397466e+03}; - std::cout << "Test the Relative Error\n"; + std::cout << "Testing the DistributedGenerator model ...\n"; + double error_allowed = 10 * std::numeric_limits::epsilon(); for (size_t i = 0; i < true_vec.size(); i++) { - printf("%e ,\n", (true_vec[i] - dg->getResidual()[i]) / true_vec[i]); + double error = std::abs(true_vec[i] - dg->getResidual()[i]) / std::abs(1.0 + true_vec[i]); + if (error > error_allowed) + { + std::cout << "Model error for equation " << i << " is: " << error << "\n"; + std::cout << "Maximum allowed error is: " << error_allowed << "\n"; + std::cout << "Test FAILED!\n"; + return 1; + } } + std::cout << "Test successful!\n"; return 0; } diff --git a/examples/PowerElectronics/Microgrid/Microgrid.cpp b/examples/PowerElectronics/Microgrid/Microgrid.cpp index 3ea4c8034..5ca5f35c3 100644 --- a/examples/PowerElectronics/Microgrid/Microgrid.cpp +++ b/examples/PowerElectronics/Microgrid/Microgrid.cpp @@ -15,16 +15,17 @@ #include #include -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { - ///@todo Needs to be modified. Some components are small relative to others thus there error is high (or could be matlab vector issue) + /// @todo Needs to be modified. Some components are small relative to others thus + /// there error is high (or could be matlab vector issue) double abs_tol = 1.0e-8; double rel_tol = 1.0e-8; - size_t max_step_amount = 3000; + size_t max_step_number = 3000; bool use_jac = true; // Create model - GridKit::PowerElectronicsModel* sysmodel = new GridKit::PowerElectronicsModel(rel_tol, abs_tol, use_jac, max_step_amount); + auto* sysmodel = new GridKit::PowerElectronicsModel(rel_tol, abs_tol, use_jac, max_step_number); // Modeled after the problem in the paper double RN = 1.0e4; @@ -315,20 +316,21 @@ int main(int argc, char const* argv[]) sysmodel->initialize(); sysmodel->evaluateResidual(); - std::vector& fres = sysmodel->getResidual(); - std::cout << "Verify Intial Resisdual is Zero: {\n"; - for (size_t i = 0; i < fres.size(); i++) - { - printf("%lu : %e \n", i, fres[i]); - } - std::cout << "}\n"; + // // Optional debugging output + // std::vector& fres = sysmodel->getResidual(); + // std::cout << "Verify Intial Resisdual is Zero: {\n"; + // for (size_t i = 0; i < fres.size(); i++) + // { + // printf("%lu : %e \n", i, fres[i]); + // } + // std::cout << "}\n"; sysmodel->updateTime(0.0, 1.0e-8); sysmodel->evaluateJacobian(); std::cout << "Intial Jacobian with alpha:\n"; // Create numerical integrator and configure it for the generator model - AnalysisManager::Sundials::Ida* idas = new AnalysisManager::Sundials::Ida(sysmodel); + auto* idas = new AnalysisManager::Sundials::Ida(sysmodel); double t_init = 0.0; double t_final = 1.0; @@ -342,13 +344,14 @@ int main(int argc, char const* argv[]) std::vector& yfinial = sysmodel->y(); - std::cout << "Final Vector y\n"; - for (size_t i = 0; i < yfinial.size(); i++) - { - std::cout << yfinial[i] << "\n"; - } + // // Optional debugging output + // std::cout << "Final Vector y\n"; + // for (size_t i = 0; i < yfinial.size(); i++) + // { + // std::cout << yfinial[i] << "\n"; + // } - // Generate from MATLAB code ODE form with tolerances of 1e-12 + // Generated from MATLAB code ODE form with tolerances of 1e-12 std::vector true_vec{ 2.297543153595780e+04, 1.275311524125022e+04, @@ -421,11 +424,31 @@ int main(int argc, char const* argv[]) 3.604108939430972e+02, -3.492842627398574e+01}; - std::cout << "Test the Relative Error\n"; + // std::cout << "Test the Relative Error\n"; + // for (size_t i = 0; i < true_vec.size(); i++) + // { + // printf("%lu : %e ,\n", i, abs(true_vec[i] - yfinial[i]) / abs(true_vec[i])); + // } + + std::cout << "Testing the DistributedGenerator model ...\n"; + double error_allowed = 1e-4; + double max_error = 0.0; for (size_t i = 0; i < true_vec.size(); i++) { - printf("%lu : %e ,\n", i, abs(true_vec[i] - yfinial[i]) / abs(true_vec[i])); + double error = std::abs(true_vec[i] - yfinial[i]) / std::abs(1.0 + true_vec[i]); + if (error > max_error) + max_error = error; + if (error > error_allowed) + { + std::cout << "Model error for equation " << i << " is: " << error << "\n"; + std::cout << "Maximum allowed error is: " << error_allowed << "\n"; + std::cout << "Test FAILED!\n"; + return 1; + } } + std::cout << "Max error = " << max_error << "\n"; + std::cout << "Allowed error = " << error_allowed << "\n"; + std::cout << "Test successful!\n"; delete idas; delete sysmodel; diff --git a/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp b/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp index 1568fda8b..9864235a7 100644 --- a/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp +++ b/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp @@ -31,7 +31,7 @@ static int test(index_type Nsize, real_type test_tolerance, bool error_tol = fal * @param argv unsued * @return int */ -int main(int argc, char const* argv[]) +int main(int /* argc */, char const** /* argv */) { int retval = 0; bool debug_out = false; diff --git a/examples/PowerFlow/Grid3Bus/README.md b/examples/PowerFlow/Grid3Bus/README.md index 31bd6f9bc..edf4d82ea 100644 --- a/examples/PowerFlow/Grid3Bus/README.md +++ b/examples/PowerFlow/Grid3Bus/README.md @@ -10,7 +10,7 @@ The mathematical model of the power flow problem is formulated as a set of nonli The model and its parameters are described in Figure 1:
- + Figure 1: A simple 3-bus grid example. diff --git a/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp new file mode 100644 index 000000000..1da0e95ce --- /dev/null +++ b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp @@ -0,0 +1,218 @@ +/** + * @file MatPowerTesting.hpp + * @author Slaven Peles + * + * Contains utilities for testing Matpower parser for GridKit. + * + */ +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace +{ + + static constexpr double tol_ = 1e-8; + + inline std::ostream& errs() + { + std::cerr << "[examples/PowerFlow/MatPowerTesting.hpp]: "; + return std::cerr; + } + +} // namespace + +namespace GridKit +{ + namespace Testing + { + + template + inline bool isEqual(PowerSystemData::GenCostData a, + PowerSystemData::GenCostData b, + RealT tol = tol_) + { + (void) tol; // suppress warning + int fail = 0; + fail += a.kind != b.kind; + fail += a.startup != b.startup; + fail += a.shutdown != b.shutdown; + fail += a.n != b.n; + if (fail) + { + errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); + } + return fail == 0; + } + + template + inline bool isEqual(PowerSystemData::GenData a, + PowerSystemData::GenData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.bus != b.bus; + fail += !isEqual(a.Pg, b.Pg, tol); + fail += !isEqual(a.Qg, b.Qg, tol); + fail += !isEqual(a.Qmax, b.Qmax, tol); + fail += !isEqual(a.Qmin, b.Qmin, tol); + fail += !isEqual(a.Vg, b.Vg, tol); + fail += a.mBase != b.mBase; + fail += a.status != b.status; + fail += a.Pmax != b.Pmax; + fail += a.Pmin != b.Pmin; + fail += a.Pc1 != b.Pc1; + fail += a.Pc2 != b.Pc2; + fail += a.Qc1min != b.Qc1min; + fail += a.Qc1max != b.Qc1max; + fail += a.Qc2min != b.Qc2min; + fail += a.Qc2max != b.Qc2max; + fail += a.ramp_agc != b.ramp_agc; + fail += a.ramp_10 != b.ramp_10; + fail += a.ramp_30 != b.ramp_30; + fail += a.ramp_q != b.ramp_q; + fail += a.apf != b.apf; + + if (fail) + { + errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); + } + return fail == 0; + } + + template + inline bool isEqual(PowerSystemData::BusData a, + PowerSystemData::BusData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.bus_i != b.bus_i; + fail += a.type != b.type; + fail += a.Gs != b.Gs; + fail += a.Bs != b.Bs; + fail += a.area != b.area; + fail += !isEqual(a.Vm, b.Vm, tol); + fail += !isEqual(a.Va, b.Va, tol); + fail += a.baseKV != b.baseKV; + fail += a.zone != b.zone; + fail += !isEqual(a.Vmax, b.Vmax, tol); + fail += !isEqual(a.Vmin, b.Vmin, tol); + + if (fail) + { + errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" + << "type: a=" << a.type << ", b=" << b.type << "\n" + << "Gs: a=" << a.Gs << ", b=" << b.Gs << "\n" + << "Bs: a=" << a.Bs << ", b=" << b.Bs << "\n" + << "area: a=" << a.area << ", b=" << b.area << "\n" + << "Vm: a=" << a.Vm << ", b=" << b.Vm << "\n" + << "Va: a=" << a.Va << ", b=" << b.Va << "\n" + << "baseKV: a=" << a.baseKV << ", b=" << b.baseKV << "\n" + << "zone: a=" << a.zone << ", b=" << b.zone << "\n" + << "Vmax: a=" << a.Vmax << ", b=" << b.Vmax << "\n" + << "Vmin: a=" << a.Vmin << ", b=" << b.Vmin << "\n"; + } + return fail == 0; + } + + template + inline bool isEqual(PowerSystemData::LoadData a, + PowerSystemData::LoadData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.bus_i != b.bus_i; + fail += !isEqual(a.Pd, b.Pd, tol); + fail += !isEqual(a.Qd, b.Qd, tol); + + if (fail) + { + errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" + << "Pd: a=" << a.Pd << ", b=" << b.Pd << "\n" + << "Qd: a=" << a.Qd << ", b=" << b.Qd << "\n"; + } + return fail == 0; + } + + template + inline bool isEqual(PowerSystemData::BranchData a, + PowerSystemData::BranchData b, + RealT tol = tol_) + { + int fail = 0; + + fail += a.fbus != b.fbus; + fail += a.tbus != b.tbus; + fail += !isEqual(a.r, b.r, tol); + fail += !isEqual(a.x, b.x, tol); + fail += !isEqual(a.b, b.b, tol); + fail += a.rateA != b.rateA; + fail += a.rateB != b.rateB; + fail += a.rateC != b.rateC; + fail += a.ratio != b.ratio; + fail += a.angle != b.angle; + fail += a.status != b.status; + fail += a.angmin != b.angmin; + fail += a.angmax != b.angmax; + + if (fail) + { + errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); + } + return fail == 0; + } + + template + inline bool isEqual(std::vector a, std::vector b, double tol = tol_) + { + if (a.size() != b.size()) + throw std::runtime_error([&] + { + std::stringstream errs; + errs << "Containers do not have the same size!\n" + << "\tGot a.size() == " << a.size() << "\n" + << "\tGot b.size() == " << b.size() << "\n"; + return errs.str(); }()); + + int fail = 0; + for (std::size_t i = 0; i < a.size(); i++) + { + if (!isEqual(a[i], b[i], tol)) + { + fail++; + errs() << "[isEqual>]: Got failure with i=" << i << ".\n"; + } + } + + return fail == 0; + } + + template + inline bool isEqual(PowerSystemData::SystemModelData a, + PowerSystemData::SystemModelData b) + { + int fail = 0; + + fail += a.version != b.version; + fail += a.baseMVA != b.baseMVA; + fail += !isEqual(a.bus, b.bus); + fail += !isEqual(a.gen, b.gen); + fail += !isEqual(a.gencost, b.gencost); + fail += !isEqual(a.branch, b.branch); + fail += !isEqual(a.load, b.load); + + return fail == 0; + } + + } // namespace Testing + +} // namespace GridKit diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp index f6bb3c0d1..e5ff203f0 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp @@ -1,8 +1,8 @@ #include +#include "MatPowerTesting.hpp" #include #include -#include using namespace GridKit; using namespace GridKit::Testing; @@ -33,7 +33,7 @@ mpc.branch = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> branch_answer{ diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp index 92c1062cc..60a7c9146 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp @@ -1,8 +1,8 @@ #include +#include "MatPowerTesting.hpp" #include #include -#include using namespace GridKit; using namespace GridKit::Testing; @@ -28,7 +28,7 @@ mpc.bus = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> bus_answer{ diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp index 63a1d5501..45ce4a185 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp @@ -1,8 +1,8 @@ #include +#include "MatPowerTesting.hpp" #include #include -#include using namespace GridKit; using namespace GridKit::Testing; @@ -30,7 +30,7 @@ mpc.gen = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> gen_answer{ diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp index adddc1edb..e1b9e0610 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp @@ -1,8 +1,8 @@ #include +#include "MatPowerTesting.hpp" #include #include -#include using namespace GridKit; using namespace GridKit::Testing; @@ -33,7 +33,7 @@ mpc.gencost = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; std::vector> gencost_answer{ diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp index 2994804b5..fb5bd196e 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp @@ -1,8 +1,8 @@ #include +#include "MatPowerTesting.hpp" #include #include -#include using namespace GridKit; using namespace GridKit::Testing; @@ -83,7 +83,7 @@ mpc.gencost = [ } // namespace -int main(int argc, char** argv) +int main(int /* argc */, char** /* argv */) { int fail = 0; diff --git a/src/LinearAlgebra/SparsityPattern/Variable.hpp b/src/LinearAlgebra/SparsityPattern/Variable.hpp index 5b95eb615..a81e8d225 100644 --- a/src/LinearAlgebra/SparsityPattern/Variable.hpp +++ b/src/LinearAlgebra/SparsityPattern/Variable.hpp @@ -260,7 +260,7 @@ namespace GridKit bool is_fixed_; ///< Constant parameter flag. mutable DependencyMap* dependencies_; - static const size_t INVALID_VAR_NUMBER = static_cast(-1); + static const size_t INVALID_VAR_NUMBER = static_cast(-1); }; //------------------------------------ diff --git a/src/Model/PowerFlow/Branch/Branch.hpp b/src/Model/PowerFlow/Branch/Branch.hpp index d6500bddf..c7eca8046 100644 --- a/src/Model/PowerFlow/Branch/Branch.hpp +++ b/src/Model/PowerFlow/Branch/Branch.hpp @@ -63,7 +63,7 @@ namespace GridKit // int evaluateAdjointJacobian(); int evaluateAdjointIntegrand(); - void updateTime(real_type t, real_type a) + void updateTime(real_type /* t */, real_type /* a */) { } diff --git a/src/Model/PowerFlow/Generator/GeneratorSlack.cpp b/src/Model/PowerFlow/Generator/GeneratorSlack.cpp index ec1d588ac..8e995da52 100644 --- a/src/Model/PowerFlow/Generator/GeneratorSlack.cpp +++ b/src/Model/PowerFlow/Generator/GeneratorSlack.cpp @@ -17,7 +17,7 @@ namespace GridKit */ template - GeneratorSlack::GeneratorSlack(bus_type* bus, GenData& data) + GeneratorSlack::GeneratorSlack(bus_type* bus, GenData& /* data */) : bus_(bus) { // std::cout << "Create a load model with " << size_ << " variables ...\n"; diff --git a/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp b/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp index eebb9f821..3b6d39300 100644 --- a/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp +++ b/src/Model/PowerFlow/MiniGrid/MiniGrid.hpp @@ -59,7 +59,7 @@ namespace GridKit return -1; } - void updateTime(real_type t, real_type a) + void updateTime(real_type /* t */, real_type /* a */) { } diff --git a/src/Model/PowerFlow/SystemModelPowerFlow.hpp b/src/Model/PowerFlow/SystemModelPowerFlow.hpp index d47f08992..d43883f6c 100644 --- a/src/Model/PowerFlow/SystemModelPowerFlow.hpp +++ b/src/Model/PowerFlow/SystemModelPowerFlow.hpp @@ -348,7 +348,7 @@ namespace GridKit return 0; } - void updateTime(real_type t, real_type a) + void updateTime(real_type /* t */, real_type /* a */) { } diff --git a/src/PowerSystemData.hpp b/src/PowerSystemData.hpp index a7b7dfb18..1a71be0a8 100644 --- a/src/PowerSystemData.hpp +++ b/src/PowerSystemData.hpp @@ -197,7 +197,7 @@ namespace GridKit using LoadDataT = LoadData; std::string version; - IdxT baseMVA; + RealT baseMVA; std::vector bus; std::vector gen; std::vector branch; diff --git a/src/Utilities/FileIO.hpp b/src/Utilities/FileIO.hpp index 217c93fa6..130b79c11 100644 --- a/src/Utilities/FileIO.hpp +++ b/src/Utilities/FileIO.hpp @@ -189,7 +189,7 @@ namespace if (std::regex_match(line, matches, pat)) { std::string s = matches[1]; - mp.baseMVA = std::atoi(s.c_str()); + mp.baseMVA = std::atof(s.c_str()); } else { diff --git a/src/Utilities/Testing.hpp b/src/Utilities/Testing.hpp index 6f91ef1f4..188ee1c4e 100644 --- a/src/Utilities/Testing.hpp +++ b/src/Utilities/Testing.hpp @@ -11,22 +11,6 @@ #include #include #include -#include - -#include - -namespace -{ - - static constexpr double tol_ = 1e-8; - - inline std::ostream& errs() - { - std::cerr << "[Utils/Testing.hpp]: "; - return std::cerr; - } - -} // namespace namespace GridKit { @@ -42,186 +26,6 @@ namespace GridKit return (error < tol); } - template - inline bool isEqual(PowerSystemData::GenCostData a, - PowerSystemData::GenCostData b, - RealT tol = tol_) - { - (void) tol; // suppress warning - int fail = 0; - fail += a.kind != b.kind; - fail += a.startup != b.startup; - fail += a.shutdown != b.shutdown; - fail += a.n != b.n; - if (fail) - { - errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); - } - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::GenData a, - PowerSystemData::GenData b, - RealT tol = tol_) - { - int fail = 0; - - fail += a.bus != b.bus; - fail += !isEqual(a.Pg, b.Pg, tol); - fail += !isEqual(a.Qg, b.Qg, tol); - fail += !isEqual(a.Qmax, b.Qmax, tol); - fail += !isEqual(a.Qmin, b.Qmin, tol); - fail += !isEqual(a.Vg, b.Vg, tol); - fail += a.mBase != b.mBase; - fail += a.status != b.status; - fail += a.Pmax != b.Pmax; - fail += a.Pmin != b.Pmin; - fail += a.Pc1 != b.Pc1; - fail += a.Pc2 != b.Pc2; - fail += a.Qc1min != b.Qc1min; - fail += a.Qc1max != b.Qc1max; - fail += a.Qc2min != b.Qc2min; - fail += a.Qc2max != b.Qc2max; - fail += a.ramp_agc != b.ramp_agc; - fail += a.ramp_10 != b.ramp_10; - fail += a.ramp_30 != b.ramp_30; - fail += a.ramp_q != b.ramp_q; - fail += a.apf != b.apf; - - if (fail) - { - errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); - } - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::BusData a, - PowerSystemData::BusData b, - RealT tol = tol_) - { - int fail = 0; - - fail += a.bus_i != b.bus_i; - fail += a.type != b.type; - fail += a.Gs != b.Gs; - fail += a.Bs != b.Bs; - fail += a.area != b.area; - fail += !isEqual(a.Vm, b.Vm, tol); - fail += !isEqual(a.Va, b.Va, tol); - fail += a.baseKV != b.baseKV; - fail += a.zone != b.zone; - fail += !isEqual(a.Vmax, b.Vmax, tol); - fail += !isEqual(a.Vmin, b.Vmin, tol); - - if (fail) - { - errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" - << "type: a=" << a.type << ", b=" << b.type << "\n" - << "Gs: a=" << a.Gs << ", b=" << b.Gs << "\n" - << "Bs: a=" << a.Bs << ", b=" << b.Bs << "\n" - << "area: a=" << a.area << ", b=" << b.area << "\n" - << "Vm: a=" << a.Vm << ", b=" << b.Vm << "\n" - << "Va: a=" << a.Va << ", b=" << b.Va << "\n" - << "baseKV: a=" << a.baseKV << ", b=" << b.baseKV << "\n" - << "zone: a=" << a.zone << ", b=" << b.zone << "\n" - << "Vmax: a=" << a.Vmax << ", b=" << b.Vmax << "\n" - << "Vmin: a=" << a.Vmin << ", b=" << b.Vmin << "\n"; - } - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::LoadData a, - PowerSystemData::LoadData b, - RealT tol = tol_) - { - int fail = 0; - - fail += a.bus_i != b.bus_i; - fail += !isEqual(a.Pd, b.Pd, tol); - fail += !isEqual(a.Qd, b.Qd, tol); - - if (fail) - { - errs() << "bus_i: a=" << a.bus_i << ", b=" << b.bus_i << "\n" - << "Pd: a=" << a.Pd << ", b=" << b.Pd << "\n" - << "Qd: a=" << a.Qd << ", b=" << b.Qd << "\n"; - } - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::BranchData a, - PowerSystemData::BranchData b, - RealT tol = tol_) - { - int fail = 0; - - fail += a.fbus != b.fbus; - fail += a.tbus != b.tbus; - fail += !isEqual(a.r, b.r, tol); - fail += !isEqual(a.x, b.x, tol); - fail += !isEqual(a.b, b.b, tol); - fail += a.rateA != b.rateA; - fail += a.rateB != b.rateB; - fail += a.rateC != b.rateC; - fail += a.ratio != b.ratio; - fail += a.angle != b.angle; - fail += a.status != b.status; - fail += a.angmin != b.angmin; - fail += a.angmax != b.angmax; - - if (fail) - { - errs() << "Got failure!\na=" << a.str() << "\nb=" << b.str(); - } - return fail == 0; - } - - template - inline bool isEqual(std::vector a, std::vector b, double tol = tol_) - { - if (a.size() != b.size()) - throw std::runtime_error([&] - { - std::stringstream errs; - errs << "Containers do not have the same size!\n" - << "\tGot a.size() == " << a.size() << "\n" - << "\tGot b.size() == " << b.size() << "\n"; - return errs.str(); }()); - - int fail = 0; - for (std::size_t i = 0; i < a.size(); i++) - { - if (!isEqual(a[i], b[i], tol)) - { - fail++; - errs() << "[isEqual>]: Got failure with i=" << i << ".\n"; - } - } - - return fail == 0; - } - - template - inline bool isEqual(PowerSystemData::SystemModelData a, - PowerSystemData::SystemModelData b) - { - int fail = 0; - - fail += a.version != b.version; - fail += a.baseMVA != b.baseMVA; - fail += !isEqual(a.bus, b.bus); - fail += !isEqual(a.gen, b.gen); - fail += !isEqual(a.gencost, b.gencost); - fail += !isEqual(a.branch, b.branch); - fail += !isEqual(a.load, b.load); - - return fail == 0; - } - /** * @brief Equatlity comparison between maps with a tolerance for the scalar value * @@ -243,9 +47,9 @@ namespace GridKit if (a.size() != b.size()) { fail++; - errs() << "Containers do not have the same size! " - << "a.size() = " << a.size() << ", and " - << "b.size() = " << b.size() << "\n"; + std::cerr << "Containers do not have the same size! " + << "a.size() = " << a.size() << ", and " + << "b.size() = " << b.size() << "\n"; } for (const auto& pair_a : a) @@ -256,17 +60,17 @@ namespace GridKit if (!isEqual(pair_a.second, it->second, tol)) { fail++; - errs() << "Mismatching map values! " - << "a.first = " << pair_a.first << ", " - << "a.second = " << pair_a.second << ", and " - << "b.second = " << it->second << "\n"; + std::cerr << "Mismatching map values! " + << "a.first = " << pair_a.first << ", " + << "a.second = " << pair_a.second << ", and " + << "b.second = " << it->second << "\n"; } } else { fail++; - errs() << "Entry not found in the second container! " - << "a.first = " << pair_a.first << "\n"; + std::cerr << "Entry not found in the second container! " + << "a.first = " << pair_a.first << "\n"; } } From 15602b7c9370445006d23a67614c30991011f43c Mon Sep 17 00:00:00 2001 From: pelesh Date: Tue, 27 May 2025 12:58:12 -0400 Subject: [PATCH 026/139] Move `PowerSystemsData.hpp` and `CircuitGraph.hpp` to correct subdirectories (#114) * Mowe PowerSystemsData.hpp to src/Models/PowerFlow. * Move CircuitGraph.hpp to Model/PowerElectronics * Move Matpower parser to src/Model/PowerFlow --------- Co-authored-by: pelesh --- examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp | 4 +- .../MatPowerTesting/MatPowerTesting.hpp | 2 +- .../MatPowerTesting/test_parse_branch_row.cpp | 4 +- .../MatPowerTesting/test_parse_bus_row.cpp | 4 +- .../MatPowerTesting/test_parse_gen_row.cpp | 4 +- .../test_parse_gencost_row.cpp | 4 +- .../MatPowerTesting/test_parse_matpower.cpp | 4 +- src/Model/PhasorDynamics/Branch/Branch.cpp | 2 +- src/Model/PhasorDynamics/Bus/Bus.cpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.cpp | 2 +- .../PhasorDynamics/BusFault/BusFault.cpp | 2 +- src/Model/PhasorDynamics/Load/Load.cpp | 1 - .../PowerElectronics/Capacitor/Capacitor.hpp | 1 - .../PowerElectronics/CircuitComponent.hpp | 1 - .../PowerElectronics}/CircuitGraph.hpp | 0 .../DistributedGenerator.hpp | 1 - .../InductionMotor/InductionMotor.hpp | 1 - .../PowerElectronics/Inductor/Inductor.hpp | 1 - .../LinearTransformer/LinearTransformer.hpp | 1 - .../MicrogridBusDQ/MicrogridBusDQ.hpp | 1 - .../MicrogridLine/MicrogridLine.hpp | 1 - .../MicrogridLoad/MicrogridLoad.hpp | 1 - .../PowerElectronics/Resistor/Resistor.hpp | 1 - .../SynchronousMachine/SynchronousMachine.hpp | 1 - .../SystemModelPowerElectronics.hpp | 2 +- .../TransmissionLine/TransmissionLine.hpp | 1 - .../VoltageSource/VoltageSource.hpp | 1 - src/Model/PowerFlow/Branch/Branch.cpp | 2 +- src/Model/PowerFlow/Bus/BusFactory.hpp | 2 +- src/Model/PowerFlow/Bus/BusPQ.hpp | 2 +- src/Model/PowerFlow/Bus/BusPV.hpp | 2 +- src/Model/PowerFlow/Bus/BusSlack.hpp | 2 +- .../PowerFlow/Generator/GeneratorFactory.hpp | 2 +- src/Model/PowerFlow/Generator/GeneratorPQ.hpp | 2 +- src/Model/PowerFlow/Generator/GeneratorPV.hpp | 2 +- .../PowerFlow/Generator/GeneratorSlack.hpp | 3 +- src/Model/PowerFlow/Load/Load.hpp | 2 +- src/Model/PowerFlow/MatpowerParser.hpp | 299 ++++++++++++++++++ src/{ => Model/PowerFlow}/PowerSystemData.hpp | 0 src/Utilities/FileIO.hpp | 287 ----------------- 40 files changed, 327 insertions(+), 330 deletions(-) rename src/{ => Model/PowerElectronics}/CircuitGraph.hpp (100%) create mode 100644 src/Model/PowerFlow/MatpowerParser.hpp rename src/{ => Model/PowerFlow}/PowerSystemData.hpp (100%) diff --git a/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp b/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp index 28ba44306..b5d830764 100644 --- a/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp +++ b/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp @@ -20,11 +20,11 @@ #include #include #include +#include #include +#include #include -#include #include -#include #include static const std::string BUS3_DATA_STRING = R"( diff --git a/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp index 1da0e95ce..648296a42 100644 --- a/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp +++ b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include namespace diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp index e5ff203f0..442dda532 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp @@ -1,8 +1,8 @@ #include #include "MatPowerTesting.hpp" -#include -#include +#include +#include using namespace GridKit; using namespace GridKit::Testing; diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp index 60a7c9146..ff874dcfb 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp @@ -1,8 +1,8 @@ #include #include "MatPowerTesting.hpp" -#include -#include +#include +#include using namespace GridKit; using namespace GridKit::Testing; diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp index 45ce4a185..437f0af7f 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp @@ -1,8 +1,8 @@ #include #include "MatPowerTesting.hpp" -#include -#include +#include +#include using namespace GridKit; using namespace GridKit::Testing; diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp index e1b9e0610..68dad3456 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp @@ -1,8 +1,8 @@ #include #include "MatPowerTesting.hpp" -#include -#include +#include +#include using namespace GridKit; using namespace GridKit::Testing; diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp index fb5bd196e..c384743f0 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp @@ -1,8 +1,8 @@ #include #include "MatPowerTesting.hpp" -#include -#include +#include +#include using namespace GridKit; using namespace GridKit::Testing; diff --git a/src/Model/PhasorDynamics/Branch/Branch.cpp b/src/Model/PhasorDynamics/Branch/Branch.cpp index 0ccbe1a1a..c65b3367e 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.cpp +++ b/src/Model/PhasorDynamics/Branch/Branch.cpp @@ -13,7 +13,7 @@ #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PhasorDynamics/Bus/Bus.cpp b/src/Model/PhasorDynamics/Bus/Bus.cpp index 7253ee66a..3dfaad6ee 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.cpp +++ b/src/Model/PhasorDynamics/Bus/Bus.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp index f4f18b83d..61fa5d202 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.cpp b/src/Model/PhasorDynamics/BusFault/BusFault.cpp index d2f519ee0..7b12af307 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.cpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.cpp @@ -13,7 +13,7 @@ #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index b7c51505f..e1ccb26cb 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -5,7 +5,6 @@ #include #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/Capacitor/Capacitor.hpp b/src/Model/PowerElectronics/Capacitor/Capacitor.hpp index b86ed9139..1357150e5 100644 --- a/src/Model/PowerElectronics/Capacitor/Capacitor.hpp +++ b/src/Model/PowerElectronics/Capacitor/Capacitor.hpp @@ -4,7 +4,6 @@ #define _CAP_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/CircuitComponent.hpp b/src/Model/PowerElectronics/CircuitComponent.hpp index 56e0d4c5a..f3efe3636 100644 --- a/src/Model/PowerElectronics/CircuitComponent.hpp +++ b/src/Model/PowerElectronics/CircuitComponent.hpp @@ -6,7 +6,6 @@ #include #include -#include namespace GridKit { diff --git a/src/CircuitGraph.hpp b/src/Model/PowerElectronics/CircuitGraph.hpp similarity index 100% rename from src/CircuitGraph.hpp rename to src/Model/PowerElectronics/CircuitGraph.hpp diff --git a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp index 96654cf62..a75406463 100644 --- a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp +++ b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.hpp @@ -4,7 +4,6 @@ #define _CAP_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp b/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp index 007e7fd5d..1e02ef0c2 100644 --- a/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp +++ b/src/Model/PowerElectronics/InductionMotor/InductionMotor.hpp @@ -4,7 +4,6 @@ #define _IMOTOR_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/Inductor/Inductor.hpp b/src/Model/PowerElectronics/Inductor/Inductor.hpp index c40920b0f..685e69bb3 100644 --- a/src/Model/PowerElectronics/Inductor/Inductor.hpp +++ b/src/Model/PowerElectronics/Inductor/Inductor.hpp @@ -4,7 +4,6 @@ #define _IND_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp index b1e9c57c2..7be8bd59c 100644 --- a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp +++ b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.hpp @@ -4,7 +4,6 @@ #define _LTRANS_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp index 46173c5ab..150618c29 100644 --- a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp +++ b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.hpp @@ -4,7 +4,6 @@ #define _VIRBUSDQ_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp index 14d29b85d..66304c59e 100644 --- a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp +++ b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.hpp @@ -4,7 +4,6 @@ #define _TRANLINE_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp index 685a05044..e05764d52 100644 --- a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp +++ b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.hpp @@ -4,7 +4,6 @@ #define _TRANLOAD_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/Resistor/Resistor.hpp b/src/Model/PowerElectronics/Resistor/Resistor.hpp index 0821b992e..061863516 100644 --- a/src/Model/PowerElectronics/Resistor/Resistor.hpp +++ b/src/Model/PowerElectronics/Resistor/Resistor.hpp @@ -4,7 +4,6 @@ #define _RES_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp index 74766d155..2c98384bc 100644 --- a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp +++ b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.hpp @@ -6,7 +6,6 @@ #include #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp b/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp index 105483094..7c82ec70d 100644 --- a/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp +++ b/src/Model/PowerElectronics/SystemModelPowerElectronics.hpp @@ -6,8 +6,8 @@ #include #include -#include #include +#include #include namespace GridKit diff --git a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp index badd0cf9d..186106926 100644 --- a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp +++ b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.hpp @@ -4,7 +4,6 @@ #define _TRANLINE_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp b/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp index d3b630a07..03d7a1e08 100644 --- a/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp +++ b/src/Model/PowerElectronics/VoltageSource/VoltageSource.hpp @@ -4,7 +4,6 @@ #define _VOSO_HPP_ #include -#include namespace GridKit { diff --git a/src/Model/PowerFlow/Branch/Branch.cpp b/src/Model/PowerFlow/Branch/Branch.cpp index 08b943264..ecbc1b6d2 100644 --- a/src/Model/PowerFlow/Branch/Branch.cpp +++ b/src/Model/PowerFlow/Branch/Branch.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Bus/BusFactory.hpp b/src/Model/PowerFlow/Bus/BusFactory.hpp index 5a1c6e95b..dc91c38b7 100644 --- a/src/Model/PowerFlow/Bus/BusFactory.hpp +++ b/src/Model/PowerFlow/Bus/BusFactory.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Bus/BusPQ.hpp b/src/Model/PowerFlow/Bus/BusPQ.hpp index fd96ca396..e0b76b169 100644 --- a/src/Model/PowerFlow/Bus/BusPQ.hpp +++ b/src/Model/PowerFlow/Bus/BusPQ.hpp @@ -3,7 +3,7 @@ #define _BUS_PQ_HPP_ #include "BaseBus.hpp" -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Bus/BusPV.hpp b/src/Model/PowerFlow/Bus/BusPV.hpp index ac180e926..b4ea8fd87 100644 --- a/src/Model/PowerFlow/Bus/BusPV.hpp +++ b/src/Model/PowerFlow/Bus/BusPV.hpp @@ -5,7 +5,7 @@ #include #include "BaseBus.hpp" -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Bus/BusSlack.hpp b/src/Model/PowerFlow/Bus/BusSlack.hpp index 96d2ba66c..4a693e434 100644 --- a/src/Model/PowerFlow/Bus/BusSlack.hpp +++ b/src/Model/PowerFlow/Bus/BusSlack.hpp @@ -3,7 +3,7 @@ #define _BUS_SLACK_HPP_ #include "BaseBus.hpp" -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Generator/GeneratorFactory.hpp b/src/Model/PowerFlow/Generator/GeneratorFactory.hpp index 07d1ac4c8..daedd23b4 100644 --- a/src/Model/PowerFlow/Generator/GeneratorFactory.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorFactory.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Generator/GeneratorPQ.hpp b/src/Model/PowerFlow/Generator/GeneratorPQ.hpp index 1561c61be..0628257e2 100644 --- a/src/Model/PowerFlow/Generator/GeneratorPQ.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorPQ.hpp @@ -5,7 +5,7 @@ #include "GeneratorBase.hpp" #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Generator/GeneratorPV.hpp b/src/Model/PowerFlow/Generator/GeneratorPV.hpp index 7882114e1..efe629f19 100644 --- a/src/Model/PowerFlow/Generator/GeneratorPV.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorPV.hpp @@ -5,7 +5,7 @@ #include "GeneratorBase.hpp" #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Generator/GeneratorSlack.hpp b/src/Model/PowerFlow/Generator/GeneratorSlack.hpp index fa5b1beff..43a7c3212 100644 --- a/src/Model/PowerFlow/Generator/GeneratorSlack.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorSlack.hpp @@ -1,11 +1,10 @@ #pragma once -// #include #include #include "GeneratorBase.hpp" -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Load/Load.hpp b/src/Model/PowerFlow/Load/Load.hpp index a9c17eb0e..5091761c9 100644 --- a/src/Model/PowerFlow/Load/Load.hpp +++ b/src/Model/PowerFlow/Load/Load.hpp @@ -3,7 +3,7 @@ #define _LOAD_HPP_ #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/MatpowerParser.hpp b/src/Model/PowerFlow/MatpowerParser.hpp new file mode 100644 index 000000000..dcf926ef9 --- /dev/null +++ b/src/Model/PowerFlow/MatpowerParser.hpp @@ -0,0 +1,299 @@ + +/** + * @file FileIO.hpp + * @author Slaven Peles + * + * Contains definition of a utility for reading lookup tables. + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace GridKit +{ + using namespace GridKit::PowerSystemData; + + static const std::string matlab_syntax_error{ + "Only a subset of Matlab syntax is supported." + "\n\t'=' for assignment must be on the same line as the field, eg " + "`mpc.version = '2'`." + "\n\tOpen brace ('[') must be on the same line as the field for matrix " + "initialization." + "\n\tEach row of a matrix must be terminated by a semicolon."}; + + std::ostream& logs() + { +#ifndef NDEBUG + std::cerr << "[FileIO.hpp]: "; + return std::cerr; +#else + static std::ofstream ofs; + ofs.setstate(std::ios_base::badbit); + return ofs; +#endif + } + + void ltrim(std::string& s) + { + const std::string nothing = ""; + s = std::regex_replace(s, std::regex("^\\s+"), nothing); + } + + void rtrim(std::string& s) + { + const std::string nothing = ""; + s = std::regex_replace(s, std::regex("\\s+$"), nothing); + } + + void trim_matlab_comments(std::string& s) + { + const std::string nothing = ""; + s = std::regex_replace(s, std::regex("%.+"), nothing); + } + + // Retrive MATPOWER component from assignment line. + // + // For example, the string " mpc.bus = [ ... ] % Some comment" will + // return the value "bus". + std::string getMatPowerComponent(const std::string& line) + { + logs() << "Getting matpower component from line\n"; + std::regex pat("mpc.([a-zA-Z]+)\\s*=.+"); + std::smatch matches; + std::string component; + if (std::regex_match(line, matches, pat)) + { + component = matches[1].str(); + } + else + { + throw std::runtime_error(matlab_syntax_error + "\nGot line " + line); + } + ltrim(component); + rtrim(component); + return component; + } + + // Ensure that all of the given line has been consumed, and that the only + // remaining non-whitespace character left in the line is a semicolon. + void checkEndOfMatrixRow(std::istream& is) + { + std::string rest; + is >> rest; + ltrim(rest); + rtrim(rest); + if (rest != ";") + throw std::runtime_error(matlab_syntax_error); + } + + template + void readMatPowerBusRow(const std::string& row, BusData& br, LoadData& lr) + { + logs() << "Parsing MATPOWER bus row\n"; + std::stringstream is(row); + is >> br.bus_i // Bus ID + >> br.type // Bus type: 1 = PQ, 2 = PV, 3 = ref, 4 = isolated + >> lr.Pd // Active power demand [MW] + >> lr.Qd // Reactive power demand [MVAr] + >> br.Gs // Shunt conductance (MW demanded at V = 1.0 p.u.) + >> br.Bs // Shunt susceptance (MVAr injected at V = 1.0 p.u.) + >> br.area // Area number (>0) + >> br.Vm // Voltage magnitude (p.u.) + >> br.Va // Voltage phase (deg) + >> br.baseKV // Base voltage [kV] + >> br.zone // Loss zone number (>0) + >> br.Vmax // Maximum voltage magnitude (p.u.) + >> br.Vmin; // Minimum voltage magnitude (p.u.) + + lr.bus_i = br.bus_i; + + // std::cout << br.str(); + // logs() << "Read BusData with the following values:\n" << br.str(); + // return br; + } + + template + void readMatPowerGenRow(GenData& gr, std::string& row) + { + logs() << "Parsing MATPOWER gen row\n"; + std::stringstream is(row); + is >> gr.bus >> gr.Pg >> gr.Qg >> gr.Qmax >> gr.Qmin >> gr.Vg >> gr.mBase + >> gr.status >> gr.Pmax >> gr.Pmin >> gr.Pc1 >> gr.Pc2 >> gr.Qc1min + >> gr.Qc1max >> gr.Qc2min >> gr.Qc2max >> gr.ramp_agc >> gr.ramp_10 + >> gr.ramp_30 >> gr.ramp_q >> gr.apf; + checkEndOfMatrixRow(is); + } + + template + void readMatPowerBranchRow(BranchData& br, std::string& row) + { + logs() << "Parsing MATPOWER branch row\n"; + std::stringstream is(row); + is >> br.fbus >> br.tbus >> br.r >> br.x >> br.b >> br.rateA >> br.rateB + >> br.rateC >> br.ratio >> br.angle >> br.status >> br.angmin + >> br.angmax; + checkEndOfMatrixRow(is); + } + + template + void readMatPowerGenCostRow(GenCostData& gcr, std::string& row) + { + logs() << "Parsing MATPOWER gen cost row\n"; + // Ensure last character is semicolon. + rtrim(row); + if (row[row.size() - 1] != ';') + throw std::runtime_error(matlab_syntax_error + "\nGot line " + row); + + std::stringstream is(row); + is >> gcr.kind >> gcr.startup >> gcr.shutdown >> gcr.n; + + for (RealT r; is >> r;) + { + gcr.rest.push_back(r); + } + } + + template + void readMatPowerVersion(SystemModelData& mp, std::string& line) + { + logs() << "Parsing matpower version\n"; + std::regex pat("mpc\\.version\\s*=\\s*'([0-9])';"); + std::smatch matches; + if (std::regex_match(line, matches, pat)) + { + mp.version = matches[1].str(); + } + else + { + throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); + } + } + + template + void readMatPowerBaseMVA(SystemModelData& mp, std::string& line) + { + std::regex pat("mpc\\.baseMVA\\s*=\\s*([0-9]+);"); + std::smatch matches; + if (std::regex_match(line, matches, pat)) + { + std::string s = matches[1]; + mp.baseMVA = std::atof(s.c_str()); + } + else + { + throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); + } + } + + template + void readMatPowerFile(SystemModelData& mp, std::string& filename) + { + std::ifstream ifs{filename}; + readMatPower(mp, ifs); + } + + template + void readMatPower(SystemModelData& mp, std::istream& is) + { + using BusDataT = BusData; + using GenDataT = GenData; + using BranchDataT = BranchData; + using GenCostDataT = GenCostData; + using LoadDataT = LoadData; + + for (std::string line; std::getline(is, line);) + { + // Trim whitespace and remove comments + ltrim(line); + rtrim(line); + logs() << line << "\n"; + trim_matlab_comments(line); + + // Skip empty lines and comment-only lines + if (line.size() == 0) + continue; + + // Skip the matlab function declaration + if (line.find("function") != std::string::npos) + continue; + + // Check for MATPOWER component definitions + if (line.find("mpc") != std::string::npos) + { + const std::string component = getMatPowerComponent(line); + logs() << "Got component: '" << component << "'\n"; + // First, parse matrix components + if (component == "bus") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + BusDataT br; + LoadDataT lr; + readMatPowerBusRow(line, br, lr); + mp.bus.push_back(std::move(br)); + mp.load.push_back(std::move(lr)); + } + } + else if (component == "gen") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + GenDataT gr; + readMatPowerGenRow(gr, line); + mp.gen.push_back(gr); + } + } + else if (component == "branch") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + BranchDataT br; + readMatPowerBranchRow(br, line); + mp.branch.push_back(br); + } + } + else if (component == "gencost") + { + while (std::getline(is, line)) + { + if (line.find("];") != std::string::npos) + break; + GenCostDataT gcr; + readMatPowerGenCostRow(gcr, line); + mp.gencost.push_back(gcr); + } + } + + // Next, parse scalar components + else if (component == "version") + { + readMatPowerVersion(mp, line); + } + else if (component == "baseMVA") + { + readMatPowerBaseMVA(mp, line); + } + } + } + } + + // } // namespace PowerSystemsData +} // namespace GridKit diff --git a/src/PowerSystemData.hpp b/src/Model/PowerFlow/PowerSystemData.hpp similarity index 100% rename from src/PowerSystemData.hpp rename to src/Model/PowerFlow/PowerSystemData.hpp diff --git a/src/Utilities/FileIO.hpp b/src/Utilities/FileIO.hpp index 130b79c11..1e4c2b3d9 100644 --- a/src/Utilities/FileIO.hpp +++ b/src/Utilities/FileIO.hpp @@ -8,200 +8,14 @@ */ #pragma once -#include #include #include -#include #include -#include #include #include -#include - -namespace -{ - - using namespace GridKit; - using namespace GridKit::PowerSystemData; - - static const std::string matlab_syntax_error{ - "Only a subset of Matlab syntax is supported." - "\n\t'=' for assignment must be on the same line as the field, eg " - "`mpc.version = '2'`." - "\n\tOpen brace ('[') must be on the same line as the field for matrix " - "initialization." - "\n\tEach row of a matrix must be terminated by a semicolon."}; - - std::ostream& logs() - { -#ifndef NDEBUG - std::cerr << "[FileIO.hpp]: "; - return std::cerr; -#else - static std::ofstream ofs; - ofs.setstate(std::ios_base::badbit); - return ofs; -#endif - } - - void ltrim(std::string& s) - { - const std::string nothing = ""; - s = std::regex_replace(s, std::regex("^\\s+"), nothing); - } - - void rtrim(std::string& s) - { - const std::string nothing = ""; - s = std::regex_replace(s, std::regex("\\s+$"), nothing); - } - - void trim_matlab_comments(std::string& s) - { - const std::string nothing = ""; - s = std::regex_replace(s, std::regex("%.+"), nothing); - } - - // Retrive MATPOWER component from assignment line. - // - // For example, the string " mpc.bus = [ ... ] % Some comment" will - // return the value "bus". - std::string getMatPowerComponent(const std::string& line) - { - logs() << "Getting matpower component from line\n"; - std::regex pat("mpc.([a-zA-Z]+)\\s*=.+"); - std::smatch matches; - std::string component; - if (std::regex_match(line, matches, pat)) - { - component = matches[1].str(); - } - else - { - throw std::runtime_error(matlab_syntax_error + "\nGot line " + line); - } - ltrim(component); - rtrim(component); - return component; - } - - // Ensure that all of the given line has been consumed, and that the only - // remaining non-whitespace character left in the line is a semicolon. - void checkEndOfMatrixRow(std::istream& is) - { - std::string rest; - is >> rest; - ltrim(rest); - rtrim(rest); - if (rest != ";") - throw std::runtime_error(matlab_syntax_error); - } - - template - void readMatPowerBusRow(const std::string& row, BusData& br, LoadData& lr) - { - logs() << "Parsing MATPOWER bus row\n"; - std::stringstream is(row); - is >> br.bus_i // Bus ID - >> br.type // Bus type: 1 = PQ, 2 = PV, 3 = ref, 4 = isolated - >> lr.Pd // Active power demand [MW] - >> lr.Qd // Reactive power demand [MVAr] - >> br.Gs // Shunt conductance (MW demanded at V = 1.0 p.u.) - >> br.Bs // Shunt susceptance (MVAr injected at V = 1.0 p.u.) - >> br.area // Area number (>0) - >> br.Vm // Voltage magnitude (p.u.) - >> br.Va // Voltage phase (deg) - >> br.baseKV // Base voltage [kV] - >> br.zone // Loss zone number (>0) - >> br.Vmax // Maximum voltage magnitude (p.u.) - >> br.Vmin; // Minimum voltage magnitude (p.u.) - - lr.bus_i = br.bus_i; - - // std::cout << br.str(); - // logs() << "Read BusData with the following values:\n" << br.str(); - // return br; - } - - template - void readMatPowerGenRow(GenData& gr, std::string& row) - { - logs() << "Parsing MATPOWER gen row\n"; - std::stringstream is(row); - is >> gr.bus >> gr.Pg >> gr.Qg >> gr.Qmax >> gr.Qmin >> gr.Vg >> gr.mBase - >> gr.status >> gr.Pmax >> gr.Pmin >> gr.Pc1 >> gr.Pc2 >> gr.Qc1min - >> gr.Qc1max >> gr.Qc2min >> gr.Qc2max >> gr.ramp_agc >> gr.ramp_10 - >> gr.ramp_30 >> gr.ramp_q >> gr.apf; - checkEndOfMatrixRow(is); - } - - template - void readMatPowerBranchRow(BranchData& br, std::string& row) - { - logs() << "Parsing MATPOWER branch row\n"; - std::stringstream is(row); - is >> br.fbus >> br.tbus >> br.r >> br.x >> br.b >> br.rateA >> br.rateB - >> br.rateC >> br.ratio >> br.angle >> br.status >> br.angmin - >> br.angmax; - checkEndOfMatrixRow(is); - } - - template - void readMatPowerGenCostRow(GenCostData& gcr, std::string& row) - { - logs() << "Parsing MATPOWER gen cost row\n"; - // Ensure last character is semicolon. - rtrim(row); - if (row[row.size() - 1] != ';') - throw std::runtime_error(matlab_syntax_error + "\nGot line " + row); - - std::stringstream is(row); - is >> gcr.kind >> gcr.startup >> gcr.shutdown >> gcr.n; - - for (RealT r; is >> r;) - { - gcr.rest.push_back(r); - } - } - - template - void readMatPowerVersion(SystemModelData& mp, std::string& line) - { - logs() << "Parsing matpower version\n"; - std::regex pat("mpc\\.version\\s*=\\s*'([0-9])';"); - std::smatch matches; - if (std::regex_match(line, matches, pat)) - { - mp.version = matches[1].str(); - } - else - { - throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); - } - } - - template - void readMatPowerBaseMVA(SystemModelData& mp, std::string& line) - { - std::regex pat("mpc\\.baseMVA\\s*=\\s*([0-9]+);"); - std::smatch matches; - if (std::regex_match(line, matches, pat)) - { - std::string s = matches[1]; - mp.baseMVA = std::atof(s.c_str()); - } - else - { - throw std::runtime_error(matlab_syntax_error + "\nGot line '" + line + "'"); - } - } - -} // namespace - namespace GridKit { - /** * @brief Reads in an input stream of tabulated data * @@ -281,105 +95,4 @@ namespace GridKit std::cout << "\n"; } } - - template - void readMatPowerFile(SystemModelData& mp, std::string& filename) - { - std::ifstream ifs{filename}; - readMatPower(mp, ifs); - } - - template - void readMatPower(SystemModelData& mp, std::istream& is) - { - using BusDataT = BusData; - using GenDataT = GenData; - using BranchDataT = BranchData; - using GenCostDataT = GenCostData; - using LoadDataT = LoadData; - - for (std::string line; std::getline(is, line);) - { - // Trim whitespace and remove comments - ltrim(line); - rtrim(line); - logs() << line << "\n"; - trim_matlab_comments(line); - - // Skip empty lines and comment-only lines - if (line.size() == 0) - continue; - - // Skip the matlab function declaration - if (line.find("function") != std::string::npos) - continue; - - // Check for MATPOWER component definitions - if (line.find("mpc") != std::string::npos) - { - const std::string component = getMatPowerComponent(line); - logs() << "Got component: '" << component << "'\n"; - // First, parse matrix components - if (component == "bus") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - BusDataT br; - LoadDataT lr; - readMatPowerBusRow(line, br, lr); - mp.bus.push_back(std::move(br)); - mp.load.push_back(std::move(lr)); - } - } - else if (component == "gen") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - GenDataT gr; - readMatPowerGenRow(gr, line); - mp.gen.push_back(gr); - } - } - else if (component == "branch") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - BranchDataT br; - readMatPowerBranchRow(br, line); - mp.branch.push_back(br); - } - } - else if (component == "gencost") - { - while (std::getline(is, line)) - { - if (line.find("];") != std::string::npos) - break; - GenCostDataT gcr; - readMatPowerGenCostRow(gcr, line); - mp.gencost.push_back(gcr); - } - } - - // Next, parse scalar components - else if (component == "version") - { - readMatPowerVersion(mp, line); - } - else if (component == "baseMVA") - { - readMatPowerBaseMVA(mp, line); - } - } - } - } - } // namespace GridKit From 30c5432806d8f9fd35cf7131f63586be5cd28c17 Mon Sep 17 00:00:00 2001 From: Alexander Novotny Date: Fri, 30 May 2025 11:22:34 -0400 Subject: [PATCH 027/139] Only check c/c++ files with clang-format pre-commit (#121) --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index eda93831a..9e7c4c3a4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,6 +3,7 @@ repos: rev: v19.1.7 hooks: - id: clang-format + types_or: [c++, c, cuda] - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: From 6b4f378eee66b1d598ae8c18378638690265c9a0 Mon Sep 17 00:00:00 2001 From: Alexander Novotny Date: Fri, 30 May 2025 11:23:26 -0400 Subject: [PATCH 028/139] Update required sundials version in README (#118) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c123faa21..087e4a145 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Before installing GridKit™ make sure you have all needed dependencies. ### Dependencies You should have all of the following installed before installing GridKit™ - A version of - - [SUNDIALS](https://github.com/LLNL/sundials) >= 7.0.0 + - [SUNDIALS](https://github.com/LLNL/sundials) `develop` branch at commit >= [`07d21c2`](https://github.com/LLNL/sundials/commit/07d21c2c5ae33211a9a2fafd8eac56de5582dce0) - [Suitesparse](https://github.com/DrTimothyAldenDavis/SuiteSparse) >= 5.x (optional) - If using Suitesparse, SUNDIALS must also be built with [KLU support](https://sundials.readthedocs.io/en/latest/sundials/Install_link.html#cmakeoption-ENABLE_KLU) - [Ipopt](https://github.com/coin-or/Ipopt) >= 3.x (optional) From 7d4621e17a8f8f493f9adb77e924f93dea36109d Mon Sep 17 00:00:00 2001 From: Alexander Novotny Date: Fri, 30 May 2025 15:17:24 -0400 Subject: [PATCH 029/139] Add dev container (#86) * Add dev container * Update contributing.md with container info * Reduce container size a bit Don't install "recommended" packages through `apt`. Also install `make` since it is recommended by `cmake`. --------- Co-authored-by: alexander-novo --- .devcontainer/Dockerfile | 31 +++++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 12 ++++++++++++ CONTRIBUTING.md | 4 ++++ 3 files changed, 47 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000..b5408c2f0 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,31 @@ +FROM ubuntu:24.04 + +RUN apt update -y && apt install -y --no-install-recommends\ + gcc \ + g++ \ + make \ + cmake \ + ninja-build \ + git \ + ca-certificates \ + libopenblas-dev \ + && apt clean && rm -rf /var/lib/apt/lists/* + +# Install SuiteSparse for klu +RUN git clone --single-branch --depth 1 --branch v7.10.2 https://github.com/DrTimothyAldenDavis/SuiteSparse.git /tmp/suitesparse && \ + cd /tmp/suitesparse && \ + mkdir -p build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DSUITESPARSE_ENABLE_PROJECTS="klu" .. && \ + ninja install && \ + rm -rf /tmp/suitesparse + +# Install sundials using klu from previous step +RUN git clone --single-branch --branch develop https://github.com/LLNL/sundials.git /tmp/sundials && \ + cd /tmp/sundials && \ + git checkout 07d21c2c5ae33211a9a2fafd8eac56de5582dce0 && \ + mkdir -p build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_KLU=ON .. && \ + ninja install && \ + rm -rf /tmp/sundials diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..fa5dc63f0 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,12 @@ +{ + "build": { + "dockerfile": "Dockerfile" + }, + "customizations": { + "vscode": { + "extensions": [ + "ms-vscode.cpptools" + ] + } + } +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d6643d5f6..30e684379 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -457,3 +457,7 @@ class Matrix // No, class is outside GridKit namespace { // matrix code }; +``` + +## Development Container +A development container is available for all developers using VS Code to develop. This will automatically install all pre-requisite software you need to develop in GridKit. Any developer who wishes to use this setup can follow [this tutorial](https://code.visualstudio.com/docs/devcontainers/tutorial) and simply use the option "Reopen Folder in Container" rather than "New Dev Container...", which will automatically build the included container. From 1303aa1812553de01db90f9ba7c9e06c96cda207 Mon Sep 17 00:00:00 2001 From: superwhiskers Date: Fri, 30 May 2025 16:09:51 -0500 Subject: [PATCH 030/139] fix a memory leak, add asan / ubsan support to the cmake configuration (#117) * add `.editorconfig`, add undefined behavior and address sanitizer support to the cmake build, and fix a memory leak in `DistributedGeneratorTest` * swap the heap allocated `DistributedGenerator` for one on the stack * add warnings by default and fix warnings resulting from our code so that it builds cleanly --- .editorconfig | 15 +++++++++++++ CMakeLists.txt | 21 +++++++++++++++++-- .../LinearAlgebra/SparseTest/SparseTest.cpp | 2 +- .../DistributedGeneratorTest/DGTest.cpp | 14 ++++++------- .../SynchronousMachine/SynchronousMachine.cpp | 2 ++ .../Generator4Param/Generator4Param.cpp | 15 +++++++------ 6 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..dcc5f149c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[{CMakeLists.txt,*.{cpp,hpp,tpp,sh,h,cu,hip,cmake}}] +indent_style = space +indent_size = 2 + +[*.{json,m}] +indent_style = space +indent_size = 4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 24f15839c..a65f53af2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE # set(CMAKE_CXX_FLAGS_DEBUG "-Wall -O0 -g -DDEBUG") set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wconversion -Wpedantic") # Ipopt support is disabled by default option(GRIDKIT_ENABLE_IPOPT "Enable Ipopt support" OFF) @@ -37,6 +38,22 @@ option(GRIDKIT_ENABLE_SUNDIALS_SPARSE "Enable SUNDIALS sparse linear solvers" ON # Enzyme support is disabled by default option(GRIDKIT_ENABLE_ENZYME "Enable automatic differentiation with Enzyme" OFF) +# Enable the address sanitizer +option(GRIDKIT_ENABLE_ASAN "Enable the address sanitizer" OFF) + +if(GRIDKIT_ENABLE_ASAN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") +endif() + +# Enable the undefined behavior sanitizer +option(GRIDKIT_ENABLE_UBSAN "Enable the undefined behavior sanitizer" OFF) + +if(GRIDKIT_ENABLE_UBSAN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") +endif() + set(CMAKE_MACOSX_RPATH 1) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 1) @@ -73,7 +90,7 @@ if(GRIDKIT_ENABLE_IPOPT) enable_language(Fortran) # Needed for linking to HSL endif() if(GRIDKIT_ENABLE_SUNDIALS) - find_package(SUNDIALS 7.0.0 REQUIRED CONFIG + find_package(SUNDIALS 7.0.0 REQUIRED CONFIG PATHS ${SUNDIALS_DIR} ${SUNDIALS_DIR}/lib/cmake/sundials) message(STATUS "SUNDIALS configuration found: ${SUNDIALS_CONFIG}") @@ -97,7 +114,7 @@ add_subdirectory(src) enable_testing() add_subdirectory(examples) add_subdirectory(tests) - + export(EXPORT gridkit-targets FILE ${CMAKE_CURRENT_BINARY_DIR}/GridKitTargets.cmake) # Configuring exporting cmake config diff --git a/examples/LinearAlgebra/SparseTest/SparseTest.cpp b/examples/LinearAlgebra/SparseTest/SparseTest.cpp index 3c7fe99ef..12ed679d0 100644 --- a/examples/LinearAlgebra/SparseTest/SparseTest.cpp +++ b/examples/LinearAlgebra/SparseTest/SparseTest.cpp @@ -10,7 +10,7 @@ #include -int main(int argc, char const* argv[]) +int main() { std::vector val{0.1, 0.2, 0.3, 0.4}; std::vector x{2, 1, 3, 1}; diff --git a/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp b/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp index 483c3e39b..2ddc06477 100644 --- a/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp +++ b/examples/PowerElectronics/DistributedGeneratorTest/DGTest.cpp @@ -37,20 +37,20 @@ int main(int /* argc */, char const** /* argv */) parms.rLc_ = 0.03; parms.Lc_ = 0.35e-3; - GridKit::DistributedGenerator* dg = new GridKit::DistributedGenerator(0, parms, true); + GridKit::DistributedGenerator dg(0, parms, true); std::vector t1(16, 0.0); std::vector t2{0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5}; - dg->allocate(); + dg.allocate(); - dg->y() = t2; - dg->yp() = t1; + dg.y() = t2; + dg.yp() = t1; - dg->evaluateResidual(); + dg.evaluateResidual(); // std::cout << "Output: {"; - // for (double i : dg->getResidual()) + // for (double i : dg.getResidual()) // { // printf("%e ,", i); // } @@ -78,7 +78,7 @@ int main(int /* argc */, char const** /* argv */) double error_allowed = 10 * std::numeric_limits::epsilon(); for (size_t i = 0; i < true_vec.size(); i++) { - double error = std::abs(true_vec[i] - dg->getResidual()[i]) / std::abs(1.0 + true_vec[i]); + double error = std::abs(true_vec[i] - dg.getResidual()[i]) / std::abs(1.0 + true_vec[i]); if (error > error_allowed) { std::cout << "Model error for equation " << i << " is: " << error << "\n"; diff --git a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp index c22ecc0bf..f007ce8c0 100644 --- a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp +++ b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp @@ -102,8 +102,10 @@ namespace GridKit int SynchronousMachine::evaluateResidual() { ScalarT rkq1 = std::get<0>(Rkq_); + [[maybe_unused]] ScalarT rkq2 = std::get<1>(Rkq_); ScalarT llkq1 = std::get<0>(Llkq_); + [[maybe_unused]] ScalarT llkq2 = std::get<1>(Llkq_); ScalarT cos1 = cos((P_ / 2.0) * y_[5]); diff --git a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp index dbd49afa9..86e903cfe 100644 --- a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp +++ b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp @@ -1,10 +1,9 @@ #define _USE_MATH_DEFINES -#include "Generator4Param.hpp" - #include #include +#include "Generator4Param.hpp" #include namespace GridKit @@ -316,8 +315,8 @@ namespace GridKit size_t N = table_.size(); double ti = table_[0][0]; double tf = table_[N - 1][0]; - double dt = (tf - ti) / (N - 1); - int n = std::trunc(t / tf * (N - 1.0)); + double dt = (tf - ti) / static_cast(N - 1); + int n = static_cast(std::trunc(t / tf * static_cast(N - 1))); double Edp_est = 0.0; double Eqp_est = 0.0; @@ -354,8 +353,8 @@ namespace GridKit size_t N = table_.size(); double ti = table_[0][0]; double tf = table_[N - 1][0]; - double dt = (tf - ti) / (N - 1); - int n = std::trunc(t / tf * (N - 1.0)); + double dt = (tf - ti) / static_cast(N - 1); + int n = static_cast(std::trunc(t / tf * static_cast(N - 1))); double Edp_est = 0.0; if (t >= ti && t < tf) @@ -385,8 +384,8 @@ namespace GridKit size_t N = table_.size(); double ti = table_[0][0]; double tf = table_[N - 1][0]; - double dt = (tf - ti) / (N - 1); - int n = std::trunc(t / tf * (N - 1.0)); + double dt = (tf - ti) / static_cast(N - 1); + int n = static_cast(std::trunc(t / tf * static_cast(N - 1))); double Eqp_est = 0.0; if (t >= ti && t < tf) From 7086fe717a6f6a36f4f07a6bd833f3a9186c8337 Mon Sep 17 00:00:00 2001 From: pelesh Date: Sat, 31 May 2025 12:24:35 -0400 Subject: [PATCH 031/139] Create phasor dynamics model data structures (#116) * Create phasor dynamics bus and branch data structures. * Add load data structure. * Use BusData with BusInfinite. * Renamed PowerSystemData -> PowerFlowData --------- Co-authored-by: pelesh --- examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp | 6 +-- .../MatPowerTesting/MatPowerTesting.hpp | 36 +++++++-------- .../MatPowerTesting/test_parse_branch_row.cpp | 4 +- .../MatPowerTesting/test_parse_bus_row.cpp | 4 +- .../MatPowerTesting/test_parse_gen_row.cpp | 4 +- .../test_parse_gencost_row.cpp | 4 +- .../MatPowerTesting/test_parse_matpower.cpp | 4 +- src/Model/PhasorDynamics/Branch/Branch.cpp | 24 +++++----- src/Model/PhasorDynamics/Branch/Branch.hpp | 32 ++++--------- .../PhasorDynamics/Branch/BranchData.hpp | 35 ++++++++++++++ src/Model/PhasorDynamics/Bus/Bus.cpp | 10 ++-- src/Model/PhasorDynamics/Bus/Bus.hpp | 46 ++----------------- src/Model/PhasorDynamics/Bus/BusData.hpp | 32 +++++++++++++ src/Model/PhasorDynamics/Bus/BusInfinite.cpp | 10 ++-- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 46 ++----------------- .../PhasorDynamics/BusFault/BusFault.cpp | 1 - src/Model/PhasorDynamics/Load/Load.cpp | 3 +- src/Model/PhasorDynamics/Load/Load.hpp | 16 +++---- src/Model/PhasorDynamics/Load/LoadData.hpp | 32 +++++++++++++ .../SynchronousMachine/SynchronousMachine.cpp | 2 +- src/Model/PowerFlow/Branch/Branch.cpp | 2 +- src/Model/PowerFlow/Branch/Branch.hpp | 4 +- src/Model/PowerFlow/Bus/BusFactory.hpp | 4 +- src/Model/PowerFlow/Bus/BusPQ.hpp | 4 +- src/Model/PowerFlow/Bus/BusPV.hpp | 4 +- src/Model/PowerFlow/Bus/BusSlack.hpp | 4 +- .../PowerFlow/Generator/GeneratorFactory.hpp | 4 +- src/Model/PowerFlow/Generator/GeneratorPQ.hpp | 4 +- src/Model/PowerFlow/Generator/GeneratorPV.hpp | 4 +- .../PowerFlow/Generator/GeneratorSlack.hpp | 4 +- .../Generator4Param/Generator4Param.cpp | 3 +- src/Model/PowerFlow/Load/Load.hpp | 4 +- src/Model/PowerFlow/MatpowerParser.hpp | 4 +- ...{PowerSystemData.hpp => PowerFlowData.hpp} | 6 +-- src/Model/PowerFlow/SystemModelPowerFlow.hpp | 2 +- 35 files changed, 206 insertions(+), 202 deletions(-) create mode 100644 src/Model/PhasorDynamics/Branch/BranchData.hpp create mode 100644 src/Model/PhasorDynamics/Bus/BusData.hpp create mode 100644 src/Model/PhasorDynamics/Load/LoadData.hpp rename src/Model/PowerFlow/{PowerSystemData.hpp => PowerFlowData.hpp} (98%) diff --git a/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp b/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp index b5d830764..be8dafb0b 100644 --- a/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp +++ b/examples/PowerFlow/Grid3Bus/Grid3BusSys.cpp @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include @@ -79,7 +79,7 @@ using namespace GridKit; using namespace AnalysisManager::Sundials; using namespace AnalysisManager; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; constexpr double theta2_ref = -4.87979; // [deg] constexpr double V2_ref = 1.08281; // [p.u.] @@ -149,7 +149,7 @@ int parserCase() std::cout << "Solving same problem, but assembled from components via a parser ...\n\n"; // Data File Reading - GridKit::PowerSystemData::SystemModelData mp; + GridKit::PowerFlowData::SystemModelData mp; std::istringstream iss(BUS3_DATA_STRING); GridKit::readMatPower(mp, iss); diff --git a/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp index 648296a42..36ecfffdc 100644 --- a/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp +++ b/examples/PowerFlow/MatPowerTesting/MatPowerTesting.hpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include namespace @@ -34,9 +34,9 @@ namespace GridKit { template - inline bool isEqual(PowerSystemData::GenCostData a, - PowerSystemData::GenCostData b, - RealT tol = tol_) + inline bool isEqual(PowerFlowData::GenCostData a, + PowerFlowData::GenCostData b, + RealT tol = tol_) { (void) tol; // suppress warning int fail = 0; @@ -52,9 +52,9 @@ namespace GridKit } template - inline bool isEqual(PowerSystemData::GenData a, - PowerSystemData::GenData b, - RealT tol = tol_) + inline bool isEqual(PowerFlowData::GenData a, + PowerFlowData::GenData b, + RealT tol = tol_) { int fail = 0; @@ -88,9 +88,9 @@ namespace GridKit } template - inline bool isEqual(PowerSystemData::BusData a, - PowerSystemData::BusData b, - RealT tol = tol_) + inline bool isEqual(PowerFlowData::BusData a, + PowerFlowData::BusData b, + RealT tol = tol_) { int fail = 0; @@ -124,9 +124,9 @@ namespace GridKit } template - inline bool isEqual(PowerSystemData::LoadData a, - PowerSystemData::LoadData b, - RealT tol = tol_) + inline bool isEqual(PowerFlowData::LoadData a, + PowerFlowData::LoadData b, + RealT tol = tol_) { int fail = 0; @@ -144,9 +144,9 @@ namespace GridKit } template - inline bool isEqual(PowerSystemData::BranchData a, - PowerSystemData::BranchData b, - RealT tol = tol_) + inline bool isEqual(PowerFlowData::BranchData a, + PowerFlowData::BranchData b, + RealT tol = tol_) { int fail = 0; @@ -197,8 +197,8 @@ namespace GridKit } template - inline bool isEqual(PowerSystemData::SystemModelData a, - PowerSystemData::SystemModelData b) + inline bool isEqual(PowerFlowData::SystemModelData a, + PowerFlowData::SystemModelData b) { int fail = 0; diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp index 442dda532..af353b8d7 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_branch_row.cpp @@ -2,11 +2,11 @@ #include "MatPowerTesting.hpp" #include -#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp index ff874dcfb..e8a535a58 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_bus_row.cpp @@ -2,11 +2,11 @@ #include "MatPowerTesting.hpp" #include -#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp index 437f0af7f..2ce6e4aa5 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gen_row.cpp @@ -2,11 +2,11 @@ #include "MatPowerTesting.hpp" #include -#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp index 68dad3456..19e552023 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_gencost_row.cpp @@ -2,11 +2,11 @@ #include "MatPowerTesting.hpp" #include -#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { diff --git a/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp index c384743f0..856b9cb00 100644 --- a/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp +++ b/examples/PowerFlow/MatPowerTesting/test_parse_matpower.cpp @@ -2,11 +2,11 @@ #include "MatPowerTesting.hpp" #include -#include +#include using namespace GridKit; using namespace GridKit::Testing; -using namespace GridKit::PowerSystemData; +using namespace GridKit::PowerFlowData; namespace { diff --git a/src/Model/PhasorDynamics/Branch/Branch.cpp b/src/Model/PhasorDynamics/Branch/Branch.cpp index c65b3367e..a2277dfcc 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.cpp +++ b/src/Model/PhasorDynamics/Branch/Branch.cpp @@ -12,8 +12,8 @@ #include #include +#include #include -#include namespace GridKit { @@ -36,8 +36,8 @@ namespace GridKit X_(0.01), G_(0.0), B_(0.0), - bus1ID_(0), - bus2ID_(0) + bus1_id_(0), + bus2_id_(0) { size_ = 0; } @@ -67,21 +67,21 @@ namespace GridKit X_(X), G_(G), B_(B), - bus1ID_(0), - bus2ID_(0) + bus1_id_(0), + bus2_id_(0) { } template - Branch::Branch(bus_type* bus1, bus_type* bus2, BranchData& data) + Branch::Branch(bus_type* bus1, bus_type* bus2, model_data_type& data) : bus1_(bus1), bus2_(bus2), - R_(data.r), - X_(data.x), - G_(0.0), - B_(data.b), - bus1ID_(data.fbus), - bus2ID_(data.tbus) + R_(data.R), + X_(data.X), + G_(data.G), + B_(data.B), + bus1_id_(data.bus1_id), + bus2_id_(data.bus2_id) { size_ = 0; } diff --git a/src/Model/PhasorDynamics/Branch/Branch.hpp b/src/Model/PhasorDynamics/Branch/Branch.hpp index 9d6ac38d9..cf3cba0e1 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.hpp +++ b/src/Model/PhasorDynamics/Branch/Branch.hpp @@ -11,22 +11,16 @@ #include // Forward declarations. -namespace GridKit -{ - namespace PowerSystemData - { - template - struct BranchData; - } -} // namespace GridKit - namespace GridKit { namespace PhasorDynamics { template class BusBase; - } + + template + struct BranchData; + } // namespace PhasorDynamics } // namespace GridKit namespace GridKit @@ -51,21 +45,15 @@ namespace GridKit using Component::yp_; using Component::tag_; using Component::f_; - using Component::g_; - using Component::yB_; - using Component::ypB_; - using Component::fB_; - using Component::gB_; - using Component::param_; - using bus_type = BusBase; - using real_type = typename Component::real_type; - using BranchData = GridKit::PowerSystemData::BranchData; + using real_type = typename Component::real_type; + using bus_type = BusBase; + using model_data_type = BranchData; public: Branch(bus_type* bus1, bus_type* bus2); Branch(bus_type* bus1, bus_type* bus2, real_type R, real_type X, real_type G, real_type B); - Branch(bus_type* bus1, bus_type* bus2, BranchData& data); + Branch(bus_type* bus1, bus_type* bus2, model_data_type& data); virtual ~Branch(); virtual int allocate() override; @@ -154,8 +142,8 @@ namespace GridKit real_type X_; real_type G_; real_type B_; - const IdxT bus1ID_; - const IdxT bus2ID_; + const IdxT bus1_id_; + const IdxT bus2_id_; }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/Branch/BranchData.hpp b/src/Model/PhasorDynamics/Branch/BranchData.hpp new file mode 100644 index 000000000..9f66fd28c --- /dev/null +++ b/src/Model/PhasorDynamics/Branch/BranchData.hpp @@ -0,0 +1,35 @@ +/** + * @file BranchData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for branches (transmission lines) + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Branch + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct BranchData + { + RealT R{0.0}; ///< line series resistance + RealT X{0.0}; ///< line series reactance + RealT G{0.0}; ///< line shunt conductance + RealT B{0.0}; ///< line shunt charging + + IdxT bus1_id{0}; ///< Unique ID of bus 1 + IdxT bus2_id{0}; ///< Unique ID of bus 2 + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/Bus.cpp b/src/Model/PhasorDynamics/Bus/Bus.cpp index 3dfaad6ee..4aa83f9ca 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.cpp +++ b/src/Model/PhasorDynamics/Bus/Bus.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace GridKit { @@ -61,10 +61,10 @@ namespace GridKit * @param[in] data - structure with bus data */ template - Bus::Bus(BusData& data) - : BusBase(data.bus_i), - Vr0_(data.Vm * cos(data.Va)), - Vi0_(data.Vm * sin(data.Va)) + Bus::Bus(DataT& data) + : BusBase(data.bus_id), + Vr0_(data.Vr0), + Vi0_(data.Vi0) { // std::cout << "Create Bus..." << std::endl; // std::cout << "Number of equations is " << size_ << std::endl; diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index aedaa2a82..57828ef01 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -6,7 +6,7 @@ // Forward declaration of BusData structure namespace GridKit { - namespace PowerSystemData + namespace PhasorDynamics { template struct BusData; @@ -39,11 +39,11 @@ namespace GridKit public: using real_type = typename BusBase::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using DataT = BusData; Bus(); Bus(ScalarT Vr, ScalarT Vi); - Bus(BusData& data); + Bus(DataT& data); virtual ~Bus(); virtual int allocate() override; @@ -101,46 +101,6 @@ namespace GridKit return f_[1]; } - // virtual ScalarT& VrB() override - // { - // return yB_[0]; - // } - - // virtual const ScalarT& VrB() const override - // { - // return yB_[0]; - // } - - // virtual ScalarT& ViB() override - // { - // return yB_[1]; - // } - - // virtual const ScalarT& ViB() const override - // { - // return yB_[1]; - // } - - // virtual ScalarT& IrB() override - // { - // return fB_[0]; - // } - - // virtual const ScalarT& IrB() const override - // { - // return fB_[0]; - // } - - // virtual ScalarT& IiB() override - // { - // return fB_[1]; - // } - - // virtual const ScalarT& IiB() const override - // { - // return fB_[1]; - // } - private: ScalarT Vr0_{0.0}; ScalarT Vi0_{0.0}; diff --git a/src/Model/PhasorDynamics/Bus/BusData.hpp b/src/Model/PhasorDynamics/Bus/BusData.hpp new file mode 100644 index 000000000..abd8ab595 --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusData.hpp @@ -0,0 +1,32 @@ +/** + * @file BusData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for buses (nodes) + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Bus + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct BusData + { + RealT Vr0{0.0}; ///< Initial value for real bus voltage + RealT Vi0{0.0}; ///< Initial value for imaginary bus voltage + + IdxT bus_id{0}; ///< Unique ID of bus 1 + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp index 61fa5d202..e8a231d13 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace GridKit { @@ -66,10 +66,10 @@ namespace GridKit * @param[in] data - structure with bus data */ template - BusInfinite::BusInfinite(BusData& data) - : BusBase(data.bus_i), - Vr_(data.Vm * cos(data.Va)), - Vi_(data.Vm * sin(data.Va)) + BusInfinite::BusInfinite(DataT& data) + : BusBase(data.bus_id), + Vr_(data.Vr0), + Vi_(data.Vi0) { size_ = 0; } diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 6acdd7c6a..0657ec374 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -6,7 +6,7 @@ // Forward declaration of BusData structure namespace GridKit { - namespace PowerSystemData + namespace PhasorDynamics { template struct BusData; @@ -37,11 +37,11 @@ namespace GridKit public: using real_type = typename BusBase::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using DataT = BusData; BusInfinite(); BusInfinite(ScalarT Vr, ScalarT Vi); - BusInfinite(BusData& data); + BusInfinite(DataT& data); virtual ~BusInfinite(); virtual int allocate() override; @@ -99,46 +99,6 @@ namespace GridKit return Ii_; } - // virtual ScalarT& VrB() override - // { - // return VrB_; - // } - - // virtual const ScalarT& VrB() const override - // { - // return VrB_; - // } - - // virtual ScalarT& ViB() override - // { - // return ViB_; - // } - - // virtual const ScalarT& ViB() const override - // { - // return ViB_; - // } - - // virtual ScalarT& IrB() override - // { - // return IrB_; - // } - - // virtual const ScalarT& IrB() const override - // { - // return IrB_; - // } - - // virtual ScalarT& IiB() override - // { - // return IiB_; - // } - - // virtual const ScalarT& IiB() const override - // { - // return IiB_; - // } - private: ScalarT Vr_{0.0}; ScalarT Vi_{0.0}; diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.cpp b/src/Model/PhasorDynamics/BusFault/BusFault.cpp index 7b12af307..d38324073 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.cpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.cpp @@ -13,7 +13,6 @@ #include #include -#include namespace GridKit { diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index e1ccb26cb..4dcb23728 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -5,6 +5,7 @@ #include #include +#include namespace GridKit { @@ -34,14 +35,12 @@ namespace GridKit : bus_(bus), R_(R), X_(X) - { } template Load::Load(bus_type* bus, IdxT component_id) : bus_(bus) - { size_ = 0; component_id_ = component_id; diff --git a/src/Model/PhasorDynamics/Load/Load.hpp b/src/Model/PhasorDynamics/Load/Load.hpp index d85355093..221f21043 100644 --- a/src/Model/PhasorDynamics/Load/Load.hpp +++ b/src/Model/PhasorDynamics/Load/Load.hpp @@ -11,7 +11,10 @@ namespace GridKit { template class BusBase; - } + + template + struct LoadData; + } // namespace PhasorDynamics } // namespace GridKit namespace GridKit @@ -33,16 +36,11 @@ namespace GridKit using Component::yp_; using Component::tag_; using Component::f_; - using Component::g_; - using Component::yB_; - using Component::ypB_; - using Component::fB_; - using Component::gB_; - using Component::param_; using Component::component_id_; - using bus_type = BusBase; - using real_type = typename Component::real_type; + using real_type = typename Component::real_type; + using bus_type = BusBase; + using model_data_type = LoadData; public: Load(bus_type* bus); diff --git a/src/Model/PhasorDynamics/Load/LoadData.hpp b/src/Model/PhasorDynamics/Load/LoadData.hpp new file mode 100644 index 000000000..f28929274 --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadData.hpp @@ -0,0 +1,32 @@ +/** + * @file LoadData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for loads + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Load + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct LoadData + { + RealT R{0.0}; ///< load resistance + RealT X{0.0}; ///< load reactance + + IdxT bus_id{0}; ///< Unique ID of bus 1 + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp index f007ce8c0..9dc535cd3 100644 --- a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp +++ b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp @@ -101,7 +101,7 @@ namespace GridKit template int SynchronousMachine::evaluateResidual() { - ScalarT rkq1 = std::get<0>(Rkq_); + ScalarT rkq1 = std::get<0>(Rkq_); [[maybe_unused]] ScalarT rkq2 = std::get<1>(Rkq_); ScalarT llkq1 = std::get<0>(Llkq_); diff --git a/src/Model/PowerFlow/Branch/Branch.cpp b/src/Model/PowerFlow/Branch/Branch.cpp index ecbc1b6d2..407db8152 100644 --- a/src/Model/PowerFlow/Branch/Branch.cpp +++ b/src/Model/PowerFlow/Branch/Branch.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include namespace GridKit { diff --git a/src/Model/PowerFlow/Branch/Branch.hpp b/src/Model/PowerFlow/Branch/Branch.hpp index c7eca8046..1a586a830 100644 --- a/src/Model/PowerFlow/Branch/Branch.hpp +++ b/src/Model/PowerFlow/Branch/Branch.hpp @@ -10,7 +10,7 @@ namespace GridKit template class BaseBus; - namespace PowerSystemData + namespace PowerFlowData { template struct BranchData; @@ -43,7 +43,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using BranchData = GridKit::PowerSystemData::BranchData; + using BranchData = GridKit::PowerFlowData::BranchData; public: Branch(bus_type* bus1, bus_type* bus2); diff --git a/src/Model/PowerFlow/Bus/BusFactory.hpp b/src/Model/PowerFlow/Bus/BusFactory.hpp index dc91c38b7..afd16c685 100644 --- a/src/Model/PowerFlow/Bus/BusFactory.hpp +++ b/src/Model/PowerFlow/Bus/BusFactory.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace GridKit { @@ -14,7 +14,7 @@ namespace GridKit { public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusFactory() = delete; diff --git a/src/Model/PowerFlow/Bus/BusPQ.hpp b/src/Model/PowerFlow/Bus/BusPQ.hpp index e0b76b169..903fe9d5b 100644 --- a/src/Model/PowerFlow/Bus/BusPQ.hpp +++ b/src/Model/PowerFlow/Bus/BusPQ.hpp @@ -3,7 +3,7 @@ #define _BUS_PQ_HPP_ #include "BaseBus.hpp" -#include +#include namespace GridKit { @@ -29,7 +29,7 @@ namespace GridKit public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusPQ(); BusPQ(ScalarT V, ScalarT theta); diff --git a/src/Model/PowerFlow/Bus/BusPV.hpp b/src/Model/PowerFlow/Bus/BusPV.hpp index b4ea8fd87..bbfe87aad 100644 --- a/src/Model/PowerFlow/Bus/BusPV.hpp +++ b/src/Model/PowerFlow/Bus/BusPV.hpp @@ -5,7 +5,7 @@ #include #include "BaseBus.hpp" -#include +#include namespace GridKit { @@ -31,7 +31,7 @@ namespace GridKit public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusPV(); BusPV(ScalarT V, ScalarT theta0); diff --git a/src/Model/PowerFlow/Bus/BusSlack.hpp b/src/Model/PowerFlow/Bus/BusSlack.hpp index 4a693e434..aeaf0a62b 100644 --- a/src/Model/PowerFlow/Bus/BusSlack.hpp +++ b/src/Model/PowerFlow/Bus/BusSlack.hpp @@ -3,7 +3,7 @@ #define _BUS_SLACK_HPP_ #include "BaseBus.hpp" -#include +#include namespace GridKit { @@ -29,7 +29,7 @@ namespace GridKit public: using real_type = typename ModelEvaluatorImpl::real_type; - using BusData = GridKit::PowerSystemData::BusData; + using BusData = GridKit::PowerFlowData::BusData; BusSlack(); BusSlack(ScalarT V, ScalarT theta); diff --git a/src/Model/PowerFlow/Generator/GeneratorFactory.hpp b/src/Model/PowerFlow/Generator/GeneratorFactory.hpp index daedd23b4..fcf5ba41f 100644 --- a/src/Model/PowerFlow/Generator/GeneratorFactory.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorFactory.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include namespace GridKit { @@ -15,7 +15,7 @@ namespace GridKit { public: using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; GeneratorFactory() = delete; diff --git a/src/Model/PowerFlow/Generator/GeneratorPQ.hpp b/src/Model/PowerFlow/Generator/GeneratorPQ.hpp index 0628257e2..db763069f 100644 --- a/src/Model/PowerFlow/Generator/GeneratorPQ.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorPQ.hpp @@ -5,7 +5,7 @@ #include "GeneratorBase.hpp" #include -#include +#include namespace GridKit { @@ -39,7 +39,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; public: GeneratorPQ(bus_type* bus, GenData& data); diff --git a/src/Model/PowerFlow/Generator/GeneratorPV.hpp b/src/Model/PowerFlow/Generator/GeneratorPV.hpp index efe629f19..677c6034a 100644 --- a/src/Model/PowerFlow/Generator/GeneratorPV.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorPV.hpp @@ -5,7 +5,7 @@ #include "GeneratorBase.hpp" #include -#include +#include namespace GridKit { @@ -39,7 +39,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; public: GeneratorPV(bus_type* bus, GenData& data); diff --git a/src/Model/PowerFlow/Generator/GeneratorSlack.hpp b/src/Model/PowerFlow/Generator/GeneratorSlack.hpp index 43a7c3212..d2665d24b 100644 --- a/src/Model/PowerFlow/Generator/GeneratorSlack.hpp +++ b/src/Model/PowerFlow/Generator/GeneratorSlack.hpp @@ -4,7 +4,7 @@ #include #include "GeneratorBase.hpp" -#include +#include namespace GridKit { @@ -38,7 +38,7 @@ namespace GridKit using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using GenData = GridKit::PowerSystemData::GenData; + using GenData = GridKit::PowerFlowData::GenData; // typedef typename ModelEvaluatorImpl::real_type real_type; // typedef BaseBus bus_type; diff --git a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp index 86e903cfe..b1dd73f20 100644 --- a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp +++ b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp @@ -1,9 +1,10 @@ #define _USE_MATH_DEFINES +#include "Generator4Param.hpp" + #include #include -#include "Generator4Param.hpp" #include namespace GridKit diff --git a/src/Model/PowerFlow/Load/Load.hpp b/src/Model/PowerFlow/Load/Load.hpp index 5091761c9..b13cb1340 100644 --- a/src/Model/PowerFlow/Load/Load.hpp +++ b/src/Model/PowerFlow/Load/Load.hpp @@ -3,7 +3,7 @@ #define _LOAD_HPP_ #include -#include +#include namespace GridKit { @@ -39,7 +39,7 @@ namespace GridKit // typedef BaseBus bus_type; using bus_type = BaseBus; using real_type = typename ModelEvaluatorImpl::real_type; - using LoadData = GridKit::PowerSystemData::LoadData; + using LoadData = GridKit::PowerFlowData::LoadData; public: Load(bus_type* bus, ScalarT P, ScalarT Q); diff --git a/src/Model/PowerFlow/MatpowerParser.hpp b/src/Model/PowerFlow/MatpowerParser.hpp index dcf926ef9..ae374b8aa 100644 --- a/src/Model/PowerFlow/MatpowerParser.hpp +++ b/src/Model/PowerFlow/MatpowerParser.hpp @@ -17,11 +17,11 @@ #include #include -#include +#include namespace GridKit { - using namespace GridKit::PowerSystemData; + using namespace GridKit::PowerFlowData; static const std::string matlab_syntax_error{ "Only a subset of Matlab syntax is supported." diff --git a/src/Model/PowerFlow/PowerSystemData.hpp b/src/Model/PowerFlow/PowerFlowData.hpp similarity index 98% rename from src/Model/PowerFlow/PowerSystemData.hpp rename to src/Model/PowerFlow/PowerFlowData.hpp index 1a71be0a8..2c674a7a6 100644 --- a/src/Model/PowerFlow/PowerSystemData.hpp +++ b/src/Model/PowerFlow/PowerFlowData.hpp @@ -6,7 +6,7 @@ /** * - * @file PowerSystemData.hpp + * @file PowerFlowData.hpp * @author Asher Mancinelli * * @remark `std::stringstream` is preferred over `operator+(std::string, ...)` @@ -17,7 +17,7 @@ namespace GridKit { - namespace PowerSystemData + namespace PowerFlowData { template @@ -238,5 +238,5 @@ namespace GridKit } }; // struct SystemModelData - } // namespace PowerSystemData + } // namespace PowerFlowData } // namespace GridKit diff --git a/src/Model/PowerFlow/SystemModelPowerFlow.hpp b/src/Model/PowerFlow/SystemModelPowerFlow.hpp index d43883f6c..ce4148eb7 100644 --- a/src/Model/PowerFlow/SystemModelPowerFlow.hpp +++ b/src/Model/PowerFlow/SystemModelPowerFlow.hpp @@ -75,7 +75,7 @@ namespace GridKit * * @param mp model data */ - SystemSteadyStateModel(GridKit::PowerSystemData::SystemModelData mp) + SystemSteadyStateModel(GridKit::PowerFlowData::SystemModelData mp) : ModelEvaluatorImpl(0, 0, 0) { rel_tol_ = 1e-5; From bb8487e6e1ab26a5f3240ea3ae3ad43b1ff657d5 Mon Sep 17 00:00:00 2001 From: pelesh Date: Tue, 3 Jun 2025 11:15:57 -0400 Subject: [PATCH 032/139] Create README file documenting classical generator model (#122) * Creat README file for classical generator model. --- .../SynchronousMachine/GenClassical/README.md | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md new file mode 100644 index 000000000..aa1dbe490 --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md @@ -0,0 +1,136 @@ +# Classical Generator + +An electrical machine model with two differential variables (i.e. second order +model) is often called classical generator model. While its predicitve ability +is limited, it is useful for studies of grid network properties. Mathematically, +it is equivalent to a driven damped pendulum model. + +## Model Parameters + +Symbol | Units | Description | Note +------------|---------|---------------------------------|---------------------- +$\omega_0$ | [rad/s] | synchronous frequency | +$H$ | [s] | rotor inertia | +$D$ | [p.u.] | damping coefficient | +$R_a$ | [p.u.] | winding resistance | +$X_{dp}$ | [p.u.] | machine reactance parameter | + +### Model Derived Parameters + +- $g = \dfrac{R_a}{R_a^2 + X_{dp}^2}$ +- $b = \dfrac{-X_{dp}}{R_a^2 + X_{dp}^2}$ + +
+ +## Model Variables + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +------------|---------|---------------------|---------------------- +$\delta$ | [rad] | machine power angle | +$\omega$ | [p.u] | machine speed | Optionally read by a governor or a stabilizer component + +#### Algebraic + +Symbol | Units | Description | Note +--------|--------|-------------------------------------|------------- +$T_{e}$ | [p.u.] | electrical torque | +$I_r$ | [p.u.] | machine real injection current | read by bus +$I_i$ | [p.u.] | machine imaginary injection current | read by bus + +Note: All three can be expressed as function called by model equations. We add +these as variables as they are needed for outputs. + +
+ +### External Variables + +External variables enter component model equations but are owned by other +components. The other components also provide equations needed to have a +balanced system of equations. + +#### Differential + +None. + +#### Algebraic + +Symbol | Units | Description | Note +-------|---------|-------------------------------|---------------------- +$V_r$ | [p.u.] | machine bus real voltage | owned by a bus object +$V_i$ | [p.u.] | machine bus imaginary voltage | owned by a bus object +$P_m$ | [p.u.] | mechanical power input | owned by governor, constant if no governor is connected to the machine +$E_p$ | [p.u.] | field winding voltage | owned by exciter, constant if no exciter is connected to the machine + +
+ + +## Model Equations + +### Differential Equations + +```math +\begin{aligned} +\dot{\delta} &= (\omega - 1) \cdot \omega_0 \\ +\dot{\omega} &= \frac{1}{2H}\left( \frac{P_{m} - D(\omega - 1)}{\omega} - T_{e}\right) +\end{aligned} +``` + +### Algebraic Equations + +```math +\begin{aligned} + 0 &= T_{e} - \frac{1}{\omega}\left( g E_p^2 - E_p \left[(gV_r - bV_i)\cos\delta + (bV_r + gV_i)\sin\delta \right]\right)\\ + 0 &= I_r + gV_r - bV_i - E_p(g \cos\delta - b \sin\delta) \\ + 0 &= I_i + gV_r + bV_i - E_p(b \cos\delta + g \sin\delta) +\end{aligned} +``` +As noted earlier, all three algebraic equations can be expressed as functions +and substituted directly in the component and bus equations, respectively. We +use redundant variables for modeling convenience. + +
+ +## Initialization + +To initialize the model, given bus voltages $V_r$, $V_i$, and initial generator +injection active and reactive power, $P$ and $Q$, we take following steps to +initialize the system: + +First compute injection currents from initial power injection power and bus +voltages: +```math +\begin{aligned} +I_r &= \frac{PV_r + QV_i}{V_r^2 + V_i^2} \\ +I_i &= \frac{PV_i - QV_r}{V_r^2 + V_i^2} +\end{aligned} +``` + +Next compute field winding voltage and machine angle: +```math +\begin{aligned} +E_r &= \frac{ g(I_r + gV_r - bV_i) + b (I_i + bV_r + gV_i) }{g^2 + b^2} \\ +E_i &= \frac{ -b(I_r + gV_r - bV_i) + g (I_i + bV_r + gV_i) }{g^2 + b^2} \\ +E_p &= \sqrt{E_r^2 + E_i^2} \\ +\delta &= \arctan \dfrac{E_i}{E_r} +\end{aligned} +``` + +Set machine speed to the synchronous speed: +```math +\omega = 1 +``` + +Now, we can compute electrical torque and set mechanical torque to be equal +to the electrical. +```math +\begin{aligned} +T_{elec} &= gE_p^2 - E_p \left[ (gV_r - bV_i ) \cos\delta + (bV_r + gV_i )\sin\delta \right] \\ +P_{mech} &= T_{elec} +\end{aligned} +``` + +With this, we initialize the machine at a steady state. From 6177b39b089e8782210ffef3401a879b7fa1b6dd Mon Sep 17 00:00:00 2001 From: superwhiskers Date: Wed, 4 Jun 2025 16:05:46 -0500 Subject: [PATCH 033/139] fix remaining warnings (on-repo) (#125) --------- Co-authored-by: superwhiskers --- CMakeLists.txt | 3 - .../PowerElectronics/Microgrid/Microgrid.cpp | 2 +- .../PowerElectronics/RLCircuit/RLCircuit.cpp | 4 +- .../ScaleMicrogrid/ScaleMicrogrid.cpp | 2 +- src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp | 45 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 826 +++++++++--------- .../PowerElectronics/Capacitor/Capacitor.cpp | 6 +- src/Model/PowerElectronics/CircuitGraph.hpp | 2 +- .../DistributedGenerator.cpp | 8 +- .../InductionMotor/InductionMotor.cpp | 6 +- .../PowerElectronics/Inductor/Inductor.cpp | 6 +- .../LinearTransformer/LinearTransformer.cpp | 6 +- .../MicrogridBusDQ/MicrogridBusDQ.cpp | 6 +- .../MicrogridLine/MicrogridLine.cpp | 6 +- .../MicrogridLoad/MicrogridLoad.cpp | 6 +- .../PowerElectronics/Resistor/Resistor.cpp | 6 +- .../SynchronousMachine/SynchronousMachine.cpp | 6 +- .../TransmissionLine/TransmissionLine.cpp | 6 +- .../VoltageSource/VoltageSource.cpp | 6 +- src/Model/PowerFlow/Bus/BusPQ.cpp | 16 +- src/Model/PowerFlow/Bus/BusPV.cpp | 16 +- src/Model/PowerFlow/Generator2/Generator2.cpp | 2 +- src/Model/PowerFlow/Generator4/Generator4.cpp | 8 +- .../Generator4Governor/Generator4Governor.cpp | 116 +-- .../Generator4Governor/Generator4Governor.hpp | 20 +- .../Generator4Param/Generator4Param.cpp | 24 +- src/Model/PowerFlow/ModelEvaluatorImpl.hpp | 22 +- src/Solver/Dynamic/Ida.cpp | 30 +- src/Solver/Optimization/DynamicConstraint.cpp | 94 +- src/Solver/Optimization/DynamicObjective.cpp | 88 +- src/Solver/SteadyState/Kinsol.cpp | 6 +- 31 files changed, 745 insertions(+), 655 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a65f53af2..a9982f3e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,9 +20,6 @@ set(PACKAGE_VERSION_PATCH "0") set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") -# TODO: Probably beter to set a debug interface target -# set(CMAKE_CXX_FLAGS_DEBUG "-Wall -O0 -g -DDEBUG") - set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wconversion -Wpedantic") diff --git a/examples/PowerElectronics/Microgrid/Microgrid.cpp b/examples/PowerElectronics/Microgrid/Microgrid.cpp index 5ca5f35c3..3475d7891 100644 --- a/examples/PowerElectronics/Microgrid/Microgrid.cpp +++ b/examples/PowerElectronics/Microgrid/Microgrid.cpp @@ -106,7 +106,7 @@ int main(int /* argc */, char const** /* argv */) dg1->setExternalConnectionNodes(1, dqbus1); dg1->setExternalConnectionNodes(2, dqbus1 + 1); //"grounding" of the difference - dg1->setExternalConnectionNodes(3, -1); + dg1->setExternalConnectionNodes(3, static_cast(-1)); // internal connections for (size_t i = 0; i < 12; i++) { diff --git a/examples/PowerElectronics/RLCircuit/RLCircuit.cpp b/examples/PowerElectronics/RLCircuit/RLCircuit.cpp index 1bea6597b..4c80d0a81 100644 --- a/examples/PowerElectronics/RLCircuit/RLCircuit.cpp +++ b/examples/PowerElectronics/RLCircuit/RLCircuit.cpp @@ -37,7 +37,7 @@ int main(int /* argc */, char const** /* argv */) // input induct->setExternalConnectionNodes(0, 1); // output - induct->setExternalConnectionNodes(1, -1); + induct->setExternalConnectionNodes(1, static_cast(-1)); // internal induct->setExternalConnectionNodes(2, 2); // add component @@ -59,7 +59,7 @@ int main(int /* argc */, char const** /* argv */) GridKit::VoltageSource* vsource = new GridKit::VoltageSource(idoff, vinit); // Form index to node uid realations // input - vsource->setExternalConnectionNodes(0, -1); + vsource->setExternalConnectionNodes(0, static_cast(-1)); // output vsource->setExternalConnectionNodes(1, 0); // internal diff --git a/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp b/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp index 9864235a7..ebc573d49 100644 --- a/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp +++ b/examples/PowerElectronics/ScaleMicrogrid/ScaleMicrogrid.cpp @@ -192,7 +192,7 @@ int test(index_type Nsize, real_type error_tol, bool debug_output) dg_ref->setExternalConnectionNodes(1, vdqbus_index[0]); dg_ref->setExternalConnectionNodes(2, vdqbus_index[0] + 1); //"grounding" of the difference - dg_ref->setExternalConnectionNodes(3, -1); + dg_ref->setExternalConnectionNodes(3, static_cast(-1)); // internal connections for (index_type i = 0; i < 12; i++) { diff --git a/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp b/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp index 33d28324e..7b108b650 100644 --- a/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp +++ b/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp @@ -189,12 +189,12 @@ inline std::vector COO_Matrix::getCSRRowData() { if (!this->isSorted()) this->sortSparse(); - std::vector row_size_vec(this->rows_size_ + 1, 0); - IdxT counter = 0; - for (IdxT i = 0; i < static_cast(row_size_vec.size() - 1); i++) + std::vector row_size_vec(static_cast(this->rows_size_ + 1), 0); + size_t counter = 0; + for (size_t i = 0; i < row_size_vec.size() - 1; i++) { row_size_vec[i + 1] = row_size_vec[i]; - while (counter < static_cast(this->row_indices_.size()) && i == this->row_indices_[counter]) + while (counter < this->row_indices_.size() && i == static_cast(this->row_indices_[counter])) { row_size_vec[i + 1]++; counter++; @@ -226,12 +226,12 @@ inline void COO_Matrix::setValues(std::vector r, std::vecto this->sortSparseCOO(r, c, v); // Duplicated with axpy. Could replace with function depdent on lambda expression - IdxT a_iter = 0; + size_t a_iter = 0; // iterate for all current values_ in matrix - for (IdxT i = 0; i < static_cast(this->row_indices_.size()); i++) + for (size_t i = 0; i < this->row_indices_.size(); i++) { // pushback values_ when they are not in current matrix - while (a_iter < static_cast(r.size()) && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) { this->row_indices_.push_back(r[a_iter]); this->column_indices_.push_back(c[a_iter]); @@ -239,7 +239,8 @@ inline void COO_Matrix::setValues(std::vector r, std::vecto this->checkIncreaseSize(r[a_iter], c[a_iter]); a_iter++; } - if (a_iter >= static_cast(r.size())) + + if (a_iter >= r.size()) { break; } @@ -251,7 +252,7 @@ inline void COO_Matrix::setValues(std::vector r, std::vecto } } // push back rest that was not found sorted - for (IdxT i = a_iter; i < static_cast(r.size()); i++) + for (size_t i = a_iter; i < r.size(); i++) { this->row_indices_.push_back(r[i]); this->column_indices_.push_back(c[i]); @@ -299,12 +300,12 @@ inline void COO_Matrix::axpy(ScalarT alpha, COO_Matrixrows_size_ = this->rows_size_ > m ? this->rows_size_ : m; this->columns_size_ = this->columns_size_ > n ? this->columns_size_ : n; - IdxT a_iter = 0; + size_t a_iter = 0; // iterate for all current values in matrix - for (IdxT i = 0; i < static_cast(this->row_indices_.size()); i++) + for (size_t i = 0; i < this->row_indices_.size(); i++) { // pushback values when they are not in current matrix - while (a_iter < static_cast(r.size()) && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) { this->row_indices_.push_back(r[a_iter]); this->column_indices_.push_back(c[a_iter]); @@ -313,7 +314,7 @@ inline void COO_Matrix::axpy(ScalarT alpha, COO_MatrixcheckIncreaseSize(r[a_iter], c[a_iter]); a_iter++; } - if (a_iter >= static_cast(r.size())) + if (a_iter >= r.size()) { break; } @@ -325,7 +326,7 @@ inline void COO_Matrix::axpy(ScalarT alpha, COO_Matrix(r.size()); i++) + for (size_t i = a_iter; i < r.size(); i++) { this->row_indices_.push_back(r[i]); this->column_indices_.push_back(c[i]); @@ -366,12 +367,12 @@ inline void COO_Matrix::axpy(ScalarT alpha, std::vector r, // sort input this->sortSparseCOO(r, c, v); - IdxT a_iter = 0; + size_t a_iter = 0; // iterate for all current values_ in matrix - for (IdxT i = 0; i < static_cast(this->row_indices_.size()); i++) + for (size_t i = 0; i < this->row_indices_.size(); i++) { // pushback values_ when they are not in current matrix - while (a_iter < static_cast(r.size()) && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) { this->row_indices_.push_back(r[a_iter]); this->column_indices_.push_back(c[a_iter]); @@ -380,7 +381,7 @@ inline void COO_Matrix::axpy(ScalarT alpha, std::vector r, this->checkIncreaseSize(r[a_iter], c[a_iter]); a_iter++; } - if (a_iter >= static_cast(r.size())) + if (a_iter >= r.size()) { break; } @@ -392,7 +393,7 @@ inline void COO_Matrix::axpy(ScalarT alpha, std::vector r, } } // push back rest that was not found sorted_ - for (IdxT i = a_iter; i < static_cast(r.size()); i++) + for (IdxT i = a_iter; i < r.size(); i++) { this->row_indices_.push_back(r[i]); this->column_indices_.push_back(c[i]); @@ -489,7 +490,7 @@ inline void COO_Matrix::permutationSizeMap(std::vector row_ this->rows_size_ = m; this->columns_size_ = n; - for (int i = 0; i < this->values_.size(); i++) + for (size_t i = 0; i < this->values_.size(); i++) { if (row_perm[this->row_indices_[i]] == -1 || col_perm[this->column_indices_[i]] == -1) { @@ -514,7 +515,7 @@ inline void COO_Matrix::permutationSizeMap(std::vector row_ template inline void COO_Matrix::zeroMatrix() { - // resize doesn't effect capacity if smaller + // resize doesn't affect capacity if smaller this->column_indices_.resize(0); this->row_indices_.resize(0); this->values_.resize(0); @@ -779,7 +780,7 @@ inline void COO_Matrix::sortSparseCOO(std::vector& rows, st // Sort by row first then column. std::sort(std::begin(ordervec), std::end(ordervec), - [&](int i1, int i2) + [&](auto i1, auto i2) { return (rows[i1] < rows[i2]) || (rows[i1] == rows[i2] && columns[i1] < columns[i2]); }); // reorder based of index-sorting. Only swap cost no extra memory. diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 1edd2dee9..7608d1956 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -1,413 +1,413 @@ -/** - * @file Genrou.cpp - * @author Adam Birchfield (abirchfield@tamu.edu) - * @author Slaven Peles (peless@ornl.gov) - * @brief Definition of a GENROU generator model. - * - * - */ - -#define _USE_MATH_DEFINES -#include "Genrou.hpp" - -#include -#include - -#include - -#define _USE_MATH_DEFINES - -namespace GridKit -{ - namespace PhasorDynamics - { - /*! - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ - template - Genrou::Genrou(bus_type* bus, int unit_id) - : bus_(bus), - busID_(0), - unit_id_(unit_id), - p0_(0.), - q0_(0.), - H_(3.), - D_(0.), - Ra_(0.), - Tdop_(7.), - Tdopp_(.04), - Tqopp_(.05), - Tqop_(.75), - Xd_(2.1), - Xdp_(0.2), - Xdpp_(0.18), - Xq_(.5), - Xqp_(.5), - Xqpp_(.18), - Xl_(.15), - S10_(0.), - S12_(0.) - { - size_ = 21; - setDerivedParams(); - - // Temporary, to eliminate compiler warnings - (void) busID_; - (void) unit_id_; - } - - /*! - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ - template - Genrou::Genrou(bus_type* bus, - int unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12) - : bus_(bus), - busID_(0), - unit_id_(unit_id), - p0_(p0), - q0_(q0), - H_(H), - D_(D), - Ra_(Ra), - Tdop_(Tdop), - Tdopp_(Tdopp), - Tqopp_(Tqopp), - Tqop_(Tqop), - Xd_(Xd), - Xdp_(Xdp), - Xdpp_(Xdpp), - Xq_(Xq), - Xqp_(Xqp), - Xqpp_(Xqpp), - Xl_(Xl), - S10_(S10), - S12_(S12) - { - size_ = 21; - setDerivedParams(); - } - - // /** - // * @brief Destroy the Genrou - // * - // * @tparam ScalarT - // * @tparam IdxT - // */ - // template - // Genrou::~Genrou() - // { - // // std::cout << "Destroy Genrou..." << std::endl; - // } - - /*! - * @brief allocate method computes sparsity pattern of the Jacobian. - */ - template - int Genrou::allocate() - { - f_.resize(size_); - y_.resize(size_); - yp_.resize(size_); - tag_.resize(size_); - fB_.resize(size_); - yB_.resize(size_); - ypB_.resize(size_); - return 0; - } - - /** - * Initialization of the branch model - * - */ - template - int Genrou::initialize() - { - /* Initialization tricks -- assuming NO saturation */ - ScalarT vr = Vr(); - ScalarT vi = Vi(); - ScalarT p = p0_; - ScalarT q = q0_; - ScalarT vm2 = vr * vr + vi * vi; - ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; - ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; - ScalarT delta = atan2(Ei, Er); - ScalarT omega = 0; - ScalarT ir = (p * vr + q * vi) / vm2; - ScalarT ii = (p * vi - q * vr) / vm2; - ScalarT id = ir * sin(delta) - ii * cos(delta); - ScalarT iq = ir * cos(delta) + ii * sin(delta); - ScalarT vd = vr * sin(delta) - vi * cos(delta) + id * Ra_ - iq * Xqpp_; - ScalarT vq = vr * cos(delta) + vi * sin(delta) + id * Xqpp_ - iq * Ra_; - ScalarT psiqpp = -vd / (1 + omega); - ScalarT psidpp = vq / (1 + omega); - ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; - ScalarT psiqp = -(-(Xqp_ - Xl_) * iq + psiqpp * (Xqp_ - Xl_) / (Xqpp_ - Xl_)) - / (1 + (Xqp_ - Xqpp_) / (Xqpp_ - Xl_)); - ScalarT Edp = psiqp - (Xqp_ - Xl_) * iq; - ScalarT psidp = -((Xdp_ - Xl_) * id - psidpp * (Xdp_ - Xl_) / (Xdpp_ - Xl_)) - / (1 + (Xdp_ - Xdpp_) / (Xdpp_ - Xl_)); - ScalarT Eqp = psidp + (Xdp_ - Xl_) * id; - - /* Now we have the state variables, solve for alg. variables */ - ScalarT ksat; - ScalarT psipp; - - y_[0] = delta; //= 0.55399038; - y_[1] = omega; // = 0; - y_[2] = Eqp; // = 0.995472581; - y_[3] = psidp; // = 0.971299567; - y_[4] = psiqp; // = 0.306880069; - y_[5] = Edp; // = 0; - - y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; - y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; - y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); - y_[9] = ksat = SB_ * pow(psipp - SA_, 2); - y_[10] = vd = -psiqpp * (1 + omega); - y_[11] = vq = psidpp * (1 + omega); - y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; - y_[13] = id; - y_[14] = iq; - y_[15] = ir; - y_[16] = ii; - y_[17] = pmech_set_ = Te; - y_[18] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; - y_[19] = G_ * (vd * sin(delta) + vq * cos(delta)) - - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ - y_[20] = B_ * (vd * sin(delta) + vq * cos(delta)) - + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ - - for (IdxT i = 0; i < size_; ++i) - yp_[i] = 0.0; - - return 0; - } - - /** - * \brief Identify differential variables. - */ - template - int Genrou::tagDifferentiable() - { - for (IdxT i = 0; i < size_; ++i) - { - tag_[i] = i < 6; - } - return 0; - } - - /** - * \brief Residual contribution of the branch is pushed to the - * two terminal buses. - * - */ - template - int Genrou::evaluateResidual() - { - /* Read variables */ - ScalarT delta = y_[0]; - ScalarT omega = y_[1]; - ScalarT Eqp = y_[2]; - ScalarT psidp = y_[3]; - ScalarT psiqp = y_[4]; - ScalarT Edp = y_[5]; - ScalarT psiqpp = y_[6]; - ScalarT psidpp = y_[7]; - ScalarT psipp = y_[8]; - ScalarT ksat = y_[9]; - ScalarT vd = y_[10]; - ScalarT vq = y_[11]; - ScalarT telec = y_[12]; - ScalarT id = y_[13]; - ScalarT iq = y_[14]; - ScalarT ir = y_[15]; - ScalarT ii = y_[16]; - ScalarT pmech = y_[17]; - ScalarT efd = y_[18]; - ScalarT inr = y_[19]; - ScalarT ini = y_[20]; - ScalarT vr = Vr(); - ScalarT vi = Vi(); - - /* Read derivatives */ - ScalarT delta_dot = yp_[0]; - ScalarT omega_dot = yp_[1]; - ScalarT Eqp_dot = yp_[2]; - ScalarT psidp_dot = yp_[3]; - ScalarT psiqp_dot = yp_[4]; - ScalarT Edp_dot = yp_[5]; - - /* 6 Genrou differential equations */ - f_[0] = delta_dot - omega * (2 * M_PI * 60); - f_[1] = omega_dot - (1 / (2 * H_)) * ((pmech - D_ * omega) / (1 + omega) - telec); - f_[2] = Eqp_dot - (1 / Tdop_) * (efd - (Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat)); - f_[3] = psidp_dot - (1 / Tdopp_) * (Eqp - psidp - Xd2_ * id); - f_[4] = psiqp_dot - (1 / Tqopp_) * (Edp - psiqp + Xq2_ * iq); - f_[5] = Edp_dot - (1 / Tqop_) * (-Edp + Xqd_ * psiqpp * ksat + Xq1_ * (iq - Xq3_ * (Edp + iq * Xq2_ - psiqp))); - - /* 11 Genrou algebraic equations */ - f_[6] = psiqpp - (-psiqp * Xq4_ - Edp * Xq5_); - f_[7] = psidpp - (psidp * Xd4_ + Eqp * Xd5_); - f_[8] = psipp - sqrt(pow(psidpp, 2.0) + pow(psiqpp, 2.0)); - f_[9] = ksat - SB_ * pow(psipp - SA_, 2.0); - f_[10] = vd + psiqpp * (1 + omega); - f_[11] = vq - psidpp * (1 + omega); - f_[12] = telec - ((psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id); - f_[13] = id - (ir * sin(delta) - ii * cos(delta)); - f_[14] = iq - (ir * cos(delta) + ii * sin(delta)); - f_[15] = ir + G_ * vr - B_ * vi - inr; - f_[16] = ii + B_ * vr + G_ * vi - ini; - - /* 2 Genrou control inputs are set to constant for this example */ - f_[17] = pmech - pmech_set_; - f_[18] = efd - efd_set_; - - /* 2 Genrou current source definitions */ - f_[19] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); - f_[20] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); - - /* Current balance */ - Ir() += inr - Vr() * G_ + Vi() * B_; - Ii() += ini - Vr() * B_ - Vi() * G_; - - return 0; - } - - /** - * @brief Jacobian evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateJacobian() - { - std::cout << "Evaluate Jacobian for Genrou..." << std::endl; - std::cout << "Jacobian evaluation not implemented!" << std::endl; - return 0; - } - - /** - * @brief Integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateIntegrand() - { - // std::cout << "Evaluate Integrand for Genrou..." << std::endl; - return 0; - } - - /** - * @brief Adjoint initialization not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::initializeAdjoint() - { - // std::cout << "Initialize adjoint for Genrou..." << std::endl; - return 0; - } - - /** - * @brief Adjoint residual evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateAdjointResidual() - { - // std::cout << "Evaluate adjoint residual for Genrou..." << std::endl; - return 0; - } - - /** - * @brief Adjoint integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Genrou::evaluateAdjointIntegrand() - { - // std::cout << "Evaluate adjoint Integrand for Genrou..." << std::endl; - return 0; - } - - template - void Genrou::setDerivedParams() - { - SA_ = 0; - SB_ = 0; - if (S12_ != 0) - { - real_type s112 = sqrt(S10_ / S12_); - - SA_ = (1.2 * s112 + 1) / (s112 + 1); - SB_ = (1.2 * s112 - 1) / (s112 - 1); - if (SB_ < SA_) - SA_ = SB_; - SB_ = S12_ / pow(SA_ - 1.2, 2); - } - Xd1_ = Xd_ - Xdp_; - Xd2_ = Xdp_ - Xl_; - Xd3_ = (Xdp_ - Xdpp_) / (Xd2_ * Xd2_); - Xd4_ = (Xdp_ - Xdpp_) / Xd2_; - Xd5_ = (Xdpp_ - Xl_) / Xd2_; - Xq1_ = Xq_ - Xqp_; - Xq2_ = Xqp_ - Xl_; - Xq3_ = (Xqp_ - Xqpp_) / (Xq2_ * Xq2_); - Xq4_ = (Xqp_ - Xqpp_) / Xq2_; - Xq5_ = (Xqpp_ - Xl_) / Xq2_; - Xqd_ = (Xq_ - Xl_) / (Xd_ - Xl_); - G_ = Ra_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); - B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); - } - - // Available template instantiations - template class Genrou; - template class Genrou; - - } // namespace PhasorDynamics -} // namespace GridKit +/** + * @file Genrou.cpp + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Definition of a GENROU generator model. + * + * + */ + +#define _USE_MATH_DEFINES +#include "Genrou.hpp" + +#include +#include + +#include + +#define _USE_MATH_DEFINES + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief Constructor for a pi-model branch + * + * Arguments passed to ModelEvaluatorImpl: + * - Number of equations = 0 + * - Number of independent variables = 0 + * - Number of quadratures = 0 + * - Number of optimization parameters = 0 + */ + template + Genrou::Genrou(bus_type* bus, int unit_id) + : bus_(bus), + busID_(0), + unit_id_(unit_id), + p0_(0.), + q0_(0.), + H_(3.), + D_(0.), + Ra_(0.), + Tdop_(7.), + Tdopp_(.04), + Tqopp_(.05), + Tqop_(.75), + Xd_(2.1), + Xdp_(0.2), + Xdpp_(0.18), + Xq_(.5), + Xqp_(.5), + Xqpp_(.18), + Xl_(.15), + S10_(0.), + S12_(0.) + { + size_ = 21; + setDerivedParams(); + + // Temporary, to eliminate compiler warnings + (void) busID_; + (void) unit_id_; + } + + /*! + * @brief Constructor for a pi-model branch + * + * Arguments passed to ModelEvaluatorImpl: + * - Number of equations = 0 + * - Number of independent variables = 0 + * - Number of quadratures = 0 + * - Number of optimization parameters = 0 + */ + template + Genrou::Genrou(bus_type* bus, + int unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12) + : bus_(bus), + busID_(0), + unit_id_(unit_id), + p0_(p0), + q0_(q0), + H_(H), + D_(D), + Ra_(Ra), + Tdop_(Tdop), + Tdopp_(Tdopp), + Tqopp_(Tqopp), + Tqop_(Tqop), + Xd_(Xd), + Xdp_(Xdp), + Xdpp_(Xdpp), + Xq_(Xq), + Xqp_(Xqp), + Xqpp_(Xqpp), + Xl_(Xl), + S10_(S10), + S12_(S12) + { + size_ = 21; + setDerivedParams(); + } + + // /** + // * @brief Destroy the Genrou + // * + // * @tparam ScalarT + // * @tparam IdxT + // */ + // template + // Genrou::~Genrou() + // { + // // std::cout << "Destroy Genrou..." << std::endl; + // } + + /*! + * @brief allocate method computes sparsity pattern of the Jacobian. + */ + template + int Genrou::allocate() + { + f_.resize(static_cast(size_)); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + tag_.resize(static_cast(size_)); + fB_.resize(static_cast(size_)); + yB_.resize(static_cast(size_)); + ypB_.resize(static_cast(size_)); + return 0; + } + + /** + * Initialization of the branch model + * + */ + template + int Genrou::initialize() + { + /* Initialization tricks -- assuming NO saturation */ + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT p = p0_; + ScalarT q = q0_; + ScalarT vm2 = vr * vr + vi * vi; + ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; + ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; + ScalarT delta = atan2(Ei, Er); + ScalarT omega = 0; + ScalarT ir = (p * vr + q * vi) / vm2; + ScalarT ii = (p * vi - q * vr) / vm2; + ScalarT id = ir * sin(delta) - ii * cos(delta); + ScalarT iq = ir * cos(delta) + ii * sin(delta); + ScalarT vd = vr * sin(delta) - vi * cos(delta) + id * Ra_ - iq * Xqpp_; + ScalarT vq = vr * cos(delta) + vi * sin(delta) + id * Xqpp_ - iq * Ra_; + ScalarT psiqpp = -vd / (1 + omega); + ScalarT psidpp = vq / (1 + omega); + ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; + ScalarT psiqp = -(-(Xqp_ - Xl_) * iq + psiqpp * (Xqp_ - Xl_) / (Xqpp_ - Xl_)) + / (1 + (Xqp_ - Xqpp_) / (Xqpp_ - Xl_)); + ScalarT Edp = psiqp - (Xqp_ - Xl_) * iq; + ScalarT psidp = -((Xdp_ - Xl_) * id - psidpp * (Xdp_ - Xl_) / (Xdpp_ - Xl_)) + / (1 + (Xdp_ - Xdpp_) / (Xdpp_ - Xl_)); + ScalarT Eqp = psidp + (Xdp_ - Xl_) * id; + + /* Now we have the state variables, solve for alg. variables */ + ScalarT ksat; + ScalarT psipp; + + y_[0] = delta; //= 0.55399038; + y_[1] = omega; // = 0; + y_[2] = Eqp; // = 0.995472581; + y_[3] = psidp; // = 0.971299567; + y_[4] = psiqp; // = 0.306880069; + y_[5] = Edp; // = 0; + + y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; + y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; + y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); + y_[9] = ksat = SB_ * pow(psipp - SA_, 2); + y_[10] = vd = -psiqpp * (1 + omega); + y_[11] = vq = psidpp * (1 + omega); + y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; + y_[13] = id; + y_[14] = iq; + y_[15] = ir; + y_[16] = ii; + y_[17] = pmech_set_ = Te; + y_[18] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; + y_[19] = G_ * (vd * sin(delta) + vq * cos(delta)) + - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ + y_[20] = B_ * (vd * sin(delta) + vq * cos(delta)) + + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ + + for (IdxT i = 0; i < size_; ++i) + yp_[static_cast(i)] = 0.0; + + return 0; + } + + /** + * \brief Identify differential variables. + */ + template + int Genrou::tagDifferentiable() + { + for (IdxT i = 0; i < size_; ++i) + { + tag_[static_cast(i)] = i < 6; + } + return 0; + } + + /** + * \brief Residual contribution of the branch is pushed to the + * two terminal buses. + * + */ + template + int Genrou::evaluateResidual() + { + /* Read variables */ + ScalarT delta = y_[0]; + ScalarT omega = y_[1]; + ScalarT Eqp = y_[2]; + ScalarT psidp = y_[3]; + ScalarT psiqp = y_[4]; + ScalarT Edp = y_[5]; + ScalarT psiqpp = y_[6]; + ScalarT psidpp = y_[7]; + ScalarT psipp = y_[8]; + ScalarT ksat = y_[9]; + ScalarT vd = y_[10]; + ScalarT vq = y_[11]; + ScalarT telec = y_[12]; + ScalarT id = y_[13]; + ScalarT iq = y_[14]; + ScalarT ir = y_[15]; + ScalarT ii = y_[16]; + ScalarT pmech = y_[17]; + ScalarT efd = y_[18]; + ScalarT inr = y_[19]; + ScalarT ini = y_[20]; + ScalarT vr = Vr(); + ScalarT vi = Vi(); + + /* Read derivatives */ + ScalarT delta_dot = yp_[0]; + ScalarT omega_dot = yp_[1]; + ScalarT Eqp_dot = yp_[2]; + ScalarT psidp_dot = yp_[3]; + ScalarT psiqp_dot = yp_[4]; + ScalarT Edp_dot = yp_[5]; + + /* 6 Genrou differential equations */ + f_[0] = delta_dot - omega * (2 * M_PI * 60); + f_[1] = omega_dot - (1 / (2 * H_)) * ((pmech - D_ * omega) / (1 + omega) - telec); + f_[2] = Eqp_dot - (1 / Tdop_) * (efd - (Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat)); + f_[3] = psidp_dot - (1 / Tdopp_) * (Eqp - psidp - Xd2_ * id); + f_[4] = psiqp_dot - (1 / Tqopp_) * (Edp - psiqp + Xq2_ * iq); + f_[5] = Edp_dot - (1 / Tqop_) * (-Edp + Xqd_ * psiqpp * ksat + Xq1_ * (iq - Xq3_ * (Edp + iq * Xq2_ - psiqp))); + + /* 11 Genrou algebraic equations */ + f_[6] = psiqpp - (-psiqp * Xq4_ - Edp * Xq5_); + f_[7] = psidpp - (psidp * Xd4_ + Eqp * Xd5_); + f_[8] = psipp - sqrt(pow(psidpp, 2.0) + pow(psiqpp, 2.0)); + f_[9] = ksat - SB_ * pow(psipp - SA_, 2.0); + f_[10] = vd + psiqpp * (1 + omega); + f_[11] = vq - psidpp * (1 + omega); + f_[12] = telec - ((psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id); + f_[13] = id - (ir * sin(delta) - ii * cos(delta)); + f_[14] = iq - (ir * cos(delta) + ii * sin(delta)); + f_[15] = ir + G_ * vr - B_ * vi - inr; + f_[16] = ii + B_ * vr + G_ * vi - ini; + + /* 2 Genrou control inputs are set to constant for this example */ + f_[17] = pmech - pmech_set_; + f_[18] = efd - efd_set_; + + /* 2 Genrou current source definitions */ + f_[19] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); + f_[20] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); + + /* Current balance */ + Ir() += inr - Vr() * G_ + Vi() * B_; + Ii() += ini - Vr() * B_ - Vi() * G_; + + return 0; + } + + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Genrou..." << std::endl; + std::cout << "Jacobian evaluation not implemented!" << std::endl; + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateIntegrand() + { + // std::cout << "Evaluate Integrand for Genrou..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::initializeAdjoint() + { + // std::cout << "Initialize adjoint for Genrou..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateAdjointResidual() + { + // std::cout << "Evaluate adjoint residual for Genrou..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Genrou::evaluateAdjointIntegrand() + { + // std::cout << "Evaluate adjoint Integrand for Genrou..." << std::endl; + return 0; + } + + template + void Genrou::setDerivedParams() + { + SA_ = 0; + SB_ = 0; + if (S12_ != 0) + { + real_type s112 = sqrt(S10_ / S12_); + + SA_ = (1.2 * s112 + 1) / (s112 + 1); + SB_ = (1.2 * s112 - 1) / (s112 - 1); + if (SB_ < SA_) + SA_ = SB_; + SB_ = S12_ / pow(SA_ - 1.2, 2); + } + Xd1_ = Xd_ - Xdp_; + Xd2_ = Xdp_ - Xl_; + Xd3_ = (Xdp_ - Xdpp_) / (Xd2_ * Xd2_); + Xd4_ = (Xdp_ - Xdpp_) / Xd2_; + Xd5_ = (Xdpp_ - Xl_) / Xd2_; + Xq1_ = Xq_ - Xqp_; + Xq2_ = Xqp_ - Xl_; + Xq3_ = (Xqp_ - Xqpp_) / (Xq2_ * Xq2_); + Xq4_ = (Xqp_ - Xqpp_) / Xq2_; + Xq5_ = (Xqpp_ - Xl_) / Xq2_; + Xqd_ = (Xq_ - Xl_) / (Xd_ - Xl_); + G_ = Ra_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); + B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); + } + + // Available template instantiations + template class Genrou; + template class Genrou; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PowerElectronics/Capacitor/Capacitor.cpp b/src/Model/PowerElectronics/Capacitor/Capacitor.cpp index 497c3b19b..a7b0d5bb7 100644 --- a/src/Model/PowerElectronics/Capacitor/Capacitor.cpp +++ b/src/Model/PowerElectronics/Capacitor/Capacitor.cpp @@ -39,9 +39,9 @@ namespace GridKit template int Capacitor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/CircuitGraph.hpp b/src/Model/PowerElectronics/CircuitGraph.hpp index 26d5d6a2f..5a57104fb 100644 --- a/src/Model/PowerElectronics/CircuitGraph.hpp +++ b/src/Model/PowerElectronics/CircuitGraph.hpp @@ -105,7 +105,7 @@ size_t CircuitGraph::amountHyperEdges() */ template -void CircuitGraph::printBiPartiteGraph(bool verbose) +void CircuitGraph::printBiPartiteGraph([[maybe_unused]] bool verbose) { std::cout << "Amount of HyperNodes: " << this->amountHyperNodes() << std::endl; diff --git a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp index 5be1802d6..bbc16b524 100644 --- a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp +++ b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp @@ -57,9 +57,9 @@ namespace GridKit template int DistributedGenerator::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } @@ -186,7 +186,7 @@ namespace GridKit std::vector valsder(13, -1.0); for (int i = 0; i < 13; i++) { - rcordder[i] = i + 3; + rcordder[static_cast(i)] = static_cast(i + 3); } COO_Matrix Jacder = COO_Matrix(rcordder, rcordder, valsder, 16, 16); diff --git a/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp b/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp index 34e1f7438..98cecf2b6 100644 --- a/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp +++ b/src/Model/PowerElectronics/InductionMotor/InductionMotor.cpp @@ -51,9 +51,9 @@ namespace GridKit template int InductionMotor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/Inductor/Inductor.cpp b/src/Model/PowerElectronics/Inductor/Inductor.cpp index fa9d07322..83a704f61 100644 --- a/src/Model/PowerElectronics/Inductor/Inductor.cpp +++ b/src/Model/PowerElectronics/Inductor/Inductor.cpp @@ -38,9 +38,9 @@ namespace GridKit int Inductor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp index 189dc1d63..600df6292 100644 --- a/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp +++ b/src/Model/PowerElectronics/LinearTransformer/LinearTransformer.cpp @@ -53,9 +53,9 @@ namespace GridKit template int LinearTransformer::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp index 3de0b9e1a..9706fd76d 100644 --- a/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp +++ b/src/Model/PowerElectronics/MicrogridBusDQ/MicrogridBusDQ.cpp @@ -42,9 +42,9 @@ namespace GridKit template int MicrogridBusDQ::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp index 030668ea0..b5446f774 100644 --- a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp +++ b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp @@ -46,9 +46,9 @@ namespace GridKit template int MicrogridLine::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp index f36dd8895..4a034191e 100644 --- a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp +++ b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp @@ -44,9 +44,9 @@ namespace GridKit template int MicrogridLoad::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/Resistor/Resistor.cpp b/src/Model/PowerElectronics/Resistor/Resistor.cpp index 6549ec123..832297d01 100644 --- a/src/Model/PowerElectronics/Resistor/Resistor.cpp +++ b/src/Model/PowerElectronics/Resistor/Resistor.cpp @@ -37,9 +37,9 @@ namespace GridKit template int Resistor::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp index 9dc535cd3..16b217ec9 100644 --- a/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp +++ b/src/Model/PowerElectronics/SynchronousMachine/SynchronousMachine.cpp @@ -69,9 +69,9 @@ namespace GridKit template int SynchronousMachine::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp index 85ec9151a..399c1a8a7 100644 --- a/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp +++ b/src/Model/PowerElectronics/TransmissionLine/TransmissionLine.cpp @@ -50,9 +50,9 @@ namespace GridKit template int TransmissionLine::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp b/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp index 8a2adaeb1..8f45852c7 100644 --- a/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp +++ b/src/Model/PowerElectronics/VoltageSource/VoltageSource.cpp @@ -37,9 +37,9 @@ namespace GridKit template int VoltageSource::allocate() { - y_.resize(size_); - yp_.resize(size_); - f_.resize(size_); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + f_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerFlow/Bus/BusPQ.cpp b/src/Model/PowerFlow/Bus/BusPQ.cpp index 207c304df..7b53a9c89 100644 --- a/src/Model/PowerFlow/Bus/BusPQ.cpp +++ b/src/Model/PowerFlow/Bus/BusPQ.cpp @@ -70,14 +70,14 @@ namespace GridKit int BusPQ::allocate() { // std::cout << "Allocate PQ bus ..." << std::endl; - f_.resize(size_); - y_.resize(size_); - yp_.resize(size_); - tag_.resize(size_); - - fB_.resize(size_); - yB_.resize(size_); - ypB_.resize(size_); + f_.resize(static_cast(size_)); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + tag_.resize(static_cast(size_)); + + fB_.resize(static_cast(size_)); + yB_.resize(static_cast(size_)); + ypB_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerFlow/Bus/BusPV.cpp b/src/Model/PowerFlow/Bus/BusPV.cpp index 1552fb06d..c3312c70c 100644 --- a/src/Model/PowerFlow/Bus/BusPV.cpp +++ b/src/Model/PowerFlow/Bus/BusPV.cpp @@ -68,14 +68,14 @@ namespace GridKit int BusPV::allocate() { // std::cout << "Allocate PV bus ..." << std::endl; - f_.resize(size_); - y_.resize(size_); - yp_.resize(size_); - tag_.resize(size_); - - fB_.resize(size_); - yB_.resize(size_); - ypB_.resize(size_); + f_.resize(static_cast(size_)); + y_.resize(static_cast(size_)); + yp_.resize(static_cast(size_)); + tag_.resize(static_cast(size_)); + + fB_.resize(static_cast(size_)); + yB_.resize(static_cast(size_)); + ypB_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerFlow/Generator2/Generator2.cpp b/src/Model/PowerFlow/Generator2/Generator2.cpp index 2d6b6538a..454df1dcb 100644 --- a/src/Model/PowerFlow/Generator2/Generator2.cpp +++ b/src/Model/PowerFlow/Generator2/Generator2.cpp @@ -48,7 +48,7 @@ namespace GridKit template int Generator2::allocate() { - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } diff --git a/src/Model/PowerFlow/Generator4/Generator4.cpp b/src/Model/PowerFlow/Generator4/Generator4.cpp index f5d5c2b17..635fc9587 100644 --- a/src/Model/PowerFlow/Generator4/Generator4.cpp +++ b/src/Model/PowerFlow/Generator4/Generator4.cpp @@ -57,7 +57,7 @@ namespace GridKit int Generator4::allocate() { // std::cout << "Allocate Generator4..." << std::endl; - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } @@ -143,7 +143,7 @@ namespace GridKit for (IdxT i = 4; i < size_; ++i) { - tag_[i] = false; + tag_[static_cast(i)] = false; } return 0; @@ -217,8 +217,8 @@ namespace GridKit // std::cout << "Initialize adjoint for Generator4..." << std::endl; for (IdxT i = 0; i < size_; ++i) { - yB_[i] = 0.0; - ypB_[i] = 0.0; + yB_[static_cast(i)] = 0.0; + ypB_[static_cast(i)] = 0.0; } ypB_[1] = frequencyPenaltyDer(y_[1]); diff --git a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp index 3736eb77e..090e6079f 100644 --- a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp +++ b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.cpp @@ -66,7 +66,7 @@ namespace GridKit int Generator4Governor::allocate() { // std::cout << "Allocate Gen2..." << std::endl; - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } @@ -111,29 +111,29 @@ namespace GridKit const ScalarT Eqp = V() * cos(delta - theta()) + Rs_ * Iq + Xdp_ * Id; // Initialize generator - y_[offsetGen_ + 0] = delta; - y_[offsetGen_ + 1] = omega_s_ + 0.2; // <~ this is hack to perturb omega - y_[offsetGen_ + 2] = Edp; - y_[offsetGen_ + 3] = Eqp; - y_[offsetGen_ + 4] = Id; - y_[offsetGen_ + 5] = Iq; - yp_[offsetGen_ + 0] = 0.0; - yp_[offsetGen_ + 1] = 0.0; - yp_[offsetGen_ + 2] = 0.0; - yp_[offsetGen_ + 3] = 0.0; - yp_[offsetGen_ + 4] = 0.0; - yp_[offsetGen_ + 5] = 0.0; + y_[static_cast(offsetGen_ + 0)] = delta; + y_[static_cast(offsetGen_ + 1)] = omega_s_ + 0.2; // <~ this is hack to perturb omega + y_[static_cast(offsetGen_ + 2)] = Edp; + y_[static_cast(offsetGen_ + 3)] = Eqp; + y_[static_cast(offsetGen_ + 4)] = Id; + y_[static_cast(offsetGen_ + 5)] = Iq; + yp_[static_cast(offsetGen_ + 0)] = 0.0; + yp_[static_cast(offsetGen_ + 1)] = 0.0; + yp_[static_cast(offsetGen_ + 2)] = 0.0; + yp_[static_cast(offsetGen_ + 3)] = 0.0; + yp_[static_cast(offsetGen_ + 4)] = 0.0; + yp_[static_cast(offsetGen_ + 5)] = 0.0; Pm0_ = Edp * Id + Eqp * Iq + (Xqp_ - Xdp_) * Id * Iq; // <~ set to steady state value Ef0_ = Eqp + (Xd_ - Xdp_) * Id; // <~ set to steady state value // Initialize governor - y_[offsetGov_ + 0] = Pm0_; - y_[offsetGov_ + 1] = 0.0; - y_[offsetGov_ + 2] = 0.0; - yp_[offsetGov_ + 0] = 0.0; - yp_[offsetGov_ + 1] = 0.0; - yp_[offsetGov_ + 2] = 0.0; + y_[static_cast(offsetGov_ + 0)] = Pm0_; + y_[static_cast(offsetGov_ + 1)] = 0.0; + y_[static_cast(offsetGov_ + 2)] = 0.0; + yp_[static_cast(offsetGov_ + 0)] = 0.0; + yp_[static_cast(offsetGov_ + 1)] = 0.0; + yp_[static_cast(offsetGov_ + 2)] = 0.0; param_[1] = K_; param_up_[1] = 20.0; @@ -153,16 +153,16 @@ namespace GridKit int Generator4Governor::tagDifferentiable() { // std::cout << "size of tag vector is " << tag_.size() << "\n"; - tag_[offsetGen_ + 0] = true; - tag_[offsetGen_ + 1] = true; - tag_[offsetGen_ + 2] = true; - tag_[offsetGen_ + 3] = true; - tag_[offsetGen_ + 4] = false; - tag_[offsetGen_ + 5] = false; + tag_[static_cast(offsetGen_ + 0)] = true; + tag_[static_cast(offsetGen_ + 1)] = true; + tag_[static_cast(offsetGen_ + 2)] = true; + tag_[static_cast(offsetGen_ + 3)] = true; + tag_[static_cast(offsetGen_ + 4)] = false; + tag_[static_cast(offsetGen_ + 5)] = false; - tag_[offsetGov_ + 0] = true; - tag_[offsetGov_ + 1] = true; - tag_[offsetGov_ + 2] = false; + tag_[static_cast(offsetGov_ + 0)] = true; + tag_[static_cast(offsetGov_ + 1)] = true; + tag_[static_cast(offsetGov_ + 2)] = false; return 0; } @@ -207,21 +207,21 @@ namespace GridKit int Generator4Governor::evaluateResidual() { // Generator equations - f_[offsetGen_ + 0] = dotDelta() - omega_b_ * (omega() - omega_s_); - f_[offsetGen_ + 1] = (2.0 * H_) / omega_s_ * dotOmega() - Lm(y_[offsetGov_ + 0]) + Eqp() * Iq() + Edp() * Id() + (-Xdp_ + Xqp_) * Id() * Iq() + D_ * (omega() - omega_s_); - f_[offsetGen_ + 2] = Tq0p_ * dotEdp() + Edp() - (Xq_ - Xqp_) * Iq(); - f_[offsetGen_ + 3] = Td0p_ * dotEqp() + Eqp() + (Xd_ - Xdp_) * Id() - Ef0_; - f_[offsetGen_ + 4] = Rs_ * Id() - Xqp_ * Iq() + V() * sin(delta() - theta()) - Edp(); - f_[offsetGen_ + 5] = Xdp_ * Id() + Rs_ * Iq() + V() * cos(delta() - theta()) - Eqp(); + f_[static_cast(offsetGen_ + 0)] = dotDelta() - omega_b_ * (omega() - omega_s_); + f_[static_cast(offsetGen_ + 1)] = (2.0 * H_) / omega_s_ * dotOmega() - Lm(y_[static_cast(offsetGov_ + 0)]) + Eqp() * Iq() + Edp() * Id() + (-Xdp_ + Xqp_) * Id() * Iq() + D_ * (omega() - omega_s_); + f_[static_cast(offsetGen_ + 2)] = Tq0p_ * dotEdp() + Edp() - (Xq_ - Xqp_) * Iq(); + f_[static_cast(offsetGen_ + 3)] = Td0p_ * dotEqp() + Eqp() + (Xd_ - Xdp_) * Id() - Ef0_; + f_[static_cast(offsetGen_ + 4)] = Rs_ * Id() - Xqp_ * Iq() + V() * sin(delta() - theta()) - Edp(); + f_[static_cast(offsetGen_ + 5)] = Xdp_ * Id() + Rs_ * Iq() + V() * cos(delta() - theta()) - Eqp(); // Bus equations P() += Pg(); Q() += Qg(); // Governor equations - f_[offsetGov_ + 0] = yp_[offsetGov_ + 0] - Ln(y_[offsetGov_ + 2]); - f_[offsetGov_ + 1] = T1() * yp_[offsetGov_ + 1] + y_[offsetGov_ + 1] - (1.0 - T2() / T1()) * (omega() - omega_s_); - f_[offsetGov_ + 2] = T3() * y_[offsetGov_ + 2] - Pm0_ + Lm(y_[offsetGov_ + 0]) + K() * y_[offsetGov_ + 1] + K() * T2() / T1() * (omega() - omega_s_); + f_[static_cast(offsetGov_ + 0)] = yp_[static_cast(offsetGov_ + 0)] - Ln(y_[static_cast(offsetGov_ + 2)]); + f_[static_cast(offsetGov_ + 1)] = T1() * yp_[static_cast(offsetGov_ + 1)] + y_[static_cast(offsetGov_ + 1)] - (1.0 - T2() / T1()) * (omega() - omega_s_); + f_[static_cast(offsetGov_ + 2)] = T3() * y_[static_cast(offsetGov_ + 2)] - Pm0_ + Lm(y_[static_cast(offsetGov_ + 0)]) + K() * y_[static_cast(offsetGov_ + 1)] + K() * T2() / T1() * (omega() - omega_s_); return 0; } @@ -253,10 +253,10 @@ namespace GridKit // std::cout << "Initialize adjoint for Generator4Governor..." << std::endl; for (IdxT i = 0; i < size_; ++i) { - yB_[i] = 0.0; - ypB_[i] = 0.0; + yB_[static_cast(i)] = 0.0; + ypB_[static_cast(i)] = 0.0; } - ypB_[offsetGen_ + 1] = frequencyPenaltyDer(omega()); + ypB_[static_cast(offsetGen_ + 1)] = frequencyPenaltyDer(omega()); return 0; } @@ -296,26 +296,26 @@ namespace GridKit ScalarT cosPhi = cos(delta() - theta()); // Generator adjoint - fB_[offsetGen_ + 0] = ypB_[offsetGen_ + 0] - yB_[offsetGen_ + 4] * V() * cosPhi + yB_[offsetGen_ + 5] * V() * sinPhi; - fB_[offsetGen_ + 1] = 2.0 * H_ / omega_s_ * ypB_[offsetGen_ + 1] + yB_[offsetGen_ + 0] * omega_b_ - yB_[offsetGen_ + 1] * D_ + frequencyPenaltyDer(omega()) - + yB_[offsetGov_ + 1] * (1.0 - T2() / T1()) - yB_[offsetGov_ + 2] * K() * T2() / T1(); - fB_[offsetGen_ + 2] = Tq0p_ * ypB_[offsetGen_ + 2] - yB_[offsetGen_ + 1] * Id() - yB_[offsetGen_ + 2] + yB_[offsetGen_ + 4] - + lambdaP() * Id() - lambdaQ() * Iq(); - fB_[offsetGen_ + 3] = Td0p_ * ypB_[offsetGen_ + 3] - yB_[offsetGen_ + 1] * Iq() - yB_[offsetGen_ + 3] + yB_[offsetGen_ + 5] - + lambdaP() * Iq() + lambdaQ() * Id(); - fB_[offsetGen_ + 4] = -yB_[offsetGen_ + 1] * (Edp() + (Xqp_ - Xdp_) * Iq()) - yB_[offsetGen_ + 3] * (Xd_ - Xdp_) - yB_[offsetGen_ + 4] * Rs_ - yB_[offsetGen_ + 5] * Xdp_ - + lambdaP() * (Edp() + (Xqp_ - Xdp_) * Iq() - 2.0 * Rs_ * Id()) + lambdaQ() * (Eqp() - 2.0 * Xdp_ * Id()); - fB_[offsetGen_ + 5] = -yB_[offsetGen_ + 1] * (Eqp() + (Xqp_ - Xdp_) * Id()) + yB_[offsetGen_ + 2] * (Xq_ - Xqp_) + yB_[offsetGen_ + 4] * Xqp_ - yB_[offsetGen_ + 5] * Rs_ - + lambdaP() * (Eqp() + (Xqp_ - Xdp_) * Id() - 2.0 * Rs_ * Iq()) - lambdaQ() * (Edp() + 2.0 * Xqp_ * Iq()); + fB_[static_cast(offsetGen_ + 0)] = ypB_[static_cast(offsetGen_ + 0)] - yB_[static_cast(offsetGen_ + 4)] * V() * cosPhi + yB_[static_cast(offsetGen_ + 5)] * V() * sinPhi; + fB_[static_cast(offsetGen_ + 1)] = 2.0 * H_ / omega_s_ * ypB_[static_cast(offsetGen_ + 1)] + yB_[static_cast(offsetGen_ + 0)] * omega_b_ - yB_[static_cast(offsetGen_ + 1)] * D_ + frequencyPenaltyDer(omega()) + + yB_[static_cast(offsetGov_ + 1)] * (1.0 - T2() / T1()) - yB_[static_cast(offsetGov_ + 2)] * K() * T2() / T1(); + fB_[static_cast(offsetGen_ + 2)] = Tq0p_ * ypB_[static_cast(offsetGen_ + 2)] - yB_[static_cast(offsetGen_ + 1)] * Id() - yB_[static_cast(offsetGen_ + 2)] + yB_[static_cast(offsetGen_ + 4)] + + lambdaP() * Id() - lambdaQ() * Iq(); + fB_[static_cast(offsetGen_ + 3)] = Td0p_ * ypB_[static_cast(offsetGen_ + 3)] - yB_[static_cast(offsetGen_ + 1)] * Iq() - yB_[static_cast(offsetGen_ + 3)] + yB_[static_cast(offsetGen_ + 5)] + + lambdaP() * Iq() + lambdaQ() * Id(); + fB_[static_cast(offsetGen_ + 4)] = -yB_[static_cast(offsetGen_ + 1)] * (Edp() + (Xqp_ - Xdp_) * Iq()) - yB_[static_cast(offsetGen_ + 3)] * (Xd_ - Xdp_) - yB_[static_cast(offsetGen_ + 4)] * Rs_ - yB_[static_cast(offsetGen_ + 5)] * Xdp_ + + lambdaP() * (Edp() + (Xqp_ - Xdp_) * Iq() - 2.0 * Rs_ * Id()) + lambdaQ() * (Eqp() - 2.0 * Xdp_ * Id()); + fB_[static_cast(offsetGen_ + 5)] = -yB_[static_cast(offsetGen_ + 1)] * (Eqp() + (Xqp_ - Xdp_) * Id()) + yB_[static_cast(offsetGen_ + 2)] * (Xq_ - Xqp_) + yB_[static_cast(offsetGen_ + 4)] * Xqp_ - yB_[static_cast(offsetGen_ + 5)] * Rs_ + + lambdaP() * (Eqp() + (Xqp_ - Xdp_) * Id() - 2.0 * Rs_ * Iq()) - lambdaQ() * (Edp() + 2.0 * Xqp_ * Iq()); // Bus adjoint - PB() += (-yB_[offsetGen_ + 4] * sinPhi - yB_[offsetGen_ + 5] * cosPhi); - QB() += (yB_[offsetGen_ + 4] * V() * cosPhi - yB_[offsetGen_ + 5] * V() * sinPhi); + PB() += (-yB_[static_cast(offsetGen_ + 4)] * sinPhi - yB_[static_cast(offsetGen_ + 5)] * cosPhi); + QB() += (yB_[static_cast(offsetGen_ + 4)] * V() * cosPhi - yB_[static_cast(offsetGen_ + 5)] * V() * sinPhi); // Governor adjoint - fB_[offsetGov_ + 0] = ypB_[offsetGov_ + 0] - yB_[offsetGov_ + 2] * dLm(y_[offsetGov_ + 0]) + yB_[offsetGen_ + 1] * dLm(y_[offsetGov_ + 0]); - fB_[offsetGov_ + 1] = ypB_[offsetGov_ + 1] * T1() - yB_[offsetGov_ + 1] - yB_[offsetGov_ + 2] * K(); - fB_[offsetGov_ + 2] = yB_[offsetGov_ + 0] * dLn(y_[offsetGov_ + 2]) - yB_[offsetGov_ + 2] * T3(); + fB_[static_cast(offsetGov_ + 0)] = ypB_[static_cast(offsetGov_ + 0)] - yB_[static_cast(offsetGov_ + 2)] * dLm(y_[static_cast(offsetGov_ + 0)]) + yB_[static_cast(offsetGen_ + 1)] * dLm(y_[static_cast(offsetGov_ + 0)]); + fB_[static_cast(offsetGov_ + 1)] = ypB_[static_cast(offsetGov_ + 1)] * T1() - yB_[static_cast(offsetGov_ + 1)] - yB_[static_cast(offsetGov_ + 2)] * K(); + fB_[static_cast(offsetGov_ + 2)] = yB_[static_cast(offsetGov_ + 0)] * dLn(y_[static_cast(offsetGov_ + 2)]) - yB_[static_cast(offsetGov_ + 2)] * T3(); return 0; } @@ -334,10 +334,10 @@ namespace GridKit // std::cout << "Evaluate adjoint Integrand for Gen2..." << std::endl; // K adjoint - gB_[1] = -yB_[offsetGov_ + 2] * (y_[offsetGov_ + 1] + T2() / T1() * (omega() - omega_s_)); + gB_[1] = -yB_[static_cast(offsetGov_ + 2)] * (y_[static_cast(offsetGov_ + 1)] + T2() / T1() * (omega() - omega_s_)); // T2 adjoint - gB_[0] = -yB_[offsetGov_ + 1] * (omega() - omega_s_) / T1() - yB_[offsetGov_ + 2] * K() / T1() * (omega() - omega_s_); + gB_[0] = -yB_[static_cast(offsetGov_ + 1)] * (omega() - omega_s_) / T1() - yB_[static_cast(offsetGov_ + 2)] * K() / T1() * (omega() - omega_s_); return 0; } diff --git a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp index 948f6f67b..5464526a1 100644 --- a/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp +++ b/src/Model/PowerFlow/Generator4Governor/Generator4Governor.hpp @@ -151,52 +151,52 @@ namespace GridKit const ScalarT dotDelta() const { - return yp_[offsetGen_ + 0]; + return yp_[static_cast(offsetGen_ + 0)]; } const ScalarT dotOmega() const { - return yp_[offsetGen_ + 1]; + return yp_[static_cast(offsetGen_ + 1)]; } const ScalarT dotEdp() const { - return yp_[offsetGen_ + 2]; + return yp_[static_cast(offsetGen_ + 2)]; } const ScalarT dotEqp() const { - return yp_[offsetGen_ + 3]; + return yp_[static_cast(offsetGen_ + 3)]; } const ScalarT delta() const { - return y_[offsetGen_ + 0]; + return y_[static_cast(offsetGen_ + 0)]; } const ScalarT omega() const { - return y_[offsetGen_ + 1]; + return y_[static_cast(offsetGen_ + 1)]; } const ScalarT Edp() const { - return y_[offsetGen_ + 2]; + return y_[static_cast(offsetGen_ + 2)]; } const ScalarT Eqp() const { - return y_[offsetGen_ + 3]; + return y_[static_cast(offsetGen_ + 3)]; } const ScalarT Id() const { - return y_[offsetGen_ + 4]; + return y_[static_cast(offsetGen_ + 4)]; } const ScalarT Iq() const { - return y_[offsetGen_ + 5]; + return y_[static_cast(offsetGen_ + 5)]; } const ScalarT K() const diff --git a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp index b1dd73f20..bbb7faa99 100644 --- a/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp +++ b/src/Model/PowerFlow/Generator4Param/Generator4Param.cpp @@ -53,7 +53,7 @@ namespace GridKit int Generator4Param::allocate() { // std::cout << "Allocate Generator4Param..." << std::endl; - tag_.resize(size_); + tag_.resize(static_cast(size_)); return 0; } @@ -143,7 +143,7 @@ namespace GridKit for (IdxT i = 4; i < size_; ++i) { - tag_[i] = false; + tag_[static_cast(i)] = false; } return 0; @@ -219,8 +219,8 @@ namespace GridKit // std::cout << "Initialize adjoint for Generator4Param..." << std::endl; for (IdxT i = 0; i < size_; ++i) { - yB_[i] = 0.0; - ypB_[i] = 0.0; + yB_[static_cast(i)] = 0.0; + ypB_[static_cast(i)] = 0.0; } // ypB_[1] = frequencyPenaltyDer(y_[1]); ypB_[2] = -trajectoryPenaltyDerEdp(time_) / Tq0p_; @@ -325,16 +325,16 @@ namespace GridKit if (t >= ti && t < tf) { // Interpolate from look-up table - Edp_est = (table_[n + 1][3] - table_[n][3]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][3]; - Eqp_est = (table_[n + 1][4] - table_[n][4]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][4]; + Edp_est = (table_[static_cast(n + 1)][3] - table_[static_cast(n)][3]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][3]; + Eqp_est = (table_[static_cast(n + 1)][4] - table_[static_cast(n)][4]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][4]; } else { if (tf <= t && t < tf + dt) { // Extrapolate from look-up table - Edp_est = (table_[n][3] - table_[n - 1][3]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][3]; - Eqp_est = (table_[n][4] - table_[n - 1][4]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][4]; + Edp_est = (table_[static_cast(n)][3] - table_[static_cast(n - 1)][3]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][3]; + Eqp_est = (table_[static_cast(n)][4] - table_[static_cast(n - 1)][4]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][4]; } else { @@ -360,13 +360,13 @@ namespace GridKit if (t >= ti && t < tf) { - Edp_est = (table_[n + 1][3] - table_[n][3]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][3]; + Edp_est = (table_[static_cast(n + 1)][3] - table_[static_cast(n)][3]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][3]; } else { if (tf <= t && t < tf + dt) { - Edp_est = (table_[n][3] - table_[n - 1][3]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][3]; + Edp_est = (table_[static_cast(n)][3] - table_[static_cast(n - 1)][3]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][3]; } else { @@ -391,13 +391,13 @@ namespace GridKit if (t >= ti && t < tf) { - Eqp_est = (table_[n + 1][4] - table_[n][4]) / (table_[n + 1][0] - table_[n][0]) * (t - table_[n][0]) + table_[n][4]; + Eqp_est = (table_[static_cast(n + 1)][4] - table_[static_cast(n)][4]) / (table_[static_cast(n + 1)][0] - table_[static_cast(n)][0]) * (t - table_[static_cast(n)][0]) + table_[static_cast(n)][4]; } else { if (tf <= t && t < tf + dt) { - Eqp_est = (table_[n][4] - table_[n - 1][4]) / (table_[n][0] - table_[n - 1][0]) * (t - table_[n - 1][0]) + table_[n - 1][4]; + Eqp_est = (table_[static_cast(n)][4] - table_[static_cast(n - 1)][4]) / (table_[static_cast(n)][0] - table_[static_cast(n - 1)][0]) * (t - table_[static_cast(n - 1)][0]) + table_[static_cast(n - 1)][4]; } else { diff --git a/src/Model/PowerFlow/ModelEvaluatorImpl.hpp b/src/Model/PowerFlow/ModelEvaluatorImpl.hpp index 3b7bb4825..a8d26fba8 100644 --- a/src/Model/PowerFlow/ModelEvaluatorImpl.hpp +++ b/src/Model/PowerFlow/ModelEvaluatorImpl.hpp @@ -30,18 +30,18 @@ namespace GridKit : size_(size), size_quad_(size_quad), size_opt_(size_opt), - y_(size_), - yp_(size_), - f_(size_), - g_(size_quad_), - yB_(size_), - ypB_(size_), - fB_(size_), - gB_(size_opt_), + y_(static_cast(size_)), + yp_(static_cast(size_)), + f_(static_cast(size_)), + g_(static_cast(size_quad_)), + yB_(static_cast(size_)), + ypB_(static_cast(size_)), + fB_(static_cast(size_)), + gB_(static_cast(size_opt_)), jac_(COO_Matrix()), - param_(size_opt_), - param_up_(size_opt_), - param_lo_(size_opt_) + param_(static_cast(size_opt_)), + param_up_(static_cast(size_opt_)), + param_lo_(static_cast(size_opt_)) { } diff --git a/src/Solver/Dynamic/Ida.cpp b/src/Solver/Dynamic/Ida.cpp index 5bde5db44..567626790 100644 --- a/src/Solver/Dynamic/Ida.cpp +++ b/src/Solver/Dynamic/Ida.cpp @@ -51,7 +51,7 @@ namespace AnalysisManager int retval = 0; // Allocate solution vectors - yy_ = N_VNew_Serial(model_->size(), context_); + yy_ = N_VNew_Serial(static_cast(model_->size()), context_); checkAllocation((void*) yy_, "N_VNew_Serial"); yp_ = N_VClone(yy_); checkAllocation((void*) yp_, "N_VClone"); @@ -88,7 +88,7 @@ namespace AnalysisManager model_->setMaxSteps(msa); /// \todo Need to set max number of steps based on user input! - retval = IDASetMaxNumSteps(solver_, msa); + retval = IDASetMaxNumSteps(solver_, static_cast(msa)); checkOutput(retval, "IDASetMaxNumSteps"); // Tag differential variables @@ -116,7 +116,11 @@ namespace AnalysisManager int retval = 0; if (model_->hasJacobian()) { - JacobianMat_ = SUNSparseMatrix(model_->size(), model_->size(), model_->size() * model_->size(), CSR_MAT, context_); + JacobianMat_ = SUNSparseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + static_cast(model_->size() * model_->size()), + CSR_MAT, + context_); checkAllocation((void*) JacobianMat_, "SUNSparseMatrix"); linearSolver_ = SUNLinSol_KLU(yy_, JacobianMat_, context_); @@ -130,7 +134,9 @@ namespace AnalysisManager } else { - JacobianMat_ = SUNDenseMatrix(model_->size(), model_->size(), context_); + JacobianMat_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); checkAllocation((void*) JacobianMat_, "SUNDenseMatrix"); linearSolver_ = SUNLinSol_Dense(yy_, JacobianMat_, context_); @@ -278,7 +284,7 @@ namespace AnalysisManager int retval = 0; // Create and initialize quadratures - q_ = N_VNew_Serial(model_->sizeQuadrature(), context_); + q_ = N_VNew_Serial(static_cast(model_->sizeQuadrature()), context_); checkAllocation((void*) q_, "N_VNew_Serial"); // Set integrand function and allocate quadrature workspace @@ -364,13 +370,13 @@ namespace AnalysisManager int Ida::configureAdjoint() { // Allocate adjoint vector, derivatives and quadrature - yyB_ = N_VNew_Serial(model_->size(), context_); + yyB_ = N_VNew_Serial(static_cast(model_->size()), context_); checkAllocation((void*) yyB_, "N_VNew_Serial"); ypB_ = N_VClone(yyB_); checkAllocation((void*) ypB_, "N_VClone"); - qB_ = N_VNew_Serial(model_->sizeParams(), context_); + qB_ = N_VNew_Serial(static_cast(model_->sizeParams()), context_); checkAllocation((void*) qB_, "N_VNew_Serial"); return 0; @@ -382,7 +388,7 @@ namespace AnalysisManager int retval = 0; // Create adjoint workspace - retval = IDAAdjInit(solver_, steps, IDA_HERMITE); + retval = IDAAdjInit(solver_, static_cast(steps), IDA_HERMITE); checkOutput(retval, "IDAAdjInit"); return retval; @@ -420,7 +426,9 @@ namespace AnalysisManager checkOutput(retval, "IDASetMaxNumSteps"); // Set up linear solver - JacobianMatB_ = SUNDenseMatrix(model_->size(), model_->size(), context_); + JacobianMatB_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); checkAllocation((void*) JacobianMatB_, "SUNDenseMatrix"); linearSolverB_ = SUNLinSol_Dense(yyB_, JacobianMatB_, context_); @@ -450,7 +458,9 @@ namespace AnalysisManager int retval = 0; // Create Jacobian matrix - JacobianMatB_ = SUNDenseMatrix(model_->size(), model_->size(), context_); + JacobianMatB_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); checkAllocation((void*) JacobianMatB_, "SUNDenseMatrix"); // Create linear solver diff --git a/src/Solver/Optimization/DynamicConstraint.cpp b/src/Solver/Optimization/DynamicConstraint.cpp index 784d4e3f6..291dbd285 100644 --- a/src/Solver/Optimization/DynamicConstraint.cpp +++ b/src/Solver/Optimization/DynamicConstraint.cpp @@ -32,13 +32,13 @@ namespace AnalysisManager // Number of parameters is size of the system plus 1 fictitious parameter // to store the objective value. - n = model_->sizeParams() + 1; + n = static_cast(model_->sizeParams() + 1); // There is one constraint m = 1; // Jacobian is a dense row matrix of length n+1. - nnz_jac_g = model_->sizeParams() + 1; + nnz_jac_g = static_cast(model_->sizeParams() + 1); // Using numerical Hessian. nnz_h_lag = 0; @@ -50,7 +50,12 @@ namespace AnalysisManager } template - bool DynamicConstraint::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) + bool DynamicConstraint::get_bounds_info([[maybe_unused]] Index n, + Number* x_l, + Number* x_u, + [[maybe_unused]] Index m, + Number* g_l, + Number* g_u) { // Check if sizes are set correctly assert(n == (Index) (model_->sizeParams() + 1)); @@ -59,8 +64,8 @@ namespace AnalysisManager // Get boundaries for the optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) { - x_l[i] = model_->param_lo()[i]; - x_u[i] = model_->param_up()[i]; + x_l[i] = model_->param_lo()[static_cast(i)]; + x_u[i] = model_->param_up()[static_cast(i)]; } // No boundaries for fictitious parameter x[n] @@ -75,7 +80,15 @@ namespace AnalysisManager } template - bool DynamicConstraint::get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda) + bool DynamicConstraint::get_starting_point([[maybe_unused]] Index n, + [[maybe_unused]] bool init_x, + Number* x, + [[maybe_unused]] bool init_z, + [[maybe_unused]] Number* z_L, + [[maybe_unused]] Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] bool init_lambda, + [[maybe_unused]] Number* lambda) { // Only initial values for x provided. assert(init_x == true); @@ -84,7 +97,7 @@ namespace AnalysisManager // Initialize optimization parameters x for (IdxT i = 0; i < model_->sizeParams(); ++i) - x[i] = model_->param()[i]; + x[i] = model_->param()[static_cast(i)]; // Initialize fictitious parameter x[n-1] to zero x[model_->sizeParams()] = 0.0; @@ -93,7 +106,10 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) + bool DynamicConstraint::eval_f([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + Number& obj_value) { // Set objective to fictitious optimization parameter x[n-1] obj_value = x[model_->sizeParams()]; @@ -102,7 +118,10 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) + bool DynamicConstraint::eval_grad_f([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + Number* grad_f) { // Objective function equals to the fictitious parameter x[n-1]. // Gradient, then assumes the simple form: @@ -114,12 +133,16 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) + bool DynamicConstraint::eval_g([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + Number* g) { // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) { - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // std::cout << "x[" << i << "] = " << x[i] << "\n"; } @@ -143,7 +166,14 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index* jCol, Number* values) + bool DynamicConstraint::eval_jac_g([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + [[maybe_unused]] Index nele_jac, + Index* iRow, + Index* jCol, + Number* values) { // Set Jacobian sparsity pattern ... if (!values) @@ -151,17 +181,17 @@ namespace AnalysisManager for (IdxT i = 0; i < model_->sizeParams(); ++i) { iRow[i] = 0; - jCol[i] = i; + jCol[i] = static_cast(i); } iRow[model_->sizeParams()] = 0; - jCol[model_->sizeParams()] = model_->sizeParams(); + jCol[model_->sizeParams()] = static_cast(model_->sizeParams()); } // ... or compute Jacobian derivatives else { // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // evaluate the gradient of the objective function grad_{x} f(x) // This is creating and deleting adjoint system for each iteration! @@ -202,23 +232,33 @@ namespace AnalysisManager } template - bool DynamicConstraint::eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values) + bool DynamicConstraint::eval_h([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Number obj_factor, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] bool new_lambda, + [[maybe_unused]] Index nele_hess, + [[maybe_unused]] Index* iRow, + [[maybe_unused]] Index* jCol, + [[maybe_unused]] Number* values) { return true; } template - void DynamicConstraint::finalize_solution(SolverReturn status, - Index n, - const Number* x, - const Number* z_L, - const Number* z_U, - Index m, - const Number* g, - const Number* lambda, - Number obj_value, - const IpoptData* ip_data, - IpoptCalculatedQuantities* ip_cq) + void DynamicConstraint::finalize_solution([[maybe_unused]] SolverReturn status, + [[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] const Number* z_L, + [[maybe_unused]] const Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* g, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] Number obj_value, + [[maybe_unused]] const IpoptData* ip_data, + [[maybe_unused]] IpoptCalculatedQuantities* ip_cq) { } diff --git a/src/Solver/Optimization/DynamicObjective.cpp b/src/Solver/Optimization/DynamicObjective.cpp index 81ad25cde..8a90efbfc 100644 --- a/src/Solver/Optimization/DynamicObjective.cpp +++ b/src/Solver/Optimization/DynamicObjective.cpp @@ -31,7 +31,7 @@ namespace AnalysisManager assert(model_->sizeQuadrature() == 1); // Number of optimization variables. - n = model_->sizeParams(); + n = static_cast(model_->sizeParams()); // There are no constraints m = 0; @@ -49,7 +49,12 @@ namespace AnalysisManager } template - bool DynamicObjective::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) + bool DynamicObjective::get_bounds_info([[maybe_unused]] Index n, + Number* x_l, + Number* x_u, + [[maybe_unused]] Index m, + [[maybe_unused]] Number* g_l, + [[maybe_unused]] Number* g_u) { // Check if sizes are set correctly assert(n == (Index) model_->sizeParams()); @@ -58,15 +63,23 @@ namespace AnalysisManager // Get boundaries for the optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) { - x_l[i] = model_->param_lo()[i]; - x_u[i] = model_->param_up()[i]; + x_l[i] = model_->param_lo()[static_cast(i)]; + x_u[i] = model_->param_up()[static_cast(i)]; } return true; } template - bool DynamicObjective::get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda) + bool DynamicObjective::get_starting_point([[maybe_unused]] Index n, + [[maybe_unused]] bool init_x, + Number* x, + [[maybe_unused]] bool init_z, + [[maybe_unused]] Number* z_L, + [[maybe_unused]] Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] bool init_lambda, + [[maybe_unused]] Number* lambda) { // Only initial values for x provided. assert(init_x == true); @@ -75,17 +88,20 @@ namespace AnalysisManager // Initialize optimization parameters x for (IdxT i = 0; i < model_->sizeParams(); ++i) - x[i] = model_->param()[i]; + x[i] = model_->param()[static_cast(i)]; return true; } template - bool DynamicObjective::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) + bool DynamicObjective::eval_f([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + Number& obj_value) { // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // Evaluate objective function integrator_->getSavedInitialCondition(); @@ -100,12 +116,15 @@ namespace AnalysisManager } template - bool DynamicObjective::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) + bool DynamicObjective::eval_grad_f([[maybe_unused]] Index n, + const Number* x, + [[maybe_unused]] bool new_x, + Number* grad_f) { assert(model_->sizeParams() == static_cast(n)); // Update optimization parameters for (IdxT i = 0; i < model_->sizeParams(); ++i) - model_->param()[i] = x[i]; + model_->param()[static_cast(i)] = x[i]; // evaluate the gradient of the objective function grad_{x} f(x) // This is creating and deleting adjoint system for each iteration! @@ -130,35 +149,56 @@ namespace AnalysisManager } template - bool DynamicObjective::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) + bool DynamicObjective::eval_g([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + [[maybe_unused]] Number* g) { return true; } template - bool DynamicObjective::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index* jCol, Number* values) + bool DynamicObjective::eval_jac_g([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Index m, + [[maybe_unused]] Index nele_jac, + [[maybe_unused]] Index* iRow, + [[maybe_unused]] Index* jCol, + [[maybe_unused]] Number* values) { return true; } template - bool DynamicObjective::eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values) + bool DynamicObjective::eval_h([[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] bool new_x, + [[maybe_unused]] Number obj_factor, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] bool new_lambda, + [[maybe_unused]] Index nele_hess, + [[maybe_unused]] Index* iRow, + [[maybe_unused]] Index* jCol, + [[maybe_unused]] Number* values) { return true; } template - void DynamicObjective::finalize_solution(SolverReturn status, - Index n, - const Number* x, - const Number* z_L, - const Number* z_U, - Index m, - const Number* g, - const Number* lambda, - Number obj_value, - const IpoptData* ip_data, - IpoptCalculatedQuantities* ip_cq) + void DynamicObjective::finalize_solution([[maybe_unused]] SolverReturn status, + [[maybe_unused]] Index n, + [[maybe_unused]] const Number* x, + [[maybe_unused]] const Number* z_L, + [[maybe_unused]] const Number* z_U, + [[maybe_unused]] Index m, + [[maybe_unused]] const Number* g, + [[maybe_unused]] const Number* lambda, + [[maybe_unused]] Number obj_value, + [[maybe_unused]] const IpoptData* ip_data, + [[maybe_unused]] IpoptCalculatedQuantities* ip_cq) { } diff --git a/src/Solver/SteadyState/Kinsol.cpp b/src/Solver/SteadyState/Kinsol.cpp index 67f33982d..c792eae4a 100644 --- a/src/Solver/SteadyState/Kinsol.cpp +++ b/src/Solver/SteadyState/Kinsol.cpp @@ -53,7 +53,7 @@ namespace AnalysisManager int retval = 0; // Allocate solution vectors - yy_ = N_VNew_Serial(model_->size(), context_); + yy_ = N_VNew_Serial(static_cast(model_->size()), context_); checkAllocation((void*) yy_, "N_VNew_Serial"); // Allocate scaling vector @@ -93,7 +93,9 @@ namespace AnalysisManager int retval = 0; // Set up linear solver - JacobianMat_ = SUNDenseMatrix(model_->size(), model_->size(), context_); + JacobianMat_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); checkAllocation((void*) JacobianMat_, "SUNDenseMatrix"); linearSolver_ = SUNLinSol_Dense(yy_, JacobianMat_, context_); From 7c5c2190f06c819c5b5766579fa386632a1ac5d6 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan <72402802+nkoukpaizan@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:10:00 -0400 Subject: [PATCH 034/139] Reorganization in preparation for Enzyme automatic differentiation PR (#126) --- .github/workflows/spack_default_build.yaml | 2 + examples/Enzyme/PowerElectronics/main.cpp | 2 +- examples/Enzyme/Standalone/EnzymeSparse.cpp | 2 +- .../LinearAlgebra/SparseTest/SparseTest.cpp | 10 +- .../DependencyTracking}/Variable.hpp | 6 +- .../VariableImplementation.hpp | 4 +- .../DependencyTracking}/VariableOperators.hpp | 50 +- src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp | 1560 +++++++++-------- src/Model/Evaluator.hpp | 5 +- src/Model/PhasorDynamics/Branch/Branch.cpp | 4 +- src/Model/PhasorDynamics/Bus/Bus.cpp | 4 +- src/Model/PhasorDynamics/Bus/BusInfinite.cpp | 4 +- src/Model/PhasorDynamics/BusBase.hpp | 10 +- src/Model/PhasorDynamics/Component.hpp | 10 +- src/Model/PhasorDynamics/Load/Load.cpp | 4 +- .../PowerElectronics/Capacitor/Capacitor.cpp | 8 +- .../PowerElectronics/CircuitComponent.hpp | 6 +- .../DistributedGenerator.cpp | 2 +- .../PowerElectronics/Inductor/Inductor.cpp | 8 +- .../MicrogridLine/MicrogridLine.cpp | 8 +- .../MicrogridLoad/MicrogridLoad.cpp | 8 +- src/Model/PowerFlow/ModelEvaluatorImpl.hpp | 10 +- src/Solver/Dynamic/Ida.cpp | 2 +- .../AutomaticDifferentiation/CMakeLists.txt | 2 + .../DependencyTracking/CMakeLists.txt | 14 + .../DependencyTrackingTests.hpp} | 10 +- .../runDependencyTrackingTests.cpp} | 2 +- tests/UnitTests/CMakeLists.txt | 2 +- .../UnitTests/PhasorDynamics/BranchTests.hpp | 36 +- tests/UnitTests/PhasorDynamics/LoadTests.hpp | 26 +- tests/UnitTests/Solver/Dynamic/IdaTests.hpp | 6 +- .../UnitTests/SparsityPattern/CMakeLists.txt | 14 - 32 files changed, 926 insertions(+), 915 deletions(-) rename src/{LinearAlgebra/SparsityPattern => AutomaticDifferentiation/DependencyTracking}/Variable.hpp (98%) rename src/{LinearAlgebra/SparsityPattern => AutomaticDifferentiation/DependencyTracking}/VariableImplementation.hpp (98%) rename src/{LinearAlgebra/SparsityPattern => AutomaticDifferentiation/DependencyTracking}/VariableOperators.hpp (81%) create mode 100644 tests/UnitTests/AutomaticDifferentiation/CMakeLists.txt create mode 100644 tests/UnitTests/AutomaticDifferentiation/DependencyTracking/CMakeLists.txt rename tests/UnitTests/{SparsityPattern/SparsityPatternTests.hpp => AutomaticDifferentiation/DependencyTracking/DependencyTrackingTests.hpp} (87%) rename tests/UnitTests/{SparsityPattern/runSparsityPatternTests.cpp => AutomaticDifferentiation/DependencyTracking/runDependencyTrackingTests.cpp} (87%) delete mode 100644 tests/UnitTests/SparsityPattern/CMakeLists.txt diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 18d31a59b..5ece7532c 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -102,6 +102,8 @@ jobs: - gridkit@develop +enzyme ^enzyme@0.0.173 ^sundials@develop + - gridkit@develop ~enzyme + ^sundials@develop steps: - name: Add LLVM diff --git a/examples/Enzyme/PowerElectronics/main.cpp b/examples/Enzyme/PowerElectronics/main.cpp index eff14ddb0..5698901d1 100644 --- a/examples/Enzyme/PowerElectronics/main.cpp +++ b/examples/Enzyme/PowerElectronics/main.cpp @@ -15,7 +15,7 @@ */ using DenseMatrix = GridKit::LinearAlgebra::DenseMatrix; -using SparseMatrix = COO_Matrix; +using SparseMatrix = GridKit::LinearAlgebra::COO_Matrix; using DG = GridKit::DistributedGenerator; using DGParameters = GridKit::DistributedGeneratorParameters; diff --git a/examples/Enzyme/Standalone/EnzymeSparse.cpp b/examples/Enzyme/Standalone/EnzymeSparse.cpp index 627cc78f9..f8e0bf0a9 100644 --- a/examples/Enzyme/Standalone/EnzymeSparse.cpp +++ b/examples/Enzyme/Standalone/EnzymeSparse.cpp @@ -14,7 +14,7 @@ * TODO: Convert this into a unit test. */ -using SparseMatrix = COO_Matrix; +using SparseMatrix = GridKit::LinearAlgebra::COO_Matrix; extern int enzyme_dup; extern int enzyme_const; extern int enzyme_dupnoneed; diff --git a/examples/LinearAlgebra/SparseTest/SparseTest.cpp b/examples/LinearAlgebra/SparseTest/SparseTest.cpp index 12ed679d0..f9d99ffd1 100644 --- a/examples/LinearAlgebra/SparseTest/SparseTest.cpp +++ b/examples/LinearAlgebra/SparseTest/SparseTest.cpp @@ -18,7 +18,7 @@ int main() size_t n = 4; size_t m = 4; - COO_Matrix A = COO_Matrix(x, y, val, m, n); + GridKit::LinearAlgebra::COO_Matrix A = GridKit::LinearAlgebra::COO_Matrix(x, y, val, m, n); std::vector valn(4); std::vector xn(4); @@ -34,10 +34,10 @@ int main() std::cout << "A:\n"; A.printMatrix(); - std::vector val2{0.5, 0.6, 0.7, 0.8, 1.0}; - std::vector x2{0, 2, 0, 2, 1}; - std::vector y2{3, 3, 2, 2, 3}; - COO_Matrix B = COO_Matrix(x2, y2, val2, m, n); + std::vector val2{0.5, 0.6, 0.7, 0.8, 1.0}; + std::vector x2{0, 2, 0, 2, 1}; + std::vector y2{3, 3, 2, 2, 3}; + GridKit::LinearAlgebra::COO_Matrix B = GridKit::LinearAlgebra::COO_Matrix(x2, y2, val2, m, n); std::cout << "B:\n"; B.printMatrix(); diff --git a/src/LinearAlgebra/SparsityPattern/Variable.hpp b/src/AutomaticDifferentiation/DependencyTracking/Variable.hpp similarity index 98% rename from src/LinearAlgebra/SparsityPattern/Variable.hpp rename to src/AutomaticDifferentiation/DependencyTracking/Variable.hpp index a81e8d225..20f4b2634 100644 --- a/src/LinearAlgebra/SparsityPattern/Variable.hpp +++ b/src/AutomaticDifferentiation/DependencyTracking/Variable.hpp @@ -18,7 +18,7 @@ namespace GridKit { - namespace Sparse + namespace DependencyTracking { /** @@ -325,13 +325,13 @@ namespace GridKit inline std::istream& operator>>(std::istream& is, Variable& v); - } // namespace Sparse + } // namespace DependencyTracking } // namespace GridKit namespace GridKit { template <> - class ScalarTraits + class ScalarTraits { public: typedef double real_type; diff --git a/src/LinearAlgebra/SparsityPattern/VariableImplementation.hpp b/src/AutomaticDifferentiation/DependencyTracking/VariableImplementation.hpp similarity index 98% rename from src/LinearAlgebra/SparsityPattern/VariableImplementation.hpp rename to src/AutomaticDifferentiation/DependencyTracking/VariableImplementation.hpp index 30661e4b6..c685848ee 100644 --- a/src/LinearAlgebra/SparsityPattern/VariableImplementation.hpp +++ b/src/AutomaticDifferentiation/DependencyTracking/VariableImplementation.hpp @@ -6,7 +6,7 @@ namespace GridKit { - namespace Sparse + namespace DependencyTracking { /** @brief Returns the list of derivatives. @@ -204,5 +204,5 @@ namespace GridKit return *this; } - } // namespace Sparse + } // namespace DependencyTracking } // namespace GridKit diff --git a/src/LinearAlgebra/SparsityPattern/VariableOperators.hpp b/src/AutomaticDifferentiation/DependencyTracking/VariableOperators.hpp similarity index 81% rename from src/LinearAlgebra/SparsityPattern/VariableOperators.hpp rename to src/AutomaticDifferentiation/DependencyTracking/VariableOperators.hpp index ce5727246..24a600c73 100644 --- a/src/LinearAlgebra/SparsityPattern/VariableOperators.hpp +++ b/src/AutomaticDifferentiation/DependencyTracking/VariableOperators.hpp @@ -6,7 +6,7 @@ namespace GridKit { - namespace Sparse + namespace DependencyTracking { //------------------------------------ // non-member operators and functions @@ -317,7 +317,7 @@ namespace GridKit return x > 0.0 ? 1.0 : -1.0; } - } // namespace Sparse + } // namespace DependencyTracking } // namespace GridKit // Add all mathematical functions to the namespace std so that, @@ -325,31 +325,31 @@ namespace GridKit namespace std { -#define IMPL_FUN_1(FUN, DER) \ - inline GridKit::Sparse::Variable FUN(const GridKit::Sparse::Variable& x) \ - { \ - double val = FUN(x()); \ - double der = DER(x()); \ - GridKit::Sparse::Variable res(x); /* copy derivatives of x*/ \ - res.setValue(val); /* set function value f(x) */ \ - res.scaleDependencies(der); /* compute derivatives of f(x) */ \ - return res; \ +#define IMPL_FUN_1(FUN, DER) \ + inline GridKit::DependencyTracking::Variable FUN(const GridKit::DependencyTracking::Variable& x) \ + { \ + double val = FUN(x()); \ + double der = DER(x()); \ + GridKit::DependencyTracking::Variable res(x); /* copy derivatives of x*/ \ + res.setValue(val); /* set function value f(x) */ \ + res.scaleDependencies(der); /* compute derivatives of f(x) */ \ + return res; \ } - IMPL_FUN_1(sin, GridKit::Sparse::sin_derivative) - IMPL_FUN_1(cos, GridKit::Sparse::cos_derivative) - IMPL_FUN_1(tan, GridKit::Sparse::tan_derivative) - IMPL_FUN_1(asin, GridKit::Sparse::asin_derivative) - IMPL_FUN_1(acos, GridKit::Sparse::acos_derivative) - IMPL_FUN_1(atan, GridKit::Sparse::atan_derivative) - IMPL_FUN_1(sinh, GridKit::Sparse::sinh_derivative) - IMPL_FUN_1(cosh, GridKit::Sparse::cosh_derivative) - IMPL_FUN_1(tanh, GridKit::Sparse::tanh_derivative) - IMPL_FUN_1(exp, GridKit::Sparse::exp_derivative) - IMPL_FUN_1(log, GridKit::Sparse::log_derivative) - IMPL_FUN_1(log10, GridKit::Sparse::log10_derivative) - IMPL_FUN_1(sqrt, GridKit::Sparse::sqrt_derivative) - IMPL_FUN_1(abs, GridKit::Sparse::abs_derivative) + IMPL_FUN_1(sin, GridKit::DependencyTracking::sin_derivative) + IMPL_FUN_1(cos, GridKit::DependencyTracking::cos_derivative) + IMPL_FUN_1(tan, GridKit::DependencyTracking::tan_derivative) + IMPL_FUN_1(asin, GridKit::DependencyTracking::asin_derivative) + IMPL_FUN_1(acos, GridKit::DependencyTracking::acos_derivative) + IMPL_FUN_1(atan, GridKit::DependencyTracking::atan_derivative) + IMPL_FUN_1(sinh, GridKit::DependencyTracking::sinh_derivative) + IMPL_FUN_1(cosh, GridKit::DependencyTracking::cosh_derivative) + IMPL_FUN_1(tanh, GridKit::DependencyTracking::tanh_derivative) + IMPL_FUN_1(exp, GridKit::DependencyTracking::exp_derivative) + IMPL_FUN_1(log, GridKit::DependencyTracking::log_derivative) + IMPL_FUN_1(log10, GridKit::DependencyTracking::log10_derivative) + IMPL_FUN_1(sqrt, GridKit::DependencyTracking::sqrt_derivative) + IMPL_FUN_1(abs, GridKit::DependencyTracking::abs_derivative) #undef IMPL_FUN_1 diff --git a/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp b/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp index 7b108b650..13cbcc76f 100644 --- a/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp +++ b/src/LinearAlgebra/SparseMatrix/COO_Matrix.hpp @@ -20,862 +20,868 @@ * * m x n sparse matrix */ -template -class COO_Matrix +namespace GridKit { -private: - std::vector values_; - std::vector row_indices_; - std::vector column_indices_; - IdxT rows_size_; - IdxT columns_size_; - bool sorted_; - -public: - // Constructors - COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n); - COO_Matrix(IdxT m, IdxT n); - COO_Matrix(); - ~COO_Matrix(); - - // Operations - - // --- Functions which call sort --- - std::tuple, std::vector> getRowCopy(IdxT r); - std::tuple&, std::vector&, std::vector&> getEntries(); - std::tuple, std::vector, std::vector> getEntryCopies(); - std::tuple, std::vector, std::vector> getEntryCopiesSubMatrix(std::vector submap); - - std::tuple, std::vector, std::vector> setDataToCSR(); - std::vector getCSRRowData(); - - // BLAS. Will sort before running - void setValues(std::vector r, std::vector c, std::vector v); - void axpy(ScalarT alpha, COO_Matrix& a); - void axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v); - void scal(ScalarT alpha); - ScalarT frobNorm(); - - // --- Permutation Operations --- - // Sorting is only done if not already sorted. - void permutation(std::vector row_perm, std::vector col_perm); - void permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n); - - void zeroMatrix(); - - void identityMatrix(IdxT n); - - // Resort values_ - void sortSparse(); - bool isSorted(); - IdxT nnz(); - - std::tuple getDimensions(); - - void printMatrix(std::string name = ""); - - static void sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values); - -private: - IdxT indexStartRow(const std::vector& rows, IdxT r); - IdxT sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci); - bool checkIncreaseSize(IdxT r, IdxT c); -}; - -/** - * @brief Get copy of row index - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] r row index - * @return std::tuple, std::vector> - */ -template -inline std::tuple, std::vector> COO_Matrix::getRowCopy(IdxT r) -{ - if (!this->sorted_) + namespace LinearAlgebra { - this->sortSparse(); - } - IdxT row_index = this->indexStartRow(r); - - if (row_index == -1) - { - return {std::vector(), std::vector()}; - } - - IdxT rsize = row_index; - do - { - rsize++; - } while (rsize < this->values_.size() && this->row_indices_[rsize] == r); + template + class COO_Matrix + { + private: + std::vector values_; + std::vector row_indices_; + std::vector column_indices_; + IdxT rows_size_; + IdxT columns_size_; + bool sorted_; + + public: + // Constructors + COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n); + COO_Matrix(IdxT m, IdxT n); + COO_Matrix(); + ~COO_Matrix(); + + // Operations + + // --- Functions which call sort --- + std::tuple, std::vector> getRowCopy(IdxT r); + std::tuple&, std::vector&, std::vector&> getEntries(); + std::tuple, std::vector, std::vector> getEntryCopies(); + std::tuple, std::vector, std::vector> getEntryCopiesSubMatrix(std::vector submap); + + std::tuple, std::vector, std::vector> setDataToCSR(); + std::vector getCSRRowData(); + + // BLAS. Will sort before running + void setValues(std::vector r, std::vector c, std::vector v); + void axpy(ScalarT alpha, COO_Matrix& a); + void axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v); + void scal(ScalarT alpha); + ScalarT frobNorm(); + + // --- Permutation Operations --- + // Sorting is only done if not already sorted. + void permutation(std::vector row_perm, std::vector col_perm); + void permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n); + + void zeroMatrix(); + + void identityMatrix(IdxT n); + + // Resort values_ + void sortSparse(); + bool isSorted(); + IdxT nnz(); + + std::tuple getDimensions(); + + void printMatrix(std::string name = ""); + + static void sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values); + + private: + IdxT indexStartRow(const std::vector& rows, IdxT r); + IdxT sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci); + bool checkIncreaseSize(IdxT r, IdxT c); + }; + + /** + * @brief Get copy of row index + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] r row index + * @return std::tuple, std::vector> + */ + template + inline std::tuple, std::vector> COO_Matrix::getRowCopy(IdxT r) + { + if (!this->sorted_) + { + this->sortSparse(); + } + IdxT row_index = this->indexStartRow(r); - return {{this->column_indices_.begin() + row_index, this->column_indices_.begin() + rsize}, - {this->values_.begin() + row_index, this->values_.begin() + rsize}}; -} + if (row_index == -1) + { + return {std::vector(), std::vector()}; + } -/** - * @brief Get all entry pointers. Will sort before returning - * - * @tparam ScalarT - * @tparam IdxT - * @return std::tuple, std::vector, std::vector> - */ -template -inline std::tuple&, std::vector&, std::vector&> COO_Matrix::getEntries() -{ - if (!this->sorted_) - { - this->sortSparse(); - } - return {this->row_indices_, this->column_indices_, this->values_}; -} + IdxT rsize = row_index; + do + { + rsize++; + } while (rsize < this->values_.size() && this->row_indices_[rsize] == r); -/** - * @brief Sorts the data if it's not already sorted - * - * @tparam ScalarT - * @tparam IdxT - * @return std::tuple, std::vector, std::vector> - */ -template -inline std::tuple, std::vector, std::vector> COO_Matrix::getEntryCopies() -{ - if (!this->sorted_) - { - this->sortSparse(); - } - return {this->row_indices_, this->column_indices_, this->values_}; -} + return {{this->column_indices_.begin() + row_index, this->column_indices_.begin() + rsize}, + {this->values_.begin() + row_index, this->values_.begin() + rsize}}; + } -/** - * @brief Returns the data in CSR Format - * - * @tparam ScalarT - * @tparam IdxT - * @return std::tuple, std::vector, std::vector> - */ -template -inline std::tuple, std::vector, std::vector> COO_Matrix::setDataToCSR() -{ - if (!this->isSorted()) - this->sortSparse(); - std::vector row_size_vec(this->rows_size_ + 1, 0); - IdxT counter = 0; - for (IdxT i = 0; i < static_cast(row_size_vec.size() - 1); i++) - { - row_size_vec[i + 1] = row_size_vec[i]; - while (counter < static_cast(this->row_indices_.size()) && i == this->row_indices_[counter]) + /** + * @brief Get all entry pointers. Will sort before returning + * + * @tparam ScalarT + * @tparam IdxT + * @return std::tuple, std::vector, std::vector> + */ + template + inline std::tuple&, std::vector&, std::vector&> COO_Matrix::getEntries() { - row_size_vec[i + 1]++; - counter++; + if (!this->sorted_) + { + this->sortSparse(); + } + return {this->row_indices_, this->column_indices_, this->values_}; } - } - return {row_size_vec, this->column_indices_, this->values_}; -} -/** - * @brief Only creates the row data - * - * @todo swap this with having the matrix store the data and updates. This can then be passed by reference - * - * - * @tparam ScalarT - * @tparam IdxT - * @return std::vector - */ -template -inline std::vector COO_Matrix::getCSRRowData() -{ - if (!this->isSorted()) - this->sortSparse(); - std::vector row_size_vec(static_cast(this->rows_size_ + 1), 0); - size_t counter = 0; - for (size_t i = 0; i < row_size_vec.size() - 1; i++) - { - row_size_vec[i + 1] = row_size_vec[i]; - while (counter < this->row_indices_.size() && i == static_cast(this->row_indices_[counter])) + /** + * @brief Sorts the data if it's not already sorted + * + * @tparam ScalarT + * @tparam IdxT + * @return std::tuple, std::vector, std::vector> + */ + template + inline std::tuple, std::vector, std::vector> COO_Matrix::getEntryCopies() { - row_size_vec[i + 1]++; - counter++; + if (!this->sorted_) + { + this->sortSparse(); + } + return {this->row_indices_, this->column_indices_, this->values_}; } - } - return row_size_vec; -} -/** - * @brief Set coordinates and values of the matrix. - * - * Matrix entries will be sorted in row-major order before the method returns. - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] r row indices of the matrix - * @param[in] c column indices of the matrix - * @param[in] v values of the matrix - * - * @pre r.size() == c.size() == v.size() - * @pre r,c,v represent an array in COO format - * - * @post Coordinates and values are set in the matrix. - */ -template -inline void COO_Matrix::setValues(std::vector r, std::vector c, std::vector v) -{ - // sort input - this->sortSparseCOO(r, c, v); - - // Duplicated with axpy. Could replace with function depdent on lambda expression - size_t a_iter = 0; - // iterate for all current values_ in matrix - for (size_t i = 0; i < this->row_indices_.size(); i++) - { - // pushback values_ when they are not in current matrix - while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + /** + * @brief Returns the data in CSR Format + * + * @tparam ScalarT + * @tparam IdxT + * @return std::tuple, std::vector, std::vector> + */ + template + inline std::tuple, std::vector, std::vector> COO_Matrix::setDataToCSR() { - this->row_indices_.push_back(r[a_iter]); - this->column_indices_.push_back(c[a_iter]); - this->values_.push_back(v[a_iter]); - this->checkIncreaseSize(r[a_iter], c[a_iter]); - a_iter++; + if (!this->isSorted()) + this->sortSparse(); + std::vector row_size_vec(this->rows_size_ + 1, 0); + IdxT counter = 0; + for (IdxT i = 0; i < static_cast(row_size_vec.size() - 1); i++) + { + row_size_vec[i + 1] = row_size_vec[i]; + while (counter < static_cast(this->row_indices_.size()) && i == this->row_indices_[counter]) + { + row_size_vec[i + 1]++; + counter++; + } + } + return {row_size_vec, this->column_indices_, this->values_}; } - if (a_iter >= r.size()) + /** + * @brief Only creates the row data + * + * @todo swap this with having the matrix store the data and updates. This can then be passed by reference + * + * + * @tparam ScalarT + * @tparam IdxT + * @return std::vector + */ + template + inline std::vector COO_Matrix::getCSRRowData() { - break; + if (!this->isSorted()) + this->sortSparse(); + std::vector row_size_vec(static_cast(this->rows_size_ + 1), 0); + size_t counter = 0; + for (size_t i = 0; i < row_size_vec.size() - 1; i++) + { + row_size_vec[i + 1] = row_size_vec[i]; + while (counter < this->row_indices_.size() && i == static_cast(this->row_indices_[counter])) + { + row_size_vec[i + 1]++; + counter++; + } + } + return row_size_vec; } - if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + /** + * @brief Set coordinates and values of the matrix. + * + * Matrix entries will be sorted in row-major order before the method returns. + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] r row indices of the matrix + * @param[in] c column indices of the matrix + * @param[in] v values of the matrix + * + * @pre r.size() == c.size() == v.size() + * @pre r,c,v represent an array in COO format + * + * @post Coordinates and values are set in the matrix. + */ + template + inline void COO_Matrix::setValues(std::vector r, std::vector c, std::vector v) { - this->values_[i] = v[a_iter]; - a_iter++; - } - } - // push back rest that was not found sorted - for (size_t i = a_iter; i < r.size(); i++) - { - this->row_indices_.push_back(r[i]); - this->column_indices_.push_back(c[i]); - this->values_.push_back(v[i]); + // sort input + this->sortSparseCOO(r, c, v); - this->checkIncreaseSize(r[i], c[i]); - } + // Duplicated with axpy. Could replace with function depdent on lambda expression + size_t a_iter = 0; + // iterate for all current values_ in matrix + for (size_t i = 0; i < this->row_indices_.size(); i++) + { + // pushback values_ when they are not in current matrix + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + { + this->row_indices_.push_back(r[a_iter]); + this->column_indices_.push_back(c[a_iter]); + this->values_.push_back(v[a_iter]); + this->checkIncreaseSize(r[a_iter], c[a_iter]); + a_iter++; + } + + if (a_iter >= r.size()) + { + break; + } + + if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + { + this->values_[i] = v[a_iter]; + a_iter++; + } + } + // push back rest that was not found sorted + for (size_t i = a_iter; i < r.size(); i++) + { + this->row_indices_.push_back(r[i]); + this->column_indices_.push_back(c[i]); + this->values_.push_back(v[i]); - this->sorted_ = false; -} + this->checkIncreaseSize(r[i], c[i]); + } -/** - * @brief Implements axpy this += alpha * a. Will sort before running - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] alpha matrix to be added - * @param[in] a scalar to multiply by - * - * @post this = this + alpha * a - */ -template -inline void COO_Matrix::axpy(ScalarT alpha, COO_Matrix& a) -{ - if (alpha == 0) - { - return; - } + this->sorted_ = false; + } - if (!this->sorted_) - { - this->sortSparse(); - } - if (!a.isSorted()) - { - a.sortSparse(); - } - IdxT m = 0; - IdxT n = 0; - std::tuple&, std::vector&, std::vector&> tpm = a.getEntries(); - const auto& [r, c, val] = tpm; - std::tie(m, n) = a.getDimensions(); - - // Increase size as necessary - this->rows_size_ = this->rows_size_ > m ? this->rows_size_ : m; - this->columns_size_ = this->columns_size_ > n ? this->columns_size_ : n; - - size_t a_iter = 0; - // iterate for all current values in matrix - for (size_t i = 0; i < this->row_indices_.size(); i++) - { - // pushback values when they are not in current matrix - while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + /** + * @brief Implements axpy this += alpha * a. Will sort before running + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] alpha matrix to be added + * @param[in] a scalar to multiply by + * + * @post this = this + alpha * a + */ + template + inline void COO_Matrix::axpy(ScalarT alpha, COO_Matrix& a) { - this->row_indices_.push_back(r[a_iter]); - this->column_indices_.push_back(c[a_iter]); - this->values_.push_back(alpha * val[a_iter]); + if (alpha == 0) + { + return; + } - this->checkIncreaseSize(r[a_iter], c[a_iter]); - a_iter++; - } - if (a_iter >= r.size()) - { - break; - } + if (!this->sorted_) + { + this->sortSparse(); + } + if (!a.isSorted()) + { + a.sortSparse(); + } + IdxT m = 0; + IdxT n = 0; + std::tuple&, std::vector&, std::vector&> tpm = a.getEntries(); + const auto& [r, c, val] = tpm; + std::tie(m, n) = a.getDimensions(); + + // Increase size as necessary + this->rows_size_ = this->rows_size_ > m ? this->rows_size_ : m; + this->columns_size_ = this->columns_size_ > n ? this->columns_size_ : n; + + size_t a_iter = 0; + // iterate for all current values in matrix + for (size_t i = 0; i < this->row_indices_.size(); i++) + { + // pushback values when they are not in current matrix + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + { + this->row_indices_.push_back(r[a_iter]); + this->column_indices_.push_back(c[a_iter]); + this->values_.push_back(alpha * val[a_iter]); + + this->checkIncreaseSize(r[a_iter], c[a_iter]); + a_iter++; + } + if (a_iter >= r.size()) + { + break; + } + + if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + { + this->values_[i] += alpha * val[a_iter]; + a_iter++; + } + } + // push back rest that was not found sorted_ + for (size_t i = a_iter; i < r.size(); i++) + { + this->row_indices_.push_back(r[i]); + this->column_indices_.push_back(c[i]); + this->values_.push_back(alpha * val[i]); - if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) - { - this->values_[i] += alpha * val[a_iter]; - a_iter++; - } - } - // push back rest that was not found sorted_ - for (size_t i = a_iter; i < r.size(); i++) - { - this->row_indices_.push_back(r[i]); - this->column_indices_.push_back(c[i]); - this->values_.push_back(alpha * val[i]); + this->checkIncreaseSize(r[i], c[i]); + } - this->checkIncreaseSize(r[i], c[i]); - } + this->sorted_ = false; + } - this->sorted_ = false; -} + /** + * @brief axpy on a COO representation of a matrix. Will sort before running + * + * @tparam ScalarT + * @tparam IdxT + * @param alpha scalar to multiply by + * @param r row indices + * @param c column indices + * @param v values + * + * @pre r.size() == c.size() == v.size() + * @pre r,c,v represent an array a in COO format + * + * @post this = this + alpha * a + */ + template + inline void COO_Matrix::axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v) + { + if (alpha == 0) + return; -/** - * @brief axpy on a COO representation of a matrix. Will sort before running - * - * @tparam ScalarT - * @tparam IdxT - * @param alpha scalar to multiply by - * @param r row indices - * @param c column indices - * @param v values - * - * @pre r.size() == c.size() == v.size() - * @pre r,c,v represent an array a in COO format - * - * @post this = this + alpha * a - */ -template -inline void COO_Matrix::axpy(ScalarT alpha, std::vector r, std::vector c, std::vector v) -{ - if (alpha == 0) - return; + if (!this->sorted_) + { + this->sortSparse(); + } - if (!this->sorted_) - { - this->sortSparse(); - } + // sort input + this->sortSparseCOO(r, c, v); - // sort input - this->sortSparseCOO(r, c, v); + size_t a_iter = 0; + // iterate for all current values_ in matrix + for (size_t i = 0; i < this->row_indices_.size(); i++) + { + // pushback values_ when they are not in current matrix + while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) + { + this->row_indices_.push_back(r[a_iter]); + this->column_indices_.push_back(c[a_iter]); + this->values_.push_back(alpha * v[a_iter]); + + this->checkIncreaseSize(r[a_iter], c[a_iter]); + a_iter++; + } + if (a_iter >= r.size()) + { + break; + } + + if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + { + this->values_[i] += alpha * v[a_iter]; + a_iter++; + } + } + // push back rest that was not found sorted_ + for (IdxT i = a_iter; i < r.size(); i++) + { + this->row_indices_.push_back(r[i]); + this->column_indices_.push_back(c[i]); + this->values_.push_back(alpha * v[i]); - size_t a_iter = 0; - // iterate for all current values_ in matrix - for (size_t i = 0; i < this->row_indices_.size(); i++) - { - // pushback values_ when they are not in current matrix - while (a_iter < r.size() && (r[a_iter] < this->row_indices_[i] || (r[a_iter] == this->row_indices_[i] && c[a_iter] < this->column_indices_[i]))) - { - this->row_indices_.push_back(r[a_iter]); - this->column_indices_.push_back(c[a_iter]); - this->values_.push_back(alpha * v[a_iter]); + this->checkIncreaseSize(r[i], c[i]); + } - this->checkIncreaseSize(r[a_iter], c[a_iter]); - a_iter++; + this->sorted_ = false; } - if (a_iter >= r.size()) + + /** + * @brief Scale all values by alpha + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] alpha scalar to scale by + */ + template + inline void COO_Matrix::scal(ScalarT alpha) { - break; + for (auto i = this->values_.begin(); i < this->values_.end(); i++) + { + *i *= alpha; + } } - if (r[a_iter] == this->row_indices_[i] && c[a_iter] == this->column_indices_[i]) + /** + * @brief Calculates the Frobenius Norm of the matrix + * + * @tparam ScalarT + * @tparam IdxT + * @return ScalarT - Frobenius Norm of the matrix + */ + template + inline ScalarT COO_Matrix::frobNorm() { - this->values_[i] += alpha * v[a_iter]; - a_iter++; + ScalarT totsum = 0.0; + for (auto i = this->values_.begin(); i < this->values_.end(); i++) + { + totsum += abs(*i) ^ 2; + } + return totsum; } - } - // push back rest that was not found sorted_ - for (IdxT i = a_iter; i < r.size(); i++) - { - this->row_indices_.push_back(r[i]); - this->column_indices_.push_back(c[i]); - this->values_.push_back(alpha * v[i]); - - this->checkIncreaseSize(r[i], c[i]); - } - this->sorted_ = false; -} - -/** - * @brief Scale all values by alpha - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] alpha scalar to scale by - */ -template -inline void COO_Matrix::scal(ScalarT alpha) -{ - for (auto i = this->values_.begin(); i < this->values_.end(); i++) - { - *i *= alpha; - } -} - -/** - * @brief Calculates the Frobenius Norm of the matrix - * - * @tparam ScalarT - * @tparam IdxT - * @return ScalarT - Frobenius Norm of the matrix - */ -template -inline ScalarT COO_Matrix::frobNorm() -{ - ScalarT totsum = 0.0; - for (auto i = this->values_.begin(); i < this->values_.end(); i++) - { - totsum += abs(*i) ^ 2; - } - return totsum; -} + /** + * @brief Permutate the matrix to a different one. Only changes the coordinates + * + * @tparam ScalarT + * @param[in] row_perm + * @param[out] col_perm + * + * @pre row_perm.size() == this->rows_size_ = col_perm.size() == this->columns_size_ + * + * @post this = this(row_perm, col_perm) + */ + template + inline void COO_Matrix::permutation(std::vector row_perm, std::vector col_perm) + { + assert(row_perm.size() = this->rows_size_); + assert(col_perm.size() = this->columns_size_); -/** - * @brief Permutate the matrix to a different one. Only changes the coordinates - * - * @tparam ScalarT - * @param[in] row_perm - * @param[out] col_perm - * - * @pre row_perm.size() == this->rows_size_ = col_perm.size() == this->columns_size_ - * - * @post this = this(row_perm, col_perm) - */ -template -inline void COO_Matrix::permutation(std::vector row_perm, std::vector col_perm) -{ - assert(row_perm.size() = this->rows_size_); - assert(col_perm.size() = this->columns_size_); + for (int i = 0; i < this->values_.size(); i++) + { + this->row_indices_[i] = row_perm[this->row_indices_[i]]; + this->column_indices_[i] = col_perm[this->column_indices_[i]]; + } + this->sorted_ = false; + // cycle sorting maybe useful since permutations are already known + } - for (int i = 0; i < this->values_.size(); i++) - { - this->row_indices_[i] = row_perm[this->row_indices_[i]]; - this->column_indices_[i] = col_perm[this->column_indices_[i]]; - } - this->sorted_ = false; - // cycle sorting maybe useful since permutations are already known -} + /** + * @brief Permutes the matrix and can change its size efficently + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] row_perm row permutation + * @param[in] col_perm column permutation + * @param[in] m number of rows + * @param[in] n number of columns + * + * @pre row_perm.size() == this->rows_size_ + * @pre col_perm.size() == this->columns_size_ + * @pre indices are set to -1 if they are to be removed + * + * @post this = this(row_perm, col_perm) and removed indices have corresponding values set to 0 + */ + template + inline void COO_Matrix::permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n) + { + assert(row_perm.size() == this->rows_size_); + assert(col_perm.size() == this->columns_size_); -/** - * @brief Permutes the matrix and can change its size efficently - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] row_perm row permutation - * @param[in] col_perm column permutation - * @param[in] m number of rows - * @param[in] n number of columns - * - * @pre row_perm.size() == this->rows_size_ - * @pre col_perm.size() == this->columns_size_ - * @pre indices are set to -1 if they are to be removed - * - * @post this = this(row_perm, col_perm) and removed indices have corresponding values set to 0 - */ -template -inline void COO_Matrix::permutationSizeMap(std::vector row_perm, std::vector col_perm, IdxT m, IdxT n) -{ - assert(row_perm.size() == this->rows_size_); - assert(col_perm.size() == this->columns_size_); + this->rows_size_ = m; + this->columns_size_ = n; - this->rows_size_ = m; - this->columns_size_ = n; + for (size_t i = 0; i < this->values_.size(); i++) + { + if (row_perm[this->row_indices_[i]] == -1 || col_perm[this->column_indices_[i]] == -1) + { + this->values_[i] = 0; + } + else + { + this->row_indices_[i] = row_perm[this->row_indices_[i]]; + this->column_indices_[i] = col_perm[this->column_indices_[i]]; + } + } + this->sorted_ = false; + } - for (size_t i = 0; i < this->values_.size(); i++) - { - if (row_perm[this->row_indices_[i]] == -1 || col_perm[this->column_indices_[i]] == -1) + /** + * @brief Turn matrix into the zero matrix. Does not actually delete memory + * + * @tparam ScalarT + * @tparam IdxT + * + */ + template + inline void COO_Matrix::zeroMatrix() { - this->values_[i] = 0; + // resize doesn't affect capacity if smaller + this->column_indices_.resize(0); + this->row_indices_.resize(0); + this->values_.resize(0); + this->sorted_ = true; } - else + + /** + * @brief Turn matrix into the identity matrix + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] n size of the identity matrix + * + * @post this = I_n + * + * @todo - it might be better to explicitly zero out the matrix and require to be so in preconditions + */ + + template + inline void COO_Matrix::identityMatrix(IdxT n) { - this->row_indices_[i] = row_perm[this->row_indices_[i]]; - this->column_indices_[i] = col_perm[this->column_indices_[i]]; + // Reset Matrix + this->zeroMatrix(); + for (IdxT i = 0; i < n; i++) + { + this->column_indices_[i] = i; + this->row_indices_[i] = i; + this->values_[i] = 1.0; + } + this->sorted_ = true; } - } - this->sorted_ = false; -} - -/** - * @brief Turn matrix into the zero matrix. Does not actually delete memory - * - * @tparam ScalarT - * @tparam IdxT - * - */ -template -inline void COO_Matrix::zeroMatrix() -{ - // resize doesn't affect capacity if smaller - this->column_indices_.resize(0); - this->row_indices_.resize(0); - this->values_.resize(0); - this->sorted_ = true; -} - -/** - * @brief Turn matrix into the identity matrix - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] n size of the identity matrix - * - * @post this = I_n - * - * @todo - it might be better to explicitly zero out the matrix and require to be so in preconditions - */ - -template -inline void COO_Matrix::identityMatrix(IdxT n) -{ - // Reset Matrix - this->zeroMatrix(); - for (IdxT i = 0; i < n; i++) - { - this->column_indices_[i] = i; - this->row_indices_[i] = i; - this->values_[i] = 1.0; - } - this->sorted_ = true; -} -/** - * @brief Restructure the sparse matrix for faster accesses and modifications - * - * @tparam ScalarT - * @tparam IdxT - */ -template -inline void COO_Matrix::sortSparse() -{ - this->sortSparseCOO(this->row_indices_, this->column_indices_, this->values_); - this->sorted_ = true; -} - -/** - * @brief Check if the matrix is sorted - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[out] bool - true if sorted, false otherwise - */ - -template -inline bool COO_Matrix::isSorted() -{ - return this->sorted_; -} - -/** - * @brief Get the number of non-zero elements in the matrix - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[out] IdxT - number of non-zero elements in the matrix - */ -template -inline IdxT COO_Matrix::nnz() -{ - return static_cast(this->values_.size()); -} - -template -inline std::tuple COO_Matrix::getDimensions() -{ - return std::tuple(this->rows_size_, this->columns_size_); -} - -/** - * @brief Print matrix in sorted order - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] name to identify the specific matrix printed - */ -template -inline void COO_Matrix::printMatrix(std::string name) -{ - if (this->sorted_ == false) - { - this->sortSparse(); - } + /** + * @brief Restructure the sparse matrix for faster accesses and modifications + * + * @tparam ScalarT + * @tparam IdxT + */ + template + inline void COO_Matrix::sortSparse() + { + this->sortSparseCOO(this->row_indices_, this->column_indices_, this->values_); + this->sorted_ = true; + } - std::cout << "Sparse COO Matrix: " << name << "\n"; - std::cout << "(x , y, value)\n"; - for (size_t i = 0; i < this->values_.size(); i++) - { - std::cout << "(" << this->row_indices_[i] - << ", " << this->column_indices_[i] - << ", " << this->values_[i] << ")\n"; - } - std::cout << std::flush; -} + /** + * @brief Check if the matrix is sorted + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[out] bool - true if sorted, false otherwise + */ + + template + inline bool COO_Matrix::isSorted() + { + return this->sorted_; + } -/** - * @brief Find the lowest row cordinate from set of provided coordinates - * - * Assumes rows and columns are sorted - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] rows - row indices - * @param[in] r - row index - * - * @return IdxT - index of lowest row - */ -template -inline IdxT COO_Matrix::indexStartRow(const std::vector& rows, IdxT r) -{ - // Specialized Binary Search for Lowest Row - IdxT i1 = 0; - IdxT i2 = rows->size() - 1; - IdxT m_smallest = -1; - IdxT m = -1; - while (i1 <= i2) - { - m = (i2 + i1) / 2; - // rows - if (rows[m] < r) + /** + * @brief Get the number of non-zero elements in the matrix + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[out] IdxT - number of non-zero elements in the matrix + */ + template + inline IdxT COO_Matrix::nnz() { - i1 = m + 1; + return static_cast(this->values_.size()); } - else if (r < rows[m]) + + template + inline std::tuple COO_Matrix::getDimensions() { - i2 = m - 1; + return std::tuple(this->rows_size_, this->columns_size_); } - else + + /** + * @brief Print matrix in sorted order + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] name to identify the specific matrix printed + */ + template + inline void COO_Matrix::printMatrix(std::string name) { - if (i1 == i2) + if (this->sorted_ == false) { - return m_smallest; + this->sortSparse(); } - // Keep track of smallest cordinate - m_smallest = m; - i2 = m - 1; + std::cout << "Sparse COO Matrix: " << name << "\n"; + std::cout << "(x , y, value)\n"; + for (size_t i = 0; i < this->values_.size(); i++) + { + std::cout << "(" << this->row_indices_[i] + << ", " << this->column_indices_[i] + << ", " << this->values_[i] << ")\n"; + } + std::cout << std::flush; } - } - return m_smallest; -} -/** - * @brief Basic binary search - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] rows - row indices - * @param[in] columns - column indices - * @param[in] ri - row index - * @param[in] ci - column index - * @return IdxT - returns the index of the coordinate - */ -template -inline IdxT COO_Matrix::sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci) -{ - assert(rows.size() == columns.size()); - // basic binary search - IdxT i1 = 0; - IdxT i2 = rows.size() - 1; - IdxT m = 0; - while (i1 <= i2) - { - m = (i2 + i1) / 2; - // rows - if (rows[m] < ri) + /** + * @brief Find the lowest row cordinate from set of provided coordinates + * + * Assumes rows and columns are sorted + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] rows - row indices + * @param[in] r - row index + * + * @return IdxT - index of lowest row + */ + template + inline IdxT COO_Matrix::indexStartRow(const std::vector& rows, IdxT r) { - i1 = m + 1; + // Specialized Binary Search for Lowest Row + IdxT i1 = 0; + IdxT i2 = rows->size() - 1; + IdxT m_smallest = -1; + IdxT m = -1; + while (i1 <= i2) + { + m = (i2 + i1) / 2; + // rows + if (rows[m] < r) + { + i1 = m + 1; + } + else if (r < rows[m]) + { + i2 = m - 1; + } + else + { + if (i1 == i2) + { + return m_smallest; + } + + // Keep track of smallest cordinate + m_smallest = m; + i2 = m - 1; + } + } + return m_smallest; } - else if (ri < rows[m]) + + /** + * @brief Basic binary search + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] rows - row indices + * @param[in] columns - column indices + * @param[in] ri - row index + * @param[in] ci - column index + * @return IdxT - returns the index of the coordinate + */ + template + inline IdxT COO_Matrix::sparseCordBinarySearch(const std::vector& rows, const std::vector& columns, IdxT ri, IdxT ci) { - i2 = m - 1; + assert(rows.size() == columns.size()); + // basic binary search + IdxT i1 = 0; + IdxT i2 = rows.size() - 1; + IdxT m = 0; + while (i1 <= i2) + { + m = (i2 + i1) / 2; + // rows + if (rows[m] < ri) + { + i1 = m + 1; + } + else if (ri < rows[m]) + { + i2 = m - 1; + } + else + { + if (columns[m] < ci) + { + i1 = m + 1; + } + else if (ci < columns[m]) + { + i2 = m - 1; + } + break; + } + } + + return m; } - else + + /** + * @brief Check if the size of the matrix needs to be increased + * + * @tparam ScalarT + * @tparam IdxT + * @param[in] r row index + * @param[in] c column index + * @return true if size was increased + */ + + template + inline bool COO_Matrix::checkIncreaseSize(IdxT r, IdxT c) { - if (columns[m] < ci) + bool changed = false; + if (r + 1 > this->rows_size_) { - i1 = m + 1; + this->rows_size_ = r + 1; + changed = true; } - else if (ci < columns[m]) + if (c + 1 > this->columns_size_) { - i2 = m - 1; + this->columns_size_ = c + 1; + changed = true; } - break; - } - } - - return m; -} -/** - * @brief Check if the size of the matrix needs to be increased - * - * @tparam ScalarT - * @tparam IdxT - * @param[in] r row index - * @param[in] c column index - * @return true if size was increased - */ - -template -inline bool COO_Matrix::checkIncreaseSize(IdxT r, IdxT c) -{ - bool changed = false; - if (r + 1 > this->rows_size_) - { - this->rows_size_ = r + 1; - changed = true; - } - if (c + 1 > this->columns_size_) - { - this->columns_size_ = c + 1; - changed = true; - } - - return changed; -} - -/** - * @brief Sorts unordered COO matrix - * - * Matrix entries can appear in arbitrary order and will be sorted in - * row-major order before the method returns. - * Duplicate entries are not allowed and should be pre-summed. - * - * @pre rows, columns, and values are of the same size and represent a COO matrix with no duplicates - * @post Matrix entries are sorted in row-major order - * - * @todo simple setup. Should add stable sorting since lists are pre-sorted_ - * - * @tparam ScalarT - * @tparam IdxT - * @param rows - * @param columns - * @param values - */ -template -inline void COO_Matrix::sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values) -{ + return changed; + } - // index based sort code - // https://stackoverflow.com/questions/25921706/creating-a-vector-of-indices-of-a-sorted_-vector - // cannot call sort since two arrays are used instead - std::vector ordervec(rows.size()); - std::size_t n(0); - std::generate(std::begin(ordervec), std::end(ordervec), [&] - { return n++; }); - - // Sort by row first then column. - std::sort(std::begin(ordervec), - std::end(ordervec), - [&](auto i1, auto i2) - { return (rows[i1] < rows[i2]) || (rows[i1] == rows[i2] && columns[i1] < columns[i2]); }); - - // reorder based of index-sorting. Only swap cost no extra memory. - // @todo see if extra memory creation is fine - // https://stackoverflow.com/a/22183350 - for (size_t i = 0; i < ordervec.size(); i++) - { - // permutation swap - while (ordervec[i] != ordervec[ordervec[i]]) + /** + * @brief Sorts unordered COO matrix + * + * Matrix entries can appear in arbitrary order and will be sorted in + * row-major order before the method returns. + * Duplicate entries are not allowed and should be pre-summed. + * + * @pre rows, columns, and values are of the same size and represent a COO matrix with no duplicates + * @post Matrix entries are sorted in row-major order + * + * @todo simple setup. Should add stable sorting since lists are pre-sorted_ + * + * @tparam ScalarT + * @tparam IdxT + * @param rows + * @param columns + * @param values + */ + template + inline void COO_Matrix::sortSparseCOO(std::vector& rows, std::vector& columns, std::vector& values) { - std::swap(rows[ordervec[i]], rows[ordervec[ordervec[i]]]); - std::swap(columns[ordervec[i]], columns[ordervec[ordervec[i]]]); - std::swap(values[ordervec[i]], values[ordervec[ordervec[i]]]); - // swap orderings - std::swap(ordervec[i], ordervec[ordervec[i]]); + // index based sort code + // https://stackoverflow.com/questions/25921706/creating-a-vector-of-indices-of-a-sorted_-vector + // cannot call sort since two arrays are used instead + std::vector ordervec(rows.size()); + std::size_t n(0); + std::generate(std::begin(ordervec), std::end(ordervec), [&] + { return n++; }); + + // Sort by row first then column. + std::sort(std::begin(ordervec), + std::end(ordervec), + [&](auto i1, auto i2) + { return (rows[i1] < rows[i2]) || (rows[i1] == rows[i2] && columns[i1] < columns[i2]); }); + + // reorder based of index-sorting. Only swap cost no extra memory. + // @todo see if extra memory creation is fine + // https://stackoverflow.com/a/22183350 + for (size_t i = 0; i < ordervec.size(); i++) + { + // permutation swap + while (ordervec[i] != ordervec[ordervec[i]]) + { + std::swap(rows[ordervec[i]], rows[ordervec[ordervec[i]]]); + std::swap(columns[ordervec[i]], columns[ordervec[ordervec[i]]]); + std::swap(values[ordervec[i]], values[ordervec[ordervec[i]]]); + + // swap orderings + std::swap(ordervec[i], ordervec[ordervec[i]]); + } + } } - } -} - -/** - * @brief Constructor for COO Matrix with given cooridnates and values - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] r row indices - * @param[in] c column indices - * @param[in] v values - * @param[in] m number of rows - * @param[in] n number of columns - * - * @pre r.size() == c.size() == v.size() - * @pre r,c,v represent an array in COO format - * - * @post COO_Matrix is created with given coordinates and values - */ -template -inline COO_Matrix::COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n) -{ - this->values_ = v; - this->row_indices_ = r; - this->column_indices_ = c; - this->rows_size_ = m; - this->columns_size_ = n; - this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. -} - -/** - * @brief Constructor for empty COO Matrix of a given size - * - * @tparam ScalarT - * @tparam IdxT - * - * @param[in] m number of rows - * @param[in] n number of columns - * - * @post empty COO Matrix is created with given size - */ + /** + * @brief Constructor for COO Matrix with given cooridnates and values + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] r row indices + * @param[in] c column indices + * @param[in] v values + * @param[in] m number of rows + * @param[in] n number of columns + * + * @pre r.size() == c.size() == v.size() + * @pre r,c,v represent an array in COO format + * + * @post COO_Matrix is created with given coordinates and values + */ + + template + inline COO_Matrix::COO_Matrix(std::vector r, std::vector c, std::vector v, IdxT m, IdxT n) + { + this->values_ = v; + this->row_indices_ = r; + this->column_indices_ = c; + this->rows_size_ = m; + this->columns_size_ = n; + this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. + } -template -inline COO_Matrix::COO_Matrix(IdxT m, IdxT n) -{ - this->rows_size_ = m; - this->columns_size_ = n; - this->values_ = std::vector(); - this->row_indices_ = std::vector(); - this->column_indices_ = std::vector(); - this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. -} + /** + * @brief Constructor for empty COO Matrix of a given size + * + * @tparam ScalarT + * @tparam IdxT + * + * @param[in] m number of rows + * @param[in] n number of columns + * + * @post empty COO Matrix is created with given size + */ + + template + inline COO_Matrix::COO_Matrix(IdxT m, IdxT n) + { + this->rows_size_ = m; + this->columns_size_ = n; + this->values_ = std::vector(); + this->row_indices_ = std::vector(); + this->column_indices_ = std::vector(); + this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. + } -/** - * @brief Constructor for empty COO Matrix of size 0 - * - * @tparam ScalarT - * @tparam IdxT - * - * @post empty COO Matrix of size 0 is created - */ + /** + * @brief Constructor for empty COO Matrix of size 0 + * + * @tparam ScalarT + * @tparam IdxT + * + * @post empty COO Matrix of size 0 is created + */ + + template + inline COO_Matrix::COO_Matrix() + { + this->rows_size_ = 0; + this->columns_size_ = 0; + this->values_ = std::vector(); + this->row_indices_ = std::vector(); + this->column_indices_ = std::vector(); + this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. + } -template -inline COO_Matrix::COO_Matrix() -{ - this->rows_size_ = 0; - this->columns_size_ = 0; - this->values_ = std::vector(); - this->row_indices_ = std::vector(); - this->column_indices_ = std::vector(); - this->sorted_ = false; // Set to false until explicitly sorted, though logically it is sorted. -} - -template -COO_Matrix::~COO_Matrix() -{ -} + template + COO_Matrix::~COO_Matrix() + { + } + } // namespace LinearAlgebra +} // namespace GridKit #endif diff --git a/src/Model/Evaluator.hpp b/src/Model/Evaluator.hpp index b4a447dd6..ff3bf7195 100644 --- a/src/Model/Evaluator.hpp +++ b/src/Model/Evaluator.hpp @@ -83,8 +83,9 @@ namespace GridKit virtual std::vector& getResidual() = 0; virtual const std::vector& getResidual() const = 0; - virtual COO_Matrix& getJacobian() = 0; - virtual const COO_Matrix& getJacobian() const = 0; + /// \todo Use a different approach to store and set Jacobians + virtual GridKit::LinearAlgebra::COO_Matrix& getJacobian() = 0; + virtual const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const = 0; virtual std::vector& getIntegrand() = 0; virtual const std::vector& getIntegrand() const = 0; diff --git a/src/Model/PhasorDynamics/Branch/Branch.cpp b/src/Model/PhasorDynamics/Branch/Branch.cpp index a2277dfcc..5132a7a8d 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.cpp +++ b/src/Model/PhasorDynamics/Branch/Branch.cpp @@ -221,8 +221,8 @@ namespace GridKit // Available template instantiations template class Branch; template class Branch; - template class Branch; - template class Branch; + template class Branch; + template class Branch; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/Bus.cpp b/src/Model/PhasorDynamics/Bus/Bus.cpp index 4aa83f9ca..d8a1a3481 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.cpp +++ b/src/Model/PhasorDynamics/Bus/Bus.cpp @@ -215,8 +215,8 @@ namespace GridKit // Available template instantiations template class Bus; template class Bus; - template class Bus; - template class Bus; + template class Bus; + template class Bus; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp index e8a231d13..6f4378d65 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp @@ -195,8 +195,8 @@ namespace GridKit // Available template instantiations template class BusInfinite; template class BusInfinite; - template class BusInfinite; - template class BusInfinite; + template class BusInfinite; + template class BusInfinite; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index cd92d1bc1..332aaaed1 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -2,7 +2,7 @@ #include -#include +#include #include namespace GridKit @@ -49,7 +49,7 @@ namespace GridKit ypB_(size_), fB_(size_), gB_(size_param_), - J_(COO_Matrix()), + J_(GridKit::LinearAlgebra::COO_Matrix()), param_(size_param_), param_up_(size_param_), param_lo_(size_param_) @@ -203,12 +203,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() override + GridKit::LinearAlgebra::COO_Matrix& getJacobian() override { return J_; } - const COO_Matrix& getJacobian() const override + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const override { return J_; } @@ -267,7 +267,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix J_; + GridKit::LinearAlgebra::COO_Matrix J_; std::vector param_; std::vector param_up_; diff --git a/src/Model/PhasorDynamics/Component.hpp b/src/Model/PhasorDynamics/Component.hpp index eec865bfa..9a72aad96 100644 --- a/src/Model/PhasorDynamics/Component.hpp +++ b/src/Model/PhasorDynamics/Component.hpp @@ -2,7 +2,7 @@ #include -#include +#include #include namespace GridKit @@ -39,7 +39,7 @@ namespace GridKit ypB_(size_), fB_(size_), gB_(size_param_), - J_(COO_Matrix()), + J_(GridKit::LinearAlgebra::COO_Matrix()), param_(size_param_), param_up_(size_param_), param_lo_(size_param_) @@ -180,12 +180,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() override + GridKit::LinearAlgebra::COO_Matrix& getJacobian() override { return J_; } - const COO_Matrix& getJacobian() const override + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const override { return J_; } @@ -243,7 +243,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix J_; + GridKit::LinearAlgebra::COO_Matrix J_; std::vector param_; std::vector param_up_; diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index 4dcb23728..fdcb60d5d 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -171,8 +171,8 @@ namespace GridKit // Available template instantiations template class Load; template class Load; - template class Load; - template class Load; + template class Load; + template class Load; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PowerElectronics/Capacitor/Capacitor.cpp b/src/Model/PowerElectronics/Capacitor/Capacitor.cpp index a7b0d5bb7..c3ab987f2 100644 --- a/src/Model/PowerElectronics/Capacitor/Capacitor.cpp +++ b/src/Model/PowerElectronics/Capacitor/Capacitor.cpp @@ -99,10 +99,10 @@ namespace GridKit jac_.setValues(rcord, ccord, vals); // Create dF/dy' - std::vector rcordder{0, 1, 2}; - std::vector ccordder{2, 2, 2}; - std::vector valsder{C_, -C_, -C_}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 3, 3); + std::vector rcordder{0, 1, 2}; + std::vector ccordder{2, 2, 2}; + std::vector valsder{C_, -C_, -C_}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 3, 3); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerElectronics/CircuitComponent.hpp b/src/Model/PowerElectronics/CircuitComponent.hpp index f3efe3636..afe3c264d 100644 --- a/src/Model/PowerElectronics/CircuitComponent.hpp +++ b/src/Model/PowerElectronics/CircuitComponent.hpp @@ -196,12 +196,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() + GridKit::LinearAlgebra::COO_Matrix& getJacobian() { return jac_; } - const COO_Matrix& getJacobian() const + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const { return jac_; } @@ -266,7 +266,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix jac_; + GridKit::LinearAlgebra::COO_Matrix jac_; std::vector param_; std::vector param_up_; diff --git a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp index bbc16b524..17b6955e7 100644 --- a/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp +++ b/src/Model/PowerElectronics/DistributedGenerator/DistributedGenerator.cpp @@ -188,7 +188,7 @@ namespace GridKit { rcordder[static_cast(i)] = static_cast(i + 3); } - COO_Matrix Jacder = COO_Matrix(rcordder, rcordder, valsder, 16, 16); + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, rcordder, valsder, 16, 16); std::vector ctemp{}; std::vector rtemp{}; diff --git a/src/Model/PowerElectronics/Inductor/Inductor.cpp b/src/Model/PowerElectronics/Inductor/Inductor.cpp index 83a704f61..9e6f223d1 100644 --- a/src/Model/PowerElectronics/Inductor/Inductor.cpp +++ b/src/Model/PowerElectronics/Inductor/Inductor.cpp @@ -98,10 +98,10 @@ namespace GridKit jac_.setValues(rcord, ccord, vals); // Create dF/dy' - std::vector rcordder{2}; - std::vector ccordder{2}; - std::vector valsder{-L_}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 3, 3); + std::vector rcordder{2}; + std::vector ccordder{2}; + std::vector valsder{-L_}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 3, 3); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp index b5446f774..946dd6ec5 100644 --- a/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp +++ b/src/Model/PowerElectronics/MicrogridLine/MicrogridLine.cpp @@ -126,10 +126,10 @@ namespace GridKit jac_.setValues(rcord, ccor2, vals); // Create -dF/dy' - std::vector rcordder{5, 6}; - std::vector ccordder{5, 6}; - std::vector valsder{-1.0, -1.0}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 7, 7); + std::vector rcordder{5, 6}; + std::vector ccordder{5, 6}; + std::vector valsder{-1.0, -1.0}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 7, 7); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp index 4a034191e..9de3cd8a5 100644 --- a/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp +++ b/src/Model/PowerElectronics/MicrogridLoad/MicrogridLoad.cpp @@ -121,10 +121,10 @@ namespace GridKit jac_.setValues(rcord, ccor2, vals); // Create -dF/dy' - std::vector rcordder{3, 4}; - std::vector ccordder{3, 4}; - std::vector valsder{-1.0, -1.0}; - COO_Matrix Jacder = COO_Matrix(rcordder, ccordder, valsder, 5, 5); + std::vector rcordder{3, 4}; + std::vector ccordder{3, 4}; + std::vector valsder{-1.0, -1.0}; + GridKit::LinearAlgebra::COO_Matrix Jacder = GridKit::LinearAlgebra::COO_Matrix(rcordder, ccordder, valsder, 5, 5); // Perform dF/dy + \alpha dF/dy' jac_.axpy(alpha_, Jacder); diff --git a/src/Model/PowerFlow/ModelEvaluatorImpl.hpp b/src/Model/PowerFlow/ModelEvaluatorImpl.hpp index a8d26fba8..b06a5b865 100644 --- a/src/Model/PowerFlow/ModelEvaluatorImpl.hpp +++ b/src/Model/PowerFlow/ModelEvaluatorImpl.hpp @@ -38,7 +38,7 @@ namespace GridKit ypB_(static_cast(size_)), fB_(static_cast(size_)), gB_(static_cast(size_opt_)), - jac_(COO_Matrix()), + jac_(GridKit::LinearAlgebra::COO_Matrix()), param_(static_cast(size_opt_)), param_up_(static_cast(size_opt_)), param_lo_(static_cast(size_opt_)) @@ -178,12 +178,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() + GridKit::LinearAlgebra::COO_Matrix& getJacobian() { return jac_; } - const COO_Matrix& getJacobian() const + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const { return jac_; } @@ -241,7 +241,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix jac_; + GridKit::LinearAlgebra::COO_Matrix jac_; std::vector param_; std::vector param_up_; @@ -260,4 +260,4 @@ namespace GridKit } // namespace GridKit -#endif // _MODEL_EVALUATOR_IMPL_HPP_ +#endif // _MODEL_EVALUATOR_IMPL_H diff --git a/src/Solver/Dynamic/Ida.cpp b/src/Solver/Dynamic/Ida.cpp index 567626790..01035a9da 100644 --- a/src/Solver/Dynamic/Ida.cpp +++ b/src/Solver/Dynamic/Ida.cpp @@ -581,7 +581,7 @@ namespace AnalysisManager copyVec(yp, model->yp()); model->evaluateJacobian(); - COO_Matrix Jac = model->getJacobian(); + GridKit::LinearAlgebra::COO_Matrix Jac = model->getJacobian(); // Get reference to the jacobian entries std::tuple&, std::vector&, std::vector&> tpm = Jac.getEntries(); diff --git a/tests/UnitTests/AutomaticDifferentiation/CMakeLists.txt b/tests/UnitTests/AutomaticDifferentiation/CMakeLists.txt new file mode 100644 index 000000000..416ffde95 --- /dev/null +++ b/tests/UnitTests/AutomaticDifferentiation/CMakeLists.txt @@ -0,0 +1,2 @@ + +add_subdirectory(DependencyTracking) diff --git a/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/CMakeLists.txt b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/CMakeLists.txt new file mode 100644 index 000000000..280d6b8fe --- /dev/null +++ b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/CMakeLists.txt @@ -0,0 +1,14 @@ +# [[ +# Author(s): +# - Slaven Peles +#]] + + +add_executable(test_dependency_tracking runDependencyTrackingTests.cpp) +target_link_libraries(test_dependency_tracking GRIDKIT::phasor_dynamics_bus) + + +add_test(NAME DependencyTrackingTest COMMAND $) + +install(TARGETS test_dependency_tracking + RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/SparsityPattern/SparsityPatternTests.hpp b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/DependencyTrackingTests.hpp similarity index 87% rename from tests/UnitTests/SparsityPattern/SparsityPatternTests.hpp rename to tests/UnitTests/AutomaticDifferentiation/DependencyTracking/DependencyTrackingTests.hpp index c836f961b..d2d6d995f 100644 --- a/tests/UnitTests/SparsityPattern/SparsityPatternTests.hpp +++ b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/DependencyTrackingTests.hpp @@ -1,7 +1,7 @@ #include #include -#include +#include #include #include @@ -21,8 +21,8 @@ namespace GridKit { TestStatus success = true; - const size_t n = 3; - std::vector x(n), p(n), f(n); + const size_t n = 3; + std::vector x(n), p(n), f(n); // decide x, y, and z are variables for (size_t i = 0; i < n; ++i) @@ -47,7 +47,7 @@ namespace GridKit // Check dependenices of f[0] (depends on x[0] and x[1]) { - const Sparse::Variable::DependencyMap& dependencies = + const DependencyTracking::Variable::DependencyMap& dependencies = (f[0]).getDependencies(); success *= (dependencies.size() == 2); @@ -58,7 +58,7 @@ namespace GridKit // Check dependencies of f[2] (depends on x[0], x[1], x[2]) { - const Sparse::Variable::DependencyMap& dependencies = + const DependencyTracking::Variable::DependencyMap& dependencies = (f[2]).getDependencies(); success *= (dependencies.size() == 3); diff --git a/tests/UnitTests/SparsityPattern/runSparsityPatternTests.cpp b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/runDependencyTrackingTests.cpp similarity index 87% rename from tests/UnitTests/SparsityPattern/runSparsityPatternTests.cpp rename to tests/UnitTests/AutomaticDifferentiation/DependencyTracking/runDependencyTrackingTests.cpp index 782148f2c..29e320220 100644 --- a/tests/UnitTests/SparsityPattern/runSparsityPatternTests.cpp +++ b/tests/UnitTests/AutomaticDifferentiation/DependencyTracking/runDependencyTrackingTests.cpp @@ -1,4 +1,4 @@ -#include "SparsityPatternTests.hpp" +#include "DependencyTrackingTests.hpp" int main() { diff --git a/tests/UnitTests/CMakeLists.txt b/tests/UnitTests/CMakeLists.txt index c7bc28723..a168f9f7d 100644 --- a/tests/UnitTests/CMakeLists.txt +++ b/tests/UnitTests/CMakeLists.txt @@ -1,4 +1,4 @@ # +add_subdirectory(AutomaticDifferentiation) add_subdirectory(PhasorDynamics) -add_subdirectory(SparsityPattern) add_subdirectory(Solver) diff --git a/tests/UnitTests/PhasorDynamics/BranchTests.hpp b/tests/UnitTests/PhasorDynamics/BranchTests.hpp index 2ca571e77..976793d69 100644 --- a/tests/UnitTests/PhasorDynamics/BranchTests.hpp +++ b/tests/UnitTests/PhasorDynamics/BranchTests.hpp @@ -1,7 +1,7 @@ #include #include -#include +#include #include #include #include @@ -87,32 +87,32 @@ namespace GridKit real_type G{0.2}; ///< Branch shunt conductance real_type B{1.2}; ///< Branch shunt charging - Sparse::Variable Vr1{10.0}; ///< Bus-1 real voltage - Sparse::Variable Vi1{20.0}; ///< Bus-1 imaginary voltage - Sparse::Variable Vr2{30.0}; ///< Bus-2 real voltage - Sparse::Variable Vi2{40.0}; ///< Bus-2 imaginary voltage + DependencyTracking::Variable Vr1{10.0}; ///< Bus-1 real voltage + DependencyTracking::Variable Vi1{20.0}; ///< Bus-1 imaginary voltage + DependencyTracking::Variable Vr2{30.0}; ///< Bus-2 real voltage + DependencyTracking::Variable Vi2{40.0}; ///< Bus-2 imaginary voltage Vr1.setVariableNumber(0); ///< Independent variables: first Vi1.setVariableNumber(1); ///< Independent variables: second Vr2.setVariableNumber(2); ///< Independent variables: third Vi2.setVariableNumber(3); ///< Independent variables: fourth - PhasorDynamics::BusInfinite bus1(Vr1, Vi1); - PhasorDynamics::BusInfinite bus2(Vr2, Vi2); + PhasorDynamics::BusInfinite bus1(Vr1, Vi1); + PhasorDynamics::BusInfinite bus2(Vr2, Vi2); - PhasorDynamics::Branch branch(&bus1, &bus2, R, X, G, B); + PhasorDynamics::Branch branch(&bus1, &bus2, R, X, G, B); branch.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking ///< the dependencies - std::vector residuals{bus1.Ir(), bus1.Ii(), bus2.Ir(), bus2.Ii()}; - std::vector ref = analyticalJacobian(R, X, G, B); + std::vector residuals{bus1.Ir(), bus1.Ii(), bus2.Ir(), bus2.Ii()}; + std::vector ref = analyticalJacobian(R, X, G, B); /// Compare dependencies computed automatically to the ones computed analytically for (size_t i = 0; i < residuals.size(); ++i) { - Sparse::Variable res = residuals[i]; - const Sparse::Variable::DependencyMap& dependencies = res.getDependencies(); - success *= (GridKit::Testing::isEqual(dependencies, ref[i])); + DependencyTracking::Variable res = residuals[i]; + const DependencyTracking::Variable::DependencyMap& dependencies = res.getDependencies(); + success *= (GridKit::Testing::isEqual(dependencies, ref[i])); } return success.report(__func__); @@ -182,10 +182,10 @@ namespace GridKit } private: - std::vector analyticalJacobian(const real_type R, - const real_type X, - const real_type G, - const real_type B) + std::vector analyticalJacobian(const real_type R, + const real_type X, + const real_type G, + const real_type B) { const real_type b = -X / (R * R + X * X); const real_type g = R / (R * R + X * X); @@ -210,7 +210,7 @@ namespace GridKit real_type dIi2_dVr2 = -(b + 0.5 * B); real_type dIi2_dVi2 = -(g + 0.5 * G); - std::vector dependencies(4); + std::vector dependencies(4); dependencies[0] = {{0, dIr1_dVr1}, {1, dIr1_dVi1}, {2, dIr1_dVr2}, {3, dIr1_dVi2}}; dependencies[1] = {{0, dIi1_dVr1}, {1, dIi1_dVi1}, {2, dIi1_dVr2}, {3, dIi1_dVi2}}; dependencies[2] = {{0, dIr2_dVr1}, {1, dIr2_dVi1}, {2, dIr2_dVr2}, {3, dIr2_dVi2}}; diff --git a/tests/UnitTests/PhasorDynamics/LoadTests.hpp b/tests/UnitTests/PhasorDynamics/LoadTests.hpp index 66e7393ce..f91043363 100644 --- a/tests/UnitTests/PhasorDynamics/LoadTests.hpp +++ b/tests/UnitTests/PhasorDynamics/LoadTests.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include @@ -74,35 +74,35 @@ namespace GridKit real_type R{2.0}; ///< Load resistance real_type X{4.0}; ///< Load reactance - Sparse::Variable Vr{10.0}; ///< Bus real voltage - Sparse::Variable Vi{20.0}; ///< Bus imaginary voltage + DependencyTracking::Variable Vr{10.0}; ///< Bus real voltage + DependencyTracking::Variable Vi{20.0}; ///< Bus imaginary voltage Vr.setVariableNumber(0); ///< Independent variables: first Vi.setVariableNumber(1); ///< Independent variables: second - PhasorDynamics::BusInfinite bus(Vr, Vi); + PhasorDynamics::BusInfinite bus(Vr, Vi); - PhasorDynamics::Load load(&bus, R, X); + PhasorDynamics::Load load(&bus, R, X); load.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking ///< the dependencies - std::vector residuals{bus.Ir(), bus.Ii()}; - std::vector ref = analyticalJacobian(R, X); + std::vector residuals{bus.Ir(), bus.Ii()}; + std::vector ref = analyticalJacobian(R, X); /// Compare dependencies computed automatically to the ones computed analytically for (size_t i = 0; i < residuals.size(); ++i) { - Sparse::Variable res = residuals[i]; - const Sparse::Variable::DependencyMap& dependencies = res.getDependencies(); - success *= (GridKit::Testing::isEqual(dependencies, ref[i])); + DependencyTracking::Variable res = residuals[i]; + const DependencyTracking::Variable::DependencyMap& dependencies = res.getDependencies(); + success *= (GridKit::Testing::isEqual(dependencies, ref[i])); } return success.report(__func__); } private: - std::vector analyticalJacobian(const real_type R, - const real_type X) + std::vector analyticalJacobian(const real_type R, + const real_type X) { const real_type b = -X / (R * R + X * X); const real_type g = R / (R * R + X * X); @@ -113,7 +113,7 @@ namespace GridKit real_type dIi_dVr = -b; real_type dIi_dVi = -g; - std::vector dependencies(2); + std::vector dependencies(2); dependencies[0] = {{0, dIr_dVr}, {1, dIr_dVi}}; dependencies[1] = {{0, dIi_dVr}, {1, dIi_dVi}}; diff --git a/tests/UnitTests/Solver/Dynamic/IdaTests.hpp b/tests/UnitTests/Solver/Dynamic/IdaTests.hpp index 6744a92c9..64f062907 100644 --- a/tests/UnitTests/Solver/Dynamic/IdaTests.hpp +++ b/tests/UnitTests/Solver/Dynamic/IdaTests.hpp @@ -200,12 +200,12 @@ namespace GridKit return f_; } - COO_Matrix& getJacobian() override + GridKit::LinearAlgebra::COO_Matrix& getJacobian() override { return jac_; } - const COO_Matrix& getJacobian() const override + const GridKit::LinearAlgebra::COO_Matrix& getJacobian() const override { return jac_; } @@ -257,7 +257,7 @@ namespace GridKit std::vector fB_; std::vector gB_; - COO_Matrix jac_; + GridKit::LinearAlgebra::COO_Matrix jac_; std::vector param_; std::vector param_up_; diff --git a/tests/UnitTests/SparsityPattern/CMakeLists.txt b/tests/UnitTests/SparsityPattern/CMakeLists.txt deleted file mode 100644 index c4c9cc854..000000000 --- a/tests/UnitTests/SparsityPattern/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -# [[ -# Author(s): -# - Slaven Peles -#]] - - -add_executable(test_sparsity_pattern runSparsityPatternTests.cpp) -target_link_libraries(test_sparsity_pattern GRIDKIT::phasor_dynamics_bus) - - -add_test(NAME SparsityPatternTest COMMAND $) - -install(TARGETS test_sparsity_pattern - RUNTIME DESTINATION bin) From 82ce05e46aa59beb859f088ca90b0e8be7b79e61 Mon Sep 17 00:00:00 2001 From: pelesh Date: Thu, 5 Jun 2025 11:11:16 -0400 Subject: [PATCH 035/139] Add classical generator model (#127) --- .../SynchronousMachine/CMakeLists.txt | 1 + .../GenClassical/CMakeLists.txt | 11 + .../GenClassical/GenClassical.cpp | 257 ++++++++++++++++++ .../GenClassical/GenClassical.hpp | 124 +++++++++ .../SynchronousMachine/GenClassical/README.md | 56 ++-- tests/UnitTests/PhasorDynamics/CMakeLists.txt | 8 +- .../PhasorDynamics/GenClassicalTests.hpp | 227 ++++++++++++++++ .../PhasorDynamics/runGenClassicalTests.cpp | 15 + 8 files changed, 682 insertions(+), 17 deletions(-) create mode 100644 src/Model/PhasorDynamics/SynchronousMachine/GenClassical/CMakeLists.txt create mode 100644 src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp create mode 100644 src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.hpp create mode 100644 tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp create mode 100644 tests/UnitTests/PhasorDynamics/runGenClassicalTests.cpp diff --git a/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt b/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt index 212813aae..96c3b2f94 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt +++ b/src/Model/PhasorDynamics/SynchronousMachine/CMakeLists.txt @@ -6,3 +6,4 @@ # ]] add_subdirectory(GENROUwS) +add_subdirectory(GenClassical) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/CMakeLists.txt b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/CMakeLists.txt new file mode 100644 index 000000000..67e36e73f --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/CMakeLists.txt @@ -0,0 +1,11 @@ +# [[ +# Author(s): +# - Cameron Rutherford +# - Slaven Peles +# ]] + +gridkit_add_library(phasor_dynamics_gen_classical + SOURCES + GenClassical.cpp + OUTPUT_NAME + gridkit_phasor_dynamics_gen_classical) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp new file mode 100644 index 000000000..b34180330 --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp @@ -0,0 +1,257 @@ +/** + * @file GenClassical.cpp + * @author Abdourahman Barry (abdourahman@vt.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Definition of a Classical generator model. + * + * + */ + +#include "GenClassical.hpp" + +#include +#include + +#include + +#define _USE_MATH_DEFINES + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Constructor for a classical generator model. + * + */ + template + GenClassical::GenClassical(bus_type* bus, int unit_id) + : bus_(bus), + busID_(0), + unit_id_(unit_id), + p0_(0.0), + q0_(0.0), + H_(3.0), + D_(0.0), + Ra_(0.0), + Xdp_(0.5) + { + size_ = 7; + setDerivedParams(); + + // Temporary, to eliminate compiler warnings + (void) busID_; + (void) unit_id_; + } + + /*! + * @brief Constructor for a pi-model branch + * + */ + template + GenClassical::GenClassical(bus_type* bus, + int unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Xdp) + : bus_(bus), + busID_(0), + unit_id_(unit_id), + p0_(p0), + q0_(q0), + H_(H), + D_(D), + Ra_(Ra), + Xdp_(Xdp) + { + size_ = 7; + setDerivedParams(); + } + + /*! + * @brief allocate method computes sparsity pattern of the Jacobian. + */ + template + int GenClassical::allocate() + { + auto size = static_cast(size_); + f_.resize(size); + y_.resize(size); + yp_.resize(size); + tag_.resize(size); + fB_.resize(size); + yB_.resize(size); + ypB_.resize(size); + return 0; + } + + /** + * Initialization of the generator model + * + */ + template + int GenClassical::initialize() + { + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT p = p0_; + ScalarT q = q0_; + ScalarT vm2 = vr * vr + vi * vi; + ScalarT ir = (p * vr + q * vi) / vm2; + ScalarT ii = (p * vi - q * vr) / vm2; + ScalarT Er = (G_ * ir - B_ * ii) / (G_ * G_ + B_ * B_) + vr; + ScalarT Ei = (B_ * ir + G_ * ii) / (G_ * G_ + B_ * B_) + vi; + ScalarT delta = atan2(Ei, Er); + ScalarT omega = 1.0; + ScalarT Ep = sqrt(Er * Er + Ei * Ei); + ScalarT Te = G_ * Ep * Ep - Ep * ((G_ * vr + B_ * vi) * cos(delta) + (-B_ * vr + G_ * vi) * sin(delta)); + + y_[0] = delta; + y_[1] = omega; + y_[2] = Te; + y_[3] = ir; + y_[4] = ii; + y_[5] = pmech_set_ = Te; + y_[6] = ep_set_ = Ep; + + for (size_t i = 0; i < static_cast(size_); ++i) + yp_[i] = 0.0; + + return 0; + } + + /** + * \brief Identify differential variables. + */ + template + int GenClassical::tagDifferentiable() + { + + return 0; + } + + /** + * \brief Residual for the generator model. + * + */ + template + int GenClassical::evaluateResidual() + { + // Set variable aliases for better reliability + const ScalarT delta = y_[0]; + const ScalarT omega = y_[1]; + const ScalarT telec = y_[2]; + const ScalarT ir = y_[3]; + const ScalarT ii = y_[4]; + const ScalarT pmech = y_[5]; + const ScalarT ep = y_[6]; + + // Set derivative aliases for better reliability + const ScalarT delta_dot = yp_[0]; + const ScalarT omega_dot = yp_[1]; + + // GenClassical differential equations + f_[0] = delta_dot - (omega - 1.0) * (2.0 * M_PI * 60.0); + f_[1] = omega_dot - (1.0 / (2.0 * H_)) * ((pmech - D_ * (omega - 1.0)) / omega - telec); + + // GenClassical algebraic equations + f_[2] = telec - (1.0 / omega) * (G_ * ep * ep - ep * ((G_ * Vr() + B_ * Vi()) * cos(delta) + (-B_ * Vr() + G_ * Vi()) * sin(delta))); + + f_[3] = ir + G_ * Vr() + B_ * Vi() - ep * (G_ * cos(delta) + B_ * sin(delta)); + f_[4] = ii - B_ * Vr() + G_ * Vi() - ep * (-B_ * cos(delta) + G_ * sin(delta)); + + f_[5] = pmech - pmech_set_; + f_[6] = ep - ep_set_; + + // GenClassical contribution to bus algebraic equations + Ir() += ir; + Ii() += ii; + + return 0; + } + + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateJacobian() + { + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateIntegrand() + { + // std::cout << "Evaluate Integrand for GenClassical..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::initializeAdjoint() + { + // std::cout << "Initialize adjoint for GenClassical..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateAdjointResidual() + { + // std::cout << "Evaluate adjoint residual for GenClassical..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int GenClassical::evaluateAdjointIntegrand() + { + // std::cout << "Evaluate adjoint Integrand for GenClassical..." << std::endl; + return 0; + } + + template + void GenClassical::setDerivedParams() + { + G_ = Ra_ / (Ra_ * Ra_ + Xdp_ * Xdp_); + B_ = -Xdp_ / (Ra_ * Ra_ + Xdp_ * Xdp_); + } + + // Available template instantiations + template class GenClassical; + template class GenClassical; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.hpp new file mode 100644 index 000000000..1e8a46550 --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.hpp @@ -0,0 +1,124 @@ +/** + * @file GenClassical.cpp + * @author Abdourahman Barry (abdourahman@vt.edu) + * + */ + +#pragma once + +#include + +// Forward declarations. +namespace GridKit +{ + namespace PhasorDynamics + { + template + class BusBase; + } +} // namespace GridKit + +namespace GridKit +{ + namespace PhasorDynamics + { + + template + class GenClassical : public Component + { + using Component::alpha_; + using Component::f_; + using Component::fB_; + using Component::g_; + using Component::gB_; + using Component::nnz_; + using Component::param_; + using Component::size_; + using Component::tag_; + using Component::time_; + using Component::y_; + using Component::yB_; + using Component::yp_; + using Component::ypB_; + + using bus_type = BusBase; + using real_type = typename Component::real_type; + + public: + GenClassical(bus_type* bus, int unit_id); + GenClassical(bus_type* bus, + int unit_id, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Xdp); + ~GenClassical() = default; + + int allocate() override; + int initialize() override; + int tagDifferentiable() override; + int evaluateResidual() override; + + // Still to be implemented + int evaluateJacobian() override; + int evaluateIntegrand() override; + int initializeAdjoint() override; + int evaluateAdjointResidual() override; + int evaluateAdjointIntegrand() override; + + void updateTime(real_type /* t */, real_type /* a */) override + { + } + + private: + void setDerivedParams(); + + ScalarT& Vr() + { + return bus_->Vr(); + } + + ScalarT& Vi() + { + return bus_->Vi(); + } + + ScalarT& Ir() + { + return bus_->Ir(); + } + + ScalarT& Ii() + { + return bus_->Ii(); + } + + private: + /* Identification */ + bus_type* bus_; + const int busID_; + int unit_id_; + + /* Initial terminal conditions */ + ScalarT p0_; + ScalarT q0_; + + /* Input parameters */ + real_type H_; + real_type D_; + real_type Ra_; + real_type Xdp_; + + /* Derivied parameters */ + real_type G_; + real_type B_; + + /* Setpoints for control variables (determined at initialization) */ + real_type pmech_set_; + real_type ep_set_; + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md index aa1dbe490..44ac0be75 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/README.md @@ -17,8 +17,8 @@ $X_{dp}$ | [p.u.] | machine reactance parameter | ### Model Derived Parameters -- $g = \dfrac{R_a}{R_a^2 + X_{dp}^2}$ -- $b = \dfrac{-X_{dp}}{R_a^2 + X_{dp}^2}$ +- $G = \dfrac{R_a}{R_a^2 + X_{dp}^2} ~~~$ equivalent stator winding conductance +- $B = \dfrac{-X_{dp}}{R_a^2 + X_{dp}^2} ~~~$ equivalent stator winding susceptance
@@ -83,9 +83,9 @@ $E_p$ | [p.u.] | field winding voltage | owned by exciter, constant if ```math \begin{aligned} - 0 &= T_{e} - \frac{1}{\omega}\left( g E_p^2 - E_p \left[(gV_r - bV_i)\cos\delta + (bV_r + gV_i)\sin\delta \right]\right)\\ - 0 &= I_r + gV_r - bV_i - E_p(g \cos\delta - b \sin\delta) \\ - 0 &= I_i + gV_r + bV_i - E_p(b \cos\delta + g \sin\delta) + 0 &= T_{e} - \frac{1}{\omega}\left( G E_p^2 - E_p \left[(G V_r + B V_i)\cos\delta + (-B V_r + G V_i)\sin\delta \right]\right) \\ + 0 &= I_r + G V_r + B V_i - E_p(G \cos\delta + B \sin\delta) \\ + 0 &= I_i - B V_r + G V_i - E_p(-B \cos\delta + G \sin\delta) \end{aligned} ``` As noted earlier, all three algebraic equations can be expressed as functions @@ -100,8 +100,16 @@ To initialize the model, given bus voltages $V_r$, $V_i$, and initial generator injection active and reactive power, $P$ and $Q$, we take following steps to initialize the system: -First compute injection currents from initial power injection power and bus -voltages: +Complex power is defined as +```math +S=VI^{*} +``` +or +```math +P + jQ = (V_r + j V_i)(I_r - j I_i). +``` +From here, we compute injection currents from the initial power injection and bus +voltages as ```math \begin{aligned} I_r &= \frac{PV_r + QV_i}{V_r^2 + V_i^2} \\ @@ -109,27 +117,43 @@ I_i &= \frac{PV_i - QV_r}{V_r^2 + V_i^2} \end{aligned} ``` -Next compute field winding voltage and machine angle: +We substitute expressions above into equations for current injections and +obtain +```math +\begin{aligned} +E_p \sin\delta &= \dfrac{B I_r + G I_i}{G^2 + B^2} + V_i \\ +E_p \cos\delta &= \dfrac{G I_r - B I_i}{G^2 + B^2} + V_r +\end{aligned} +``` +By dividing these two equations we get expression for machine angle at the +steady state +```math +\delta = \arctan \dfrac{E_i}{E_r} \, , +``` +and by squaring and adding them, we get expression for field +winding voltage at the steady state +```math +E_p = \sqrt{E_r^2 + E_i^2} \, , +``` +where ```math \begin{aligned} -E_r &= \frac{ g(I_r + gV_r - bV_i) + b (I_i + bV_r + gV_i) }{g^2 + b^2} \\ -E_i &= \frac{ -b(I_r + gV_r - bV_i) + g (I_i + bV_r + gV_i) }{g^2 + b^2} \\ -E_p &= \sqrt{E_r^2 + E_i^2} \\ -\delta &= \arctan \dfrac{E_i}{E_r} +E_r &= \dfrac{G I_r - B I_i}{G^2 + B^2} + V_r \, ,\\ +E_i &= \dfrac{B I_r + G I_i}{G^2 + B^2} + V_i \, . \end{aligned} ``` -Set machine speed to the synchronous speed: +Next, we set machine speed to the synchronous speed: ```math \omega = 1 ``` Now, we can compute electrical torque and set mechanical torque to be equal -to the electrical. +to the electrical: ```math \begin{aligned} -T_{elec} &= gE_p^2 - E_p \left[ (gV_r - bV_i ) \cos\delta + (bV_r + gV_i )\sin\delta \right] \\ -P_{mech} &= T_{elec} +T_{e} &= G E_p^2 - E_p \left[ (G V_r + B V_i ) \cos\delta + (-B V_r + G V_i )\sin\delta \right] \\ +P_{m} &= T_{e} \end{aligned} ``` diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index 18876a998..dfe3c93d4 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -17,7 +17,11 @@ target_link_libraries(test_phasor_load GRIDKIT::phasor_dynamics_load add_executable(test_phasor_genrou runGenrouTests.cpp) target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_genrou - GRIDKIT::phasor_dynamics_bus) + GRIDKIT::phasor_dynamics_bus) + +add_executable(test_phasor_gen_classical runGenClassicalTests.cpp) +target_link_libraries(test_phasor_gen_classical GRIDKIT::phasor_dynamics_gen_classical + GRIDKIT::phasor_dynamics_bus) add_executable(test_phasor_system runSystemTests.cpp) @@ -28,6 +32,7 @@ target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load add_test(NAME PhasorDynamicsBusTest COMMAND $) add_test(NAME PhasorDynamicsBranchTest COMMAND $) add_test(NAME PhasorDynamicsGenrouTest COMMAND $) +add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) add_test(NAME PhasorDynamicsLoadTest COMMAND $) add_test(NAME PhasorDynamicsSystemTest COMMAND $) @@ -35,4 +40,5 @@ install(TARGETS test_phasor_bus test_phasor_branch test_phasor_load test_phasor_genrou + test_phasor_gen_classical test_phasor_system RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp new file mode 100644 index 000000000..3c17c8ab1 --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp @@ -0,0 +1,227 @@ +/** + * @file GenClassicalTests.hpp + * @author Slaven Peles (peless@ornl.gov) + * @author Abdourahman Barry (abdourahman@vt.edu) + * @brief Tests for classical generator model. + * + */ +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +namespace GridKit +{ + namespace Testing + { + + template + class GenClassicalTests + { + private: + using real_type = typename PhasorDynamics::Component::real_type; + static constexpr ScalarT tol_ = 10 * std::numeric_limits::epsilon(); + + public: + GenClassicalTests() = default; + ~GenClassicalTests() = default; + + TestOutcome constructor() + { + TestStatus success = true; + + auto* bus = new PhasorDynamics::Bus(1.0, 0.0); + + PhasorDynamics::Component* machine = + new PhasorDynamics::GenClassical(bus, 1); + + success *= (machine != nullptr); + + if (machine) + { + delete machine; + } + delete bus; + + return success.report(__func__); + } + + /** + * A test case to verify residual values + */ + TestOutcome residual() + { + TestStatus success = true; + + // classical generator parameters + real_type H{0.5}; + real_type D{-1.0}; + real_type Ra{0.5}; + real_type Xdp{0.5}; + real_type pmech{1.0}; + real_type ep{2.0}; + + ScalarT Vr1{1.0}; ///< Bus-1 real voltage + ScalarT Vi1{1.0}; ///< Bus-1 imaginary voltage + + // Test answer keys + const std::vector res_answer = {0.0, + 0.0, + 0.0, + 0.0, + 0.0, + pmech, + ep}; + + PhasorDynamics::Bus bus(Vr1, Vi1); + PhasorDynamics::GenClassical gen(&bus, 1, 1.0, 1.0, H, D, Ra, Xdp); + bus.allocate(); + bus.initialize(); + + // Allocate but not initialize genrator model + gen.allocate(); + + // Set variable values matching the answer key + gen.y()[0] = M_PI; // delta + gen.y()[1] = 2.0; // omega + gen.y()[2] = 2.0; // telec + gen.y()[3] = -2.0; // ir + gen.y()[4] = -4.0; // ii + gen.y()[5] = pmech; // pmech + gen.y()[6] = ep; // Ep + + // Set derivative values matching the answer key + gen.yp()[0] = 2 * M_PI * 60.0; // delta_dot + gen.yp()[1] = -1.0; // omega_dot + gen.yp()[2] = 0.0; + gen.yp()[3] = 0.0; + gen.yp()[4] = 0.0; + gen.yp()[5] = 0.0; + gen.yp()[6] = 0.0; + + gen.evaluateResidual(); + std::vector& residual = gen.getResidual(); + + for (size_t i = 0; i < res_answer.size(); ++i) + { + if (!isEqual(residual[i], res_answer[i], tol_)) + { + std::cout << "Incorrect result: " + << residual[i] << " != " << res_answer[i] << "\n"; + success = false; + break; + } + } + + return success.report(__func__); + } + + /** + * + * Verifies correctness of the system initialization + */ + TestOutcome initial() + { + TestStatus success = true; + + // classical generator parameters + real_type p0{3.0}; + real_type q0{-1.0}; + real_type H{1.0}; + real_type D{1.0}; + real_type Ra{0.6}; + real_type Xdp{0.2}; + + ScalarT Vr1{1.0}; ///< Bus-1 real voltage + ScalarT Vi1{1.0}; ///< Bus-1 imaginary voltage + + // Test answer keys + const std::vector var_answer = {M_PI / 4.0, // delta + 1.0, // omega + 6.0, // Te + 1.0, // Ir + 2.0, // Ii + 6.0, // Pm + 2.0 * sqrt(2.0)}; // Ep + + PhasorDynamics::Bus bus(Vr1, Vi1); + PhasorDynamics::GenClassical gen(&bus, 1, p0, q0, H, D, Ra, Xdp); + bus.allocate(); + bus.initialize(); + gen.allocate(); + gen.initialize(); + + for (size_t i = 0; i < var_answer.size(); ++i) + { + if (!isEqual(gen.y()[i], var_answer[i], tol_)) + { + std::cout << "Incorrect result: " + << gen.y()[i] << " != " << var_answer[i] << "\n"; + success = false; + break; + } + + if (!isEqual(gen.yp()[i], 0.0, tol_)) + { + std::cout << "Incorrect result: " + << gen.yp()[i] << " != 0\n"; + success = false; + break; + } + } + + return success.report(__func__); + } + + /* + *Verifies the residual evaluates to zero for the initial conditions + */ + TestOutcome zeroInitialResidual() + { + TestStatus success = true; + + // classical generator parameters + real_type p0{3.0}; + real_type q0{-1.0}; + real_type H{1.0}; + real_type D{1.0}; + real_type Ra{0.6}; + real_type Xdp{0.2}; + + ScalarT Vr1{1.0}; ///< Bus real voltage + ScalarT Vi1{1.0}; ///< Bus imaginary voltage + + PhasorDynamics::Bus bus(Vr1, Vi1); + PhasorDynamics::GenClassical gen(&bus, 1, p0, q0, H, D, Ra, Xdp); + bus.allocate(); + bus.initialize(); + gen.allocate(); + gen.initialize(); + gen.evaluateResidual(); + std::vector res = gen.getResidual(); + + for (size_t i = 0; i < res.size(); ++i) + { + if (!isEqual(res[i], 0.0, tol_)) + { + std::cout << "Incorrect result: " + << gen.yp()[i] << " != 0\n"; + success = false; + break; + } + } + + return success.report(__func__); + } + + }; // class GenClassicalTests + + } // namespace Testing +} // namespace GridKit diff --git a/tests/UnitTests/PhasorDynamics/runGenClassicalTests.cpp b/tests/UnitTests/PhasorDynamics/runGenClassicalTests.cpp new file mode 100644 index 000000000..21b7f45ba --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/runGenClassicalTests.cpp @@ -0,0 +1,15 @@ +#include "GenClassicalTests.hpp" + +int main() +{ + GridKit::Testing::TestingResults result; + + GridKit::Testing::GenClassicalTests test; + + result += test.constructor(); + result += test.residual(); + result += test.initial(); + result += test.zeroInitialResidual(); + + return result.summary(); +} From a089fec4526776be96f37ce55a9112cefcb30fd3 Mon Sep 17 00:00:00 2001 From: Adam Birchfield Date: Fri, 6 Jun 2025 08:36:04 -0500 Subject: [PATCH 036/139] Changes to compile with MSVC (#130) --- CMakeLists.txt | 7 ++++++- .../SynchronousMachine/GenClassical/GenClassical.cpp | 4 +--- tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a9982f3e3..29b8cf904 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,12 @@ set(PACKAGE_VERSION_PATCH "0") set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wconversion -Wpedantic") + +if (MSVC) + set(CMAKE_CXX_FLAGS "/Wall") +else() + set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wconversion -Wpedantic") +endif() # Ipopt support is disabled by default option(GRIDKIT_ENABLE_IPOPT "Enable Ipopt support" OFF) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp index b34180330..5f271f8d4 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GenClassical/GenClassical.cpp @@ -6,7 +6,7 @@ * * */ - +#define _USE_MATH_DEFINES #include "GenClassical.hpp" #include @@ -14,8 +14,6 @@ #include -#define _USE_MATH_DEFINES - namespace GridKit { namespace PhasorDynamics diff --git a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp index 3c17c8ab1..82f78aea4 100644 --- a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp @@ -5,6 +5,7 @@ * @brief Tests for classical generator model. * */ +#define _USE_MATH_DEFINES /* need this since directly including GenClassical.cpp for MSVC compiler */ #include #include #include From 593fdbd3d57d46db1637b350f9eb90cf04ca3a4a Mon Sep 17 00:00:00 2001 From: Adam Birchfield Date: Fri, 6 Jun 2025 08:45:41 -0500 Subject: [PATCH 037/139] Update modeling documentation structure (#128) * Initial update to GENROU docs * Initial update to GENSAL docs * Initial update to load docs * Initial BusFault docs * Initial branch docs update * Correct load math markers --------- Co-authored-by: abirchfield Co-authored-by: pelesh --- src/Model/PhasorDynamics/Branch/README.md | 121 ++++++----- src/Model/PhasorDynamics/BusFault/README.md | 60 ++++++ src/Model/PhasorDynamics/Load/README.md | 73 +++++-- .../SynchronousMachine/GENROUwS/README.md | 190 ++++++++--------- .../SynchronousMachine/GENSALwS/README.md | 197 ++++++++---------- 5 files changed, 350 insertions(+), 291 deletions(-) create mode 100644 src/Model/PhasorDynamics/BusFault/README.md diff --git a/src/Model/PhasorDynamics/Branch/README.md b/src/Model/PhasorDynamics/Branch/README.md index 1dd2a89f8..cddc5fc8c 100644 --- a/src/Model/PhasorDynamics/Branch/README.md +++ b/src/Model/PhasorDynamics/Branch/README.md @@ -1,11 +1,9 @@ -# Branch Model +# Transmission Line Branch Model Transmission lines and different types of transformers (traditional, Load Tap-Changing transformers (LTC) and Phase Angle Regulators (PARs)) can be modeled with a common branch model. -## Transmission Line Model - The most common circuit that is used to represent the transmission line model is $`\pi`$ circuit as shown in Figure 1. The positive flow direction is into buses. Commonly used convention is to define positive direction to be from @@ -18,75 +16,74 @@ provides more flexibility for modeling. Figure 1: Transmission line $`\pi`$ equivalent circuit
-Here -``` math -Z = R + jX -``` -and +## Model Parameters + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$R$ | [p.u.] | Branch series resistance | +$X$ | [p.u.] | Branch series reactance | +$G$ | [p.u.] | Branch shunt conductance | +$B$ | [p.u.] | Branch shunt susceptance | + +### Model Derived Parameters +Note the difference between little-g and big-G, little-b, big-B in these equations. ``` math -Y = G + jB, -``` -where $`R`$ is line series resistance, $`X`$ is line series reactance, $`B`$ is -line shunt charging, and $`G`$ is line shunt conductance. As can be seen from -Figure 1 total $`B`$ and $`G`$ are separated between two buses. The current -entering bus 1 can be obtained from Kirchhoff's current law as -```math -I_1 = y(V_2 - V_1) - \frac{Y}{2} V_1, -``` -where $`V_1`$ and $`V_2`$ are respective bus voltages and -```math -y = \frac{1}{Z} = \frac{R}{R^2+X^2} + j\frac{-X}{R^2+X^2} = g + jb. -``` -Similarly, current entering bus 2 is given as -```math -I_2 = y(V_1 - V_2) + \frac{Y}{2} V_2. -``` -These equations can be written in a compact form as: -```math -\begin{bmatrix} -I_{1}\\ -I_{2} -\end{bmatrix} -= \mathbf{Y} -\begin{bmatrix} -V_{1}\\ -V_{2} -\end{bmatrix} -``` -where: -```math -\mathbf{Y}_{TL}=\begin{bmatrix} --(g + jb) - \dfrac{G+jB}{2} & g + jb \\ - g + jb & -(g + jb) - \dfrac{G+jB}{2} -\end{bmatrix} +\begin{aligned} + g &=\dfrac{R}{R^2 + X^2} \\ + b &= -\dfrac{X}{R^2 + X^2}\\ +\end{aligned} ``` -### Branch contributions to residuals at adjacent buses -After some algebra, one obtains expressions for real and imaginary components -for the currents entering adjacent buses: -```math -I_{r1} = -\left(g + \frac{G}{2}\right) V_{r1} + \left(b + \frac{B}{2} \right) V_{i1} - + g V_{r2} - b V_{i2} -``` +## Model Variables -```math -I_{i1} = -\left(b + \frac{B}{2} \right) V_{r1} - \left(g + \frac{G}{2}\right) V_{i1} - + b V_{r2} + g V_{i2} -``` +### Internal Variables -```math -I_{r2} = g V_{r1} - b V_{i1} - - \left(g + \frac{G}{2}\right) V_{r2} + \left(b + \frac{B}{2} \right) V_{i2} -``` +#### Differential +None. -```math -I_{i2} = b V_{r1} + g V_{i1} - - \left(b + \frac{B}{2} \right) V_{r2} - \left(g + \frac{G}{2}\right) V_{i2} +#### Algebraic + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$I_{r1}$ | [p.u.] | Terminal current, real component, bus 1 | Read by bus +$I_{i1}$ | [p.u.] | Terminal current, imaginary component, bus 1 | Read by bus +$I_{r2}$ | [p.u.] | Terminal current, real component, bus 2 | Read by bus +$I_{i2}$ | [p.u.] | Terminal current, imaginary component, bus 2 | Read by bus + + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_{r1}$ | [p.u.] | Terminal voltage, real component, bus 1 | owned by bus object +$V_{i1}$ | [p.u.] | Terminal voltage, imaginary component, bus 1 | owned by bus object +$V_{r2}$ | [p.u.] | Terminal voltage, real component, bus 2 | owned by bus object +$V_{i2}$ | [p.u.] | Terminal voltage, imaginary component, bus 2 | owned by bus object + + +## Model Equations + +### Differential Equations +None. + +### Algebraic Equations +``` math +\begin{aligned} + 0 &= - I_{r1} -\left(g + \dfrac{G}{2}\right) V_{r1} + \left(b + \dfrac{B}{2}\right) V_{i1} + g V_{r2} - b V_{i2}\\ + 0 &= I_{i1} - \left(b + \dfrac{B}{2}\right) V_{r1} - \left(g + \dfrac{G}{2}\right) V_{i1} + b V_{r2} + g V_{i2}\\ + 0 &= I_{r2} + g V_{r1} - b V_{i1} - \left(g + \dfrac{G}{2}\right) V_{r2} + \left(b + \dfrac{B}{2}\right) V_{i2}\\ + 0 &= I_{i2} + b V_{r1} + g V_{i1} - \left(b + \dfrac{B}{2}\right) V_{r2} - \left(g + \dfrac{G}{2}\right) V_{i2} +\end{aligned} ``` -## Transformer Branch Model + +# Transformer Branch Model **Note: Transformer model not yet implemented** diff --git a/src/Model/PhasorDynamics/BusFault/README.md b/src/Model/PhasorDynamics/BusFault/README.md new file mode 100644 index 000000000..cc10b2fc3 --- /dev/null +++ b/src/Model/PhasorDynamics/BusFault/README.md @@ -0,0 +1,60 @@ +# Bus Fault + +Represents an impedance fault at a bus. This device can exist in two states, on or off, controlled by the user. Following a state change, generally the solver needs to be reset as this is a discrete event. + +## Model Parameters + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$R$ | [p.u.] | Fault resistance | +$X$ | [p.u.] | Fault reactance | +$U$ | [unitless] | Binary status $$\in \{0, 1\}$$ | Set by user to put fault on or off. + +### Model Derived Parameters +``` math +\begin{aligned} + G &=\dfrac{R}{R^2+ X^2} \\ + B &= -\dfrac{X}{R^2 + X^2}\\ +\end{aligned} +``` + + +## Model Variables + +### Internal Variables + +#### Differential +None. + +#### Algebraic + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$I_r$ | [p.u.] | Terminal current, real component | Read by bus +$I_i$ | [p.u.] | Terminal current, imaginary component | Read by bus + + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component | owned by bus object + + +## Model Equations + +### Differential Equations +None. + +### Algebraic Equations +``` math +\begin{aligned} +0 &= -I_{r} + U (-G V_{r} + B V_{i}) \\ +0 &= -I_{i} + U (-B V_{r} - G V_{i}) +\end{aligned} +``` diff --git a/src/Model/PhasorDynamics/Load/README.md b/src/Model/PhasorDynamics/Load/README.md index 065dd024d..5d90cb310 100644 --- a/src/Model/PhasorDynamics/Load/README.md +++ b/src/Model/PhasorDynamics/Load/README.md @@ -2,27 +2,62 @@ Load modeling is one of the more complex aspects of power system dynamics. The simplest model, which is used for this challenge problem, is to model -the load as a complex shunt impedance with the impedance given by: +the load as a complex shunt impedance $$ R + jX $$. + + +## Model Parameters + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$R$ | [p.u.] | Load resistance | +$X$ | [p.u.] | Load reactance | + + +### Model Derived Parameters ``` math -Z = R + jX -``` -where $`R`$ is the load resistance, $`X`$ is the load reactance. The current -drawn by the load is then obtained as -```math -I_{\mathrm{load}} = \frac{V_{\mathrm{bus}}}{Z}, +\begin{aligned} + G &=\dfrac{R}{R^2 + X^2} \\ + B &= -\dfrac{X}{R^2 + X^2}\\ +\end{aligned} ``` -where $`V_{bus}`$ is the voltage on the bus to which the load is connected. -After some algebra, one obtains expressions for real and imaginary components -for the currents entering the bus: -```math -I_{r} = -g V_{r} + b V_{i} -``` -```math -I_{i} = - b V_{r} - g V_{i} -``` -where -```math -g = \frac{R}{R^2+X^2} ~~~\mathrm{and}~~~ b = \frac{-X}{R^2+X^2}. +## Model Variables + +### Internal Variables + +#### Differential +None. + +#### Algebraic + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$I_r$ | [p.u.] | Terminal current, real component | Read by bus +$I_i$ | [p.u.] | Terminal current, imaginary component | Read by bus + + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component | owned by bus object + + +## Model Equations + +### Differential Equations +None. + +### Algebraic Equations +``` math +\begin{aligned} +0 &= I_{r} +G V_{r} - B V_{i} \\ +0 &= I_{i} +B V_{r} + G V_{i} +\end{aligned} ``` diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md index 38be4af65..ab2591338 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md @@ -1,5 +1,13 @@ # GENROU +This synchronous machine model is 6th order and is specifically designed for round rotor machines. It is a standard model used in phasor-domain industry stability studies. +See the [General Synchronous Machine Model](../README.md) for general synchronous machine information. + +Notes: +- $X''_{q}=X''_{d}$ (round rotor assumptions) +- $X''_{d}$ does not saturate +- Same relative amount of saturation occurs on both $d$ and $q$ axis + ## Block Diagram
@@ -8,49 +16,29 @@ [PowerWorld](https://www.powerworld.com/WebHelp/)
-## Simplifications -The GENROU model is a variation of the -[General Synchronous Machine Model](../README.md) -- $`X''_{q}=X''_{d}`$ -- $`X''_{d}`$ does not saturate -- Same relative amount of saturation occurs on both $`d`$ and $`q`$ axis - -## Nomenclature -### Algebraic Variables -- $V_d$, $V_q$ Machine Internal Voltage on the machine d-q reference frame -- $I_d$, $I_q$ Terminal currents on the machine d-q reference frame -- $V_r$, $V_i$ Terminal voltages on the network reference frame -- $I_r$, $I_i$ Terminal currents on the network reference frame -- $\psi''_q$, $\psi''_d$, $\psi''$   Machine Total Subtransient Flux -- $T_{elec}$ Electrical Torque -- $P_{mech}$ Mechanical power from the prime mover -- $E_{fd}$ Field winding voltage from the excitation system -- $k_{sat}$ Saturation Coefficient -### Differential Variables -- $\delta$   Machine Internal Angle -- $\omega$ Machine Relative Speed -- $\psi'_d$, $\psi'_q$, $E'_d$, $E'_q$  Machine Internal Flux Values -### Parameters -- $\omega_{0}$ - Nominal Frequnecy ($2\pi 60$) -- $H$ - Intertia constant, sec (3) -- $D$ - Damping factor, pu (0) -- $R_{a}$ - Stator winding resistance, pu (0) -- $X_{\ell}$ - Stator leakage reactance, pu (0.15) -- $X_{d}$ - Direct axis synchronous reactance, (2.1) -- $X'_{d}$ - Direct axis transient reactance, (0.2) -- $X''_{d}$ - Direct axis sub-transient reactance, (0.18) -- $X_{q}$ - Quadrature axis synchronous reactance, (0.5) -- $X'_{q}$ - Quadrature axis transient reactance, (0.47619) -- $X''_{q}$ - Quadrature axis sub-transient reactance, (0.18) -- $T'_{d0}$ - Open circuit direct axis transient time const., (7) -- $T''_{d0}$ - Open circuit direct axis sub-transient time const., (0.04) -- $T'_{q0}$ - Open circuit quadrature axis transient time const., (0.75) -- $T''_{q0}$ - Open circuit quadrature axis sub-transient time const., (0.05) -- $S_{10}$ - Saturation factor at 1.0 pu flux, (0) -- $S_{12}$ - Saturation factor at 1.2 pu flux, (0) - -### Auxillary Parameters -Transformed parameters used during implementation and for readability. +## Model Parameters + +Symbol | Units | Description | Typical Value | Note +------------|---------|---------------------------------|---------------| ------ +$\omega_0$ | [rad/s] | synchronous frequency | $2\pi \cdot 60$ +$H$ | [s] | rotor inertia | 3 +$D$ | [p.u.] | damping coefficient | 0 +$R_a$ | [p.u.] | winding resistance | 0 +$X_{\ell}$ | [p.u.] | Stator leakage reactance | 0.15 | +$X_{d}$ | [p.u.] | Direct axis synchronous reactance | 2.1 | +$X'_{d}$ | [p.u.] | Direct axis transient reactance | 0.2 | +$X''_{d}$ | [p.u.] | Direct axis sub-transient reactance | 0.18 | +$X_{q}$ | [p.u.] | Quadrature axis synchronous reactance | 0.5 | +$X'_{q}$ | [p.u.] | Quadrature axis transient reactance | 0.5 | +$X''_{q}$ | [p.u.] | Quadrature axis sub-transient reactance | 0.18 | +$T'_{d0}$ | [s] | Open circuit direct axis transient time const. | 7 | +$T''_{d0}$ | [s] | Open circuit direct axis sub-transient time const. | 0.04 | +$T'_{q0}$ | [s] | Open circuit quadrature axis transient time const. | 0.75 | +$T''_{q0}$ | [s] | Open circuit quadrature axis sub-transient time const. | 0.05 | +$S_{10}$ | [p.u.] | Saturation factor at 1.0 pu flux | 0 | +$S_{12}$ | [p.u.] | Saturation factor at 1.2 pu flux | 0 | + +### Model Derived Parameters ``` math \begin{aligned} G &=\dfrac{R_a}{R_a^2+(X''_q)^2}& @@ -65,13 +53,56 @@ Transformed parameters used during implementation and for readability. \end{aligned} ``` -## Equations +## Model Variables + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$\delta$ | [rad] | Machine internal rotor angle | +$\omega$ | [p.u.] | Machine speed | Optionally read by governor or stabilizer component +$\psi'_d$ | [p.u.] | Direct axis subtransient flux | +$\psi'_q$ | [p.u.] | Quadrature axis subtransient flux | +$E'_d$ | [p.u.] | Direct axis transient flux | +$E'_q$ | [p.u.] | Quadrature axis subtransient flux | + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_d$ | [p.u.] | Machine internal voltage, d-axis | +$V_q$ | [p.u.] | Machine internal voltage, q-axis | +$I_d$ | [p.u.] | Terminal current, d-axis | +$I_q$ | [p.u.] | Terminal current, q-axis | +$I_r$ | [p.u.] | Terminal current, real component on network reference frame | Read by bus and optionally by controllers +$I_i$ | [p.u.] | Terminal current, imaginary component on network reference frame | Read by bus and optionally by controllers +$\psi''_q$ | [p.u.] | Total q-axis subtransient flux +$\psi''_d$ | [p.u.] | Total d-axis subtransient flux +$\psi''$   | [p.u.] | Machine total subtransient flux +$T_{e}$ | [p.u.] | Electrical torque +$k_{sat}$ | [p.u.] | Saturation coefficient + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component on network reference frame | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component on network reference frame | owned by bus object +$P_{m}$ | [p.u.] | Mechanical power from the prime mover | Owned by governor, constant if no governor is connected to the machine +$E_{fd}$ | [p.u.] | Field winding voltage from the excitation system | Owned by exciter, constant if no exciter is connected to the machine + +## Model Equations ### Differential Equations ``` math \begin{aligned} - \dot\delta &= \omega\cdot\omega_0 \\ - \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D\omega}{1+\omega} + \dot\delta &= (\omega-1)\cdot\omega_0 \\ + \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D(\omega-1)}{\omega} - T_{elec}\right)\\ \dot{\psi}'_{d} &= \dfrac{1}{T''_{d0}}(E'_{q}-\psi'_{d}-X_{d2}I_{d})\\ \dot{\psi}'_{q} &= \dfrac{1}{T''_{q0}}(E'_{d}-\psi'_{q}+X_{q2}I_{q})\\ @@ -90,64 +121,27 @@ Transformed parameters used during implementation and for readability. ``` ### Algebraic Equations -These algebraic equations define internal variables (7) and the algebraic -Network Interface Equations (4) -``` math -\begin{aligned} - \psi''_{q} &= -E'_{d}X_{q5} - \psi'_{q}X_{q4} \\ - \psi''_{d} &= +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ - \psi'' &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ - V_{d} &= -\psi''_{q}(1+\omega)\\ - V_{q} &= +\psi''_{d}(1+\omega)\\ - T_{elec} &= (\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ -\end{aligned} -``` - -#### Network Interface equations -The network interface equations provide the algebraic relationship the network - and internal reference frame. +Note that for implementation purposes, some of these equations may be simplified into functions and the internal variables eliminated. Nevertheless, for modeling clarity and conformance to typical practice, the full equations are given here. ``` math \begin{aligned} - \begin{bmatrix} - I_d \\ I_q - \end{bmatrix} - &= - \begin{bmatrix} - \sin \delta & -\cos\delta \\ - \cos\delta & \sin\delta - \end{bmatrix} - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix} - \\ - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix} - &= - \begin{bmatrix} - G & -B \\ - B & G - \end{bmatrix} - \left( - \begin{bmatrix} - \sin \delta & \cos\delta \\ - -\cos\delta & \sin\delta - \end{bmatrix} - \begin{bmatrix} - V_d \\ V_q - \end{bmatrix} - - - \begin{bmatrix} - V_r \\V_i - \end{bmatrix} - \right) + 0 &= -\psi''_{q} -E'_{d}X_{q5} - \psi'_{q}X_{q4} \\ + 0 &= -\psi''_{d} +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ + 0 &= -\psi'' +\sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ + 0 &= -V_{d} -\psi''_{q}\omega\\ + 0 &= -V_{q} +\psi''_{d}\omega\\ + 0 &= -T_{elec} +(\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ + 0 &= -k_{sat} + S_B (\psi''-S_A)^2 \\ + 0 &= -I_d + I_r \sin(\delta) - I_i \cos(\delta) \\ + 0 &= -I_q + I_r \cos(\delta) + I_i \sin(\delta) \\ + 0 &= -I_r + G (V_d \sin(\delta) + V_q \cos(\delta) - V_r) - B (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ + 0 &= -I_i + B (V_d \sin(\delta) + V_q \cos(\delta) - V_r) + G (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \end{aligned} ``` ## Initialization ### Without Saturation -Pressume there is no saturation to simplify solution procedure for initial +Presume there is no saturation to simplify solution procedure for initial conditions. Using the power-flow solution, we have explicit solutions for the following @@ -156,7 +150,7 @@ from the network interface equations. The remaining are algebraically solved from the steady-state initial conditions. ``` math \begin{aligned} -\omega &= 0 \\ +\omega &= 1 \\ \delta &= \text{arg} \left[V_r + jV_i + (R_a + jX_q) (I_r + jI_i)\right] \\ \psi^{''}_{d} &= V_q \\ \psi^{''}_{q} &= -V_d \\ @@ -176,7 +170,7 @@ from the steady-state initial conditions. ### With Saturation It is important to point out that finding the initial value of $\delta$ for the model without saturation direct method can be used. In case when saturation -is considered some "claver" math is needed. Key insight for determining initial +is considered some "clever" math is needed. Key insight for determining initial $\delta$ is that the magnitude of the saturation depends upon the magnitude of $\psi''$, which is independent of $\delta$. diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md index c5c620710..92b6d5a24 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENSALwS/README.md @@ -1,7 +1,14 @@ # GENSAL -> [!NOTE] -> This has not yet been implemented +This synchronous machine model is 5th order and is specifically designed for salient pole machines. It is a standard model used in phasor-domain industry stability studies. +See the [General Synchronous Machine Model](../README.md) for general synchronous machine information. + +Notes: +- $X''_{q}=X''_{d}$ (no subtransient saliency) +- $X''_{d}$ does not saturate +- Only d-axis affected by saturation +- $X_{q}=X'_{q}$ +- $T'_{q0}$ is neglected ## Block Diagram
@@ -12,143 +19,109 @@ [PowerWorld](https://www.powerworld.com/WebHelp/)
-## Simplifications -The GENSAL model is a variation of the -[General Synchronous Machine Model](../README.md) -- $`X''_{q}=X''_{d}`$ -- $`X''_{d}`$ does not saturate -- Only d-axis affected by saturation -- $`X_{q}=X'_{q}`$ -- $T'_{q0}$ is neglected +## Model Parameters -## Nomenclature -### Algebraic Variables -- $V_d$, $V_q$ Machine Internal Voltage on the machine d-q reference frame -- $I_d$, $I_q$ Terminal currents on the machine d-q reference frame -- $V_r$, $V_i$ Terminal voltages on the network reference frame -- $I_r$, $I_i$ Terminal currents on the network reference frame -- $\psi''_q$, $\psi''_d$, $\psi''$   Machine Total Subtransient Flux -- $T_{elec}$ Electrical Torque -- $P_{mech}$ Mechanical power from the prime mover -- $E_{fd}$ Field winding voltage from the excitation system -- $k_{sat}$ Saturation Coefficient -### Differential Variables -- $\delta$   Machine Internal Angle -- $\omega$ Machine Relative Speed -- $\psi'_d$, $\psi'_q$, $E'_d$, $E'_q$  Machine Internal Flux Values -### Parameters -- $\omega_{0}$ - Nominal Frequnecy ($2\pi 60$) -- $H$ - Intertia constant, sec (3) -- $D$ - Damping factor, pu (0) -- $R_{a}$ - Stator winding resistance, pu (0) -- $X_{\ell}$ - Stator leakage reactance, pu (0.15) -- $X_{d}$ - Direct axis synchronous reactance, (2.1) -- $X'_{d}$ - Direct axis transient reactance, (0.2) -- $X''_{d}$ - Direct axis sub-transient reactance, (0.18) -- $X_{q}$ - Quadrature axis synchronous reactance, (0.5) -- $X'_{q}$ - Quadrature axis transient reactance, (0.47619) -- $X''_{q}$ - Quadrature axis sub-transient reactance, (0.18) -- $T'_{d0}$ - Open circuit direct axis transient time const., (7) -- $T''_{d0}$ - Open circuit direct axis sub-transient time const., (0.04) -- $T'_{q0}$ - Open circuit quadrature axis transient time const., (0.75) -- $T''_{q0}$ - Open circuit quadrature axis sub-transient time const., (0.05) -- $S_{10}$ - Saturation factor at 1.0 pu flux, (0) -- $S_{12}$ - Saturation factor at 1.2 pu flux, (0) - -### Auxillary Parameters -Transformed parameters used during implementation and for readability. +Symbol | Units | Description | Typical Value | Note +------------|---------|---------------------------------|---------------| ------ +$\omega_0$ | [rad/s] | synchronous frequency | $2\pi60$ +$H$ | [s] | rotor inertia | 3 +$D$ | [p.u.] | damping coefficient | 0 +$R_a$ | [p.u.] | winding resistance | 0 +$X_{\ell}$ | [p.u.] | Stator leakage reactance | 0.15 | +$X_{d}$ | [p.u.] | Direct axis synchronous reactance | 2.1 | +$X'_{d}$ | [p.u.] | Direct axis transient reactance | 0.2 | +$X''_{d}$ | [p.u.] | Direct axis sub-transient reactance | 0.18 | +$X_{q}$ | [p.u.] | Quadrature axis synchronous reactance | 0.5 | +$T'_{d0}$ | [s] | Open circuit direct axis transient time const. | 7 | +$T''_{d0}$ | [s] | Open circuit direct axis sub-transient time const. | 0.04 | +$T''_{q0}$ | [s] | Open circuit quadrature axis sub-transient time const. | 0.05 | +$S_{10}$ | [p.u.] | Saturation factor at 1.0 pu flux | 0 | +$S_{12}$ | [p.u.] | Saturation factor at 1.2 pu flux | 0 | + +### Model Derived Parameters ``` math \begin{aligned} G &=\dfrac{R_a}{R_a^2+(X''_q)^2}& B &= -\dfrac{X''_q}{R_a^2+(X''_q)^2}\\ S_A &= \dfrac{1.2\sqrt{S_{10}/S_{12}} +1}{\sqrt{S_{10}/S_{12}} +1} & S_B &= \dfrac{1.2\sqrt{S_{10}/S_{12}} -1}{\sqrt{S_{10}/S_{12}} -1} \\ - X_{d1} &= X_d-X_d' & X_{q1} &= X_q-X_q' \\ - X_{d2} &= X_d'-X_\ell & X_{q2} &= X_q'-X_\ell\\ - X_{d3} &= (X_d'-X_d'')/X_{d2}^2 & X_{q3} &= (X_q'-X_q'')/X_{q2}^2 \\ - X_{d5} &= (X_d''-X_\ell)/X_{d2} & X_{q5} &= (X_q''-X_\ell)/X_{q2}\\ + X_{d1} &= X_d-X_d' \\ + X_{d2} &= X_d'-X_\ell & X_{q2} = X_q-X''_q \\ + X_{d3} &= (X_d'-X_d'')/X_{d2}^2 \\ + X_{d5} &= (X_d''-X_\ell)/X_{d2} \\ X_{qd} &= (X_q-X_\ell)/(X_d-X_\ell) \end{aligned} ``` -## Equations +## Model Variables + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$\delta$ | [rad] | Machine internal rotor angle | +$\omega$ | [p.u.] | Machine speed | Optionally read by governor or stabilizer component +$\psi'_d$ | [p.u.] | Direct axis subtransient flux | +$\psi''_q$ | [p.u.] | Quadrature axis subtransient flux | +$E'_q$ | [p.u.] | Quadrature axis subtransient flux | + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_d$ | [p.u.] | Machine internal voltage, d-axis | +$V_q$ | [p.u.] | Machine internal voltage, q-axis | +$I_d$ | [p.u.] | Terminal current, d-axis | +$I_q$ | [p.u.] | Terminal current, q-axis | +$I_r$ | [p.u.] | Terminal current, real component on network reference frame | Read by bus and optionally by controllers +$I_i$ | [p.u.] | Terminal current, imaginary component on network reference frame | Read by bus and optionally by controllers +$\psi''_d$ | [p.u.] | Total d-axis subtransient flux +$T_{e}$ | [p.u.] | Electrical torque + +### External Variables + +#### Differential +None. + +#### Algebraic +Symbol | Units | Description | Note +------------|---------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component on network reference frame | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component on network reference frame | owned by bus object +$P_{m}$ | [p.u.] | Mechanical power from the prime mover | Owned by governor, constant if no governor is connected to the machine +$E_{fd}$ | [p.u.] | Field winding voltage from the excitation system | Owned by exciter, constant if no exciter is connected to the machine + +## Model Equations ### Differential Equations ``` math \begin{aligned} - \dot\delta &= \omega\cdot\omega_0 \\ - \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D\omega}{1+\omega} + \dot\delta &= (\omega-1)\cdot\omega_0 \\ + \dot\omega &= \dfrac{1}{2H}\left(\dfrac{P_{mech}-D (\omega-1)}{\omega} - T_{elec}\right)\\ \dot{\psi}'_{d} &= \dfrac{1}{T''_{d0}}(E'_{q}-\psi'_{d}-X_{d2}I_{d})\\ - \dot{\psi}'_{q} &= \dfrac{1}{T''_{q0}}(E'_{d}-\psi'_{q}+X_{q2}I_{q})\\ - \dot{E}'_{d} &= \dfrac{1}{T'_{q0}} - \left( -E'_{d}+X_{q1} - (I_{q}-X_{q3}(E'_{d}-\psi'_{q}+X_{q2}I_{q})) - + X_{qd}\psi''_{q}k_{sat} - \right) \\ + \dot{\psi}''_{q} &= \dfrac{1}{T''_{q0}}(-\psi''_{q}-X_{q2}I_{q})\\ \dot{E}'_{q} &= \dfrac{1}{T'_{d0}} \left( E_{fd}-E'_{q}-X_{d1} (I_{d}+X_{d3}(E'_{q}-\psi'_{d}-X_{d2}I_{d})) - -\psi''_{d}k_{sat} + - S_B (E'_q-S_A)^2 \right)\\ \end{aligned} ``` ### Algebraic Equations -These algebraic equations define internal variables (7) and the algebraic -Network Interface Equations (4) -``` math -\begin{aligned} - \psi''_{q} &= -E'_{d}X_{q5} - \psi'_{q}X_{q4} \\ - \psi''_{d} &= +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ - \psi'' &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ - V_{d} &= -\psi''_{q}(1+\omega)\\ - V_{q} &= +\psi''_{d}(1+\omega)\\ - T_{elec} &= (\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ -\end{aligned} -``` - -#### Network Interface equations -The network interface equations provide the algebraic relationship the -network and internal reference frame. +Note that for implementation purposes, some of these equations may be simplified into functions and the internal variables eliminated. Nevertheless, for modeling clarity and conformance to typical practice, the full equations are given here. ``` math \begin{aligned} - \begin{bmatrix} - I_d \\ I_q - \end{bmatrix} - &= - \begin{bmatrix} - \sin \delta & -\cos\delta \\ - \cos\delta & \sin\delta - \end{bmatrix} - - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix}\\ - - \begin{bmatrix} - I_r \\ I_i - \end{bmatrix} - &= - - \begin{bmatrix} - G & -B \\ - B & G - \end{bmatrix} - - \left( - \begin{bmatrix} - \sin \delta & \cos\delta \\ - -\cos\delta & \sin\delta - \end{bmatrix} - \begin{bmatrix} - V_d \\ V_q - \end{bmatrix} - - - \begin{bmatrix} - V_r \\V_i - \end{bmatrix} - \right) + 0 &= -V_{d} -\psi''_{q}\omega\\ + 0 &= -V_{q} +\psi''_{d}\omega\\ + 0 &= -I_d + I_r \sin(\delta) - I_i \cos(\delta) \\ + 0 &= -I_q + I_r \cos(\delta) + I_i \sin(\delta) \\ + 0 &= -I_r + G (V_d \sin(\delta) + V_q \cos(\delta) - V_r) - B (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ + 0 &= -I_i + B (V_d \sin(\delta) + V_q \cos(\delta) - V_r) + G (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ + 0 &= -\psi''_{d} +E'_{q}X_{d5} + \psi'_{d}X_{d4}\\ + 0 &= -T_{e} +(\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \end{aligned} ``` From 833261bd32fb4310befc3e2cb31c3f0d102ceca0 Mon Sep 17 00:00:00 2001 From: pelesh Date: Tue, 10 Jun 2025 11:23:51 -0400 Subject: [PATCH 038/139] Add component data structures (#133) --- CONTRIBUTING.md | 18 +++ examples/PhasorDynamics/Example1/example1.cpp | 133 ++++++++++------ examples/PhasorDynamics/Example2/example2.cpp | 143 +++++++++++++++--- .../PhasorDynamics/BusFault/BusFault.cpp | 20 +++ .../PhasorDynamics/BusFault/BusFault.hpp | 24 ++- .../PhasorDynamics/BusFault/BusFaultData.hpp | 33 ++++ src/Model/PhasorDynamics/BusFault/README.md | 26 ++-- src/Model/PhasorDynamics/Load/Load.cpp | 9 ++ src/Model/PhasorDynamics/Load/Load.hpp | 1 + src/Model/PhasorDynamics/Load/LoadData.hpp | 2 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 42 ++++- .../SynchronousMachine/GENROUwS/Genrou.hpp | 17 ++- .../GENROUwS/GenrouData.hpp | 50 ++++++ .../SynchronousMachine/GENROUwS/README.md | 96 ++++++------ .../PhasorDynamics/GenClassicalTests.hpp | 2 +- 15 files changed, 469 insertions(+), 147 deletions(-) create mode 100644 src/Model/PhasorDynamics/BusFault/BusFaultData.hpp create mode 100644 src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30e684379..10e9c6368 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -184,6 +184,24 @@ double another_member; // No, there is no trailing underscore to distinguish i double memberVariable_; // No, using lowercase camel instead of C-style name format ``` +#### Ecxeption + +Public member variables that are accessed directly do not need trailing +underscores. For example, consider this code: +```c++ +struct ModelData +{ + int id; + double value; +}; + +ModelData data; +data.id = 1; +data.value = 2.0; +``` +Member variables of struct `data` are accessed diorectly outside the struct +and do not need to be denoted with trailing underscores `_`. + ### Function names Use lowercase camel format for function names. diff --git a/examples/PhasorDynamics/Example1/example1.cpp b/examples/PhasorDynamics/Example1/example1.cpp index e4f1fef6f..ac42fc236 100644 --- a/examples/PhasorDynamics/Example1/example1.cpp +++ b/examples/PhasorDynamics/Example1/example1.cpp @@ -14,10 +14,14 @@ #include #include +#include #include +#include #include #include +#include #include +#include #include #include #include @@ -27,37 +31,70 @@ int main() using namespace GridKit::PhasorDynamics; using namespace AnalysisManager::Sundials; + using scalar_type = double; + using real_type = double; + using index_type = size_t; + std::cout << "Example 1 version 2\n"; - /* Create model parts */ - SystemModel sys; - Bus bus1(0.9949877346411762, 0.09999703952427966); - BusInfinite bus2(1.0, 0.0); - Branch branch(&bus1, &bus2, 0, 0.1, 0, 0); - BusFault fault(&bus1, 0, 1e-3, 0); - - Genrou gen(&bus1, - 1, - 1., - 0.05013, - 3., - 0., - 0., - 7., - .04, - .05, - .75, - 2.1, - 0.2, - 0.18, - 0.5, - 0.5, - 0.18, - 0.15, - 0., - 0.); - - /* Connect everything together */ + // + // Create model data + // + BusData bus_data_1; + bus_data_1.Vr0 = 0.9949877346411762; + bus_data_1.Vi0 = 0.09999703952427966; + + BusData bus_data_2; + bus_data_2.Vr0 = 1.0; + bus_data_2.Vi0 = 0.0; + + BranchData branch_data_1_2; + branch_data_1_2.R = 0.0; + branch_data_1_2.X = 0.1; + branch_data_1_2.G = 0.0; + branch_data_1_2.B = 0.0; + + GenrouData gen_data_1; + gen_data_1.unit_id = 1; + gen_data_1.p0 = 1.; + gen_data_1.q0 = 0.05013; + gen_data_1.H = 3.; + gen_data_1.D = 0.; + gen_data_1.Ra = 0.; + gen_data_1.Tdop = 7.; + gen_data_1.Tdopp = .04; + gen_data_1.Tqopp = .05; + gen_data_1.Tqop = .75; + gen_data_1.Xd = 2.1; + gen_data_1.Xdp = 0.2; + gen_data_1.Xdpp = 0.18; + gen_data_1.Xq = 0.5; + gen_data_1.Xqp = 0.5; + gen_data_1.Xqpp = 0.18; + gen_data_1.Xl = 0.15; + gen_data_1.S10 = 0.; + gen_data_1.S12 = 0.; + + BusFaultData bus_fault_data_1; + bus_fault_data_1.R = 0.0; + bus_fault_data_1.X = 1e-3; + bus_fault_data_1.status = false; + + // + // Instantiate model components + // + + Bus bus1(bus_data_1); + BusInfinite bus2(bus_data_2); + Branch branch(&bus1, &bus2, branch_data_1_2); + BusFault fault(&bus1, bus_fault_data_1); + Genrou gen(&bus1, gen_data_1); + + // + // Create the 2-bus system + // + + SystemModel sys; sys.addBus(&bus1); sys.addBus(&bus2); sys.addComponent(&branch); @@ -65,7 +102,8 @@ int main() sys.addComponent(&gen); sys.allocate(); - double dt = 1.0 / 4.0 / 60.0; + // Set time step to 1/4 of a 60Hz cycle + real_type dt = 1.0 / 4.0 / 60.0; // A data structure to keep track of the data we want to // compare to the reference solution. Rather than keeping @@ -77,7 +115,9 @@ int main() // (plain ol' data), which have some benefits in C++. struct OutputData { - double ti, Vr, Vi, dw; + // Output variables are time, real and imaginary voltage and + // frequency deviation + real_type ti, Vr, Vi, dw; }; // A list of output for each time step. @@ -93,19 +133,19 @@ int main() // reference to that variable inside the callback). We select // the subset of the output we're interested in recording and // push it into output, which is updated outside the callback. - auto output_cb = [&](double t) + auto output_cb = [&](real_type t) { - std::vector& yval = sys.y(); + std::vector& y_val = sys.y(); - output.push_back(OutputData{t, yval[0], yval[1], yval[3]}); + output.push_back(OutputData{t, y_val[0], y_val[1], y_val[3]}); }; // Set up simulation - Ida ida(&sys); + Ida ida(&sys); ida.configureSimulation(); // Run simulation - making sure to pass the callback to record output - double start = static_cast(clock()); + real_type start = static_cast(clock()); // Run for 1s ida.initializeSimulation(0.0, false); @@ -113,30 +153,30 @@ int main() ida.runSimulation(1.0, nout, output_cb); // Introduce fault and run for the next 0.1s - fault.setStatus(1); + fault.setStatus(true); ida.initializeSimulation(1.0, false); nout = static_cast(std::round((1.1 - 1.0) / dt)); ida.runSimulation(1.1, nout, output_cb); // Clear the fault and run until t = 10s. - fault.setStatus(0); + fault.setStatus(false); ida.initializeSimulation(1.1, false); nout = static_cast(std::round((10.0 - 1.1) / dt)); ida.runSimulation(10.0, nout, output_cb); - double stop = static_cast(clock()); + real_type stop = static_cast(clock()); - double error_V = 0.0; // error in |V| - double error_w = 0.0; // error in rotor speed + real_type error_V = 0.0; // error in |V| + real_type error_w = 0.0; // error in rotor speed // Read through the simulation data stored in the buffer. // Since we captured by reference, output should be available // for us to read here, outside the callback. for (size_t i = 0; i < output.size(); i++) { - OutputData data = output[i]; - std::vector& ref_sol = Example1::reference_solution[i + 1]; + OutputData data = output[i]; + std::vector& ref_sol = Example1::reference_solution[i + 1]; - double err = + real_type err = std::abs(std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - ref_sol[2]) / (1.0 + std::abs(ref_sol[2])); if (err > error_V) @@ -160,8 +200,9 @@ int main() // std::cout << "\n"; } - double error_V_allowed = 2e-4; - double error_w_allowed = 1e-4; + // Errors allowed for agreement with Powerworld results + real_type error_V_allowed = 2e-4; + real_type error_w_allowed = 1e-4; // Tolerances based on Powerworld reference accuracy int status = 0; diff --git a/examples/PhasorDynamics/Example2/example2.cpp b/examples/PhasorDynamics/Example2/example2.cpp index f661d96c3..8a9cbc15f 100644 --- a/examples/PhasorDynamics/Example2/example2.cpp +++ b/examples/PhasorDynamics/Example2/example2.cpp @@ -16,11 +16,16 @@ #include #include +#include #include +#include #include #include +#include #include +#include #include +#include #include #include #include @@ -82,20 +87,120 @@ int main() std::cout << "Example 2 version 1\n"; - /* Create model parts */ - SystemModel sys; - BusInfinite bus1(1.06, 0.0); - Bus bus2(1.0599558398065716, -0.009675621941024773); - Bus bus3(0.9610827543495831, -0.13122476630506485); - Branch branch12(&bus1, &bus2, 0.05, 0.21, 0, 0.1); - Branch branch13(&bus1, &bus3, 0.06, 0.15, 0, 0.12); - Branch branch23(&bus2, &bus3, 0.08, 0.27, 0, 0.45); - Genrou gen2(&bus2, 1, 0.5, -0.07588, 2.7, 0., 0., 7., .04, .05, .75, 1.9, 0.17, 0.15, 0.4, 0.35, 0.15, 0.14999, 0., 0.); - Genrou gen3(&bus3, 1, 0.25, 0.26587, 1.6, 0., 0., 7.5, .04, .05, .75, 2.3, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Load load3(&bus3, 0.4447197839297772, 0.20330047265361242); - BusFault fault(&bus3, 0, 1e-5, 0); + // + // Create (load) model data + // + + // Bus 1 + BusData bus_data_1; + bus_data_1.Vr0 = 1.06; + bus_data_1.Vi0 = 0.0; + + // Bus 2 + BusData bus_data_2; + bus_data_2.Vr0 = 1.0599558398065716; + bus_data_2.Vi0 = -0.009675621941024773; + + // Bus 3 + BusData bus_data_3; + bus_data_3.Vr0 = 0.9610827543495831; + bus_data_3.Vi0 = -0.13122476630506485; + + // Branch 1-2 + BranchData branch_data_1_2; + branch_data_1_2.R = 0.05; + branch_data_1_2.X = 0.21; + branch_data_1_2.G = 0; + branch_data_1_2.B = 0.1; + + // Branch 1-3 + BranchData branch_data_1_3; + branch_data_1_3.R = 0.06; + branch_data_1_3.X = 0.15; + branch_data_1_3.G = 0; + branch_data_1_3.B = 0.12; + + // Branch 2-3 + BranchData branch_data_2_3; + branch_data_2_3.R = 0.08; + branch_data_2_3.X = 0.27; + branch_data_2_3.G = 0; + branch_data_2_3.B = 0.45; + + // Generator on bus 2 + GenrouData gen_data_2; + gen_data_2.unit_id = 1; + gen_data_2.p0 = 0.5; + gen_data_2.q0 = -0.07588; + gen_data_2.H = 2.7; + gen_data_2.D = 0.; + gen_data_2.Ra = 0.; + gen_data_2.Tdop = 7.; + gen_data_2.Tdopp = .04; + gen_data_2.Tqopp = .05; + gen_data_2.Tqop = .75; + gen_data_2.Xd = 1.9; + gen_data_2.Xdp = 0.17; + gen_data_2.Xdpp = 0.15; + gen_data_2.Xq = 0.4; + gen_data_2.Xqp = 0.35; + gen_data_2.Xqpp = 0.15; + gen_data_2.Xl = 0.14999; + gen_data_2.S10 = 0.; + gen_data_2.S12 = 0.; + + // Generator on bus 3 + GenrouData gen_data_3; + gen_data_3.unit_id = 1; + gen_data_3.p0 = 0.25; + gen_data_3.q0 = 0.26587; + gen_data_3.H = 1.6; + gen_data_3.D = 0.; + gen_data_3.Ra = 0.; + gen_data_3.Tdop = 7.5; + gen_data_3.Tdopp = .04; + gen_data_3.Tqopp = .05; + gen_data_3.Tqop = .75; + gen_data_3.Xd = 2.3; + gen_data_3.Xdp = 0.2; + gen_data_3.Xdpp = 0.18; + gen_data_3.Xq = 0.5; + gen_data_3.Xqp = 0.5; + gen_data_3.Xqpp = 0.18; + gen_data_3.Xl = 0.15; + gen_data_3.S10 = 0.; + gen_data_3.S12 = 0.; + + // Load on bus 3 + LoadData load_data_3; + load_data_3.R = 0.4447197839297772; + load_data_3.X = 0.20330047265361242; + load_data_3.bus_id = 3; + + BusFaultData bus_fault_data_3; + bus_fault_data_3.R = 0.0; + bus_fault_data_3.X = 1e-5; + bus_fault_data_3.status = false; + + // + // Instantiate model components + // + + BusInfinite bus1(bus_data_1); + Bus bus2(bus_data_2); + Bus bus3(bus_data_3); + + Branch branch12(&bus1, &bus2, branch_data_1_2); + Branch branch13(&bus1, &bus3, branch_data_1_3); + Branch branch23(&bus2, &bus3, branch_data_2_3); + + Genrou gen2(&bus2, gen_data_2); + Genrou gen3(&bus3, gen_data_3); + Load load3(&bus3, load_data_3); + BusFault fault(&bus3, bus_fault_data_3); /* Connect everything together */ + SystemModel sys; sys.addBus(&bus1); sys.addBus(&bus2); sys.addBus(&bus3); @@ -114,13 +219,13 @@ int main() auto output_cb = [&](real_type t) { - std::vector& yval = sys.y(); + std::vector& y_val = sys.y(); output.push_back(OutputData{t, - 1.0 + yval[5], - 1.0 + yval[26], - std::sqrt(yval[0] * yval[0] + yval[1] * yval[1]), - std::sqrt(yval[2] * yval[2] + yval[3] * yval[3])}); + 1.0 + y_val[5], + 1.0 + y_val[26], + std::sqrt(y_val[0] * y_val[0] + y_val[1] * y_val[1]), + std::sqrt(y_val[2] * y_val[2] + y_val[3] * y_val[3])}); }; // Set up simulation @@ -136,13 +241,13 @@ int main() ida.runSimulation(1.0, nout, output_cb); // Introduce fault to ground and run for 0.1s - fault.setStatus(1); + fault.setStatus(true); ida.initializeSimulation(1.0, false); nout = static_cast(std::round((1.1 - 1.0) / dt)); ida.runSimulation(1.1, nout, output_cb); // Clear fault and run until t = 10s. - fault.setStatus(0); + fault.setStatus(false); ida.initializeSimulation(1.1, false); nout = static_cast(std::round((10.0 - 1.1) / dt)); ida.runSimulation(10.0, nout, output_cb); diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.cpp b/src/Model/PhasorDynamics/BusFault/BusFault.cpp index d38324073..727997721 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.cpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.cpp @@ -13,6 +13,7 @@ #include #include +#include namespace GridKit { @@ -54,6 +55,25 @@ namespace GridKit size_ = 0; } + /** + * @brief Construct a new BusFault + * + * @tparam ScalarT - scalar type + * @tparam IdxT - matrix/vector index type + * @param bus1 - pointer to bus-1 + * @param bus2 - pointer to bus-2 + */ + template + BusFault::BusFault(bus_type* bus, DataT& data) + : bus_(bus), + R_(data.R), + X_(data.X), + status_(data.status), + busID_(data.bus_id) + { + size_ = 0; + } + /*! * @brief allocate method computes sparsity pattern of the Jacobian. */ diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.hpp b/src/Model/PhasorDynamics/BusFault/BusFault.hpp index 4df93c123..8963a7b30 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.hpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.hpp @@ -4,6 +4,16 @@ #include #include +// Forward declaration of BusData structure +namespace GridKit +{ + namespace PhasorDynamics + { + template + struct BusFaultData; + } +} // namespace GridKit + namespace GridKit { namespace PhasorDynamics @@ -28,10 +38,12 @@ namespace GridKit using bus_type = BusBase; using real_type = typename Component::real_type; + using DataT = BusFaultData; public: BusFault(bus_type* bus); BusFault(bus_type* bus, real_type R, real_type X, int status); + BusFault(bus_type* bus, DataT& data); ~BusFault() = default; int allocate() override; @@ -59,7 +71,7 @@ namespace GridKit X_ = X; } - void setStatus(int status) + void setStatus(bool status) { status_ = status; } @@ -86,11 +98,11 @@ namespace GridKit } private: - bus_type* bus_; - real_type R_; - real_type X_; - int status_; - const int busID_; + bus_type* bus_; + real_type R_; + real_type X_; + bool status_; + const IdxT busID_; }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/BusFault/BusFaultData.hpp b/src/Model/PhasorDynamics/BusFault/BusFaultData.hpp new file mode 100644 index 000000000..dbdc2bd5d --- /dev/null +++ b/src/Model/PhasorDynamics/BusFault/BusFaultData.hpp @@ -0,0 +1,33 @@ +/** + * @file BusFaultData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for short-to-ground fault + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a short-to-ground fault + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct BusFaultData + { + RealT R{0.0}; ///< short to ground resistance + RealT X{0.0}; ///< short to ground reactance + bool status{false}; ///< if the fault happened + + IdxT bus_id{0}; ///< Unique ID of bus where fault occurs. + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/BusFault/README.md b/src/Model/PhasorDynamics/BusFault/README.md index cc10b2fc3..3576df850 100644 --- a/src/Model/PhasorDynamics/BusFault/README.md +++ b/src/Model/PhasorDynamics/BusFault/README.md @@ -4,11 +4,11 @@ Represents an impedance fault at a bus. This device can exist in two states, on ## Model Parameters -Symbol | Units | Description | Note -------------|---------|---------------------------------| ------ -$R$ | [p.u.] | Fault resistance | -$X$ | [p.u.] | Fault reactance | -$U$ | [unitless] | Binary status $$\in \{0, 1\}$$ | Set by user to put fault on or off. +Symbol | Units | Description | Note +---------|------------|---------------------------------|------- +$R$ | [p.u.] | Fault resistance | +$X$ | [p.u.] | Fault reactance | +$U$ | [unitless] | Binary status $$\in \{0, 1\}$$ | Set by user to put fault on or off. ### Model Derived Parameters ``` math @@ -28,10 +28,10 @@ None. #### Algebraic -Symbol | Units | Description | Note -------------|---------|---------------------------------| ------ -$I_r$ | [p.u.] | Terminal current, real component | Read by bus -$I_i$ | [p.u.] | Terminal current, imaginary component | Read by bus +Symbol | Units | Description | Note +------------|---------|---------------------------------------| ------ +$I_r$ | [p.u.] | Terminal current, real component | Read by bus +$I_i$ | [p.u.] | Terminal current, imaginary component | Read by bus ### External Variables @@ -40,10 +40,10 @@ $I_i$ | [p.u.] | Terminal current, imaginary component | Read by bus None. #### Algebraic -Symbol | Units | Description | Note -------------|---------|---------------------------------| ------ -$V_r$ | [p.u.] | Terminal voltage, real component | owned by bus object -$V_i$ | [p.u.] | Terminal voltage, imaginary component | owned by bus object +Symbol | Units | Description | Note +------------|---------|---------------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component | owned by bus object ## Model Equations diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index fdcb60d5d..d3f9e0163 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -38,6 +38,15 @@ namespace GridKit { } + template + Load::Load(bus_type* bus, + model_data_type& data) + : bus_(bus), + R_(data.R), + X_(data.X) + { + } + template Load::Load(bus_type* bus, IdxT component_id) : bus_(bus) diff --git a/src/Model/PhasorDynamics/Load/Load.hpp b/src/Model/PhasorDynamics/Load/Load.hpp index 221f21043..6fc996c8b 100644 --- a/src/Model/PhasorDynamics/Load/Load.hpp +++ b/src/Model/PhasorDynamics/Load/Load.hpp @@ -46,6 +46,7 @@ namespace GridKit Load(bus_type* bus); Load(bus_type* bus, real_type R, real_type X); Load(bus_type* bus, IdxT component_id); + Load(bus_type* bus, model_data_type& data); virtual ~Load(); virtual int allocate() override; diff --git a/src/Model/PhasorDynamics/Load/LoadData.hpp b/src/Model/PhasorDynamics/Load/LoadData.hpp index f28929274..35de190d2 100644 --- a/src/Model/PhasorDynamics/Load/LoadData.hpp +++ b/src/Model/PhasorDynamics/Load/LoadData.hpp @@ -26,7 +26,7 @@ namespace GridKit RealT R{0.0}; ///< load resistance RealT X{0.0}; ///< load reactance - IdxT bus_id{0}; ///< Unique ID of bus 1 + IdxT bus_id{0}; ///< Unique ID of bus to which the load is connnected. }; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 7608d1956..55895d50b 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -14,6 +14,7 @@ #include #include +#include #define _USE_MATH_DEFINES @@ -31,7 +32,7 @@ namespace GridKit * - Number of optimization parameters = 0 */ template - Genrou::Genrou(bus_type* bus, int unit_id) + Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), busID_(0), unit_id_(unit_id), @@ -65,15 +66,10 @@ namespace GridKit /*! * @brief Constructor for a pi-model branch * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 */ template Genrou::Genrou(bus_type* bus, - int unit_id, + IdxT unit_id, ScalarT p0, ScalarT q0, real_type H, @@ -118,6 +114,38 @@ namespace GridKit setDerivedParams(); } + /*! + * @brief Constructor for the GENROU generator with saturation. + * + */ + template + Genrou::Genrou(bus_type* bus, model_data_type& data) + : bus_(bus), + busID_(0), + unit_id_(data.unit_id), + p0_(data.p0), + q0_(data.q0), + H_(data.H), + D_(data.D), + Ra_(data.Ra), + Tdop_(data.Tdop), + Tdopp_(data.Tdopp), + Tqopp_(data.Tqopp), + Tqop_(data.Tqop), + Xd_(data.Xd), + Xdp_(data.Xdp), + Xdpp_(data.Xdpp), + Xq_(data.Xq), + Xqp_(data.Xqp), + Xqpp_(data.Xqpp), + Xl_(data.Xl), + S10_(data.S10), + S12_(data.S12) + { + size_ = 21; + setDerivedParams(); + } + // /** // * @brief Destroy the Genrou // * diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 1f05fc876..283840840 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -17,7 +17,10 @@ namespace GridKit { template class BusBase; - } + + template + struct GenrouData; + } // namespace PhasorDynamics } // namespace GridKit namespace GridKit @@ -43,13 +46,15 @@ namespace GridKit using Component::yp_; using Component::ypB_; - using bus_type = BusBase; - using real_type = typename Component::real_type; + using real_type = typename Component::real_type; + using bus_type = BusBase; + using model_data_type = GenrouData; public: - Genrou(bus_type* bus, int unit_id); + Genrou(bus_type* bus, IdxT unit_id); + Genrou(bus_type* bus, model_data_type& data); Genrou(bus_type* bus, - int unit_id, + IdxT unit_id, ScalarT p0, ScalarT q0, real_type H, @@ -113,7 +118,7 @@ namespace GridKit /* Identification */ bus_type* bus_; const int busID_; - int unit_id_; + IdxT unit_id_; /* Initial terminal conditions */ ScalarT p0_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp new file mode 100644 index 000000000..124ed570c --- /dev/null +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp @@ -0,0 +1,50 @@ +/** + * @file GenrouData.hpp + * @author Slaven Peles (peless@ornl.gov) + * @brief Modeling data for branches (transmission lines) + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Genrou generator model. + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct GenrouData + { + IdxT unit_id{0}; ///< Unique unit ID + + RealT p0{0.0}; ///< Initial active power + RealT q0{0.0}; ///< Initial reactive power + RealT H{0.0}; ///< Rotor inertia + RealT D{0.0}; ///< Damping coefficient + RealT Ra{0.0}; ///< Winding resistance + RealT Tdop{0.0}; ///< Open circuit direct axis transient time + RealT Tdopp{0.0}; ///< Open circuit direct axis sub-transient time + RealT Tqop{0.0}; ///< Open circuit quadrature axis transient + RealT Tqopp{0.0}; ///< Open circuit quadrature axis sub-transient time + RealT Xd{0.0}; ///< Direct axis synchronous reactance + RealT Xdp{0.0}; ///< Direct axis transient reactance + RealT Xdpp{0.0}; ///< Direct axis sub-transient reactance + RealT Xq{0.0}; ///< Quadrature axis synchronous reactance + RealT Xqp{0.0}; ///< Quadrature axis transient reactance + RealT Xqpp{0.0}; ///< Quadrature axis sub-transient reactance + RealT Xl{0.0}; ///< Stator leakage reactance + RealT S10{0.0}; ///< Saturation factor at 1.0 pu flux + RealT S12{0.0}; ///< Saturation factor at 1.2 pu flux + + IdxT bus_id{0}; ///< Unique ID of the connecting bus + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md index ab2591338..3ea288ad5 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md @@ -18,25 +18,25 @@ Notes: ## Model Parameters -Symbol | Units | Description | Typical Value | Note -------------|---------|---------------------------------|---------------| ------ -$\omega_0$ | [rad/s] | synchronous frequency | $2\pi \cdot 60$ -$H$ | [s] | rotor inertia | 3 -$D$ | [p.u.] | damping coefficient | 0 -$R_a$ | [p.u.] | winding resistance | 0 -$X_{\ell}$ | [p.u.] | Stator leakage reactance | 0.15 | -$X_{d}$ | [p.u.] | Direct axis synchronous reactance | 2.1 | -$X'_{d}$ | [p.u.] | Direct axis transient reactance | 0.2 | -$X''_{d}$ | [p.u.] | Direct axis sub-transient reactance | 0.18 | -$X_{q}$ | [p.u.] | Quadrature axis synchronous reactance | 0.5 | -$X'_{q}$ | [p.u.] | Quadrature axis transient reactance | 0.5 | -$X''_{q}$ | [p.u.] | Quadrature axis sub-transient reactance | 0.18 | -$T'_{d0}$ | [s] | Open circuit direct axis transient time const. | 7 | -$T''_{d0}$ | [s] | Open circuit direct axis sub-transient time const. | 0.04 | -$T'_{q0}$ | [s] | Open circuit quadrature axis transient time const. | 0.75 | -$T''_{q0}$ | [s] | Open circuit quadrature axis sub-transient time const. | 0.05 | -$S_{10}$ | [p.u.] | Saturation factor at 1.0 pu flux | 0 | -$S_{12}$ | [p.u.] | Saturation factor at 1.2 pu flux | 0 | +Symbol | Units | Description | Typical Value | Note +-----------|---------|---------------------------------|---------------| ------ +$\omega_0$ | [rad/s] | synchronous frequency | $2\pi \cdot 60$ +$H$ | [s] | rotor inertia | 3 +$D$ | [p.u.] | damping coefficient | 0 +$R_a$ | [p.u.] | winding resistance | 0 +$X_{\ell}$ | [p.u.] | Stator leakage reactance | 0.15 | +$X_{d}$ | [p.u.] | Direct axis synchronous reactance | 2.1 | +$X'_{d}$ | [p.u.] | Direct axis transient reactance | 0.2 | +$X''_{d}$ | [p.u.] | Direct axis sub-transient reactance | 0.18 | +$X_{q}$ | [p.u.] | Quadrature axis synchronous reactance | 0.5 | +$X'_{q}$ | [p.u.] | Quadrature axis transient reactance | 0.5 | +$X''_{q}$ | [p.u.] | Quadrature axis sub-transient reactance | 0.18 | +$T'_{d0}$ | [s] | Open circuit direct axis transient time const. | 7 | +$T''_{d0}$ | [s] | Open circuit direct axis sub-transient time const. | 0.04 | +$T'_{q0}$ | [s] | Open circuit quadrature axis transient time const. | 0.75 | +$T''_{q0}$ | [s] | Open circuit quadrature axis sub-transient time const. | 0.05 | +$S_{10}$ | [p.u.] | Saturation factor at 1.0 pu flux | 0 | +$S_{12}$ | [p.u.] | Saturation factor at 1.2 pu flux | 0 | ### Model Derived Parameters ``` math @@ -59,29 +59,29 @@ $S_{12}$ | [p.u.] | Saturation factor at 1.2 pu flux | 0 | #### Differential -Symbol | Units | Description | Note -------------|---------|---------------------------------| ------ -$\delta$ | [rad] | Machine internal rotor angle | +Symbol | Units | Description | Note +----------|--------|-----------------------------------|------- +$\delta$ | [rad] | Machine internal rotor angle | $\omega$ | [p.u.] | Machine speed | Optionally read by governor or stabilizer component -$\psi'_d$ | [p.u.] | Direct axis subtransient flux | +$\psi'_d$ | [p.u.] | Direct axis subtransient flux | $\psi'_q$ | [p.u.] | Quadrature axis subtransient flux | -$E'_d$ | [p.u.] | Direct axis transient flux | -$E'_q$ | [p.u.] | Quadrature axis subtransient flux | +$E'_d$ | [p.u.] | Direct axis transient flux | +$E'_q$  | [p.u.] | Quadrature axis subtransient flux | #### Algebraic -Symbol | Units | Description | Note -------------|---------|---------------------------------| ------ -$V_d$ | [p.u.] | Machine internal voltage, d-axis | -$V_q$ | [p.u.] | Machine internal voltage, q-axis | -$I_d$ | [p.u.] | Terminal current, d-axis | -$I_q$ | [p.u.] | Terminal current, q-axis | -$I_r$ | [p.u.] | Terminal current, real component on network reference frame | Read by bus and optionally by controllers -$I_i$ | [p.u.] | Terminal current, imaginary component on network reference frame | Read by bus and optionally by controllers -$\psi''_q$ | [p.u.] | Total q-axis subtransient flux -$\psi''_d$ | [p.u.] | Total d-axis subtransient flux -$\psi''$   | [p.u.] | Machine total subtransient flux -$T_{e}$ | [p.u.] | Electrical torque -$k_{sat}$ | [p.u.] | Saturation coefficient +Symbol | Units | Description | Note +------------|--------|--------------------------------- | ------ +$V_d$ | [p.u.] | Machine internal voltage, d-axis | +$V_q$ | [p.u.] | Machine internal voltage, q-axis | +$I_d$ | [p.u.] | Terminal current, d-axis | +$I_q$ | [p.u.] | Terminal current, q-axis | +$I_r$ | [p.u.] | Terminal current, real component on network reference frame | Read by bus and optionally by controllers +$I_i$ | [p.u.] | Terminal current, imaginary component on network reference frame | Read by bus and optionally by controllers +$\psi''_q$ | [p.u.] | Total q-axis subtransient flux | +$\psi''_d$ | [p.u.] | Total d-axis subtransient flux | +$\psi''$   | [p.u.] | Machine total subtransient flux | +$T_{e}$ | [p.u.] | Electrical torque | +$k_{sat}$ | [p.u.] | Saturation coefficient | ### External Variables @@ -89,12 +89,12 @@ $k_{sat}$ | [p.u.] | Saturation coefficient None. #### Algebraic -Symbol | Units | Description | Note -------------|---------|---------------------------------| ------ -$V_r$ | [p.u.] | Terminal voltage, real component on network reference frame | owned by bus object -$V_i$ | [p.u.] | Terminal voltage, imaginary component on network reference frame | owned by bus object -$P_{m}$ | [p.u.] | Mechanical power from the prime mover | Owned by governor, constant if no governor is connected to the machine -$E_{fd}$ | [p.u.] | Field winding voltage from the excitation system | Owned by exciter, constant if no exciter is connected to the machine +Symbol | Units | Description | Note +---------|--------|---------------------------------| ------ +$V_r$ | [p.u.] | Terminal voltage, real component on network reference frame | owned by bus object +$V_i$ | [p.u.] | Terminal voltage, imaginary component on network reference frame | owned by bus object +$P_{m}$ | [p.u.] | Mechanical power from the prime mover | Owned by governor, constant if no governor is connected to the machine +$E_{fd}$ | [p.u.] | Field winding voltage from the excitation system | Owned by exciter, constant if no exciter is connected to the machine ## Model Equations @@ -131,10 +131,10 @@ Note that for implementation purposes, some of these equations may be simplified 0 &= -V_{q} +\psi''_{d}\omega\\ 0 &= -T_{elec} +(\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ 0 &= -k_{sat} + S_B (\psi''-S_A)^2 \\ - 0 &= -I_d + I_r \sin(\delta) - I_i \cos(\delta) \\ - 0 &= -I_q + I_r \cos(\delta) + I_i \sin(\delta) \\ - 0 &= -I_r + G (V_d \sin(\delta) + V_q \cos(\delta) - V_r) - B (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ - 0 &= -I_i + B (V_d \sin(\delta) + V_q \cos(\delta) - V_r) + G (V_d \cos(\delta) + V_q \sin(\delta) - V_i) + 0 &= -I_d + I_r \sin(\delta) - I_i \cos(\delta) \\ + 0 &= -I_q + I_r \cos(\delta) + I_i \sin(\delta) \\ + 0 &= -I_r + G (V_d \sin(\delta) + V_q \cos(\delta) - V_r) - B (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \\ + 0 &= -I_i + B (V_d \sin(\delta) + V_q \cos(\delta) - V_r) + G (V_d \cos(\delta) + V_q \sin(\delta) - V_i) \end{aligned} ``` diff --git a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp index 82f78aea4..98eaa86a9 100644 --- a/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp +++ b/tests/UnitTests/PhasorDynamics/GenClassicalTests.hpp @@ -5,7 +5,7 @@ * @brief Tests for classical generator model. * */ -#define _USE_MATH_DEFINES /* need this since directly including GenClassical.cpp for MSVC compiler */ +#define _USE_MATH_DEFINES /* need this since directly including GenClassical.cpp for MSVC compiler */ #include #include #include From f65eb4fbdf3dba1e6960e103ef59317631f39b2b Mon Sep 17 00:00:00 2001 From: superwhiskers Date: Tue, 10 Jun 2025 12:33:32 -0500 Subject: [PATCH 039/139] some initial tweaks of the input format (#132) * update src/Model/PhasorDynamics/INPUT_FORMAT.md Co-authored-by: pelesh * Aligning with new field labeling paradigm and bus vs node notation * explicitly specify a date format for consistency, minor adjustments to wording * indicate default values for bus classes, allow datetimes in the `case_datetime` field * refine language regarding the datetime field --------- Co-authored-by: pelesh Co-authored-by: Adam Birchfield --- src/Model/PhasorDynamics/INPUT_FORMAT.md | 260 ++++++++++------------- 1 file changed, 116 insertions(+), 144 deletions(-) diff --git a/src/Model/PhasorDynamics/INPUT_FORMAT.md b/src/Model/PhasorDynamics/INPUT_FORMAT.md index 68b13b4a7..149048b6c 100644 --- a/src/Model/PhasorDynamics/INPUT_FORMAT.md +++ b/src/Model/PhasorDynamics/INPUT_FORMAT.md @@ -1,15 +1,16 @@ -## Grid Dynamics Case Format +# Grid Dynamics case format specification Adam Birchfield, Texas A&M University, 2/28/2025 Version 0.1 -### Overview +## Overview -This document describes the data format for grid dynamics cases which -will be used in the SCIDAC-OE project "Next-Generation Grid Simulations" -and can also be used to inform future formats and software efforts. +This document describes a data format for grid dynamics cases intended to +be used in the SciDAC-OE project "Next-Generation Grid Simulations". The +format is designed first for implementation as UTF-8 encoded JSON but may +also be encoded as [MessagePack](https://msgpack.org). -#### Overall goals of the format +### Goals - Simplicity both of user understanding and of software implementation. @@ -24,156 +25,127 @@ and can also be used to inform future formats and software efforts. - Extensible to be able to add many different kinds of nodes and device classes. -- Non-repetitive to keep file size concise and enhance human - readibility. For example, if we have 300 GENROU devices, we do not - need to say "Tdopp" for every one of them. Just putting "GENROU" for - each lets us know what the parameters mean and their order. +- Self-describing, by explicitly labeling parameters. - Backward compatibility. Newer software should always be able to read older files. When possible, also have forward compatibility where older software can read newer files as long as they do not contain newly added or modified devices. -#### Overview of the input format - -- Using JSON in UTF-8 as the base format style - -- Root is an object with three main sections as key-value pair items: - - - "header" section is itself an object with various system-wide - information about the case as key-value pairs: name, date, base - frequency, etc. - - - "nodes" section is an array of nodes: primarily electrical buses - and control signals - - - "devices" section is an array of system devices, including - generators, loads, branches, controllers, and events +## Format + +The root element in the format is an object with three keys: `header`, +`buses`, and `devices`. `header` contains information about the case, +`buses` is an array of buses (which can include electrical buses of +different types as well as signal buses), and `devices` is an array +of system devices. + +### Header + +Contained in the `header` key is an object with the following items: + + Name | Value + --------------------|------------------------------------------------------- + `format_version` | Non-negative integer indicating the format version + `format_revision` | Non-negative integer indicating the format revision + `case_name` | A string containing the name of the case + `case_datetime` | Optional string in the ISO 8601 format indicating a datetime associated with the case. Including a time is optional, but if one is specified, it is recommended that a UTC offset be included. + `case_description` | A string with more specific description of what is modeled in the case + `case_comments` | A string with additional notes as needed + `freq_base` | A floating point value indicating the system frequency base in hertz (Hz). This is commonly 60 Hz + `va_base` | A floating point value indicating the system power base in volt-amperes (VA). This is commonly 100e6 VA + +### Buses + +Contained in the `buses` key is an array of objects, each of which represent +a bus and has the following fields: + + Name | Description + -------------------|------------------------------------------------------ + `number` | Unique positive (> 0) integer identifying the node + `class` | A string indicating the class of node. See the table below for more information + `name` | Optional string containing the name of the node. This may be empty or non-unique + `init` | Optional object mapping string variable names to floating point values, specifying default voltages or signal values. The available initialization variables are dependent upon the node class. Any variables missing will be given default values, which are specified beneath the table below. If this object is missing, all variables will be given default values. See the table below for more information + `v_base` | Optional floating point value giving the voltage base in volts (V). If omitted, default value of 1 V is assumed (common for signal buses) + `mon` | Optional field, which is an array specifying variables to monitor the value of in an output channel. Available variables include all the initialization variables, along with others as determined by the node class. See the table below for more information + `freq_base` | Optional field to override the system frequency base at this bus + `va_base` | Optional field to override the system power base at this bus + `extension` | Optional field containing an object with implementation-defined keys + +#### Bus classes + +As of the current version and revision, the following bus classes are +specified: + + Bus class | Description | Initialization variables | Other variables available to monitor + -------------------|------------------------------------------------------------|------------------------- | ------------------------- + `bus` | Positive-sequence, AC phasor domain bus | `Vr`, `Vi` | `Vm`, `Va` + `infinite_bus` | Positive-sequence, AC phasor domain bus with fixed voltage | `Vr`, `Vi` | `Vm`, `Va` + `emt_bus` | 3-phase bus with instantaneous voltages | `Va`, `Vb`, `Vc` | + `infinite_emt_bus` | 3-phase bus with instantaneous voltages | `Va`, `Vb`, `Vc` | + `control` | A single control signal | `x` | + +For fields named `Vr` or `Va`, the default value is `1.0`, otherwise it is +`0.0`. This list is subject to change. + +### Devices + +Contained in the `devices` section is an array of objects, each of which +represent a device and has the following fields: + + Name | Description + ------------------|------------------------------------------------------ + `class` | A string indicating the class of device. See the table below for more information + `ports` | An object mapping the object's port names (depending on the device class as specified in the table below) to the associated bus number to which it is connected. Any field listed under variables available to monitor can also be added here as a read-only port + `id` | A string disambiguating the device from others. Each device in a class must have a unique combination of required port bus numbers and this string. This string should be 1 or 2 characters long. + `params` | An object mapping initialization parameters to numerical values, depending on the class. See the table below for more information + `mon` | Optional field, which is an array specifying variables to record the value of in an output channel. Available variables are determined by the device class, as specified in the table below + `va_base` | Optional field to override the system power base for this device + `freq_base` | Optional field to override the system frequency base for this device + `extension` | Optional field containing an object with implementation-defined keys + +#### Device classes + +As of the current version and revision, the following device classes +are specified: + + Device class | Description | Ports | Initialization parameters | Variables available to monitor + --------------|------------------------------------------------------|-----------------------------------------------|---------------------------- | ------------------------- + `branch` | a basic algebraic pi model for a line or transformer | `bus1`, `bus2` | `R`, `X`, `G`, `B` | `ir1`, `ii1`, `im1`, `p1`, `q1`, `ir2`, `ii2`, `im2`, `p2`, `q2` + `static_load` | a basic static ZIP load | `bus` | `Pz`, `Qz`, `Pi`, `Qi`, `Pp`, `Qp` | `ir`, `ii`, `p`, `q` + `GENROU` | 6th order machine model | `bus`, `exciter_signal`\*, `governor_signal`\* | `p0`, `q0`, `H`, `D`, `Ra`, `Tdop`, `Tdopp`, `Tqopp`, `Tqop`, `Xd`, `Xdp`, `Xdpp`, `Xq`, `Xqp`, `Xqpp`, `Xl`, `S10`, `S12` | `ir`, `ii`, `p`, `q`, `delta`, `omega` + `bus_fault` | simple impedance-based fault at a bus | `bus`, `control_signal`\* | `state0`, `R`, `X` | `state`, `ir`, `ii` + +Ports marked with \* are optional and, if missing, will be assumed to be +connected to a constant value. This list is subject to change. + +## Example File for a 2-Bus System ```json { - "header":{... }, - "nodes":[... ], - "devices":[... ] + "header": { + "format_version": 0, + "format_revision": 1, + "case_name": "Two-bus test case 1", + "case_description": "A two-bus test case for demonstrating the dynamics format", + "comments": "This case is set up to monitor the voltage at both buses and the machine angle and speed", + "freq_base": 60, + "va_base": 100e6 + }, + "buses": [ + { "number": 1, "class": "bus", "name": "Bus 1", "init": {"Vr":0.994988, "Vi":0.099997}, "vbase": 115e3, "mon": ["Vr", "Vi"] }, + { "number": 2, "class": "infinite_bus", "name": "Bus 2", "init": {"Vr":1.0, "Vi":0}, "vbase": 115e3 } + ], + "devices": [ + { "class": "branch", "ports": {"bus1":1, "bus2":2}, "id": "1", "params": {"R":0, "X":0.1, "G":0, "B":0} }, + { "class": "GENROU", "ports": {"bus":1}, "id": "1", "params": {"p0":1, "q0":0.05013, "H":3, "D":0, "Ra":0, "Tdop":7, "Tdopp":0.04, "Tqopp":0.05, + "Tqop":0.75, "Xd":2.1, "Xdp":0.2, "Xdpp":0.18, "Xq":0.5, "Xqpp":0.18, "Xl":0.15, "S10":0, "S12":0}, "mon": ["delta", "omega"] } + { "class": "bus_fault", "ports": {"bus":1}, "id": "1", "params": {"state0":0, "R":0, "X":1e-3} } + ] } ``` - -### Header Section - -```json -"header": { "key": value, ...} -``` - -The header section is an object, with the following standardized items, -allowing for extensibility as well. - - Name | Value - -------------------|--------------------------------------------------------- - format_version | Integer of main format version (0 for this version 0.1) - format_revision | Integer of format revision (1 for this version 0.1) - case_name | Short string for the case name - case_date | String in a standard date/time format - case_description | Longer string giving a more specific description of what is modeled in the case - comments | Even longer string with notes as needed - freq_base | System frequency base, floating point in Hz (commonly 60) - va_base | System power base, floating point in VA (commonly 100e6) - -### Nodes Section - -```json -"nodes": [[..., ], [..., ], [..., ]] -``` - -The nodes section is an array of arrays. Each array represents one node, -and has exactly 6 items as follows. - - Index | Node item - ------|--------------------------------------------------------- - 0 | Number, a unique integer \> 0 to identify the node - 1 | Node class, string, for what type of node it is. See table below for supported classes - 2 | String name of the node, not necessarily unique. If desired, for simplicity it can be an empty string. Nodes are identified by number, not name, but this can be a helpful label for debugging. - 3 | Array of default voltages or signal values. Length of array and meaning depends on node class (see table below). - 4 | Voltage base for per-unit, floating point value in V. Set to 1 to indicated that voltages or signals given are already in actual units. - 5 | Extra, object with key-value pairs for any extra information to provide with the node. This can be an empty object. If you want to specify a non-default frequency or power base, do it here with `"freq_base"` or `"va_base"`. If you add the item `"monitor":[]`, the voltage or signal values specified in the array for this node will be added to an output channel. Other uses of this section would be coordinates for one-line diagram drawing, membership in components or areas, etc. - - -### Table of Supported Node Classes - -For now the following node classes are specified (though not all -implemented yet) - - Node Class | Description | Variables - -------------|---------------------------------------------|-------------- - bus | positive-sequence, AC phasor domain bus | [Vr, Vi] - infinite_bus | positive-sequence, AC phasor domain bus with fixed voltage | [Vr, Vi] - emt_bus | 3-phase bus with instantaneous voltages | [Va, Vb, Vc] - infinite_emt_bus | 3-phase bus with instantaneous voltages | [Va, Vb, Vc] - control | single control signal | [x] - - -### Devices Section - -```json -"devices": [[..., ], [..., ], [..., ]] -``` - -The devices section is also an array of arrays. Each array represents -one device, and has exactly 5 items as follows. - - Index | Node item - ------|---------------------------------------------------------------- - 0 | Device class, a string identifier for what type of device this is. See table below for currently supported devices. A goal is to continually increase the number of supported devices. - 1 | Node numbers, an array of nodes connected with this device. The length of this array is fixed depending on the device class, but some nodes may be 0 if that functionality is not used. For example, GENROU class devices must have 3 nodes: bus, exciter signal, and governor signal. But the bus is the only one which must be connected to an actual node. - 2 | String ID disambiguator. Each device must have a unique combination of node numbers plus this string. It is recommended for most devices for this to only be 1-2 characters to facilitate converting to industry formats. - 3 | Array of initialization parameters. The length and meaning of these values is fixed and specified by the device class (see table below). - 4 | Extra, object with key-value pairs for any extra information to provide with the device. This can be an empty object {}. If you want to specify a non-default frequency or power base for this device, do it here with `"freq_base"` or `"va_base"`. If you add the item `"monitor":[]`, the variable values specified in the array will be recorded to an output channel. - - -### Table of Supported Device Classes - -For now the following device classes are supported, with more to be -added in future versions. Note that the format version number and -revision number are extremely important, as the device list and the -exact lists of nodes and parameters may change with updates in different -versions. - - - Class Name | Description | Nodes | Initialization Parameters - --------------|--------------| -----------------------|----------------------- - branch | a basic algebraic pi model for a line or transformer | 2: Bus1, Bus2 | 4: R, X, G, B - static_load | a basic static ZIP load | 1: Bus | 6: Pz, Qz, Pi, Qi, Pp, Qp - GENROU | 6th order machine model | 3: Bus, exciter_signal, governor_signal | 18: p0, q0, H, D, Ra, Tdop, Tdopp, Tqopp, Tqop, Xd, Xdp, Xdpp, Xq, Xqp, Xqpp, Xl, S10, S12 - bus_fault | simple impedance-based fault at a bus | 2: Bus, control signal | 3: state0, R, X - - -### Example File for 2-Bus System - -```json -{"header": { -"format_version": 0, "format_revision": 1, "case_name": "two-bus test case 1", "case_data": "2/28/2025", -"case_description": "A two-bus test case for demonstrating the dynamics format.", -"comments":"The case is set up to monitor the voltage at both buses and the machine angle and speed", -"freq_base":60, "va_base": 100e6 -}, - -"nodes": [ - -[1, "bus", "Bus 1", [0.994988, 0.099997], 115e3, {"monitor": [ "Vr", "Vi"]}], -[2, "infinite_bus", "Bus 2", [1.0, 0], 115e3, {}] - -], - -"devices": [ - -["branch", [1, 2], "1", [0, 0.1, 0, 0], {}], -["GENROU", [1, 0, 0], "1", [1, 0.05013, 3, 0, 0, 7, 0.04, 0.05, 0.75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0, 0], {"monitor": ["delta", "omega"]}], -["bus_fault": [1], "1", [0, 0, 1e-3], {}] - -] } -``` - -### Appendix: Output File Format +## Appendix: Output file format There could be multiple output file formats, but the simplest output file format is a comma-separated text file table. The first row is a From d5e6af2d69cd2812d48d41ebf342039cd70450c8 Mon Sep 17 00:00:00 2001 From: superwhiskers Date: Tue, 10 Jun 2025 23:03:36 -0500 Subject: [PATCH 040/139] fix several memory leaks (#134) --------- Co-authored-by: superwhiskers Co-authored-by: pelesh --- .../DynamicConstrainedOpt.cpp | 66 ++++++++-------- .../GenInfiniteBus/GenInfiniteBus.cpp | 78 +++++++++---------- .../ParameterEstimation.cpp | 72 +++++++++-------- src/Solver/Dynamic/Ida.cpp | 22 ++++-- 4 files changed, 120 insertions(+), 118 deletions(-) diff --git a/examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp b/examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp index b8def3c11..9c3654b2d 100644 --- a/examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp +++ b/examples/Experimental/DynamicConstrainedOpt/DynamicConstrainedOpt.cpp @@ -1,6 +1,6 @@ - #include #include +#include #include #include @@ -20,47 +20,47 @@ int main() using namespace GridKit::Testing; // Create an infinite bus - BaseBus* bus = new BusSlack(1.0, 0.0); + BusSlack bus(1.0, 0.0); // Attach a generator to that bus - Generator2* gen = new Generator2(bus); + Generator2 gen(&bus); // Create a system model - SystemModel* model = new SystemModel(); - model->addBus(bus); - model->addComponent(gen); + SystemModel model; + model.addBus(&bus); + model.addComponent(&gen); // allocate model components - model->allocate(); + model.allocate(); // Create numerical integrator and configure it for the generator model - Ida* idas = new Ida(model); + Ida idas(&model); double t_init = 0.0; double t_final = 20.0; // setup simulation - idas->configureSimulation(); - idas->configureAdjoint(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); - idas->configureQuadrature(); - idas->initializeQuadrature(); + idas.configureSimulation(); + idas.configureAdjoint(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); + idas.configureQuadrature(); + idas.initializeQuadrature(); double t_fault = 0.02; double t_clear = 0.06; - idas->runSimulation(t_fault); + idas.runSimulation(t_fault); // create initial condition after a fault { - gen->V() = 0.0; - idas->runSimulation(t_clear, 2); - gen->V() = 1.0; - gen->theta() = -0.01; - idas->saveInitialCondition(); + gen.V() = 0.0; + idas.runSimulation(t_clear, 2); + gen.V() = 1.0; + gen.theta() = -0.01; + idas.saveInitialCondition(); } // Set integration time for dynamic constrained optimization - idas->setIntegrationTime(t_init, t_final, 100); + idas.setIntegrationTime(t_init, t_final, 100); // Guess optimization parameter value double Pm = 0.7; @@ -87,10 +87,10 @@ int main() // Create dynamic objective interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicObjectiveInterface = - new IpoptInterface::DynamicObjective(idas); + new IpoptInterface::DynamicObjective(&idas); // Initialize problem - model->param()[0] = Pm; + model.param()[0] = Pm; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicObjectiveInterface); @@ -101,24 +101,24 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" << " The final value of the objective function G(Pm) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Store dynamic objective optimization results - double* results = new double[model->sizeParams()]; - for (unsigned i = 0; i < model->sizeParams(); ++i) + double* results = new double[model.sizeParams()]; + for (unsigned i = 0; i < model.sizeParams(); ++i) { - results[i] = model->param()[i]; + results[i] = model.param()[i]; } // Create dynamic constraint interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicConstraintInterface = - new IpoptInterface::DynamicConstraint(idas); + new IpoptInterface::DynamicConstraint(&idas); // Initialize problem - model->param()[0] = Pm; + model.param()[0] = Pm; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicConstraintInterface); @@ -129,16 +129,16 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" << " The final value of the objective function G(Pm) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Compare results of the two optimization methods int retval = 0; - for (unsigned i = 0; i < model->sizeParams(); ++i) + for (unsigned i = 0; i < model.sizeParams(); ++i) { - if (!isEqual(results[i], model->param()[i], 10 * tol)) + if (!isEqual(results[i], model.param()[i], 10 * tol)) --retval; } @@ -148,7 +148,5 @@ int main() } delete[] results; - delete idas; - delete model; return retval; } diff --git a/examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp b/examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp index b3ea77a08..143e3d099 100644 --- a/examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp +++ b/examples/Experimental/GenInfiniteBus/GenInfiniteBus.cpp @@ -1,6 +1,6 @@ - #include #include +#include #include #include @@ -20,49 +20,49 @@ int main() using namespace GridKit::Testing; // Create an infinite bus - BaseBus* bus = new BusSlack(1.0, 0.0); + BusSlack bus(1.0, 0.0); // Attach a generator to that bus - Generator4* gen = new Generator4(bus); + Generator4 gen(&bus); // Create a system model - SystemModel* model = new SystemModel(); - model->addBus(bus); - model->addComponent(gen); + SystemModel model; + model.addBus(&bus); + model.addComponent(&gen); // allocate model components - model->allocate(); + model.allocate(); // Create numerical integrator and configure it for the generator model - Ida* idas = new Ida(model); + Ida idas(&model); double t_init = 0.0; double t_final = 15.0; // setup simulation - idas->configureSimulation(); - idas->configureAdjoint(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); - idas->configureQuadrature(); - idas->initializeQuadrature(); + idas.configureSimulation(); + idas.configureAdjoint(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); + idas.configureQuadrature(); + idas.initializeQuadrature(); double t_fault = 0.1; double t_clear = 0.1; - idas->runSimulation(t_fault); - idas->saveInitialCondition(); + idas.runSimulation(t_fault); + idas.saveInitialCondition(); // create initial condition after a fault { - idas->getSavedInitialCondition(); - idas->initializeSimulation(t_init); - gen->V() = 0.0; - idas->runSimulation(t_clear, 20); - gen->V() = 1.0; - idas->saveInitialCondition(); + idas.getSavedInitialCondition(); + idas.initializeSimulation(t_init); + gen.V() = 0.0; + idas.runSimulation(t_clear, 20); + gen.V() = 1.0; + idas.saveInitialCondition(); } // Set integration time for dynamic constrained optimization - idas->setIntegrationTime(t_init, t_final, 100); + idas.setIntegrationTime(t_init, t_final, 100); // Guess initial values of optimization parameters double Pm = 1.0; @@ -90,11 +90,11 @@ int main() // Create dynamic objective interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicObjectiveInterface = - new IpoptInterface::DynamicObjective(idas); + new IpoptInterface::DynamicObjective(&idas); // Initialize the problem - model->param()[0] = Pm; - model->param()[1] = Ef; + model.param()[0] = Pm; + model.param()[1] = Ef; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicObjectiveInterface); @@ -105,26 +105,26 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" - << " Optimal value of Ef = " << model->param()[1] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" + << " Optimal value of Ef = " << model.param()[1] << "\n" << " The final value of the objective function G(Pm,Ef) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Create dynamic constraint interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicConstraintInterface = - new IpoptInterface::DynamicConstraint(idas); + new IpoptInterface::DynamicConstraint(&idas); // Store dynamic objective optimization results - double* results = new double[model->sizeParams()]; - for (unsigned i = 0; i < model->sizeParams(); ++i) + double* results = new double[model.sizeParams()]; + for (unsigned i = 0; i < model.sizeParams(); ++i) { - results[i] = model->param()[i]; + results[i] = model.param()[i]; } // Initialize the problem - model->param()[0] = Pm; - model->param()[1] = Ef; + model.param()[0] = Pm; + model.param()[1] = Ef; // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicConstraintInterface); @@ -135,17 +135,17 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of Pm = " << model->param()[0] << "\n" - << " Optimal value of Ef = " << model->param()[1] << "\n" + << " Optimal value of Pm = " << model.param()[0] << "\n" + << " Optimal value of Ef = " << model.param()[1] << "\n" << " The final value of the objective function G(Pm,Ef) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Compare results of the two optimization methods int retval = 0; - for (unsigned i = 0; i < model->sizeParams(); ++i) + for (unsigned i = 0; i < model.sizeParams(); ++i) { - if (!isEqual(results[i], model->param()[i], 100 * tol)) + if (!isEqual(results[i], model.param()[i], 100 * tol)) --retval; } @@ -155,7 +155,5 @@ int main() } delete[] results; - delete idas; - delete model; return 0; } diff --git a/examples/Experimental/ParameterEstimation/ParameterEstimation.cpp b/examples/Experimental/ParameterEstimation/ParameterEstimation.cpp index 0899dfa44..99598188f 100644 --- a/examples/Experimental/ParameterEstimation/ParameterEstimation.cpp +++ b/examples/Experimental/ParameterEstimation/ParameterEstimation.cpp @@ -1,6 +1,6 @@ - #include #include +#include #include #include "lookup_table.hpp" @@ -23,58 +23,58 @@ int main() using namespace GridKit::Testing; // Create an infinite bus - BaseBus* bus = new BusSlack(1.0, 0.0); + BusSlack bus(1.0, 0.0); // Attach a generator to that bus - Generator4Param* gen = new Generator4Param(bus); + Generator4Param gen(&bus); // Create a system model - SystemModel* model = new SystemModel(); - model->addBus(bus); - model->addComponent(gen); + SystemModel model; + model.addBus(&bus); + model.addComponent(&gen); // allocate model components - model->allocate(); + model.allocate(); // Create numerical integrator and configure it for the generator model - Ida* idas = new Ida(model); + Ida idas(&model); double t_init = -1.0; double t_final = -1.0; std::istringstream input_data(lookup_table); - GridKit::setLookupTable(gen->getLookupTable(), input_data, t_init, t_final); + GridKit::setLookupTable(gen.getLookupTable(), input_data, t_init, t_final); std::cout << "Performing parameter estimation with respect to data\nfrom " << "t_init = " << t_init << " to t_final = " << t_final << "\n"; // setup simulation - idas->configureSimulation(); - idas->configureAdjoint(); - idas->getDefaultInitialCondition(); - idas->initializeSimulation(t_init); - idas->configureQuadrature(); - idas->initializeQuadrature(); + idas.configureSimulation(); + idas.configureAdjoint(); + idas.getDefaultInitialCondition(); + idas.initializeSimulation(t_init); + idas.configureQuadrature(); + idas.initializeQuadrature(); double t_fault = 0.1; double t_clear = 0.1; - idas->runSimulation(t_fault); - idas->saveInitialCondition(); + idas.runSimulation(t_fault); + idas.saveInitialCondition(); // create initial condition after a fault { - idas->getSavedInitialCondition(); - idas->initializeSimulation(t_init); - gen->V() = 0.0; - idas->runSimulation(t_clear, 20); - gen->V() = 1.0; - idas->saveInitialCondition(); + idas.getSavedInitialCondition(); + idas.initializeSimulation(t_init); + gen.V() = 0.0; + idas.runSimulation(t_clear, 20); + gen.V() = 1.0; + idas.saveInitialCondition(); } // Set integration time for dynamic constrained optimization - idas->setIntegrationTime(t_init, t_final, 100); + idas.setIntegrationTime(t_init, t_final, 100); // Guess value of inertia coefficient - model->param()[0] = 3.0; + model.param()[0] = 3.0; // Create an instance of the IpoptApplication Ipopt::SmartPtr ipoptApp = IpoptApplicationFactory(); @@ -98,7 +98,7 @@ int main() // Create dynamic objective interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicObjectiveInterface = - new IpoptInterface::DynamicObjective(idas); + new IpoptInterface::DynamicObjective(&idas); // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicObjectiveInterface); @@ -109,24 +109,24 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of H = " << model->param()[0] << "\n" + << " Optimal value of H = " << model.param()[0] << "\n" << " The final value of the objective function G(H) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Store dynamic objective optimization results - double* results = new double[model->sizeParams()]; - for (unsigned i = 0; i < model->sizeParams(); ++i) + double* results = new double[model.sizeParams()]; + for (unsigned i = 0; i < model.sizeParams(); ++i) { - results[i] = model->param()[i]; + results[i] = model.param()[i]; } // Guess value of inertia coefficient - model->param()[0] = 3.0; + model.param()[0] = 3.0; // Create dynamic constraint interface to Ipopt solver Ipopt::SmartPtr ipoptDynamicConstraintInterface = - new IpoptInterface::DynamicConstraint(idas); + new IpoptInterface::DynamicConstraint(&idas); // Solve the problem status = ipoptApp->OptimizeTNLP(ipoptDynamicConstraintInterface); @@ -137,16 +137,16 @@ int main() // Print result std::cout << "\nSucess:\n The problem solved in " << ipoptApp->Statistics()->IterationCount() << " iterations!\n" - << " Optimal value of H = " << model->param()[0] << "\n" + << " Optimal value of H = " << model.param()[0] << "\n" << " The final value of the objective function G(H) = " << ipoptApp->Statistics()->FinalObjective() << "\n\n"; } // Compare results of the two optimization methods int retval = 0; - for (unsigned i = 0; i < model->sizeParams(); ++i) + for (unsigned i = 0; i < model.sizeParams(); ++i) { - if (!isEqual(results[i], model->param()[i], 100 * tol)) + if (!isEqual(results[i], model.param()[i], 100 * tol)) --retval; } @@ -156,7 +156,5 @@ int main() } delete[] results; - delete idas; - delete model; return retval; } diff --git a/src/Solver/Dynamic/Ida.cpp b/src/Solver/Dynamic/Ida.cpp index 01035a9da..bc71866fe 100644 --- a/src/Solver/Dynamic/Ida.cpp +++ b/src/Solver/Dynamic/Ida.cpp @@ -425,15 +425,23 @@ namespace AnalysisManager retval = IDASetMaxNumStepsB(solver_, backwardID_, 2000); checkOutput(retval, "IDASetMaxNumSteps"); - // Set up linear solver - JacobianMatB_ = SUNDenseMatrix(static_cast(model_->size()), - static_cast(model_->size()), - context_); - checkAllocation((void*) JacobianMatB_, "SUNDenseMatrix"); + // Allocate Jacobian matrix, if not already + if (JacobianMatB_ == nullptr) + { + JacobianMatB_ = SUNDenseMatrix(static_cast(model_->size()), + static_cast(model_->size()), + context_); + checkAllocation((void*) JacobianMatB_, "SUNDenseMatrix"); + } - linearSolverB_ = SUNLinSol_Dense(yyB_, JacobianMatB_, context_); - checkAllocation((void*) linearSolverB_, "SUNLinSol_Dense"); + // Allocate linear solver, if not already + if (linearSolverB_ == nullptr) + { + linearSolverB_ = SUNLinSol_Dense(yyB_, JacobianMatB_, context_); + checkAllocation((void*) linearSolverB_, "SUNLinSol_Dense"); + } + // Setup linear solver (only dense supported at this time) retval = IDASetLinearSolverB(solver_, backwardID_, linearSolverB_, JacobianMatB_); checkOutput(retval, "IDASetLinearSolverB"); From 9b92afb99d2ee135416e9c0058d67590c21ef7e6 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan <72402802+nkoukpaizan@users.noreply.github.com> Date: Thu, 12 Jun 2025 15:13:49 -0400 Subject: [PATCH 041/139] Enzyme Jacobian for PhasorDynamics::Load within GridKit (#131) * Separated out Enzyme macros from FindEnzyme and added a EnzymeAddLibrary macro. * Enzyme wrapper within GridKit. * Fixes to rebase. * More interesting vector residual for Enzyme examples. * Fix some warnings. * Address one more warning. * Apply pre-commmit fixes * Empty commit to trigger CI after pre-commit fixes. * Successful use of target_compiile_options to pass enzyme-auto-sparsity flags in examples. * More flags needed to get the correct answer to machine precision in EnzymePowerElectronicsCheck. * EnzymeAddLibrary not currently needed. * Apply pre-commmit fixes * Empty commit to trigger CI after pre-commit fixes. * Updated documentation in EnzymeAddLibrary. * Fix warnings previously hidden by manual builds through enzyme_add_executable CMake macro. * Use GridKit::Testing::isEqual in Enzyme examples. * Fixes to rebase. * Apply pre-commmit fixes * Empty commit to trigger CI after pre-commit fixes. * residual_wrapper can now be placed within GridKit::Enzyme namespace. --------- Co-authored-by: nkoukpaizan --- CMakeLists.txt | 2 + cmake/EnzymeAddLibrary.cmake | 123 ++++++++++ cmake/FindEnzyme.cmake | 79 ------- examples/Enzyme/Library/Scalar/CMakeLists.txt | 6 +- .../Enzyme/Library/Scalar/EnzymeScalar.cpp | 4 +- examples/Enzyme/Library/Vector/CMakeLists.txt | 7 +- .../Enzyme/Library/Vector/EnzymeVector.cpp | 22 +- .../Enzyme/Library/Vector/VectorModel.cpp | 20 +- .../Enzyme/Library/Vector/VectorModel.hpp | 2 +- .../Enzyme/PowerElectronics/CMakeLists.txt | 8 +- examples/Enzyme/PowerElectronics/main.cpp | 20 +- examples/Enzyme/Standalone/CMakeLists.txt | 21 +- examples/Enzyme/Standalone/EnzymeScalar.cpp | 5 +- examples/Enzyme/Standalone/EnzymeSparse.cpp | 100 ++++---- examples/Enzyme/Standalone/EnzymeVector.cpp | 36 +-- .../Enzyme/SparseWrapper.hpp | 176 ++++++++++++++ src/Model/PhasorDynamics/Load/CMakeLists.txt | 25 +- src/Model/PhasorDynamics/Load/Load.cpp | 216 +++--------------- src/Model/PhasorDynamics/Load/Load.hpp | 4 + .../Load/LoadDependencyTracking.cpp | 29 +++ src/Model/PhasorDynamics/Load/LoadEnzyme.cpp | 39 ++++ src/Model/PhasorDynamics/Load/LoadImpl.hpp | 183 +++++++++++++++ tests/UnitTests/PhasorDynamics/CMakeLists.txt | 1 + tests/UnitTests/PhasorDynamics/LoadTests.hpp | 48 ++++ .../UnitTests/PhasorDynamics/runLoadTests.cpp | 3 + 25 files changed, 784 insertions(+), 395 deletions(-) create mode 100644 cmake/EnzymeAddLibrary.cmake create mode 100644 src/AutomaticDifferentiation/Enzyme/SparseWrapper.hpp create mode 100644 src/Model/PhasorDynamics/Load/LoadDependencyTracking.cpp create mode 100644 src/Model/PhasorDynamics/Load/LoadEnzyme.cpp create mode 100644 src/Model/PhasorDynamics/Load/LoadImpl.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 29b8cf904..7428b0468 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,8 @@ endif() if(${GRIDKIT_ENABLE_ENZYME}) include(FindEnzyme) + # todo Add a centralized configuration file + add_definitions(-DGRIDKIT_ENABLE_ENZYME) endif() # Macro that adds libraries diff --git a/cmake/EnzymeAddLibrary.cmake b/cmake/EnzymeAddLibrary.cmake new file mode 100644 index 000000000..9d7832ee8 --- /dev/null +++ b/cmake/EnzymeAddLibrary.cmake @@ -0,0 +1,123 @@ +# +#[[ + +Macro to manually compile with Enzyme + +Author(s): +- Asher Mancinelli +- Nicholson Koukpaizan + +]] + +macro(enzyme_build_object) + set(options) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) + cmake_parse_arguments(enzyme_build_object "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) + + set(PHASE2 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}.bc") + set(PHASE3 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}_enzyme.ll") + set(PHASE4 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}_opt.ll") + set(PHASE5 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}") + + set(OBJS "") + set(includes "${enzyme_build_object_INCLUDE_DIRECTORIES}") + + foreach(lib ${enzyme_build_object_LINK_LIBRARIES}) + get_target_property(include ${lib} INCLUDE_DIRECTORIES) + set(includes "${includes}" ${include}) + + get_target_property(libsource ${lib} SOURCES) + string(FIND "${libsource}" "TARGET" found) + if(NOT(${found} EQUAL -1)) + list(APPEND LINKER_FLAGS "-Wl,${libsource}") + endif() + endforeach() + + foreach(dir ${includes}) + if(EXISTS ${dir}) + list(APPEND INCLUDE_COMPILER_LIST "-I${dir}") + endif() + endforeach() + + foreach(SRC ${enzyme_build_object_SOURCES}) + set(PHASE0 "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}") + set(PHASE1 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_build_object_NAME}_${SRC}_compile.o") + add_custom_command( + DEPENDS ${PHASE0} + OUTPUT ${PHASE1} + COMMAND ${CMAKE_CXX_COMPILER} -flto -c ${PHASE0} ${INCLUDE_COMPILER_LIST} -O2 -fno-vectorize -ffast-math -fno-unroll-loops -fpass-plugin=${ENZYME_CLANG_PLUGIN_LIBRARY} -Xclang -load -Xclang ${ENZYME_CLANG_PLUGIN_LIBRARY} -mllvm -enable-load-pre=0 -mllvm -enzyme-auto-sparsity=1 -o ${PHASE1} + COMMENT "Compiling ${SRC} to object file for target ${enzyme_build_object_NAME}" + ) + set(OBJS "${OBJS} ${PHASE1}") + endforeach() + + cmake_language(EVAL CODE " + add_custom_command( + DEPENDS ${OBJS} + OUTPUT ${PHASE2} + COMMAND ${GRIDKIT_LLVM_LINK} ${OBJS} -o ${PHASE2} + COMMENT \"Linking object files to LLVM bytecode for target ${enzyme_build_object_NAME}\" + ) + ") + + add_custom_command( + DEPENDS ${PHASE2} + OUTPUT ${PHASE3} + COMMAND ${GRIDKIT_OPT} ${PHASE2} -load-pass-plugin=${ENZYME_LLVM_PLUGIN_LIBRARY} -passes=enzyme -o ${PHASE3} -S + COMMENT "Running Enzyme opt pass on target ${enzyme_build_object_NAME}" + ) + + add_custom_command( + DEPENDS ${PHASE3} + OUTPUT ${PHASE4} + COMMAND ${GRIDKIT_OPT} ${PHASE3} -O2 -o ${PHASE4} -S + COMMENT "Running remaining opt passes on target ${enzyme_build_object_NAME}" + ) + + add_custom_command( + DEPENDS ${PHASE4} + OUTPUT ${PHASE5} + COMMAND ${CMAKE_CXX_COMPILER} -c ${PHASE4} -o ${PHASE5} + COMMENT "Generating optimized object file for target ${enzyme_build_object_NAME}" + ) +endmacro() + +macro(enzyme_add_executable) + set(options) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) + cmake_parse_arguments(enzyme_add_executable "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) + + enzyme_build_object( + NAME "${enzyme_add_executable_NAME}.o" + SOURCES ${enzyme_add_executable_SOURCES} + LINK_LIBRARIES ${enzyme_add_executable_LINK_LIBRARIES} + INCLUDE_DIRECTORIES ${enzyme_add_executable_INCLUDE_DIRECTORIES} + ) + + add_executable("${enzyme_add_executable_NAME}" "${enzyme_add_executable_NAME}.o") + set_target_properties("${enzyme_add_executable_NAME}" PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries("${enzyme_add_executable_NAME}" ${enzyme_add_executable_LINK_LIBRARIES}) +endmacro() + +macro(enzyme_add_library) + set(options) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) + cmake_parse_arguments(enzyme_add_library "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) + + enzyme_build_object( + NAME "${enzyme_add_library_NAME}.o" + SOURCES ${enzyme_add_library_SOURCES} + LINK_LIBRARIES ${enzyme_add_library_LINK_LIBRARIES} + INCLUDE_DIRECTORIES ${enzyme_add_library_INCLUDE_DIRECTORIES} + ) + + add_library("${enzyme_add_library_NAME}" "${enzyme_add_library_NAME}.o") + set_target_properties("${enzyme_add_library_NAME}" PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries("${enzyme_add_library_NAME}" ${enzyme_add_library_LINK_LIBRARIES}) +endmacro() diff --git a/cmake/FindEnzyme.cmake b/cmake/FindEnzyme.cmake index 00a76d372..fbfaa440a 100644 --- a/cmake/FindEnzyme.cmake +++ b/cmake/FindEnzyme.cmake @@ -59,82 +59,3 @@ find_program(GRIDKIT_OPT opt bin REQUIRED) message(STATUS "opt: ${GRIDKIT_OPT}") - -macro(enzyme_add_executable) - set(options) - set(oneValueArgs NAME) - set(multiValueArgs SOURCES LINK_LIBRARIES INCLUDE_DIRECTORIES) - cmake_parse_arguments(enzyme_add_executable "${options}" "${oneValueArgs}" - "${multiValueArgs}" ${ARGN}) - - set(PHASE2 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}.bc") - set(PHASE3 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}_enzyme.ll") - set(PHASE4 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}_opt.ll") - set(PHASE5 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}") - - set(OBJS "") - set(includes "${enzyme_add_executable_INCLUDE_DIRECTORIES}") - - foreach(lib ${enzyme_add_executable_LINK_LIBRARIES}) - get_target_property(include ${lib} INCLUDE_DIRECTORIES) - set(includes "${includes}" ${include}) - - get_target_property(libsource ${lib} SOURCES) - string(FIND "${libsource}" "TARGET" found) - if(NOT(${found} EQUAL -1)) - list(APPEND LINKER_FLAGS "-Wl,${libsource}") - endif() - endforeach() - - foreach(dir ${includes}) - if(EXISTS ${dir}) - list(APPEND INCLUDE_COMPILER_LIST "-I${dir}") - endif() - endforeach() - - foreach(SRC ${enzyme_add_executable_SOURCES}) - set(PHASE0 "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}") - set(PHASE1 "${CMAKE_CURRENT_BINARY_DIR}/${enzyme_add_executable_NAME}_${SRC}_compile.o") - add_custom_command( - DEPENDS ${PHASE0} - OUTPUT ${PHASE1} - COMMAND ${CMAKE_CXX_COMPILER} -flto -c ${PHASE0} ${INCLUDE_COMPILER_LIST} -O2 -fno-vectorize -ffast-math -fno-unroll-loops -fpass-plugin=${ENZYME_CLANG_PLUGIN_LIBRARY} -Xclang -load -Xclang ${ENZYME_CLANG_PLUGIN_LIBRARY} -mllvm -enable-load-pre=0 -mllvm -enzyme-auto-sparsity=1 -o ${PHASE1} - COMMENT "Compiling ${SRC} to object file for target ${enzyme_add_executable_NAME}" - ) - set(OBJS "${OBJS} ${PHASE1}") - endforeach() - - cmake_language(EVAL CODE " - add_custom_command( - DEPENDS ${OBJS} - OUTPUT ${PHASE2} - COMMAND ${GRIDKIT_LLVM_LINK} ${OBJS} -o ${PHASE2} - COMMENT \"Linking object files to LLVM bytecode for target ${enzyme_add_executable_NAME}\" - ) - ") - - add_custom_command( - DEPENDS ${PHASE2} - OUTPUT ${PHASE3} - COMMAND ${GRIDKIT_OPT} ${PHASE2} -load-pass-plugin=${ENZYME_LLVM_PLUGIN_LIBRARY} -passes=enzyme -o ${PHASE3} -S - COMMENT "Running Enzyme opt pass on target ${enzyme_add_executable_NAME}" - ) - - add_custom_command( - DEPENDS ${PHASE3} - OUTPUT ${PHASE4} - COMMAND ${GRIDKIT_OPT} ${PHASE3} -O2 -o ${PHASE4} -S - COMMENT "Running remaining opt passes on target ${enzyme_add_executable_NAME}" - ) - - add_custom_command( - DEPENDS ${PHASE4} ${enzyme_add_executable_LINK_LIBRARIES} - OUTPUT ${PHASE5} - COMMAND ${CMAKE_CXX_COMPILER} ${LINKER_FLAGS} ${PHASE4} -o ${PHASE5} - ) - - add_custom_target( - "${enzyme_add_executable_NAME}_target" ALL - DEPENDS ${PHASE5} - ) -endmacro() diff --git a/examples/Enzyme/Library/Scalar/CMakeLists.txt b/examples/Enzyme/Library/Scalar/CMakeLists.txt index 6dff430a6..21e1b9b9f 100644 --- a/examples/Enzyme/Library/Scalar/CMakeLists.txt +++ b/examples/Enzyme/Library/Scalar/CMakeLists.txt @@ -1,6 +1,4 @@ -enzyme_add_executable( - NAME EnzymeLibScalarCheck - SOURCES EnzymeScalar.cpp ScalarModel.cpp -) +add_executable(EnzymeLibScalarCheck EnzymeScalar.cpp ScalarModel.cpp) +target_link_libraries(EnzymeLibScalarCheck ClangEnzymeFlags GRIDKIT::Utilities) add_test(NAME "EnzymeLibScalarCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeLibScalarCheck) diff --git a/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp b/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp index a20f69e13..933e1bd70 100644 --- a/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp +++ b/examples/Enzyme/Library/Scalar/EnzymeScalar.cpp @@ -1,7 +1,7 @@ #include -#include #include "ScalarModel.hpp" +#include /** * @brief Example that computes the derivative of a library function @@ -23,7 +23,7 @@ int main() double dsq = scalar_model.getDerivativeValue(); std::cout << "x = " << var << ", x^2 = " << sq << ", d(x^2)/dx = " << dsq << "\n"; - if (std::abs(dsq - 2.0 * var) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(dsq, 2.0 * var)) { fail++; std::cout << "Result incorrect\n"; diff --git a/examples/Enzyme/Library/Vector/CMakeLists.txt b/examples/Enzyme/Library/Vector/CMakeLists.txt index eda952de8..559a249b6 100644 --- a/examples/Enzyme/Library/Vector/CMakeLists.txt +++ b/examples/Enzyme/Library/Vector/CMakeLists.txt @@ -1,7 +1,4 @@ -enzyme_add_executable( - NAME EnzymeLibVectorCheck - SOURCES EnzymeVector.cpp VectorModel.cpp - LINK_LIBRARIES GRIDKIT::DenseMatrix -) +add_executable(EnzymeLibVectorCheck EnzymeVector.cpp VectorModel.cpp) +target_link_libraries(EnzymeLibVectorCheck ClangEnzymeFlags GRIDKIT::DenseMatrix GRIDKIT::Utilities) add_test(NAME "EnzymeLibVectorCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeLibVectorCheck) diff --git a/examples/Enzyme/Library/Vector/EnzymeVector.cpp b/examples/Enzyme/Library/Vector/EnzymeVector.cpp index 8a3e69259..4d9dd22f1 100644 --- a/examples/Enzyme/Library/Vector/EnzymeVector.cpp +++ b/examples/Enzyme/Library/Vector/EnzymeVector.cpp @@ -1,7 +1,7 @@ #include -#include #include "VectorModel.hpp" +#include /** * @brief Example that computes the Jacobian of a vector-valued residual @@ -20,12 +20,12 @@ inline double dsquare_ref_scalar(double x) DenseMatrix dsquare_ref(std::vector x, std::vector y) { DenseMatrix jac(x.size(), y.size()); - for (int idy = 0; idy < y.size(); ++idy) + for (size_t idy = 0; idy < y.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (idx == idy) - jac.setValue(idx, idy, dsquare_ref_scalar(x[idx])); + if (idy <= idx) + jac.setValue(idx, idy, dsquare_ref_scalar(x[idy])); } } return jac; @@ -34,12 +34,12 @@ DenseMatrix dsquare_ref(std::vector x, std::vector y) int main() { // Size and variable declarations - constexpr int n = 10; + constexpr size_t n = 10; std::vector var(n); // Random input values - srand(time(NULL)); - for (int idx = 0; idx < var.size(); ++idx) + srand(static_cast(time(NULL))); + for (size_t idx = 0; idx < var.size(); ++idx) { var[idx] = rand(); } @@ -59,11 +59,11 @@ int main() // Check int fail = 0; bool verbose = true; - for (int idy = 0; idy < res.size(); ++idy) + for (size_t idy = 0; idy < res.size(); ++idy) { - for (int idx = 0; idx < var.size(); ++idx) + for (size_t idx = 0; idx < var.size(); ++idx) { - if (std::abs(jac.getValue(idx, idy) - jac_ref.getValue(idx, idy)) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(jac.getValue(idx, idy), jac_ref.getValue(idx, idy))) { fail++; if (verbose) diff --git a/examples/Enzyme/Library/Vector/VectorModel.cpp b/examples/Enzyme/Library/Vector/VectorModel.cpp index cb4d89f5e..bdd998422 100644 --- a/examples/Enzyme/Library/Vector/VectorModel.cpp +++ b/examples/Enzyme/Library/Vector/VectorModel.cpp @@ -4,7 +4,7 @@ #include "EnzymeWrapper.hpp" -VectorModel::VectorModel(int n) +VectorModel::VectorModel(size_t n) : x_(n), f_(n), df_dx_(n, n) @@ -18,15 +18,19 @@ inline double VectorModel::square_scalar(double x) void VectorModel::square(std::vector& x, std::vector& y) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - y[idx] = this->square_scalar(x[idx]); + y[idx] = 0.0; + for (size_t idy = 0; idy <= idx; idy++) + { + y[idx] += this->square_scalar(x[idy]); + } } } void VectorModel::setVariable(std::vector x) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { x_[idx] = x[idx]; } @@ -39,13 +43,13 @@ void VectorModel::evalResidual() void VectorModel::evalJacobian() { - const int n = x_.size(); + const size_t n = x_.size(); std::vector v(n); VectorModel d_vector_model(n); - for (int idy = 0; idy < n; ++idy) + for (size_t idy = 0; idy < n; ++idy) { // Elementary vector for Jacobian-vector product - for (int idx = 0; idx < n; ++idx) + for (size_t idx = 0; idx < n; ++idx) { v[idx] = 0.0; } @@ -60,7 +64,7 @@ void VectorModel::evalJacobian() &d_vector_model); // Store result - for (int idx = 0; idx < n; ++idx) + for (size_t idx = 0; idx < n; ++idx) { df_dx_.setValue(idx, idy, d_res[idx]); } diff --git a/examples/Enzyme/Library/Vector/VectorModel.hpp b/examples/Enzyme/Library/Vector/VectorModel.hpp index da66f696f..fd85f7166 100644 --- a/examples/Enzyme/Library/Vector/VectorModel.hpp +++ b/examples/Enzyme/Library/Vector/VectorModel.hpp @@ -17,7 +17,7 @@ class VectorModel void square(std::vector&, std::vector&); public: - VectorModel(int); + VectorModel(size_t); void setVariable(std::vector); void evalResidual(); void evalJacobian(); diff --git a/examples/Enzyme/PowerElectronics/CMakeLists.txt b/examples/Enzyme/PowerElectronics/CMakeLists.txt index a8e74e881..a24c23268 100644 --- a/examples/Enzyme/PowerElectronics/CMakeLists.txt +++ b/examples/Enzyme/PowerElectronics/CMakeLists.txt @@ -1,7 +1,5 @@ -enzyme_add_executable( - NAME EnzymePowerElectronicsCheck - SOURCES main.cpp - LINK_LIBRARIES GRIDKIT::DenseMatrix GRIDKIT::power_elec_disgen -) +add_executable(EnzymePowerElectronicsCheck main.cpp) +target_compile_options(EnzymePowerElectronicsCheck PUBLIC -fno-vectorize -ffast-math -fno-unroll-loops) +target_link_libraries(EnzymePowerElectronicsCheck ClangEnzymeFlags GRIDKIT::DenseMatrix GRIDKIT::power_elec_disgen GRIDKIT::Utilities) add_test(NAME "EnzymePowerElectronicsCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymePowerElectronicsCheck) diff --git a/examples/Enzyme/PowerElectronics/main.cpp b/examples/Enzyme/PowerElectronics/main.cpp index 5698901d1..35de5af92 100644 --- a/examples/Enzyme/PowerElectronics/main.cpp +++ b/examples/Enzyme/PowerElectronics/main.cpp @@ -1,9 +1,9 @@ #include -#include #include #include #include +#include /** * @brief Standalone example that computes the Jacobian associated with the @@ -97,15 +97,15 @@ void evaluateResidual(std::vector y_, std::vector f_) template void EnzymeModelJacobian(T* model, DenseMatrix& jac) { - int N = model->size(); + size_t N = model->size(); std::vector y(N); std::vector v(N); std::vector res(N); std::vector d_res(N); - for (int idy = 0; idy < N; ++idy) + for (size_t idy = 0; idy < N; ++idy) { // Elementary vector for Jacobian-vector product - for (int idx = 0; idx < N; ++idx) + for (size_t idx = 0; idx < N; ++idx) { y[idx] = (model->y())[idx]; res[idx] = (model->getResidual())[idx]; @@ -123,7 +123,7 @@ void EnzymeModelJacobian(T* model, DenseMatrix& jac) &d_res); // Store result - for (int idx = 0; idx < N; ++idx) + for (size_t idx = 0; idx < N; ++idx) { jac.setValue(idx, idy, d_res[idx]); } @@ -171,16 +171,18 @@ int main() // Check int fail = 0; bool verbose = true; - for (int idy = 0; idy < dg->size(); ++idy) + for (size_t idy = 0; idy < dg->size(); ++idy) { - for (int idx = 0; idx < dg->size(); ++idx) + for (size_t idx = 0; idx < dg->size(); ++idx) { - if (std::abs(jac_autodiff.getValue(idx, idy) - jac_ref_dense.getValue(idx, idy)) > std::numeric_limits::epsilon()) + double jac_value = jac_autodiff.getValue(idx, idy); + double jac_ref_value = jac_ref_dense.getValue(idx, idy); + if (!GridKit::Testing::isEqual(jac_value, jac_ref_value)) { fail++; if (verbose) { - std::cout << "Result incorrect at line = " << idy << ", column = " << idx << "\n"; + std::cout << "Result incorrect at line = " << idy << ", column = " << idx << ", obtained = " << jac_value << ", reference = " << jac_ref_value << ", difference = " << std::abs(jac_value - jac_ref_value) << "\n"; } } } diff --git a/examples/Enzyme/Standalone/CMakeLists.txt b/examples/Enzyme/Standalone/CMakeLists.txt index d80ba4f50..e62a2ea10 100644 --- a/examples/Enzyme/Standalone/CMakeLists.txt +++ b/examples/Enzyme/Standalone/CMakeLists.txt @@ -1,19 +1,12 @@ -enzyme_add_executable( - NAME EnzymeStandaloneScalarCheck - SOURCES EnzymeScalar.cpp -) +add_executable(EnzymeStandaloneScalarCheck EnzymeScalar.cpp) +target_link_libraries(EnzymeStandaloneScalarCheck ClangEnzymeFlags GRIDKIT::Utilities) -enzyme_add_executable( - NAME EnzymeStandaloneVectorCheck - SOURCES EnzymeVector.cpp - LINK_LIBRARIES GRIDKIT::DenseMatrix -) +add_executable(EnzymeStandaloneVectorCheck EnzymeVector.cpp) +target_link_libraries(EnzymeStandaloneVectorCheck ClangEnzymeFlags GRIDKIT::DenseMatrix GRIDKIT::Utilities) -enzyme_add_executable( - NAME EnzymeStandaloneSparseCheck - SOURCES EnzymeSparse.cpp - LINK_LIBRARIES GRIDKIT::SparseMatrix -) +add_executable(EnzymeStandaloneSparseCheck EnzymeSparse.cpp) +target_compile_options(EnzymeStandaloneSparseCheck PUBLIC -mllvm -enzyme-auto-sparsity=1) +target_link_libraries(EnzymeStandaloneSparseCheck ClangEnzymeFlags GRIDKIT::SparseMatrix GRIDKIT::Utilities) add_test(NAME "EnzymeStandaloneScalarCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeStandaloneScalarCheck) add_test(NAME "EnzymeStandaloneVectorCheck" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/EnzymeStandaloneVectorCheck) diff --git a/examples/Enzyme/Standalone/EnzymeScalar.cpp b/examples/Enzyme/Standalone/EnzymeScalar.cpp index d799e9b0f..01f1ce8d6 100644 --- a/examples/Enzyme/Standalone/EnzymeScalar.cpp +++ b/examples/Enzyme/Standalone/EnzymeScalar.cpp @@ -1,5 +1,6 @@ #include -#include + +#include /** * @brief Standalone example that computes the derivative of a scalar function @@ -27,7 +28,7 @@ int main() double sq = square(var); double dsq = dsquare(var); std::cout << "x = " << var << ", x^2 = " << sq << ", d(x^2)/dx = " << dsq << "\n"; - if (std::abs(dsq - 2.0 * var) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(dsq, 2.0 * var)) { fail++; std::cout << "Result incorrect\n"; diff --git a/examples/Enzyme/Standalone/EnzymeSparse.cpp b/examples/Enzyme/Standalone/EnzymeSparse.cpp index f8e0bf0a9..22311318b 100644 --- a/examples/Enzyme/Standalone/EnzymeSparse.cpp +++ b/examples/Enzyme/Standalone/EnzymeSparse.cpp @@ -1,10 +1,10 @@ #include #include -#include #include #include #include +#include /** * @brief Standalone example that computes the sparse Jacobian of a vector-valued function @@ -26,15 +26,15 @@ template extern T __enzyme_todense(Tys...) noexcept; /// Sparse storage for Enzyme -template +template struct Triple { - size_t row; - size_t col; - T val; + size_t row; + size_t col; + ScalarT val; Triple(Triple&&) = default; - Triple(size_t row, size_t col, T val) + Triple(size_t row, size_t col, ScalarT val) : row(row), col(col), val(val) @@ -42,73 +42,77 @@ struct Triple } }; -__attribute__((enzyme_sparse_accumulate)) static void inner_storeflt(int64_t row, int64_t col, float val, std::vector>& triplets) +[[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storeflt(size_t row, size_t col, float val, std::vector>& triplets) { triplets.emplace_back(row, col, val); } -__attribute__((enzyme_sparse_accumulate)) static void inner_storedbl(int64_t row, int64_t col, double val, std::vector>& triplets) +[[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storedbl(size_t row, size_t col, double val, std::vector>& triplets) { triplets.emplace_back(row, col, val); } -template -__attribute__((always_inline)) static void sparse_store(T val, int64_t idx, size_t i, std::vector>& triplets) +template +__attribute__((always_inline)) static void sparse_store(ScalarT val, size_t idx, size_t i, std::vector>& triplets) { if (val == 0.0) return; - idx /= sizeof(T); - if constexpr (sizeof(T) == 4) - inner_storeflt(i, idx, val, triplets); + idx /= sizeof(ScalarT); + if constexpr (sizeof(ScalarT) == 4) + inner_storeflt(idx, i, val, triplets); else - inner_storedbl(i, idx, val, triplets); + inner_storedbl(idx, i, val, triplets); } -template -__attribute__((always_inline)) static T sparse_load(int64_t idx, size_t i, std::vector>& triplets) +template +__attribute__((always_inline)) static ScalarT sparse_load(size_t, size_t, std::vector>&) { return 0.0; } -template -__attribute__((always_inline)) static void ident_store(T, int64_t idx, size_t i) +template +__attribute__((always_inline)) static void ident_store(ScalarT, size_t, size_t) { assert(0 && "should never load"); } -template -__attribute__((always_inline)) static T ident_load(int64_t idx, size_t i) +template +__attribute__((always_inline)) static ScalarT ident_load(size_t idx, size_t i) { - idx /= sizeof(T); - return (T) (idx == i); + idx /= sizeof(ScalarT); + return (ScalarT) (idx == i); } /// Vector-valued function to differentiate -template -__attribute__((always_inline)) static void f(size_t N, T* input, T* output) +template +__attribute__((always_inline)) static void f(size_t N, ScalarT* input, ScalarT* output) { - for (size_t i = 0; i < N; i++) + for (size_t idx = 0; idx < N; ++idx) { - output[i] = input[i] * input[i]; + output[idx] = 0.0; + for (size_t idy = 0; idy <= idx; idy++) + { + output[idx] += input[idy] * input[idy]; + } } } /// Reference Jacobian -template -void jac_f_ref(std::vector x, std::vector y, SparseMatrix& jac) +template +void jac_f_ref(std::vector x, std::vector y, SparseMatrix& jac) { - std::vector ctemp{}; - std::vector rtemp{}; - std::vector valtemp{}; - for (int idy = 0; idy < y.size(); ++idy) + std::vector ctemp{}; + std::vector rtemp{}; + std::vector valtemp{}; + for (size_t idy = 0; idy < y.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (idx == idy) + if (idy <= idx) { rtemp.push_back(idx); ctemp.push_back(idy); - valtemp.push_back(2.0 * x[idx]); + valtemp.push_back(2.0 * x[idy]); } } } @@ -116,29 +120,29 @@ void jac_f_ref(std::vector x, std::vector y, SparseMatrix& jac) } /// Function that computes the Jacobian via automatic differentiation -template -__attribute__((noinline)) void jac_f(size_t N, T* input, SparseMatrix& jac) +template +__attribute__((noinline)) void jac_f(size_t N, ScalarT* input, SparseMatrix& jac) { - std::vector> triplets; + std::vector> triplets; for (size_t i = 0; i < N; i++) { - T* output = __enzyme_todense((void*) ident_load, (void*) ident_store, i); - T* d_output = __enzyme_todense((void*) sparse_load, (void*) sparse_store, i, &triplets); + ScalarT* output = __enzyme_todense((void*) ident_load, (void*) ident_store, i); + ScalarT* d_output = __enzyme_todense((void*) sparse_load, (void*) sparse_store, i, &triplets); - __enzyme_fwddiff((void*) f, + __enzyme_fwddiff((void*) f, enzyme_const, N, enzyme_dup, input, output, enzyme_dupnoneed, - (T*) 0x1, + (ScalarT*) 0x1, d_output); } - std::vector ctemp{}; - std::vector rtemp{}; - std::vector valtemp{}; + std::vector ctemp{}; + std::vector rtemp{}; + std::vector valtemp{}; for (auto& tup : triplets) { rtemp.push_back(tup.row); @@ -155,13 +159,13 @@ void check(SparseMatrix matrix_1, SparseMatrix matrix_2, int& fail) const auto [rcord_1, ccord_1, vals_1] = entries_1; std::tuple&, std::vector&, std::vector&> entries_2 = matrix_2.getEntries(); const auto [rcord_2, ccord_2, vals_2] = entries_2; - for (int ind = 0; ind < vals_1.size(); ++ind) + for (size_t ind = 0; ind < vals_1.size(); ++ind) { if (rcord_1[ind] != rcord_2[ind]) fail++; if (ccord_1[ind] != ccord_2[ind]) fail++; - if (std::abs(vals_1[ind] - vals_2[ind]) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(vals_1[ind], vals_2[ind])) fail++; } } @@ -177,7 +181,7 @@ int main() /// Input initialization double val = 0.0; - for (int i = 0; i < N; ++i) + for (size_t i = 0; i < N; ++i) { x[i] = val; val += 1.0; diff --git a/examples/Enzyme/Standalone/EnzymeVector.cpp b/examples/Enzyme/Standalone/EnzymeVector.cpp index 94a10f9a4..4883fc56d 100644 --- a/examples/Enzyme/Standalone/EnzymeVector.cpp +++ b/examples/Enzyme/Standalone/EnzymeVector.cpp @@ -1,8 +1,8 @@ #include -#include #include #include +#include /** * @brief Standalone example that computes the Jacobian of a vector-valued function @@ -30,21 +30,25 @@ inline double dsquare_ref_scalar(double x) // Vector-valued function to differentiate void square(std::vector x, std::vector& y) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - y[idx] = square_scalar(x[idx]); + y[idx] = 0.0; + for (size_t idy = 0; idy <= idx; idy++) + { + y[idx] += square_scalar(x[idy]); + } } } // Reference Jacobian void dsquare_ref(std::vector x, std::vector y, DenseMatrix& dy) { - for (int idy = 0; idy < y.size(); ++idy) + for (size_t idy = 0; idy < y.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (idx == idy) - dy.setValue(idx, idy, dsquare_ref_scalar(x[idx])); + if (idy <= idx) + dy.setValue(idx, idy, dsquare_ref_scalar(x[idy])); } } } @@ -54,10 +58,10 @@ void dsquare(std::vector x, std::vector y, DenseMatrix& dy) { std::vector v(x.size()); std::vector d_y(y.size()); - for (int idy = 0; idy < y.size(); ++idy) + for (size_t idy = 0; idy < y.size(); ++idy) { // Elementary vector for Jacobian-vector product - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { v[idx] = 0.0; } @@ -67,7 +71,7 @@ void dsquare(std::vector x, std::vector y, DenseMatrix& dy) __enzyme_fwddiff((void*) square, enzyme_dup, x, v, enzyme_dupnoneed, y, &d_y); // Store result - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { dy.setValue(idx, idy, d_y[idx]); } @@ -77,15 +81,15 @@ void dsquare(std::vector x, std::vector y, DenseMatrix& dy) int main() { // Vector and matrix declarations - constexpr int N = 10; + constexpr size_t N = 10; std::vector x(N); std::vector sq(N); DenseMatrix dsq = DenseMatrix(N, N); DenseMatrix dsq_ref = DenseMatrix(N, N); // Random input values - srand(time(NULL)); - for (int idx = 0; idx < x.size(); ++idx) + srand(static_cast(time(NULL))); + for (size_t idx = 0; idx < x.size(); ++idx) { x[idx] = rand(); } @@ -102,11 +106,11 @@ int main() // Check int fail = 0; bool verbose = true; - for (int idy = 0; idy < sq.size(); ++idy) + for (size_t idy = 0; idy < sq.size(); ++idy) { - for (int idx = 0; idx < x.size(); ++idx) + for (size_t idx = 0; idx < x.size(); ++idx) { - if (std::abs(dsq.getValue(idx, idy) - dsq_ref.getValue(idx, idy)) > std::numeric_limits::epsilon()) + if (!GridKit::Testing::isEqual(dsq.getValue(idx, idy), dsq_ref.getValue(idx, idy))) { fail++; if (verbose) diff --git a/src/AutomaticDifferentiation/Enzyme/SparseWrapper.hpp b/src/AutomaticDifferentiation/Enzyme/SparseWrapper.hpp new file mode 100644 index 000000000..61ec7ee9e --- /dev/null +++ b/src/AutomaticDifferentiation/Enzyme/SparseWrapper.hpp @@ -0,0 +1,176 @@ +#pragma once + +#include + +/** + * @brief Enzyme constants for activity analysis + * + */ +extern int enzyme_dup; +extern int enzyme_const; +extern int enzyme_dupnoneed; + +namespace GridKit +{ + namespace Enzyme + { + /** + * @brief Residual wrapper around residual methods inside model classes + * + * @tparam ModelT - model type + * @tparam ScalarT - scalar data type + */ + template + void residual_wrapper(ModelT* obj, ScalarT* y, ScalarT* f) + { + obj->evaluateResidualLocally(y, f); + } + + /** + * @brief Enzyme fwddiff template + * + * @tparam T - return type + * @tparam ModelT - model type + */ + template + extern T __enzyme_fwddiff(void*, ModelT...) noexcept; + + /** + * @brief Enzyme todense template + * + * @tparam T - return type + * @tparam ModelT - model type + */ + template + extern T __enzyme_todense(ModelT...) noexcept; + + /** + * @brief Enzyme sparse storage in triplet format + * + * @tparam ScalarT - scalar data type + */ + template + struct Triple + { + size_t row; + size_t col; + ScalarT val; + Triple(Triple&&) = default; + + Triple(size_t row, size_t col, ScalarT val) + : row(row), + col(col), + val(val) + { + } + }; + + /** + * @brief Enzyme sparse accumulation for float + * + */ + [[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storeflt(size_t row, size_t col, float val, std::vector>& triplets) + { + triplets.emplace_back(row, col, val); + } + + /** + * @brief Enzyme sparse accumulation for double + * + */ + [[maybe_unused]] __attribute__((enzyme_sparse_accumulate)) static void inner_storedbl(size_t row, size_t col, double val, std::vector>& triplets) + { + triplets.emplace_back(row, col, val); + } + + /** + * @brief Enzyme sparse store + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static void sparse_store(ScalarT val, size_t idx, size_t i, std::vector>& triplets) + { + if (val == 0.0) + return; + idx /= sizeof(ScalarT); + if constexpr (sizeof(ScalarT) == 4) + inner_storeflt(idx, i, val, triplets); + else + inner_storedbl(idx, i, val, triplets); + } + + /** + * @brief Enzyme sparse load + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static ScalarT sparse_load(size_t, size_t, std::vector>&) + { + return 0.0; + } + + /** + * @brief Enzyme identity store + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static void ident_store(ScalarT, size_t, size_t) + { + assert(0 && "should never load"); + } + + /** + * @brief Enzyme identity load + * + * @tparam ScalarT - scalar data type + */ + template + __attribute__((always_inline)) static ScalarT ident_load(size_t idx, size_t i) + { + idx /= sizeof(ScalarT); + return (ScalarT) (idx == i); + } + + /** + * @brief Function that computes the Jacobian via automatic differentiation + * + * @tparam ModelT - model type + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + */ + template + __attribute__((noinline)) void EnzymeSparseModelJacobian(ModelT* model, size_t n, ScalarT* input, GridKit::LinearAlgebra::COO_Matrix& jac) + { + std::vector> triplets; + for (size_t i = 0; i < n; i++) + { + ScalarT* output = __enzyme_todense((void*) ident_load, (void*) ident_store, i); + ScalarT* d_output = __enzyme_todense((void*) sparse_load, (void*) sparse_store, i, &triplets); + + __enzyme_fwddiff((void*) residual_wrapper, + enzyme_const, + model, + enzyme_dup, + input, + output, + enzyme_dupnoneed, + (ScalarT*) 0x1, + d_output); + } + + std::vector ctemp{}; + std::vector rtemp{}; + std::vector valtemp{}; + for (auto& tup : triplets) + { + rtemp.push_back(static_cast(tup.row)); + ctemp.push_back(static_cast(tup.col)); + valtemp.push_back(tup.val); + } + jac.setValues(rtemp, ctemp, valtemp); + } + } // namespace Enzyme +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/CMakeLists.txt b/src/Model/PhasorDynamics/Load/CMakeLists.txt index 0f1659a71..909d04dcc 100644 --- a/src/Model/PhasorDynamics/Load/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Load/CMakeLists.txt @@ -1,12 +1,29 @@ - + # [[ # Author(s): # - Cameron Rutherford # ]] -gridkit_add_library(phasor_dynamics_load + +if(GRIDKIT_ENABLE_ENZYME) + gridkit_add_library(phasor_dynamics_load + SOURCES + LoadEnzyme.cpp + LINK_LIBRARIES + ClangEnzymeFlags + OUTPUT_NAME + gridkit_phasor_dynamics_load) +else() + gridkit_add_library(phasor_dynamics_load + SOURCES + Load.cpp + OUTPUT_NAME + gridkit_phasor_dynamics_load) +endif() + +gridkit_add_library(phasor_dynamics_load_dependency_tracking SOURCES - Load.cpp + LoadDependencyTracking.cpp OUTPUT_NAME - gridkit_phasor_dynamics_load) + gridkit_phasor_dynamics_load_dependency_tracking) diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index d3f9e0163..bbc187904 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -1,187 +1,29 @@ - -#include "Load.hpp" - -#include -#include - -#include -#include - -namespace GridKit -{ - namespace PhasorDynamics - { - /*! - * @brief Constructor for a pi-model load - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ - - template - Load::Load(bus_type* bus) - : bus_(bus) - { - size_ = 0; - } - - template - Load::Load(bus_type* bus, - real_type R, - real_type X) - : bus_(bus), - R_(R), - X_(X) - { - } - - template - Load::Load(bus_type* bus, - model_data_type& data) - : bus_(bus), - R_(data.R), - X_(data.X) - { - } - - template - Load::Load(bus_type* bus, IdxT component_id) - : bus_(bus) - { - size_ = 0; - component_id_ = component_id; - } - - template - Load::~Load() - { - // std::cout << "Destroy Load..." << std::endl; - } - - /*! - * @brief allocate method computes sparsity pattern of the Jacobian. - */ - template - int Load::allocate() - { - // std::cout << "Allocate Load..." << std::endl; - return 0; - } - - /** - * Initialization of the load model - * - */ - template - int Load::initialize() - { - return 0; - } - - /** - * \brief Identify differential variables. - */ - template - int Load::tagDifferentiable() - { - return 0; - } - - /** - * \brief Residual contribution of the load is pushed to the bus. - * - */ - template - int Load::evaluateResidual() - { - real_type b = -X_ / (R_ * R_ + X_ * X_); - real_type g = R_ / (R_ * R_ + X_ * X_); - - Ir() += -g * Vr() + b * Vi(); - Ii() += -b * Vr() - g * Vi(); - - return 0; - } - - /** - * @brief Jacobian evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateJacobian() - { - std::cout << "Evaluate Jacobian for Load..." << std::endl; - std::cout << "Jacobian evaluation not implemented!" << std::endl; - return 0; - } - - /** - * @brief Integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateIntegrand() - { - // std::cout << "Evaluate Integrand for Load..." << std::endl; - return 0; - } - - /** - * @brief Adjoint initialization not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::initializeAdjoint() - { - // std::cout << "Initialize adjoint for Load..." << std::endl; - return 0; - } - - /** - * @brief Adjoint residual evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateAdjointResidual() - { - // std::cout << "Evaluate adjoint residual for Load..." << std::endl; - return 0; - } - - /** - * @brief Adjoint integrand (objective) evaluation not implemented yet - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateAdjointIntegrand() - { - // std::cout << "Evaluate adjoint Integrand for Load..." << std::endl; - return 0; - } - - // Available template instantiations - template class Load; - template class Load; - template class Load; - template class Load; - - } // namespace PhasorDynamics -} // namespace GridKit + +#include "LoadImpl.hpp" + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Jacobian evaluation not implemented + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Load..." << std::endl; + std::cout << "Jacobian evaluation is not implemented!" << std::endl; + + return 0; + } + + // Available template instantiations + template class Load; + template class Load; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/Load.hpp b/src/Model/PhasorDynamics/Load/Load.hpp index 6fc996c8b..ee20f428b 100644 --- a/src/Model/PhasorDynamics/Load/Load.hpp +++ b/src/Model/PhasorDynamics/Load/Load.hpp @@ -36,6 +36,7 @@ namespace GridKit using Component::yp_; using Component::tag_; using Component::f_; + using Component::J_; using Component::component_id_; using real_type = typename Component::real_type; @@ -98,6 +99,9 @@ namespace GridKit return bus_->Ii(); } + public: + int evaluateResidualLocally(ScalarT*, ScalarT*); + private: bus_type* bus_{nullptr}; real_type R_{0.1}; diff --git a/src/Model/PhasorDynamics/Load/LoadDependencyTracking.cpp b/src/Model/PhasorDynamics/Load/LoadDependencyTracking.cpp new file mode 100644 index 000000000..8219abcad --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadDependencyTracking.cpp @@ -0,0 +1,29 @@ + +#include "LoadImpl.hpp" + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Jacobian evaluation not implemented + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Load..." << std::endl; + std::cout << "Jacobian evaluation is not implemented!" << std::endl; + + return 0; + } + + // Available template instantiations + template class Load; + template class Load; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/LoadEnzyme.cpp b/src/Model/PhasorDynamics/Load/LoadEnzyme.cpp new file mode 100644 index 000000000..1410290f0 --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadEnzyme.cpp @@ -0,0 +1,39 @@ + +#include "LoadImpl.hpp" +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Jacobian evaluation experimental + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Load..." << std::endl; + std::cout << "Jacobian evaluation is experimental!" << std::endl; + + std::vector y(2); + std::vector f(2); + y[0] = Vr(); + y[1] = Vi(); + /// Setting J_ via Enzyme works, though J_ had not been initialized within the model. + /// This is because the COO_Matrix class is very permissive. + /// Having the currents as model variables and allocating J_ accordingly will be helpful. + GridKit::Enzyme::EnzymeSparseModelJacobian, ScalarT, IdxT>(this, f.size(), y.data(), J_); + + return 0; + } + + // Available template instantiations + template class Load; + template class Load; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/LoadImpl.hpp b/src/Model/PhasorDynamics/Load/LoadImpl.hpp new file mode 100644 index 000000000..e8cfbd2ba --- /dev/null +++ b/src/Model/PhasorDynamics/Load/LoadImpl.hpp @@ -0,0 +1,183 @@ + +#include +#include + +#include "Load.hpp" +#include +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief Constructor for a pi-model load + * + * Arguments passed to ModelEvaluatorImpl: + * - Number of equations = 0 + * - Number of independent variables = 0 + * - Number of quadratures = 0 + * - Number of optimization parameters = 0 + */ + + template + Load::Load(bus_type* bus) + : bus_(bus) + { + size_ = 0; + } + + template + Load::Load(bus_type* bus, + real_type R, + real_type X) + : bus_(bus), + R_(R), + X_(X) + { + } + + template + Load::Load(bus_type* bus, + model_data_type& data) + : bus_(bus), + R_(data.R), + X_(data.X) + { + } + + template + Load::Load(bus_type* bus, IdxT component_id) + : bus_(bus) + { + size_ = 0; + component_id_ = component_id; + } + + template + Load::~Load() + { + // std::cout << "Destroy Load..." << std::endl; + } + + /*! + * @brief allocate method computes sparsity pattern of the Jacobian. + */ + template + int Load::allocate() + { + // std::cout << "Allocate Load..." << std::endl; + return 0; + } + + /** + * Initialization of the load model + * + */ + template + int Load::initialize() + { + return 0; + } + + /** + * \brief Identify differential variables. + */ + template + int Load::tagDifferentiable() + { + return 0; + } + + /** + * @brief Residual contribution computed locally + * + */ + template + int Load::evaluateResidualLocally(ScalarT* y, ScalarT* f) + { + real_type b = -X_ / (R_ * R_ + X_ * X_); + real_type g = R_ / (R_ * R_ + X_ * X_); + + f[0] = -g * y[0] + b * y[1]; + f[1] = -b * y[0] - g * y[1]; + + return 0; + } + + /** + * @brief Residual contribution of the load is pushed to the bus. + * + */ + template + int Load::evaluateResidual() + { + std::vector y(2); + std::vector f(2); + y[0] = Vr(); + y[1] = Vi(); + evaluateResidualLocally(y.data(), f.data()); + Ir() += f[0]; + Ii() += f[1]; + + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateIntegrand() + { + // std::cout << "Evaluate Integrand for Load..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::initializeAdjoint() + { + // std::cout << "Initialize adjoint for Load..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateAdjointResidual() + { + // std::cout << "Evaluate adjoint residual for Load..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateAdjointIntegrand() + { + // std::cout << "Evaluate adjoint Integrand for Load..." << std::endl; + return 0; + } + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index dfe3c93d4..c8b0a5368 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -13,6 +13,7 @@ target_link_libraries(test_phasor_branch GRIDKIT::phasor_dynamics_branch add_executable(test_phasor_load runLoadTests.cpp) target_link_libraries(test_phasor_load GRIDKIT::phasor_dynamics_load + GRIDKIT::phasor_dynamics_load_dependency_tracking GRIDKIT::phasor_dynamics_bus) add_executable(test_phasor_genrou runGenrouTests.cpp) diff --git a/tests/UnitTests/PhasorDynamics/LoadTests.hpp b/tests/UnitTests/PhasorDynamics/LoadTests.hpp index f91043363..081db1415 100644 --- a/tests/UnitTests/PhasorDynamics/LoadTests.hpp +++ b/tests/UnitTests/PhasorDynamics/LoadTests.hpp @@ -100,6 +100,36 @@ namespace GridKit return success.report(__func__); } +#ifdef GRIDKIT_ENABLE_ENZYME + TestOutcome enzyme_jacobian() + { + TestStatus success = true; + + real_type R{2.0}; ///< Load resistance + real_type X{4.0}; ///< Load reactance + + ScalarT Vr{10.0}; ///< Bus real voltage + ScalarT Vi{20.0}; ///< Bus imaginary voltage + + PhasorDynamics::BusInfinite bus(Vr, Vi); + + PhasorDynamics::Load load(&bus, R, X); + load.evaluateJacobian(); + GridKit::LinearAlgebra::COO_Matrix model_jacobian = load.getJacobian(); + model_jacobian.printMatrix("Model Jacobian"); + + /// Compare model Jacobian wih dependencies computed analytically + std::vector ref = analyticalJacobian(R, X); + std::vector model_dependencies = mapFromCOO(model_jacobian); + for (size_t i = 0; i < ref.size(); ++i) + { + success *= (GridKit::Testing::isEqual(model_dependencies[i], ref[i])); + } + + return success.report(__func__); + } +#endif + private: std::vector analyticalJacobian(const real_type R, const real_type X) @@ -119,6 +149,24 @@ namespace GridKit return dependencies; } + + std::vector mapFromCOO(GridKit::LinearAlgebra::COO_Matrix matrix) + { + std::tuple&, std::vector&, std::vector&> matrix_entries = matrix.getEntries(); + const auto [rows, columns, values] = matrix_entries; + + std::tuple matrix_dimensions = matrix.getDimensions(); + const auto [n_rows, n_columns] = matrix_dimensions; + + std::vector dependencies(n_rows); + + for (IdxT i = 0; i < rows.size(); ++i) + { + dependencies[rows[i]].insert(std::make_pair(columns[i], values[i])); + } + + return dependencies; + } }; } // namespace Testing diff --git a/tests/UnitTests/PhasorDynamics/runLoadTests.cpp b/tests/UnitTests/PhasorDynamics/runLoadTests.cpp index 41426a820..1dac30e27 100644 --- a/tests/UnitTests/PhasorDynamics/runLoadTests.cpp +++ b/tests/UnitTests/PhasorDynamics/runLoadTests.cpp @@ -11,6 +11,9 @@ int main() result += test.constructor(); result += test.residual(); result += test.jacobian(); +#ifdef GRIDKIT_ENABLE_ENZYME + result += test.enzyme_jacobian(); +#endif return result.summary(); } From 1eb6fc0b42fdafd2026f42e9ec4a0c902dc75d4d Mon Sep 17 00:00:00 2001 From: pelesh Date: Fri, 13 Jun 2025 16:16:58 -0400 Subject: [PATCH 042/139] Implement system model data structure and system composer (#138) * Add bus factory to phasor dynamics family. * Add system model data for phasor dynamics family. * Use SystemModelData to instantiate system in phasor dynamic Example 1. * Add unit test for system constructor. --------- Co-authored-by: pelesh --- .../PhasorDynamics/Example1/CMakeLists.txt | 1 + examples/PhasorDynamics/Example1/example1.cpp | 119 ++++----- examples/PhasorDynamics/Example2/example2.cpp | 226 +++++++++--------- src/Model/PhasorDynamics/Branch/Branch.cpp | 2 +- src/Model/PhasorDynamics/Branch/Branch.hpp | 2 +- src/Model/PhasorDynamics/Bus/Bus.cpp | 2 +- src/Model/PhasorDynamics/Bus/Bus.hpp | 4 +- src/Model/PhasorDynamics/Bus/BusData.hpp | 10 +- src/Model/PhasorDynamics/Bus/BusFactory.hpp | 41 ++++ src/Model/PhasorDynamics/Bus/BusInfinite.cpp | 2 +- src/Model/PhasorDynamics/Bus/BusInfinite.hpp | 4 +- src/Model/PhasorDynamics/BusBase.hpp | 6 - .../PhasorDynamics/BusFault/BusFault.cpp | 2 +- .../PhasorDynamics/BusFault/BusFault.hpp | 2 +- src/Model/PhasorDynamics/INPUT_FORMAT.md | 2 +- src/Model/PhasorDynamics/Load/Load.cpp | 58 ++--- src/Model/PhasorDynamics/Load/Load.hpp | 2 +- src/Model/PhasorDynamics/Load/LoadImpl.hpp | 4 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 2 +- .../SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- src/Model/PhasorDynamics/SystemModel.hpp | 109 +++++++++ src/Model/PhasorDynamics/SystemModelData.hpp | 42 ++++ tests/UnitTests/PhasorDynamics/CMakeLists.txt | 2 + .../UnitTests/PhasorDynamics/SystemTests.hpp | 66 ++++- 24 files changed, 484 insertions(+), 228 deletions(-) create mode 100644 src/Model/PhasorDynamics/Bus/BusFactory.hpp create mode 100644 src/Model/PhasorDynamics/SystemModelData.hpp diff --git a/examples/PhasorDynamics/Example1/CMakeLists.txt b/examples/PhasorDynamics/Example1/CMakeLists.txt index e79e6103b..d0e498a5e 100644 --- a/examples/PhasorDynamics/Example1/CMakeLists.txt +++ b/examples/PhasorDynamics/Example1/CMakeLists.txt @@ -4,6 +4,7 @@ target_link_libraries(phasordynamics_example1 GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS phasordynamics_example1 RUNTIME DESTINATION bin) diff --git a/examples/PhasorDynamics/Example1/example1.cpp b/examples/PhasorDynamics/Example1/example1.cpp index ac42fc236..04c78c5dd 100644 --- a/examples/PhasorDynamics/Example1/example1.cpp +++ b/examples/PhasorDynamics/Example1/example1.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -40,68 +41,72 @@ int main() // // Create model data // - BusData bus_data_1; - bus_data_1.Vr0 = 0.9949877346411762; - bus_data_1.Vi0 = 0.09999703952427966; - - BusData bus_data_2; - bus_data_2.Vr0 = 1.0; - bus_data_2.Vi0 = 0.0; - - BranchData branch_data_1_2; - branch_data_1_2.R = 0.0; - branch_data_1_2.X = 0.1; - branch_data_1_2.G = 0.0; - branch_data_1_2.B = 0.0; - - GenrouData gen_data_1; - gen_data_1.unit_id = 1; - gen_data_1.p0 = 1.; - gen_data_1.q0 = 0.05013; - gen_data_1.H = 3.; - gen_data_1.D = 0.; - gen_data_1.Ra = 0.; - gen_data_1.Tdop = 7.; - gen_data_1.Tdopp = .04; - gen_data_1.Tqopp = .05; - gen_data_1.Tqop = .75; - gen_data_1.Xd = 2.1; - gen_data_1.Xdp = 0.2; - gen_data_1.Xdpp = 0.18; - gen_data_1.Xq = 0.5; - gen_data_1.Xqp = 0.5; - gen_data_1.Xqpp = 0.18; - gen_data_1.Xl = 0.15; - gen_data_1.S10 = 0.; - gen_data_1.S12 = 0.; - - BusFaultData bus_fault_data_1; - bus_fault_data_1.R = 0.0; - bus_fault_data_1.X = 1e-3; - bus_fault_data_1.status = false; - // - // Instantiate model components - // - - Bus bus1(bus_data_1); - BusInfinite bus2(bus_data_2); - Branch branch(&bus1, &bus2, branch_data_1_2); - BusFault fault(&bus1, bus_fault_data_1); - Genrou gen(&bus1, gen_data_1); + SystemModelData data; + + // Set bus data + data.bus.resize(2); + + data.bus[0].bus_id = 0; + data.bus[0].bus_type = BusData::DEFAULT; + data.bus[0].Vr0 = 0.9949877346411762; + data.bus[0].Vi0 = 0.09999703952427966; + + data.bus[1].bus_id = 1; + data.bus[1].bus_type = BusData::SLACK; + data.bus[1].Vr0 = 1.0; + data.bus[1].Vi0 = 0.0; + + // Set branch data + data.branch.resize(1); + + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 0.0; + data.branch[0].X = 0.1; + data.branch[0].G = 0.0; + data.branch[0].B = 0.0; + + // Set generator data + data.genrou.resize(1); + + data.genrou[0].unit_id = 1; + data.genrou[0].p0 = 1.; + data.genrou[0].q0 = 0.05013; + data.genrou[0].H = 3.; + data.genrou[0].D = 0.; + data.genrou[0].Ra = 0.; + data.genrou[0].Tdop = 7.; + data.genrou[0].Tdopp = .04; + data.genrou[0].Tqopp = .05; + data.genrou[0].Tqop = .75; + data.genrou[0].Xd = 2.1; + data.genrou[0].Xdp = 0.2; + data.genrou[0].Xdpp = 0.18; + data.genrou[0].Xq = 0.5; + data.genrou[0].Xqp = 0.5; + data.genrou[0].Xqpp = 0.18; + data.genrou[0].Xl = 0.15; + data.genrou[0].S10 = 0.; + data.genrou[0].S12 = 0.; + + // Add faults + data.bus_fault.resize(1); + + data.bus_fault[0].R = 0.0; + data.bus_fault[0].X = 1e-3; + data.bus_fault[0].status = false; // - // Create the 2-bus system + // Instantiate system model // - SystemModel sys; - sys.addBus(&bus1); - sys.addBus(&bus2); - sys.addComponent(&branch); - sys.addComponent(&fault); - sys.addComponent(&gen); + SystemModel sys(data); sys.allocate(); + // Get access to the fault + auto* fault = sys.getBusFault(0); + // Set time step to 1/4 of a 60Hz cycle real_type dt = 1.0 / 4.0 / 60.0; @@ -153,13 +158,13 @@ int main() ida.runSimulation(1.0, nout, output_cb); // Introduce fault and run for the next 0.1s - fault.setStatus(true); + fault->setStatus(true); ida.initializeSimulation(1.0, false); nout = static_cast(std::round((1.1 - 1.0) / dt)); ida.runSimulation(1.1, nout, output_cb); // Clear the fault and run until t = 10s. - fault.setStatus(false); + fault->setStatus(false); ida.initializeSimulation(1.1, false); nout = static_cast(std::round((10.0 - 1.1) / dt)); ida.runSimulation(10.0, nout, output_cb); diff --git a/examples/PhasorDynamics/Example2/example2.cpp b/examples/PhasorDynamics/Example2/example2.cpp index 8a9cbc15f..3b7eeb68d 100644 --- a/examples/PhasorDynamics/Example2/example2.cpp +++ b/examples/PhasorDynamics/Example2/example2.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -88,131 +89,132 @@ int main() std::cout << "Example 2 version 1\n"; // - // Create (load) model data + // Create model data // + SystemModelData data; + + // Set bus data + data.bus.resize(3); + + // Bus 0 + data.bus[0].bus_id = 0; + data.bus[0].bus_type = BusData::SLACK; + data.bus[0].Vr0 = 1.06; + data.bus[0].Vi0 = 0.0; + // Bus 1 - BusData bus_data_1; - bus_data_1.Vr0 = 1.06; - bus_data_1.Vi0 = 0.0; + data.bus[1].bus_id = 1; + data.bus[1].bus_type = BusData::DEFAULT; + data.bus[1].Vr0 = 1.0599558398065716; + data.bus[1].Vi0 = -0.009675621941024773; // Bus 2 - BusData bus_data_2; - bus_data_2.Vr0 = 1.0599558398065716; - bus_data_2.Vi0 = -0.009675621941024773; - - // Bus 3 - BusData bus_data_3; - bus_data_3.Vr0 = 0.9610827543495831; - bus_data_3.Vi0 = -0.13122476630506485; + data.bus[2].bus_id = 2; + data.bus[2].bus_type = BusData::DEFAULT; + data.bus[2].Vr0 = 0.9610827543495831; + data.bus[2].Vi0 = -0.13122476630506485; + + // Set branch data + data.branch.resize(3); + + // Branch 0-1 + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 0.05; + data.branch[0].X = 0.21; + data.branch[0].G = 0; + data.branch[0].B = 0.1; + + // Branch 0-2 + data.branch[1].bus1_id = data.bus[0].bus_id; + data.branch[1].bus2_id = data.bus[2].bus_id; + data.branch[1].R = 0.06; + data.branch[1].X = 0.15; + data.branch[1].G = 0; + data.branch[1].B = 0.12; // Branch 1-2 - BranchData branch_data_1_2; - branch_data_1_2.R = 0.05; - branch_data_1_2.X = 0.21; - branch_data_1_2.G = 0; - branch_data_1_2.B = 0.1; - - // Branch 1-3 - BranchData branch_data_1_3; - branch_data_1_3.R = 0.06; - branch_data_1_3.X = 0.15; - branch_data_1_3.G = 0; - branch_data_1_3.B = 0.12; - - // Branch 2-3 - BranchData branch_data_2_3; - branch_data_2_3.R = 0.08; - branch_data_2_3.X = 0.27; - branch_data_2_3.G = 0; - branch_data_2_3.B = 0.45; + data.branch[2].bus1_id = data.bus[1].bus_id; + data.branch[2].bus2_id = data.bus[2].bus_id; + data.branch[2].R = 0.08; + data.branch[2].X = 0.27; + data.branch[2].G = 0; + data.branch[2].B = 0.45; + + // Set generator data + data.genrou.resize(2); + + // Generator on bus 1 + data.genrou[0].bus_id = 1; + data.genrou[0].unit_id = 0; + data.genrou[0].p0 = 0.5; + data.genrou[0].q0 = -0.07588; + data.genrou[0].H = 2.7; + data.genrou[0].D = 0.; + data.genrou[0].Ra = 0.; + data.genrou[0].Tdop = 7.; + data.genrou[0].Tdopp = .04; + data.genrou[0].Tqopp = .05; + data.genrou[0].Tqop = .75; + data.genrou[0].Xd = 1.9; + data.genrou[0].Xdp = 0.17; + data.genrou[0].Xdpp = 0.15; + data.genrou[0].Xq = 0.4; + data.genrou[0].Xqp = 0.35; + data.genrou[0].Xqpp = 0.15; + data.genrou[0].Xl = 0.14999; + data.genrou[0].S10 = 0.; + data.genrou[0].S12 = 0.; // Generator on bus 2 - GenrouData gen_data_2; - gen_data_2.unit_id = 1; - gen_data_2.p0 = 0.5; - gen_data_2.q0 = -0.07588; - gen_data_2.H = 2.7; - gen_data_2.D = 0.; - gen_data_2.Ra = 0.; - gen_data_2.Tdop = 7.; - gen_data_2.Tdopp = .04; - gen_data_2.Tqopp = .05; - gen_data_2.Tqop = .75; - gen_data_2.Xd = 1.9; - gen_data_2.Xdp = 0.17; - gen_data_2.Xdpp = 0.15; - gen_data_2.Xq = 0.4; - gen_data_2.Xqp = 0.35; - gen_data_2.Xqpp = 0.15; - gen_data_2.Xl = 0.14999; - gen_data_2.S10 = 0.; - gen_data_2.S12 = 0.; - - // Generator on bus 3 - GenrouData gen_data_3; - gen_data_3.unit_id = 1; - gen_data_3.p0 = 0.25; - gen_data_3.q0 = 0.26587; - gen_data_3.H = 1.6; - gen_data_3.D = 0.; - gen_data_3.Ra = 0.; - gen_data_3.Tdop = 7.5; - gen_data_3.Tdopp = .04; - gen_data_3.Tqopp = .05; - gen_data_3.Tqop = .75; - gen_data_3.Xd = 2.3; - gen_data_3.Xdp = 0.2; - gen_data_3.Xdpp = 0.18; - gen_data_3.Xq = 0.5; - gen_data_3.Xqp = 0.5; - gen_data_3.Xqpp = 0.18; - gen_data_3.Xl = 0.15; - gen_data_3.S10 = 0.; - gen_data_3.S12 = 0.; - - // Load on bus 3 - LoadData load_data_3; - load_data_3.R = 0.4447197839297772; - load_data_3.X = 0.20330047265361242; - load_data_3.bus_id = 3; - - BusFaultData bus_fault_data_3; - bus_fault_data_3.R = 0.0; - bus_fault_data_3.X = 1e-5; - bus_fault_data_3.status = false; + data.genrou[1].bus_id = 2; + data.genrou[1].unit_id = 1; + data.genrou[1].p0 = 0.25; + data.genrou[1].q0 = 0.26587; + data.genrou[1].H = 1.6; + data.genrou[1].D = 0.; + data.genrou[1].Ra = 0.; + data.genrou[1].Tdop = 7.5; + data.genrou[1].Tdopp = .04; + data.genrou[1].Tqopp = .05; + data.genrou[1].Tqop = .75; + data.genrou[1].Xd = 2.3; + data.genrou[1].Xdp = 0.2; + data.genrou[1].Xdpp = 0.18; + data.genrou[1].Xq = 0.5; + data.genrou[1].Xqp = 0.5; + data.genrou[1].Xqpp = 0.18; + data.genrou[1].Xl = 0.15; + data.genrou[1].S10 = 0.; + data.genrou[1].S12 = 0.; + + // Set load data + data.load.resize(1); + + // Load on bus 2 + data.load[0].bus_id = 2; + data.load[0].R = 0.4447197839297772; + data.load[0].X = 0.20330047265361242; + + // Set fault data + data.bus_fault.resize(1); + + data.bus_fault[0].bus_id = 2; + data.bus_fault[0].R = 0.0; + data.bus_fault[0].X = 1e-5; + data.bus_fault[0].status = false; // - // Instantiate model components + // Instantiate system // - BusInfinite bus1(bus_data_1); - Bus bus2(bus_data_2); - Bus bus3(bus_data_3); - - Branch branch12(&bus1, &bus2, branch_data_1_2); - Branch branch13(&bus1, &bus3, branch_data_1_3); - Branch branch23(&bus2, &bus3, branch_data_2_3); - - Genrou gen2(&bus2, gen_data_2); - Genrou gen3(&bus3, gen_data_3); - Load load3(&bus3, load_data_3); - BusFault fault(&bus3, bus_fault_data_3); - - /* Connect everything together */ - SystemModel sys; - sys.addBus(&bus1); - sys.addBus(&bus2); - sys.addBus(&bus3); - sys.addComponent(&branch12); - sys.addComponent(&branch13); - sys.addComponent(&branch23); - sys.addComponent(&fault); - sys.addComponent(&load3); - sys.addComponent(&gen2); - sys.addComponent(&gen3); + SystemModel sys(data); sys.allocate(); + // Get access to fault 0 + auto* fault = sys.getBusFault(0); + real_type dt = 1.0 / 4.0 / 60.0; std::vector output; @@ -241,13 +243,13 @@ int main() ida.runSimulation(1.0, nout, output_cb); // Introduce fault to ground and run for 0.1s - fault.setStatus(true); + fault->setStatus(true); ida.initializeSimulation(1.0, false); nout = static_cast(std::round((1.1 - 1.0) / dt)); ida.runSimulation(1.1, nout, output_cb); // Clear fault and run until t = 10s. - fault.setStatus(false); + fault->setStatus(false); ida.initializeSimulation(1.1, false); nout = static_cast(std::round((10.0 - 1.1) / dt)); ida.runSimulation(10.0, nout, output_cb); diff --git a/src/Model/PhasorDynamics/Branch/Branch.cpp b/src/Model/PhasorDynamics/Branch/Branch.cpp index 5132a7a8d..effc8bd5c 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.cpp +++ b/src/Model/PhasorDynamics/Branch/Branch.cpp @@ -73,7 +73,7 @@ namespace GridKit } template - Branch::Branch(bus_type* bus1, bus_type* bus2, model_data_type& data) + Branch::Branch(bus_type* bus1, bus_type* bus2, const model_data_type& data) : bus1_(bus1), bus2_(bus2), R_(data.R), diff --git a/src/Model/PhasorDynamics/Branch/Branch.hpp b/src/Model/PhasorDynamics/Branch/Branch.hpp index cf3cba0e1..caefa491f 100644 --- a/src/Model/PhasorDynamics/Branch/Branch.hpp +++ b/src/Model/PhasorDynamics/Branch/Branch.hpp @@ -53,7 +53,7 @@ namespace GridKit public: Branch(bus_type* bus1, bus_type* bus2); Branch(bus_type* bus1, bus_type* bus2, real_type R, real_type X, real_type G, real_type B); - Branch(bus_type* bus1, bus_type* bus2, model_data_type& data); + Branch(bus_type* bus1, bus_type* bus2, const model_data_type& data); virtual ~Branch(); virtual int allocate() override; diff --git a/src/Model/PhasorDynamics/Bus/Bus.cpp b/src/Model/PhasorDynamics/Bus/Bus.cpp index d8a1a3481..03473c8dd 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.cpp +++ b/src/Model/PhasorDynamics/Bus/Bus.cpp @@ -61,7 +61,7 @@ namespace GridKit * @param[in] data - structure with bus data */ template - Bus::Bus(DataT& data) + Bus::Bus(const DataT& data) : BusBase(data.bus_id), Vr0_(data.Vr0), Vi0_(data.Vi0) diff --git a/src/Model/PhasorDynamics/Bus/Bus.hpp b/src/Model/PhasorDynamics/Bus/Bus.hpp index 57828ef01..11dda1be8 100644 --- a/src/Model/PhasorDynamics/Bus/Bus.hpp +++ b/src/Model/PhasorDynamics/Bus/Bus.hpp @@ -43,7 +43,7 @@ namespace GridKit Bus(); Bus(ScalarT Vr, ScalarT Vi); - Bus(DataT& data); + Bus(const DataT& data); virtual ~Bus(); virtual int allocate() override; @@ -58,7 +58,7 @@ namespace GridKit virtual int BusType() const override { - return BusBase::BusType::DEFAULT; + return BusData::BusType::DEFAULT; } virtual ScalarT& Vr() override diff --git a/src/Model/PhasorDynamics/Bus/BusData.hpp b/src/Model/PhasorDynamics/Bus/BusData.hpp index abd8ab595..115deb5dd 100644 --- a/src/Model/PhasorDynamics/Bus/BusData.hpp +++ b/src/Model/PhasorDynamics/Bus/BusData.hpp @@ -23,10 +23,18 @@ namespace GridKit template struct BusData { + enum BusType + { + INVALID = 0, + DEFAULT, + SLACK + }; + RealT Vr0{0.0}; ///< Initial value for real bus voltage RealT Vi0{0.0}; ///< Initial value for imaginary bus voltage - IdxT bus_id{0}; ///< Unique ID of bus 1 + IdxT bus_id{0}; ///< Unique ID of bus 1 + BusType bus_type{INVALID}; }; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusFactory.hpp b/src/Model/PhasorDynamics/Bus/BusFactory.hpp new file mode 100644 index 000000000..34eae481e --- /dev/null +++ b/src/Model/PhasorDynamics/Bus/BusFactory.hpp @@ -0,0 +1,41 @@ + +#pragma once + +#include +#include +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + template + class BusFactory + { + public: + using real_type = typename Model::Evaluator::real_type; + using BusData = GridKit::PhasorDynamics::BusData; + + BusFactory() = delete; + + static BusBase* create(const BusData& data) + { + BusBase* bus = nullptr; + + switch (data.bus_type) + { + case BusData::DEFAULT: + bus = new Bus(data); + break; + case BusData::SLACK: + bus = new BusInfinite(data); + break; + default: + // Throw exception + std::cout << "Bus type " << data.bus_type << " unrecognized.\n"; + } + return bus; + } + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp index 6f4378d65..f1e96a339 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.cpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.cpp @@ -66,7 +66,7 @@ namespace GridKit * @param[in] data - structure with bus data */ template - BusInfinite::BusInfinite(DataT& data) + BusInfinite::BusInfinite(const DataT& data) : BusBase(data.bus_id), Vr_(data.Vr0), Vi_(data.Vi0) diff --git a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp index 0657ec374..b7247401f 100644 --- a/src/Model/PhasorDynamics/Bus/BusInfinite.hpp +++ b/src/Model/PhasorDynamics/Bus/BusInfinite.hpp @@ -41,7 +41,7 @@ namespace GridKit BusInfinite(); BusInfinite(ScalarT Vr, ScalarT Vi); - BusInfinite(DataT& data); + BusInfinite(const DataT& data); virtual ~BusInfinite(); virtual int allocate() override; @@ -56,7 +56,7 @@ namespace GridKit virtual int BusType() const override { - return BusBase::BusType::SLACK; + return BusData::BusType::SLACK; } virtual ScalarT& Vr() override diff --git a/src/Model/PhasorDynamics/BusBase.hpp b/src/Model/PhasorDynamics/BusBase.hpp index 332aaaed1..322e6f095 100644 --- a/src/Model/PhasorDynamics/BusBase.hpp +++ b/src/Model/PhasorDynamics/BusBase.hpp @@ -19,12 +19,6 @@ namespace GridKit public: using real_type = typename Model::Evaluator::real_type; - enum BusType - { - DEFAULT = 1, - SLACK - }; - BusBase() : size_(0), size_quad_(0), diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.cpp b/src/Model/PhasorDynamics/BusFault/BusFault.cpp index 727997721..597f20cbf 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.cpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.cpp @@ -64,7 +64,7 @@ namespace GridKit * @param bus2 - pointer to bus-2 */ template - BusFault::BusFault(bus_type* bus, DataT& data) + BusFault::BusFault(bus_type* bus, const DataT& data) : bus_(bus), R_(data.R), X_(data.X), diff --git a/src/Model/PhasorDynamics/BusFault/BusFault.hpp b/src/Model/PhasorDynamics/BusFault/BusFault.hpp index 8963a7b30..72be0717f 100644 --- a/src/Model/PhasorDynamics/BusFault/BusFault.hpp +++ b/src/Model/PhasorDynamics/BusFault/BusFault.hpp @@ -43,7 +43,7 @@ namespace GridKit public: BusFault(bus_type* bus); BusFault(bus_type* bus, real_type R, real_type X, int status); - BusFault(bus_type* bus, DataT& data); + BusFault(bus_type* bus, const DataT& data); ~BusFault() = default; int allocate() override; diff --git a/src/Model/PhasorDynamics/INPUT_FORMAT.md b/src/Model/PhasorDynamics/INPUT_FORMAT.md index 149048b6c..0fdfdcfb4 100644 --- a/src/Model/PhasorDynamics/INPUT_FORMAT.md +++ b/src/Model/PhasorDynamics/INPUT_FORMAT.md @@ -49,7 +49,7 @@ Contained in the `header` key is an object with the following items: `format_version` | Non-negative integer indicating the format version `format_revision` | Non-negative integer indicating the format revision `case_name` | A string containing the name of the case - `case_datetime` | Optional string in the ISO 8601 format indicating a datetime associated with the case. Including a time is optional, but if one is specified, it is recommended that a UTC offset be included. + `case_date_time` | Optional string in the ISO 8601 format indicating a datetime associated with the case. Including a time is optional, but if one is specified, it is recommended that a UTC offset be included. `case_description` | A string with more specific description of what is modeled in the case `case_comments` | A string with additional notes as needed `freq_base` | A floating point value indicating the system frequency base in hertz (Hz). This is commonly 60 Hz diff --git a/src/Model/PhasorDynamics/Load/Load.cpp b/src/Model/PhasorDynamics/Load/Load.cpp index bbc187904..8f130cbae 100644 --- a/src/Model/PhasorDynamics/Load/Load.cpp +++ b/src/Model/PhasorDynamics/Load/Load.cpp @@ -1,29 +1,29 @@ - -#include "LoadImpl.hpp" - -namespace GridKit -{ - namespace PhasorDynamics - { - /** - * @brief Jacobian evaluation not implemented - * - * @tparam ScalarT - scalar data type - * @tparam IdxT - matrix index data type - * @return int - error code, 0 = success - */ - template - int Load::evaluateJacobian() - { - std::cout << "Evaluate Jacobian for Load..." << std::endl; - std::cout << "Jacobian evaluation is not implemented!" << std::endl; - - return 0; - } - - // Available template instantiations - template class Load; - template class Load; - - } // namespace PhasorDynamics -} // namespace GridKit + +#include "LoadImpl.hpp" + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Jacobian evaluation not implemented + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int Load::evaluateJacobian() + { + std::cout << "Evaluate Jacobian for Load..." << std::endl; + std::cout << "Jacobian evaluation is not implemented!" << std::endl; + + return 0; + } + + // Available template instantiations + template class Load; + template class Load; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Load/Load.hpp b/src/Model/PhasorDynamics/Load/Load.hpp index ee20f428b..928898c9a 100644 --- a/src/Model/PhasorDynamics/Load/Load.hpp +++ b/src/Model/PhasorDynamics/Load/Load.hpp @@ -47,7 +47,7 @@ namespace GridKit Load(bus_type* bus); Load(bus_type* bus, real_type R, real_type X); Load(bus_type* bus, IdxT component_id); - Load(bus_type* bus, model_data_type& data); + Load(bus_type* bus, const model_data_type& data); virtual ~Load(); virtual int allocate() override; diff --git a/src/Model/PhasorDynamics/Load/LoadImpl.hpp b/src/Model/PhasorDynamics/Load/LoadImpl.hpp index e8cfbd2ba..59e46668e 100644 --- a/src/Model/PhasorDynamics/Load/LoadImpl.hpp +++ b/src/Model/PhasorDynamics/Load/LoadImpl.hpp @@ -38,8 +38,8 @@ namespace GridKit } template - Load::Load(bus_type* bus, - model_data_type& data) + Load::Load(bus_type* bus, + const model_data_type& data) : bus_(bus), R_(data.R), X_(data.X) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 55895d50b..31b7982db 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -119,7 +119,7 @@ namespace GridKit * */ template - Genrou::Genrou(bus_type* bus, model_data_type& data) + Genrou::Genrou(bus_type* bus, const model_data_type& data) : bus_(bus), busID_(0), unit_id_(data.unit_id), diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 283840840..305d47966 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -52,7 +52,7 @@ namespace GridKit public: Genrou(bus_type* bus, IdxT unit_id); - Genrou(bus_type* bus, model_data_type& data); + Genrou(bus_type* bus, const model_data_type& data); Genrou(bus_type* bus, IdxT unit_id, ScalarT p0, diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 03347b224..848e87f14 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -6,8 +6,16 @@ #include #include +#include #include +// Temporary +#include +#include +#include +#include +#include + namespace GridKit { namespace PhasorDynamics @@ -63,11 +71,82 @@ namespace GridKit this->max_steps_ = 2000; } + /** + * @brief Construct a new System Model object + * + * @param[in] data - Data structure with complete system data + * + * @pre SystemModelData contains consistent connectivity information + * and physically meaningful model parameters. + * + * @post All component models in SystemModelData are created, and + * correctly connected into the system model. + */ + SystemModel(SystemModelData& data) + { + // Set system model tolerances + rel_tol_ = 1e-7; + abs_tol_ = 1e-9; + this->max_steps_ = 2000; + + owns_components_ = true; + + // Add electrical buses + for (const auto& busdata : data.bus) + { + BusBase* bus = BusFactory::create(busdata); + addBus(bus); + } + + // Add branches + for (const auto& branchdata : data.branch) + { + auto* branch = new Branch(getBus(branchdata.bus1_id), getBus(branchdata.bus2_id), branchdata); + addComponent(branch); + } + + // Add loads + for (const auto& loaddata : data.load) + { + auto* load = new Load(getBus(loaddata.bus_id), loaddata); + addComponent(load); + } + + // Add generators + for (const auto& gendata : data.genrou) + { + auto* gen = new Genrou(getBus(gendata.bus_id), gendata); + addComponent(gen); + } + + // Add faults + for (const auto& faultdata : data.bus_fault) + { + auto* fault = new BusFault(getBus(faultdata.bus_id), faultdata); + addFault(fault); + } + } + /** * @brief Destructor for the system model + * + * If the SystemModel owns the components, it needs to delete them upon + * destructor call. */ virtual ~SystemModel() { + if (owns_components_) + { + for (auto component : components_) + { + delete component; + } + + for (auto bus : buses_) + { + delete bus; + } + } } /** @@ -648,9 +727,39 @@ namespace GridKit components_.push_back(component); } + void addFault(component_type* component) + { + components_.push_back(component); + faults_.push_back(component); + } + + bus_type* getBus(IdxT busid) + { + // Need to implement mapping of bus IDs to buses in the system model + assert((buses_[busid])->BusID() == busid); + return buses_[busid]; + } + + /** + * @brief Return pointer to a bus fault model + * + * This function is used to provide easier access to setting and + * clearing faults from the SystemModel interface. + * + * @warning This is a hack to get access to bus faults in examples. + * A more comprehensive solution is needed. + */ + BusFault* getBusFault(IdxT fault_id) + { + return dynamic_cast*>(faults_[fault_id]); + } + private: std::vector buses_; std::vector components_; + std::vector faults_; + + bool owns_components_{false}; }; // class SystemModel diff --git a/src/Model/PhasorDynamics/SystemModelData.hpp b/src/Model/PhasorDynamics/SystemModelData.hpp new file mode 100644 index 000000000..28696d0af --- /dev/null +++ b/src/Model/PhasorDynamics/SystemModelData.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + template + struct SystemModelData + { + using BranchDataT = BranchData; + using BusDataT = BusData; + using BusFaultDataT = BusFaultData; + using GenrouDataT = GenrouData; + using LoadDataT = LoadData; + + // Header info + unsigned short format_version; + unsigned short format_revision; + std::string case_name; + std::string case_date_time; + std::string case_description; + std::string case_comments; + RealT freq_base; + RealT va_base; + + // Bus data + std::vector bus; + + // Component data + std::vector branch; + std::vector bus_fault; + std::vector genrou; + std::vector load; + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index c8b0a5368..f461ce686 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -28,6 +28,8 @@ target_link_libraries(test_phasor_gen_classical GRIDKIT::phasor_dynamics_gen_cla add_executable(test_phasor_system runSystemTests.cpp) target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load GRIDKIT::phasor_dynamics_branch + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_bus) add_test(NAME PhasorDynamicsBusTest COMMAND $) diff --git a/tests/UnitTests/PhasorDynamics/SystemTests.hpp b/tests/UnitTests/PhasorDynamics/SystemTests.hpp index ea1cf7f29..dc8ecf81e 100644 --- a/tests/UnitTests/PhasorDynamics/SystemTests.hpp +++ b/tests/UnitTests/PhasorDynamics/SystemTests.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -29,21 +30,72 @@ namespace GridKit { TestStatus success = true; - // ScalarT Vr{1.0}; - // ScalarT Vi{2.0}; - PhasorDynamics::SystemModel* system = nullptr; // Create an empty system system = new PhasorDynamics::SystemModel(); - success *= (system != nullptr); - - if (system) + if (system == nullptr) { - delete system; + std::cout << "Default constructor failed!\n"; + success = false; + return success.report(__func__); } + delete system; + system = nullptr; + + PhasorDynamics::SystemModelData data; + + // Set bus data + data.bus.resize(2); + + // Bus 0 + data.bus[0].bus_id = 0; + data.bus[0].bus_type = PhasorDynamics::BusData::SLACK; + data.bus[0].Vr0 = 10.0; + data.bus[0].Vi0 = 20.0; + + // Bus 1 + data.bus[1].bus_id = 1; + data.bus[1].bus_type = PhasorDynamics::BusData::SLACK; + data.bus[1].Vr0 = 30.0; + data.bus[1].Vi0 = 40.0; + + // Set branch data + data.branch.resize(1); + + // Branch 0-1 + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 2.0; + data.branch[0].X = 4.0; + data.branch[0].G = 0.2; + data.branch[0].B = 1.2; + + // Create an empty system model + system = new PhasorDynamics::SystemModel(data); + system->allocate(); + system->initialize(); + system->evaluateResidual(); + + // Answer keys + const ScalarT Ir0{17.0}; ///< Solution: real current entering bus-0 + const ScalarT Ii0{-10.0}; ///< Solution: imaginary current entering bus-0 + const ScalarT Ir1{15.0}; ///< Solution: real current entering bus-1 + const ScalarT Ii1{-20.0}; ///< Solution: imaginary current entering bus-1 + + auto* bus0 = system->getBus(0); + auto* bus1 = system->getBus(1); + + success *= isEqual(bus0->Ir(), Ir0); + success *= isEqual(bus0->Ii(), Ii0); + success *= isEqual(bus1->Ir(), Ir1); + success *= isEqual(bus1->Ii(), Ii1); + + delete system; + system = nullptr; + return success.report(__func__); } From 3585940ddd7f0a0d5d23d1e35958d408d6aa0dfe Mon Sep 17 00:00:00 2001 From: pelesh Date: Wed, 18 Jun 2025 08:13:21 -0400 Subject: [PATCH 043/139] Add 10 generator system to phasor dynamics examples (#135) --------- Co-authored-by: abirchfield --- examples/PhasorDynamics/CMakeLists.txt | 1 + .../PhasorDynamics/Example3/CMakeLists.txt | 12 ++ examples/PhasorDynamics/Example3/example3.cpp | 179 ++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 examples/PhasorDynamics/Example3/CMakeLists.txt create mode 100644 examples/PhasorDynamics/Example3/example3.cpp diff --git a/examples/PhasorDynamics/CMakeLists.txt b/examples/PhasorDynamics/CMakeLists.txt index 58ded3a14..5d6752233 100644 --- a/examples/PhasorDynamics/CMakeLists.txt +++ b/examples/PhasorDynamics/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(Example1) add_subdirectory(Example2) +add_subdirectory(Example3) diff --git a/examples/PhasorDynamics/Example3/CMakeLists.txt b/examples/PhasorDynamics/Example3/CMakeLists.txt new file mode 100644 index 000000000..4e689997b --- /dev/null +++ b/examples/PhasorDynamics/Example3/CMakeLists.txt @@ -0,0 +1,12 @@ +add_executable(phasordynamics_example3 example3.cpp) +target_link_libraries(phasordynamics_example3 + GRIDKIT::phasor_dynamics_bus + GRIDKIT::phasor_dynamics_bus_fault + GRIDKIT::phasor_dynamics_branch + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_load + GRIDKIT::solvers_dyn) +install(TARGETS phasordynamics_example3 RUNTIME DESTINATION bin) + +# Not used for tesing for now. +# add_test(NAME GenrouTest3 COMMAND $) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp new file mode 100644 index 000000000..398b92b1e --- /dev/null +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -0,0 +1,179 @@ +/** + * @file example3.cpp + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Example running a 10-bus system + * + * Simulates a 11-bus system with 10 Genrou 6th order generator models + * split in two groups of five generators. The two groups are connected + * by a high-impedance branch, which makes connection between them weak. + * + */ +#include +#include +#include +#include + +// #include "example3.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using scalar_type = double; +using real_type = double; +using index_type = size_t; + +int main() +{ + using namespace GridKit::PhasorDynamics; + using namespace AnalysisManager::Sundials; + + /* Create model parts */ + BusInfinite bus1(1, 0); + + Bus bus2(0.999733719609643, 0.0230757421433613); + Bus bus3(0.999047460127767, 0.0436368240395443); + Bus bus4(0.998097277498088, 0.061658775943942); + Bus bus5(0.997021447662007, 0.0771246581966912); + Bus bus6(0.946436885707683, 0.322888837484268); + Bus bus7(0.943037519659334, 0.332686393642377); + Bus bus8(0.940418229359708, 0.340019961013984); + Bus bus9(0.938638861502395, 0.344901620288291); + Bus bus10(0.937739191669114, 0.347340277548916); + + Branch branch12(&bus1, &bus2, 0.001, 0.005, 0, 0); + Branch branch23(&bus2, &bus3, 0.001, 0.005, 0, 0); + Branch branch34(&bus3, &bus4, 0.001, 0.005, 0, 0); + Branch branch45(&bus4, &bus5, 0.001, 0.005, 0, 0); + Branch branch56(&bus5, &bus6, 0.001, 0.1, 0, 0); + Branch branch67(&bus6, &bus7, 0.001, 0.005, 0, 0); + Branch branch78(&bus7, &bus8, 0.001, 0.005, 0, 0); + Branch branch89(&bus8, &bus9, 0.001, 0.005, 0, 0); + Branch branch910(&bus9, &bus10, 0.001, 0.005, 0, 0); + + Genrou gen2(&bus2, 1, 0.5, -0.00442101, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen3(&bus3, 1, 0.5, -0.02510812, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen4(&bus4, 1, 0.5, -0.04339553, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen5(&bus5, 1, 0.5, -0.2334993, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen6(&bus6, 1, 0.5, 0.69907194, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen7(&bus7, 1, 0.5, -0.08318208, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen8(&bus8, 1, 0.5, -0.09123614, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen9(&bus9, 1, 0.5, -0.09662372, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen10(&bus10, 1, 0.5, -0.09932297, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + + BusFault fault(&bus10, 0, 1e-5, 0); + + /* Connect everything together */ + SystemModel sys; + + sys.addBus(&bus1); + sys.addBus(&bus2); + sys.addBus(&bus3); + sys.addBus(&bus4); + sys.addBus(&bus5); + sys.addBus(&bus6); + sys.addBus(&bus7); + sys.addBus(&bus8); + sys.addBus(&bus9); + sys.addBus(&bus10); + sys.addComponent(&branch12); + sys.addComponent(&branch23); + sys.addComponent(&branch34); + sys.addComponent(&branch45); + sys.addComponent(&branch56); + sys.addComponent(&branch67); + sys.addComponent(&branch78); + sys.addComponent(&branch89); + sys.addComponent(&branch910); + sys.addComponent(&gen2); + sys.addComponent(&gen3); + sys.addComponent(&gen4); + sys.addComponent(&gen5); + sys.addComponent(&gen6); + sys.addComponent(&gen7); + sys.addComponent(&gen8); + sys.addComponent(&gen9); + sys.addComponent(&gen10); + sys.addComponent(&fault); + sys.allocate(); + + real_type dt = 1.0 / 4.0 / 60.0; + + // Uncomment code below to print output to a file: + std::ofstream fileout; + fileout.open("example3_results.csv"); + std::ostream& out = fileout; + + // Create header for the CSV output file + out << "t,"; + for (size_t i = 0; i < 9; ++i) + { + out << "v" << i + 2 << ","; + } + for (size_t i = 0; i < 9; ++i) + { + out << "omega" << i + 2 << ","; + } + out << "\n"; + + auto output_cb = [&](real_type t) + { + std::vector& yval = sys.y(); + + // Output time + out << t << ","; + + // Output voltage magnitudes on buses + for (size_t i = 0; i < 9; ++i) + { + out << std::sqrt(yval[2 * i] * yval[2 * i] + + yval[2 * i + 1] * yval[2 * i + 1]) + << ","; + } + + // Output generator frequencies + for (size_t i = 0; i < 9; ++i) + { + // 18 is offset for variables of 9 buses. + // Each generator has 21 equations. + // We are outputting second equation of each generator. + out << yval[18 + 21 * i + 1] << ","; + } + out << "\n"; + }; + + // Set up simulation + Ida ida(&sys); + ida.configureSimulation(); + + // Run simulation, output each `dt` interval + scalar_type start = static_cast(clock()); + ida.initializeSimulation(0.0, false); + + // Run for 1s + int nout = static_cast(std::round((1.0 - 0.0) / dt)); + ida.runSimulation(1.0, nout, output_cb); + + // Introduce fault to ground and run for 0.1s + fault.setStatus(1); + ida.initializeSimulation(1.0, false); + nout = static_cast(std::round((1.1 - 1.0) / dt)); + ida.runSimulation(1.1, nout, output_cb); + + // Clear fault and run until t = 10s. + fault.setStatus(0); + ida.initializeSimulation(1.1, false); + nout = static_cast(std::round((10.0 - 1.1) / dt)); + ida.runSimulation(10.0, nout, output_cb); + double stop = static_cast(clock()); + + fileout.close(); + + return 0; +} From 4dbfdab3afb49fb7ee27508d8f3b532a6a9ad042 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:06:33 -0500 Subject: [PATCH 044/139] chore: environment test gov implementation [skip ci] --- src/Model/PhasorDynamics/CMakeLists.txt | 1 + .../PhasorDynamics/Governor/CMakeLists.txt | 8 + .../Governor/TGOV1/CMakeLists.txt | 6 + .../PhasorDynamics/Governor/TGOV1/README.md | 12 +- .../Governor/TGOV1/TurbineGov.cpp | 59 ++-- .../Governor/TGOV1/TurbineGov.hpp | 6 + src/Model/PhasorDynamics/MachineBase.hpp | 260 ++++++++++++++++++ .../SynchronousMachine/GENROUwS/Genrou.hpp | 44 +-- 8 files changed, 358 insertions(+), 38 deletions(-) create mode 100644 src/Model/PhasorDynamics/Governor/CMakeLists.txt create mode 100644 src/Model/PhasorDynamics/MachineBase.hpp diff --git a/src/Model/PhasorDynamics/CMakeLists.txt b/src/Model/PhasorDynamics/CMakeLists.txt index 01cd77258..6066594c6 100644 --- a/src/Model/PhasorDynamics/CMakeLists.txt +++ b/src/Model/PhasorDynamics/CMakeLists.txt @@ -8,3 +8,4 @@ add_subdirectory(Bus) add_subdirectory(BusFault) add_subdirectory(Load) add_subdirectory(SynchronousMachine) +#add_subdirectory(Governor) diff --git a/src/Model/PhasorDynamics/Governor/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/CMakeLists.txt new file mode 100644 index 000000000..dc138e5b3 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/CMakeLists.txt @@ -0,0 +1,8 @@ + +# [[ +# Author(s): +# - Luke Lowery +# - Adam Birchfield +# ]] + +add_subdirectory(TGOV1) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt index 63b28df94..da403e472 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt @@ -1,3 +1,9 @@ +# [[ +# Author(s): +# - Luke Lowery +# - Adam Birchfield +# ]] + gridkit_add_library(phasor_dynamics_turbinegov SOURCES TurbineGov.cpp diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 7653fe91a..a8b7c8e29 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -69,4 +69,14 @@ smooth approximation (smooth indicator $\phi$) expressed generically as follows. -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ \end{aligned} -``` \ No newline at end of file +``` + +## Initialization +```math +\begin{aligned} + P_{tx} &= (T_3-T_2) P_{mech}\\ + P_{v} &= P_{mech}\\ + \dot{P}_{tx} &=0\\ + \dot{P}_{v} &=0\\ +\end{aligned} +``` diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index d778e8529..740e8a33a 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -7,6 +7,12 @@ * */ + // NOTES + // Input Variables: Machine Speed Deviation (w) + // Output Variables: Pmech, Pref + // (No algebraic variables in reduced form) + // Differential Variables: Ptx, Pv + #include "TurbineGov.hpp" #include @@ -23,7 +29,7 @@ namespace GridKit /*! * @brief Constructor for Governor with default parameters * - * @param unit_id Associated Generator Unit ID + * @param machine Associated Generator Object */ template TurbineGov::TurbineGov(machine_type* machine) @@ -36,18 +42,23 @@ namespace GridKit T3_(.05), Dt_(.75), { - // 2 Internal Variables and 7 Parameters + // 2 Internal Variables size_ = 2; + + // 7 Parameters size_param_ = 7; } /*! * @brief Constructor for Governor * - * @param unit_id Generator Unit ID + * @param machine Generator Object * @param R Droop Constant (p.u.) * @param Pvmin Minimum Valve Position * @param Pvmax Maximum Valve Position + * @param T1 Param description + * @param T2 Param description + * @param T3 Param description * @param Dt Turbine Damping Coefficient (p.u.) */ template @@ -55,6 +66,7 @@ namespace GridKit machine_type* machine, real_type R, real_type Pvmin, + real_type Pvmax, real_type T1, real_type T2, real_type T3, @@ -70,8 +82,10 @@ namespace GridKit Dt_(.75), { - // 2 Internal Variables and 7 Parameters + // 2 Internal Variables size_ = 2; + + // 7 Parameters size_param_ = 7; } @@ -90,7 +104,6 @@ namespace GridKit /*! * @brief Allocate memory for model * - * */ template int TurbineGov::allocate() @@ -113,13 +126,13 @@ namespace GridKit int TurbineGov::initialize() { - // Initialize Differential Variables: - y_[0] = pref_; // Valve Position - y_[1] = pmech_; // Turbine Power + // D.V. Value + y_[0] = (T3_-T2_) * pmech_; // Ptx (Turbine Power ) + y_[1] = pmech_; // Pv (Valve Position) - // Initialize Differential Variables - yp_[0] = 0.0; - yp_[1] = 0.0; + // D.V. Derivative + yp_[0] = 0.0; // Ptx + yp_[1] = 0.0; // Pv return 0; } @@ -130,6 +143,8 @@ namespace GridKit template int TurbineGov::tagDifferentiable() { + + // Indicate which variables in y_ are differential for (IdxT i = 0; i < size_; ++i) { tag_[i] = true; @@ -145,9 +160,8 @@ namespace GridKit int TurbineGov::evaluateResidual() { - // External Variables - // TODO: should be deviation, not true speed. - ScalarT omega = machine_->omega(); + // Input Variables + ScalarT omega = machine_->speed(); // Internal Variables ScalarT pv = y_[0]; @@ -161,9 +175,6 @@ namespace GridKit f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; f_[1] = pv_dot + (pv - (pref_ - omega) / R ) / T3_; - // Output Variable - pmech_ = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); - return 0; } @@ -243,16 +254,24 @@ namespace GridKit * @return ScalarT - Mechanical output power value. */ template - ScalarT TurbineGov::Pmech() + ScalarT TurbineGov::pmech() { - return pmech_; + + // Relevant Variables + ScalarT omega = machine_->speed(); + ScalarT pv = y_[0]; + ScalarT ptx = y_[1]; + + // Output Variable + ScalarT pmech = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + + return pmech; } // Available template instantiations template class TurbineGov; template class TurbineGov; - } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 17832846e..da7629937 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -75,6 +75,9 @@ namespace GridKit { } + // Public Access to Pmech + ScalarT pmech(); + private: // Associated Machine Model @@ -87,6 +90,9 @@ namespace GridKit real_type T3_; real_type Dt_; + // Input States (which can be parameters) + ScalarT pref_; + // Output States ScalarT pmech_; diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp new file mode 100644 index 000000000..921b8f07f --- /dev/null +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -0,0 +1,260 @@ +#pragma once + +#include + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief MachineBase model implementation base class. + * + */ + template + class MachineBase : public Model::Evaluator + { + public: + using real_type = typename Model::Evaluator::real_type; + + + MachineBase() + : size_(0), + size_quad_(0), + size_param_(0) + { + } + + MachineBase(IdxT size, IdxT size_quad, IdxT size_param) + : size_(size), + size_quad_(size_quad), + size_param_(size_param), + y_(size_), + yp_(size_), + f_(size_), + g_(size_quad_), + yB_(size_), + ypB_(size_), + fB_(size_), + gB_(size_param_), + J_(COO_Matrix()), + param_(size_param_), + param_up_(size_param_), + param_lo_(size_param_) + { + } + + virtual ~MachineBase() + { + } + + virtual IdxT size() override + { + return size_; + } + + virtual IdxT nnz() override + { + return nnz_; + } + + virtual bool hasJacobian() override + { + return false; + } + + virtual IdxT sizeQuadrature() override + { + return size_quad_; + } + + virtual IdxT sizeParams() override + { + return size_param_; + } + + virtual void updateTime(real_type /* t */, real_type /* a */) override + { + // No time to update in bus models + } + + virtual void setTolerances(real_type& rtol, real_type& atol) const override + { + rtol = rtol_; + atol = atol_; + } + + virtual void setMaxSteps(IdxT& msa) const override + { + msa = max_steps_; + } + + virtual ScalarT& speed() = 0; + + std::vector& y() override + { + return y_; + } + + const std::vector& y() const override + { + return y_; + } + + std::vector& yp() override + { + return yp_; + } + + const std::vector& yp() const override + { + return yp_; + } + + std::vector& tag() override + { + return tag_; + } + + const std::vector& tag() const override + { + return tag_; + } + + std::vector& yB() override + { + return yB_; + } + + const std::vector& yB() const override + { + return yB_; + } + + std::vector& ypB() override + { + return ypB_; + } + + const std::vector& ypB() const override + { + return ypB_; + } + + std::vector& param() override + { + return param_; + } + + const std::vector& param() const override + { + return param_; + } + + std::vector& param_up() override + { + return param_up_; + } + + const std::vector& param_up() const override + { + return param_up_; + } + + std::vector& param_lo() override + { + return param_lo_; + } + + const std::vector& param_lo() const override + { + return param_lo_; + } + + std::vector& getResidual() override + { + return f_; + } + + const std::vector& getResidual() const override + { + return f_; + } + + COO_Matrix& getJacobian() override + { + return J_; + } + + const COO_Matrix& getJacobian() const override + { + return J_; + } + + std::vector& getIntegrand() override + { + return g_; + } + + const std::vector& getIntegrand() const override + { + return g_; + } + + std::vector& getAdjointResidual() override + { + return fB_; + } + + const std::vector& getAdjointResidual() const override + { + return fB_; + } + + std::vector& getAdjointIntegrand() override + { + return gB_; + } + + const std::vector& getAdjointIntegrand() const override + { + return gB_; + } + + + protected: + + IdxT size_; + IdxT nnz_; + IdxT size_quad_; + IdxT size_param_; + + std::vector y_; + std::vector yp_; + std::vector tag_; + std::vector f_; + std::vector g_; + + std::vector yB_; + std::vector ypB_; + std::vector fB_; + std::vector gB_; + + COO_Matrix J_; + + std::vector param_; + std::vector param_up_; + std::vector param_lo_; + + real_type time_; + real_type alpha_; + + real_type rtol_; + real_type atol_; + + IdxT max_steps_; + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 1f05fc876..b511da3cd 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -8,7 +8,7 @@ #pragma once -#include +#include // Forward declarations. namespace GridKit @@ -26,25 +26,25 @@ namespace GridKit { template - class Genrou : public Component + class Genrou : public MachineBase { - using Component::alpha_; - using Component::f_; - using Component::fB_; - using Component::g_; - using Component::gB_; - using Component::nnz_; - using Component::param_; - using Component::size_; - using Component::tag_; - using Component::time_; - using Component::y_; - using Component::yB_; - using Component::yp_; - using Component::ypB_; + using MachineBase::alpha_; + using MachineBase::f_; + using MachineBase::fB_; + using MachineBase::g_; + using MachineBase::gB_; + using MachineBase::nnz_; + using MachineBase::param_; + using MachineBase::size_; + using MachineBase::tag_; + using MachineBase::time_; + using MachineBase::y_; + using MachineBase::yB_; + using MachineBase::yp_; + using MachineBase::ypB_; using bus_type = BusBase; - using real_type = typename Component::real_type; + using real_type = typename MachineBase::real_type; public: Genrou(bus_type* bus, int unit_id); @@ -86,6 +86,16 @@ namespace GridKit { } + /*! + * @brief Getter for machine speed deviation + * + * @return Reference to speed state variable + */ + ScalarT& speed() override + { + return y_[1]; + } + private: void setDerivedParams(); From 94c4ac7c7614b387d7e9bb0f6641227e41c977e0 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:21:00 -0500 Subject: [PATCH 045/139] edit: component inheritance [skip ci] --- src/Model/PhasorDynamics/MachineBase.hpp | 239 +----------------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 33 +-- 2 files changed, 18 insertions(+), 254 deletions(-) diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp index 921b8f07f..fc3688b6a 100644 --- a/src/Model/PhasorDynamics/MachineBase.hpp +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -2,8 +2,6 @@ #include -#include - namespace GridKit { namespace PhasorDynamics @@ -13,247 +11,12 @@ namespace GridKit * */ template - class MachineBase : public Model::Evaluator + class MachineBase { public: - using real_type = typename Model::Evaluator::real_type; - - - MachineBase() - : size_(0), - size_quad_(0), - size_param_(0) - { - } - - MachineBase(IdxT size, IdxT size_quad, IdxT size_param) - : size_(size), - size_quad_(size_quad), - size_param_(size_param), - y_(size_), - yp_(size_), - f_(size_), - g_(size_quad_), - yB_(size_), - ypB_(size_), - fB_(size_), - gB_(size_param_), - J_(COO_Matrix()), - param_(size_param_), - param_up_(size_param_), - param_lo_(size_param_) - { - } - - virtual ~MachineBase() - { - } - - virtual IdxT size() override - { - return size_; - } - - virtual IdxT nnz() override - { - return nnz_; - } - - virtual bool hasJacobian() override - { - return false; - } - - virtual IdxT sizeQuadrature() override - { - return size_quad_; - } - - virtual IdxT sizeParams() override - { - return size_param_; - } - - virtual void updateTime(real_type /* t */, real_type /* a */) override - { - // No time to update in bus models - } - - virtual void setTolerances(real_type& rtol, real_type& atol) const override - { - rtol = rtol_; - atol = atol_; - } - - virtual void setMaxSteps(IdxT& msa) const override - { - msa = max_steps_; - } virtual ScalarT& speed() = 0; - std::vector& y() override - { - return y_; - } - - const std::vector& y() const override - { - return y_; - } - - std::vector& yp() override - { - return yp_; - } - - const std::vector& yp() const override - { - return yp_; - } - - std::vector& tag() override - { - return tag_; - } - - const std::vector& tag() const override - { - return tag_; - } - - std::vector& yB() override - { - return yB_; - } - - const std::vector& yB() const override - { - return yB_; - } - - std::vector& ypB() override - { - return ypB_; - } - - const std::vector& ypB() const override - { - return ypB_; - } - - std::vector& param() override - { - return param_; - } - - const std::vector& param() const override - { - return param_; - } - - std::vector& param_up() override - { - return param_up_; - } - - const std::vector& param_up() const override - { - return param_up_; - } - - std::vector& param_lo() override - { - return param_lo_; - } - - const std::vector& param_lo() const override - { - return param_lo_; - } - - std::vector& getResidual() override - { - return f_; - } - - const std::vector& getResidual() const override - { - return f_; - } - - COO_Matrix& getJacobian() override - { - return J_; - } - - const COO_Matrix& getJacobian() const override - { - return J_; - } - - std::vector& getIntegrand() override - { - return g_; - } - - const std::vector& getIntegrand() const override - { - return g_; - } - - std::vector& getAdjointResidual() override - { - return fB_; - } - - const std::vector& getAdjointResidual() const override - { - return fB_; - } - - std::vector& getAdjointIntegrand() override - { - return gB_; - } - - const std::vector& getAdjointIntegrand() const override - { - return gB_; - } - - - protected: - - IdxT size_; - IdxT nnz_; - IdxT size_quad_; - IdxT size_param_; - - std::vector y_; - std::vector yp_; - std::vector tag_; - std::vector f_; - std::vector g_; - - std::vector yB_; - std::vector ypB_; - std::vector fB_; - std::vector gB_; - - COO_Matrix J_; - - std::vector param_; - std::vector param_up_; - std::vector param_lo_; - - real_type time_; - real_type alpha_; - - real_type rtol_; - real_type atol_; - - IdxT max_steps_; }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index b511da3cd..8850740bd 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -8,6 +8,7 @@ #pragma once +#include #include // Forward declarations. @@ -26,25 +27,25 @@ namespace GridKit { template - class Genrou : public MachineBase + class Genrou : public Component, public MachineBase { - using MachineBase::alpha_; - using MachineBase::f_; - using MachineBase::fB_; - using MachineBase::g_; - using MachineBase::gB_; - using MachineBase::nnz_; - using MachineBase::param_; - using MachineBase::size_; - using MachineBase::tag_; - using MachineBase::time_; - using MachineBase::y_; - using MachineBase::yB_; - using MachineBase::yp_; - using MachineBase::ypB_; + using Component::alpha_; + using Component::f_; + using Component::fB_; + using Component::g_; + using Component::gB_; + using Component::nnz_; + using Component::param_; + using Component::size_; + using Component::tag_; + using Component::time_; + using Component::y_; + using Component::yB_; + using Component::yp_; + using Component::ypB_; using bus_type = BusBase; - using real_type = typename MachineBase::real_type; + using real_type = typename Component::real_type; public: Genrou(bus_type* bus, int unit_id); From 0058ff7aa52f641a5518c09fc5b464982e742b77 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:32:30 -0500 Subject: [PATCH 046/139] edit: turbine compilation issue [skip ci] --- .../Governor/TGOV1/TurbineGov.cpp | 19 ++++--------------- .../Governor/TGOV1/TurbineGov.hpp | 3 +++ 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 740e8a33a..9b06dd997 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -33,14 +33,14 @@ namespace GridKit */ template TurbineGov::TurbineGov(machine_type* machine) - : unit_id_(unit_id), + : machine_(machine), R_(3.), Pvmin_(0.), Pvmax_(1.), T1_(7.), T2_(.04), T3_(.05), - Dt_(.75), + Dt_(.75) { // 2 Internal Variables size_ = 2; @@ -79,7 +79,7 @@ namespace GridKit T1_(7.), T2_(.04), T3_(.05), - Dt_(.75), + Dt_(.75) { // 2 Internal Variables @@ -90,17 +90,6 @@ namespace GridKit } - /*! - * @brief Destructor for Governor Model - * - */ - template - TurbineGov::~TurbineGov() - { - std::cout << "Destroy Governor ..." << std::endl; - } - - /*! * @brief Allocate memory for model * @@ -173,7 +162,7 @@ namespace GridKit // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; - f_[1] = pv_dot + (pv - (pref_ - omega) / R ) / T3_; + f_[1] = pv_dot + (pv - (pref_ - omega) / R_ ) / T3_; return 0; } diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index da7629937..69dad7118 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -37,6 +37,7 @@ namespace GridKit using Component::nnz_; using Component::param_; using Component::size_; + using Component::size_param_; using Component::tag_; using Component::time_; using Component::y_; @@ -85,6 +86,8 @@ namespace GridKit // Input parameters real_type R_; + real_type Pvmin_; + real_type Pvmax_; real_type T1_; real_type T2_; real_type T3_; From 8763fc426e2a32fc0750131db660a9dc5e392063 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:56:14 -0500 Subject: [PATCH 047/139] init: example 3 turbine include --- examples/PhasorDynamics/CMakeLists.txt | 1 + .../PhasorDynamics/Example3/CMakeLists.txt | 15 + .../Example3_Powerworld_Reference.hpp | 2406 +++++++++++++++++ examples/PhasorDynamics/Example3/example3.cpp | 172 ++ .../Governor/TGOV1/TurbineGov.cpp | 1 - 5 files changed, 2594 insertions(+), 1 deletion(-) create mode 100644 examples/PhasorDynamics/Example3/CMakeLists.txt create mode 100644 examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp create mode 100644 examples/PhasorDynamics/Example3/example3.cpp diff --git a/examples/PhasorDynamics/CMakeLists.txt b/examples/PhasorDynamics/CMakeLists.txt index c758e4e56..6c1f59533 100644 --- a/examples/PhasorDynamics/CMakeLists.txt +++ b/examples/PhasorDynamics/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(Example1) +add_subdirectory(Example3) \ No newline at end of file diff --git a/examples/PhasorDynamics/Example3/CMakeLists.txt b/examples/PhasorDynamics/Example3/CMakeLists.txt new file mode 100644 index 000000000..0fa3f496b --- /dev/null +++ b/examples/PhasorDynamics/Example3/CMakeLists.txt @@ -0,0 +1,15 @@ +add_executable(phasordynamics_example3 example3.cpp) +target_link_libraries(phasordynamics_example3 + GRIDKIT::phasor_dynamics_bus + GRIDKIT::phasor_dynamics_bus_fault + GRIDKIT::phasor_dynamics_branch + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_turbinegov + SUNDIALS::sunlinsolklu + SUNDIALS::core + SUNDIALS::ida + SUNDIALS::idas + SUNDIALS::sunmatrixdense) +install(TARGETS phasordynamics_example1 RUNTIME DESTINATION bin) + +add_test(NAME GenrouTest COMMAND $) diff --git a/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp b/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp new file mode 100644 index 000000000..30d868076 --- /dev/null +++ b/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp @@ -0,0 +1,2406 @@ +#include + +// Columns: +// Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, +std::vector> reference_solution = + {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit + {0.004167, 1, 1.000000477}, + {0.008333, 1, 1.000000477}, + {0.0125, 0.99999994, 1.000000477}, + {0.016667, 0.99999994, 1.000000477}, + {0.020833, 0.99999994, 1.000000477}, + {0.025, 0.99999994, 1.000000477}, + {0.029167, 0.99999994, 1.000000477}, + {0.033333, 0.99999994, 1.000000477}, + {0.0375, 0.99999994, 1.000000477}, + {0.041667, 0.99999994, 1.000000477}, + {0.045833, 0.99999994, 1.000000477}, + {0.05, 0.999999881, 1.000000477}, + {0.054167, 0.999999881, 1.000000477}, + {0.058333, 0.999999881, 1.000000477}, + {0.0625, 0.999999881, 1.000000477}, + {0.066667, 0.999999881, 1.000000477}, + {0.070833, 0.999999881, 1.000000477}, + {0.075, 0.999999881, 1.000000477}, + {0.079167, 0.999999881, 1.000000477}, + {0.083333, 0.999999881, 1.000000477}, + {0.0875, 0.999999881, 1.000000477}, + {0.091667, 0.999999881, 1.000000477}, + {0.095833, 0.999999881, 1.000000477}, + {0.1, 0.999999881, 1.000000477}, + {0.104167, 0.999999881, 1.000000477}, + {0.108333, 0.999999881, 1.000000477}, + {0.1125, 0.999999881, 1.000000477}, + {0.116667, 0.999999881, 1.000000477}, + {0.120833, 0.999999881, 1.000000477}, + {0.125, 0.999999881, 1.000000477}, + {0.129167, 0.999999881, 1.000000477}, + {0.133333, 0.999999881, 1.000000477}, + {0.1375, 0.99999994, 1.000000477}, + {0.141667, 0.99999994, 1.000000477}, + {0.145833, 0.99999994, 1.000000477}, + {0.15, 0.99999994, 1.000000477}, + {0.154167, 0.99999994, 1.000000477}, + {0.158333, 0.99999994, 1.000000477}, + {0.1625, 0.99999994, 1.000000477}, + {0.166667, 0.99999994, 1.000000477}, + {0.170833, 0.99999994, 1.000000477}, + {0.175, 0.99999994, 1.000000477}, + {0.179167, 0.99999994, 1.000000477}, + {0.183333, 0.99999994, 1.000000477}, + {0.1875, 0.99999994, 1.000000477}, + {0.191667, 0.99999994, 1.000000477}, + {0.195833, 1, 1.000000477}, + {0.2, 1, 1.000000477}, + {0.204167, 1, 1.000000477}, + {0.208333, 1, 1.000000477}, + {0.2125, 1, 1.000000477}, + {0.216667, 1, 1.000000477}, + {0.220833, 1, 1.000000477}, + {0.225, 1, 1.000000477}, + {0.229167, 1, 1.000000477}, + {0.233333, 1, 1.000000477}, + {0.2375, 1, 1.000000477}, + {0.241667, 1, 1.000000477}, + {0.245833, 1, 1.000000477}, + {0.25, 1, 1.000000477}, + {0.254167, 1, 1.000000477}, + {0.258333, 1, 1.000000477}, + {0.2625, 1, 1.000000477}, + {0.266667, 1, 1.000000477}, + {0.270833, 1, 1.000000477}, + {0.275, 1, 1.000000477}, + {0.279167, 1, 1.000000477}, + {0.283333, 1, 1.000000477}, + {0.2875, 1, 1.000000477}, + {0.291667, 1, 1.000000477}, + {0.295833, 1.000000119, 1.000000477}, + {0.3, 1.000000119, 1.000000477}, + {0.304167, 1.000000119, 1.000000477}, + {0.308333, 1.000000119, 1.000000477}, + {0.3125, 1.000000119, 1.000000477}, + {0.316667, 1.000000119, 1.000000477}, + {0.320833, 1.000000119, 1.000000477}, + {0.325, 1.000000119, 1.000000477}, + {0.329167, 1.000000119, 1.000000477}, + {0.333333, 1.000000119, 1.000000477}, + {0.3375, 1.000000119, 1.000000477}, + {0.341667, 1.000000119, 1.000000477}, + {0.345833, 1.000000119, 1.000000477}, + {0.35, 1.000000119, 1.000000477}, + {0.354167, 1.000000119, 1.000000477}, + {0.358333, 1.000000119, 1.000000477}, + {0.3625, 1, 1.000000477}, + {0.366667, 1, 1.000000477}, + {0.370833, 1, 1.000000477}, + {0.375, 1, 1.000000477}, + {0.379167, 1, 1.000000477}, + {0.383333, 1, 1.000000477}, + {0.3875, 1, 1.000000477}, + {0.391667, 1, 1.000000477}, + {0.395833, 1, 1.000000477}, + {0.4, 1, 1.000000477}, + {0.404167, 1, 1.000000477}, + {0.408333, 1, 1.000000477}, + {0.4125, 1, 1.000000477}, + {0.416667, 1, 1.000000477}, + {0.420833, 1, 1.000000477}, + {0.425, 1, 1.000000477}, + {0.429167, 1, 1.000000477}, + {0.433333, 1, 1.000000477}, + {0.4375, 1, 1.000000477}, + {0.441667, 1, 1.000000477}, + {0.445833, 1, 1.000000477}, + {0.45, 1, 1.000000477}, + {0.454167, 1, 1.000000477}, + {0.458333, 1, 1.000000477}, + {0.4625, 1, 1.000000477}, + {0.466667, 1, 1.000000477}, + {0.470833, 1, 1.000000477}, + {0.475, 1, 1.000000477}, + {0.479167, 1, 1.000000477}, + {0.483333, 1, 1.000000477}, + {0.4875, 1, 1.000000477}, + {0.491667, 1, 1.000000477}, + {0.495833, 1, 1.000000477}, + {0.5, 1, 1.000000477}, + {0.504167, 1, 1.000000477}, + {0.508333, 1, 1.000000477}, + {0.5125, 0.99999994, 1.000000477}, + {0.516667, 0.99999994, 1.000000477}, + {0.520833, 0.99999994, 1.000000477}, + {0.525, 0.99999994, 1.000000477}, + {0.529167, 0.99999994, 1.000000477}, + {0.533333, 0.99999994, 1.000000477}, + {0.5375, 0.99999994, 1.000000477}, + {0.541667, 0.99999994, 1.000000477}, + {0.545833, 0.99999994, 1.000000477}, + {0.55, 0.99999994, 1.000000477}, + {0.554167, 0.99999994, 1.000000477}, + {0.558333, 0.99999994, 1.000000477}, + {0.5625, 0.99999994, 1.000000477}, + {0.566667, 0.99999994, 1.000000477}, + {0.570833, 0.99999994, 1.000000477}, + {0.575, 0.99999994, 1.000000477}, + {0.579167, 0.99999994, 1.000000477}, + {0.583333, 0.99999994, 1.000000477}, + {0.5875, 0.99999994, 1.000000477}, + {0.591667, 0.99999994, 1.000000477}, + {0.595833, 0.99999994, 1.000000477}, + {0.6, 0.99999994, 1.000000477}, + {0.604167, 0.99999994, 1.000000477}, + {0.608333, 0.99999994, 1.000000477}, + {0.6125, 0.99999994, 1.000000477}, + {0.616667, 0.99999994, 1.000000477}, + {0.620833, 1, 1.000000477}, + {0.625, 1, 1.000000477}, + {0.629167, 1, 1.000000477}, + {0.633333, 1, 1.000000477}, + {0.6375, 1, 1.000000477}, + {0.641667, 1, 1.000000477}, + {0.645833, 1, 1.000000477}, + {0.65, 1, 1.000000477}, + {0.654167, 1, 1.000000477}, + {0.658333, 1, 1.000000477}, + {0.6625, 1, 1.000000477}, + {0.666667, 1, 1.000000477}, + {0.670833, 1, 1.000000477}, + {0.675, 1, 1.000000477}, + {0.679167, 1, 1.000000477}, + {0.683333, 1, 1.000000477}, + {0.6875, 1, 1.000000477}, + {0.691667, 1, 1.000000477}, + {0.695833, 1, 1.000000477}, + {0.7, 1, 1.000000477}, + {0.704167, 1, 1.000000477}, + {0.708333, 1, 1.000000477}, + {0.7125, 1, 1.000000477}, + {0.716667, 1, 1.000000477}, + {0.720833, 1, 1.000000477}, + {0.725, 1, 1.000000477}, + {0.729167, 1, 1.000000477}, + {0.733333, 1, 1.000000477}, + {0.7375, 1, 1.000000477}, + {0.741667, 1, 1.000000477}, + {0.745833, 1, 1.000000477}, + {0.75, 1, 1.000000477}, + {0.754167, 1, 1.000000477}, + {0.758333, 1, 1.000000477}, + {0.7625, 1, 1.000000477}, + {0.766667, 1, 1.000000477}, + {0.770833, 1, 1.000000477}, + {0.775, 1, 1.000000477}, + {0.779167, 1, 1.000000477}, + {0.783333, 1, 1.000000477}, + {0.7875, 1, 1.000000477}, + {0.791667, 1, 1.000000477}, + {0.795833, 1, 1.000000477}, + {0.8, 1, 1.000000477}, + {0.804167, 1, 1.000000477}, + {0.808333, 1, 1.000000477}, + {0.8125, 1, 1.000000477}, + {0.816667, 1, 1.000000477}, + {0.820833, 1, 1.000000477}, + {0.825, 1, 1.000000477}, + {0.829167, 1, 1.000000477}, + {0.833333, 1, 1.000000477}, + {0.8375, 1, 1.000000477}, + {0.841667, 1, 1.000000477}, + {0.845833, 1, 1.000000477}, + {0.85, 1, 1.000000477}, + {0.854167, 1, 1.000000477}, + {0.858333, 1, 1.000000477}, + {0.8625, 1, 1.000000477}, + {0.866667, 1, 1.000000477}, + {0.870833, 1, 1.000000477}, + {0.875, 1, 1.000000477}, + {0.879167, 1, 1.000000477}, + {0.883333, 1, 1.000000477}, + {0.8875, 1, 1.000000477}, + {0.891667, 1, 1.000000477}, + {0.895833, 1, 1.000000477}, + {0.9, 1, 1.000000477}, + {0.904167, 1, 1.000000477}, + {0.908333, 1, 1.000000477}, + {0.9125, 1, 1.000000477}, + {0.916667, 1, 1.000000477}, + {0.920833, 1, 1.000000477}, + {0.925, 1, 1.000000477}, + {0.929167, 1, 1.000000477}, + {0.933333, 1, 1.000000477}, + {0.9375, 1, 1.000000477}, + {0.941667, 1, 1.000000477}, + {0.945833, 1, 1.000000477}, + {0.95, 1, 1.000000477}, + {0.954167, 1, 1.000000477}, + {0.958333, 1, 1.000000477}, + {0.9625, 1, 1.000000477}, + {0.966667, 1, 1.000000477}, + {0.970833, 1, 1.000000477}, + {0.975, 1, 1.000000477}, + {0.979167, 1, 1.000000477}, + {0.983333, 1, 1.000000477}, + {0.9875, 1, 1.000000477}, + {0.991667, 1, 1.000000477}, + {0.995833, 1, 1.000000477}, + {1, 1, 1.000000477}, + {1.004167, 1.000682712, 0.015128844}, + {1.008333, 1.001363397, 0.014973078}, + {1.0125, 1.002042532, 0.014841928}, + {1.016667, 1.002720356, 0.014729479}, + {1.020833, 1.00339675, 0.014631276}, + {1.025, 1.004072189, 0.014543867}, + {1.029167, 1.004746675, 0.01446466}, + {1.033333, 1.00541997, 0.014391631}, + {1.0375, 1.006092548, 0.01432314}, + {1.041667, 1.006764412, 0.014257919}, + {1.045833, 1.007435203, 0.014194945}, + {1.05, 1.008105278, 0.014133334}, + {1.054167, 1.008774638, 0.014072391}, + {1.058333, 1.009443045, 0.014011139}, + {1.0625, 1.010110855, 0.01395021}, + {1.066667, 1.010777831, 0.013887996}, + {1.070833, 1.011443853, 0.013824509}, + {1.075, 1.01210916, 0.013759368}, + {1.079167, 1.012773633, 0.013692267}, + {1.083333, 1.013437271, 0.013622929}, + {1.0875, 1.014100075, 0.013551049}, + {1.091667, 1.014762163, 0.013476389}, + {1.095833, 1.015423179, 0.013398723}, + {1.1, 1.016083598, 0.013398723}, + {1.104167, 1.015262365, 0.88047874}, + {1.108333, 1.014493585, 0.89023459}, + {1.1125, 1.013762116, 0.898759723}, + {1.116667, 1.013056278, 0.906125188}, + {1.120833, 1.012367129, 0.912427425}, + {1.125, 1.01168704, 0.917777061}, + {1.129167, 1.011010766, 0.922281682}, + {1.133333, 1.010334253, 0.926045954}, + {1.1375, 1.009654403, 0.929170609}, + {1.141667, 1.008969307, 0.931745946}, + {1.145833, 1.008277893, 0.93385452}, + {1.15, 1.007579207, 0.935571969}, + {1.154167, 1.006873131, 0.936964393}, + {1.158333, 1.006160259, 0.938090801}, + {1.1625, 1.005440712, 0.939003944}, + {1.166667, 1.0047158, 0.9397493}, + {1.170833, 1.003986597, 0.940366805}, + {1.175, 1.003253937, 0.940891325}, + {1.179167, 1.002519608, 0.941352487}, + {1.183333, 1.001785278, 0.94177556}, + {1.1875, 1.001052022, 0.942182004}, + {1.191667, 1.000321627, 0.942589283}, + {1.195833, 0.999596179, 0.943011642}, + {1.2, 0.998876929, 0.943460345}, + {1.204167, 0.998165727, 0.943943799}, + {1.208333, 0.997464538, 0.944467604}, + {1.2125, 0.996774673, 0.945035696}, + {1.216667, 0.996098042, 0.945649385}, + {1.220833, 0.995436549, 0.946308196}, + {1.225, 0.994791448, 0.947010458}, + {1.229167, 0.994164526, 0.947752595}, + {1.233333, 0.993557453, 0.948529899}, + {1.2375, 0.99297154, 0.949337125}, + {1.241667, 0.992408335, 0.950167537}, + {1.245833, 0.99186933, 0.951014042}, + {1.25, 0.991355598, 0.951869369}, + {1.254167, 0.990868449, 0.952725708}, + {1.258333, 0.990409136, 0.953574955}, + {1.2625, 0.989978492, 0.954409778}, + {1.266667, 0.989577591, 0.955215633}, + {1.270833, 0.989207327, 0.956005096}, + {1.275, 0.988868177, 0.956751525}, + {1.279167, 0.988560915, 0.957458079}, + {1.283333, 0.988285899, 0.958120406}, + {1.2875, 0.988043547, 0.958723307}, + {1.291667, 0.987834036, 0.959283113}, + {1.295833, 0.987657607, 0.959768534}, + {1.3, 0.987514019, 0.960213661}, + {1.304167, 0.987403274, 0.96057564}, + {1.308333, 0.987325132, 0.96090132}, + {1.3125, 0.987279058, 0.961140752}, + {1.316667, 0.987264812, 0.961349428}, + {1.320833, 0.987281561, 0.961474001}, + {1.325, 0.987328827, 0.961574197}, + {1.329167, 0.987405658, 0.961597323}, + {1.333333, 0.987511337, 0.961602867}, + {1.3375, 0.987644792, 0.96154201}, + {1.341667, 0.987805247, 0.961470485}, + {1.345833, 0.987991393, 0.961345851}, + {1.35, 0.988202393, 0.961207449}, + {1.354167, 0.988437057, 0.961049318}, + {1.358333, 0.988694072, 0.960876703}, + {1.3625, 0.988972366, 0.960694611}, + {1.366667, 0.989270747, 0.960507751}, + {1.370833, 0.989587843, 0.96032083}, + {1.375, 0.989922643, 0.960137904}, + {1.379167, 0.990273893, 0.959962845}, + {1.383333, 0.990640223, 0.95979917}, + {1.3875, 0.991020679, 0.959649861}, + {1.391667, 0.991413951, 0.959517598}, + {1.395833, 0.991818845, 0.959404588}, + {1.4, 0.992234349, 0.959312677}, + {1.404167, 0.99265933, 0.959243178}, + {1.408333, 0.993092477, 0.959197223}, + {1.4125, 0.993533015, 0.959175408}, + {1.416667, 0.993979812, 0.95917803}, + {1.420833, 0.994431734, 0.959205091}, + {1.425, 0.994888008, 0.959256351}, + {1.429167, 0.995347559, 0.959331334}, + {1.433333, 0.995809376, 0.959429204}, + {1.4375, 0.996272743, 0.959549129}, + {1.441667, 0.996736646, 0.95968461}, + {1.445833, 0.997200072, 0.959850907}, + {1.45, 0.997662604, 0.960024655}, + {1.454167, 0.998123169, 0.960226417}, + {1.458333, 0.998580933, 0.960433066}, + {1.4625, 0.999035299, 0.960664332}, + {1.466667, 0.999485552, 0.96089834}, + {1.470833, 0.99993068, 0.961153209}, + {1.475, 1.000370383, 0.961408794}, + {1.479167, 1.000803709, 0.961681604}, + {1.483333, 1.001230001, 0.961953163}, + {1.4875, 1.001648784, 0.962238312}, + {1.491667, 1.00205946, 0.962520778}, + {1.495833, 1.002461076, 0.962813199}, + {1.5, 1.002853513, 0.963101745}, + {1.504167, 1.003236055, 0.963396966}, + {1.508333, 1.003607988, 0.96368736}, + {1.5125, 1.003968954, 0.963981271}, + {1.516667, 1.004318357, 0.964269757}, + {1.520833, 1.004655838, 0.964558721}, + {1.525, 1.004980803, 0.964841962}, + {1.529167, 1.005292892, 0.965122938}, + {1.533333, 1.005591631, 0.965397894}, + {1.5375, 1.00587666, 0.965667963}, + {1.541667, 1.006147623, 0.96593219}, + {1.545833, 1.006403923, 0.966188729}, + {1.55, 1.006645441, 0.966439664}, + {1.554167, 1.00687182, 0.966680348}, + {1.558333, 1.007082582, 0.966915607}, + {1.5625, 1.007277608, 0.967138052}, + {1.566667, 1.00745666, 0.967355549}, + {1.570833, 1.007619381, 0.96755743}, + {1.575, 1.007765532, 0.967754841}, + {1.579167, 1.007894993, 0.967934012}, + {1.583333, 1.008007526, 0.968109071}, + {1.5875, 1.008103132, 0.968263447}, + {1.591667, 1.008181453, 0.968414128}, + {1.595833, 1.008242607, 0.968541622}, + {1.6, 1.008286357, 0.968665838}, + {1.604167, 1.008312702, 0.968764782}, + {1.608333, 1.008321762, 0.968860805}, + {1.6125, 1.008313417, 0.968929827}, + {1.616667, 1.008287787, 0.968996286}, + {1.620833, 1.008244872, 0.969034612}, + {1.625, 1.00818491, 0.969070733}, + {1.629167, 1.00810802, 0.969078183}, + {1.633333, 1.008014202, 0.969083905}, + {1.6375, 1.007904053, 0.969061136}, + {1.641667, 1.007777452, 0.969037175}, + {1.645833, 1.007634878, 0.968985915}, + {1.65, 1.007476687, 0.96893394}, + {1.654167, 1.007303119, 0.968856812}, + {1.658333, 1.007114768, 0.968779624}, + {1.6625, 1.006911874, 0.968680382}, + {1.666667, 1.006694913, 0.968581617}, + {1.670833, 1.00646472, 0.968464911}, + {1.675, 1.006221414, 0.968349338}, + {1.679167, 1.005965829, 0.968220592}, + {1.683333, 1.005698442, 0.968093693}, + {1.6875, 1.005420089, 0.967959166}, + {1.691667, 1.005131125, 0.967827022}, + {1.695833, 1.004832625, 0.967693269}, + {1.7, 1.004525065, 0.967562377}, + {1.704167, 1.00420928, 0.967436075}, + {1.708333, 1.003885984, 0.967313051}, + {1.7125, 1.003556132, 0.967200637}, + {1.716667, 1.003220201, 0.967091799}, + {1.720833, 1.0028795, 0.966999233}, + {1.725, 1.00253439, 0.966910303}, + {1.729167, 1.00218606, 0.966842711}, + {1.733333, 1.001835227, 0.966778576}, + {1.7375, 1.001482844, 0.966739953}, + {1.741667, 1.001129627, 0.966711283}, + {1.745833, 1.000776529, 0.966690898}, + {1.75, 1.000424623, 0.966700375}, + {1.754167, 1.000074387, 0.96671176}, + {1.758333, 0.999727011, 0.966754198}, + {1.7625, 0.999383092, 0.966797709}, + {1.766667, 0.999043643, 0.966872096}, + {1.770833, 0.998709381, 0.966946483}, + {1.775, 0.998381138, 0.967050433}, + {1.779167, 0.99805963, 0.967153192}, + {1.783333, 0.997745872, 0.96728301}, + {1.7875, 0.997440159, 0.967410386}, + {1.791667, 0.997143567, 0.967561364}, + {1.795833, 0.99685663, 0.967714787}, + {1.8, 0.996579885, 0.967869997}, + {1.804167, 0.996314168, 0.968042195}, + {1.808333, 0.996059835, 0.968208969}, + {1.8125, 0.995817542, 0.968387842}, + {1.816667, 0.995587707, 0.968560398}, + {1.820833, 0.995370924, 0.968739927}, + {1.825, 0.995167375, 0.968912601}, + {1.829167, 0.994977593, 0.969087243}, + {1.833333, 0.994801879, 0.969254494}, + {1.8375, 0.99464041, 0.96941936}, + {1.841667, 0.994493544, 0.969576657}, + {1.845833, 0.994361401, 0.969727576}, + {1.85, 0.994244099, 0.969871104}, + {1.854167, 0.994141817, 0.970005214}, + {1.858333, 0.994054556, 0.970132172}, + {1.8625, 0.993982315, 0.970247447}, + {1.866667, 0.993925095, 0.970356286}, + {1.870833, 0.993882775, 0.97045207}, + {1.875, 0.993855238, 0.970542192}, + {1.879167, 0.993842363, 0.970618844}, + {1.883333, 0.993843973, 0.970690787}, + {1.8875, 0.993859708, 0.970749676}, + {1.891667, 0.993889451, 0.97080493}, + {1.895833, 0.993932843, 0.970848203}, + {1.9, 0.993989527, 0.970888972}, + {1.904167, 0.994059205, 0.97091943}, + {1.908333, 0.994141459, 0.970948577}, + {1.9125, 0.994235873, 0.970969498}, + {1.916667, 0.994342029, 0.970990121}, + {1.920833, 0.99445945, 0.971004903}, + {1.925, 0.994587719, 0.971020401}, + {1.929167, 0.9947263, 0.971032619}, + {1.933333, 0.994874775, 0.971046269}, + {1.9375, 0.995032549, 0.971059203}, + {1.941667, 0.995199144, 0.971074224}, + {1.945833, 0.995373964, 0.971090853}, + {1.95, 0.995556593, 0.971110106}, + {1.954167, 0.995746374, 0.971133053}, + {1.958333, 0.995942831, 0.971158922}, + {1.9625, 0.996145368, 0.971190274}, + {1.966667, 0.996353567, 0.971224725}, + {1.970833, 0.996566653, 0.97126615}, + {1.975, 0.996784389, 0.971310556}, + {1.979167, 0.997005939, 0.971363068}, + {1.983333, 0.997230887, 0.971418381}, + {1.9875, 0.997458696, 0.971482456}, + {1.991667, 0.997688949, 0.971549094}, + {1.995833, 0.997920871, 0.971624851}, + {2, 0.998154223, 0.971702695}, + {2.004167, 0.99838829, 0.971789718}, + {2.008333, 0.998622656, 0.971878409}, + {2.0125, 0.998856843, 0.971975863}, + {2.016667, 0.999090433, 0.972074568}, + {2.020833, 0.999322772, 0.972181499}, + {2.025, 0.999553561, 0.972289145}, + {2.029167, 0.999782324, 0.972404182}, + {2.033333, 1.000008583, 0.972519457}, + {2.0375, 1.000231862, 0.97264123}, + {2.041667, 1.000451922, 0.972762704}, + {2.045833, 1.000668168, 0.972889543}, + {2.05, 1.000880361, 0.973015666}, + {2.054167, 1.001088023, 0.973146021}, + {2.058333, 1.001290798, 0.973275185}, + {2.0625, 1.001488328, 0.973407388}, + {2.066667, 1.001680374, 0.973538041}, + {2.070833, 1.00186646, 0.973670363}, + {2.075, 1.002046466, 0.973800957}, + {2.079167, 1.002219915, 0.973931909}, + {2.083333, 1.002386689, 0.974060893}, + {2.0875, 1.00254631, 0.974188983}, + {2.091667, 1.002698779, 0.974314928}, + {2.095833, 1.002843618, 0.974438667}, + {2.1, 1.002980828, 0.974560261}, + {2.104167, 1.003109932, 0.974678457}, + {2.108333, 1.003231049, 0.974794388}, + {2.1125, 1.003343701, 0.974905789}, + {2.116667, 1.003448009, 0.975015044}, + {2.120833, 1.003543615, 0.975118697}, + {2.125, 1.003630638, 0.975220263}, + {2.129167, 1.00370872, 0.975315332}, + {2.133333, 1.003777862, 0.975408375}, + {2.1375, 1.003837943, 0.975494087}, + {2.141667, 1.003889084, 0.97557801}, + {2.145833, 1.003931046, 0.975653946}, + {2.15, 1.003963828, 0.975728214}, + {2.154167, 1.003987551, 0.975794077}, + {2.158333, 1.004002213, 0.97585845}, + {2.1625, 1.004007816, 0.975914061}, + {2.166667, 1.00400424, 0.97596848}, + {2.170833, 1.003991842, 0.976014078}, + {2.175, 1.003970623, 0.976058662}, + {2.179167, 1.003940463, 0.976094544}, + {2.183333, 1.003901839, 0.976129651}, + {2.1875, 1.003854632, 0.976156354}, + {2.191667, 1.003799081, 0.97618264}, + {2.195833, 1.003735423, 0.976201057}, + {2.2, 1.003663778, 0.976219237}, + {2.204167, 1.003584385, 0.976230323}, + {2.208333, 1.003497481, 0.97624141}, + {2.2125, 1.003403306, 0.976246357}, + {2.216667, 1.003302097, 0.976251602}, + {2.220833, 1.003194094, 0.976251721}, + {2.225, 1.003079653, 0.976252377}, + {2.229167, 1.002959013, 0.976249218}, + {2.233333, 1.002832532, 0.976246715}, + {2.2375, 1.002700567, 0.976241708}, + {2.241667, 1.002563357, 0.976237595}, + {2.245833, 1.002421498, 0.97623235}, + {2.25, 1.00227499, 0.976228058}, + {2.254167, 1.002124429, 0.976224005}, + {2.258333, 1.001970172, 0.976221025}, + {2.2625, 1.001812577, 0.976219654}, + {2.266667, 1.001652002, 0.976219356}, + {2.270833, 1.001489043, 0.976221859}, + {2.275, 1.001323819, 0.976225436}, + {2.279167, 1.001156807, 0.976232946}, + {2.283333, 1.000988603, 0.976241529}, + {2.2875, 1.000819445, 0.97625488}, + {2.291667, 1.000649691, 0.976269126}, + {2.295833, 1.000480056, 0.976288915}, + {2.3, 1.00031054, 0.976309478}, + {2.304167, 1.00014174, 0.976336062}, + {2.308333, 0.999974132, 0.976363182}, + {2.3125, 0.999808013, 0.97639662}, + {2.316667, 0.999643743, 0.976430357}, + {2.320833, 0.999481857, 0.976470292}, + {2.325, 0.999322474, 0.976510406}, + {2.329167, 0.999166131, 0.97655654}, + {2.333333, 0.999013186, 0.976602495}, + {2.3375, 0.998863876, 0.976654112}, + {2.341667, 0.998718619, 0.976705313}, + {2.345833, 0.998577714, 0.97676152}, + {2.35, 0.998441339, 0.976817131}, + {2.354167, 0.99830997, 0.976876974}, + {2.358333, 0.998183727, 0.976935983}, + {2.3625, 0.998062968, 0.976998508}, + {2.366667, 0.997947812, 0.97706002}, + {2.370833, 0.997838557, 0.977124095}, + {2.375, 0.997735381, 0.977187037}, + {2.379167, 0.997638524, 0.977251768}, + {2.383333, 0.997548044, 0.977315128}, + {2.3875, 0.99746418, 0.97737956}, + {2.391667, 0.997386992, 0.977442563}, + {2.395833, 0.997316659, 0.977505863}, + {2.4, 0.99725318, 0.977567792}, + {2.404167, 0.997196674, 0.977629304}, + {2.408333, 0.997147202, 0.977689505}, + {2.4125, 0.997104764, 0.977748811}, + {2.416667, 0.997069418, 0.977806926}, + {2.420833, 0.997041106, 0.977863729}, + {2.425, 0.997019887, 0.977919519}, + {2.429167, 0.997005641, 0.977973759}, + {2.433333, 0.99699831, 0.978027105}, + {2.4375, 0.996997893, 0.978078902}, + {2.441667, 0.997004211, 0.978129923}, + {2.445833, 0.997017264, 0.978179455}, + {2.45, 0.997036815, 0.97822845}, + {2.454167, 0.997062802, 0.978276134}, + {2.458333, 0.997095108, 0.97832346}, + {2.4625, 0.997133493, 0.978369713}, + {2.466667, 0.997177839, 0.978415847}, + {2.470833, 0.997227907, 0.978461266}, + {2.475, 0.997283578, 0.978506744}, + {2.479167, 0.997344553, 0.978551865}, + {2.483333, 0.997410715, 0.978597224}, + {2.4875, 0.997481763, 0.978642642}, + {2.491667, 0.99755758, 0.978688478}, + {2.495833, 0.997637749, 0.978734732}, + {2.5, 0.997722149, 0.978781521}, + {2.504167, 0.997810483, 0.978829205}, + {2.508333, 0.997902572, 0.978877366}, + {2.5125, 0.997998059, 0.978926837}, + {2.516667, 0.998096764, 0.978976846}, + {2.520833, 0.99819833, 0.979028463}, + {2.525, 0.998302639, 0.979080617}, + {2.529167, 0.998409212, 0.97913456}, + {2.533333, 0.998517931, 0.979189098}, + {2.5375, 0.998628497, 0.979245543}, + {2.541667, 0.998740673, 0.979302526}, + {2.545833, 0.998854041, 0.979361534}, + {2.55, 0.998968482, 0.97942096}, + {2.554167, 0.999083698, 0.979482412}, + {2.558333, 0.99919939, 0.979544222}, + {2.5625, 0.999315321, 0.97960794}, + {2.566667, 0.999431312, 0.979671896}, + {2.570833, 0.999546885, 0.979737639}, + {2.575, 0.999662042, 0.979803562}, + {2.579167, 0.999776363, 0.979871035}, + {2.583333, 0.999889672, 0.979938447}, + {2.5875, 1.000001788, 0.980007231}, + {2.591667, 1.000112414, 0.980075896}, + {2.595833, 1.000221252, 0.980145454}, + {2.6, 1.000328302, 0.980214894}, + {2.604167, 1.000433087, 0.98028487}, + {2.608333, 1.000535607, 0.980354488}, + {2.6125, 1.000635624, 0.980424404}, + {2.616667, 1.000732899, 0.980493844}, + {2.620833, 1.000827312, 0.980563104}, + {2.625, 1.000918627, 0.980631888}, + {2.629167, 1.001006722, 0.980700076}, + {2.633333, 1.001091361, 0.980767667}, + {2.6375, 1.001172543, 0.980834305}, + {2.641667, 1.001250029, 0.980900288}, + {2.645833, 1.001323581, 0.980964839}, + {2.65, 1.001393318, 0.981028795}, + {2.654167, 1.001459002, 0.981091022}, + {2.658333, 1.001520634, 0.981152534}, + {2.6625, 1.001577854, 0.98121196}, + {2.666667, 1.001630902, 0.98127073}, + {2.670833, 1.00167942, 0.981327116}, + {2.675, 1.001723647, 0.981382847}, + {2.679167, 1.001763225, 0.981435895}, + {2.683333, 1.001798391, 0.981488407}, + {2.6875, 1.001828909, 0.981538057}, + {2.691667, 1.001854777, 0.981587112}, + {2.695833, 1.001875997, 0.981633246}, + {2.7, 1.001892686, 0.981678843}, + {2.704167, 1.001904726, 0.981721342}, + {2.708333, 1.001912117, 0.981763482}, + {2.7125, 1.001914978, 0.981802464}, + {2.716667, 1.001913309, 0.981841147}, + {2.720833, 1.00190711, 0.981876731}, + {2.725, 1.001896501, 0.981912136}, + {2.729167, 1.00188148, 0.981944501}, + {2.733333, 1.001862168, 0.981976748}, + {2.7375, 1.001838684, 0.982006192}, + {2.741667, 1.001811028, 0.982035518}, + {2.745833, 1.001779318, 0.98206234}, + {2.75, 1.001743793, 0.982089102}, + {2.754167, 1.001704335, 0.98211354}, + {2.758333, 1.001661181, 0.982138097}, + {2.7625, 1.001614571, 0.982160687}, + {2.766667, 1.001564503, 0.982183337}, + {2.770833, 1.001511216, 0.982204437}, + {2.775, 1.001454711, 0.982225657}, + {2.779167, 1.001395345, 0.982245624}, + {2.783333, 1.001333117, 0.98226589}, + {2.7875, 1.001268268, 0.982285261}, + {2.791667, 1.001200914, 0.982304871}, + {2.795833, 1.001131415, 0.982324004}, + {2.8, 1.001059771, 0.982343495}, + {2.804167, 1.000986099, 0.982362807}, + {2.808333, 1.000910878, 0.982382476}, + {2.8125, 1.000833988, 0.982402384}, + {2.816667, 1.000755906, 0.98242265}, + {2.820833, 1.000676632, 0.982443452}, + {2.825, 1.000596285, 0.982464552}, + {2.829167, 1.000515342, 0.982486546}, + {2.833333, 1.000433803, 0.982508838}, + {2.8375, 1.000351906, 0.982532263}, + {2.841667, 1.000269771, 0.982555926}, + {2.845833, 1.000187874, 0.9825809}, + {2.85, 1.000106096, 0.982606173}, + {2.854167, 1.000024676, 0.982632816}, + {2.858333, 0.999943972, 0.982659698}, + {2.8625, 0.999864042, 0.982688129}, + {2.866667, 0.999785066, 0.98271668}, + {2.870833, 0.999707282, 0.98274678}, + {2.875, 0.999630749, 0.982777059}, + {2.879167, 0.999555767, 0.982808828}, + {2.883333, 0.999482453, 0.982840717}, + {2.8875, 0.999410987, 0.982874095}, + {2.891667, 0.999341428, 0.982907474}, + {2.895833, 0.999274015, 0.982942283}, + {2.9, 0.999208868, 0.982977033}, + {2.904167, 0.999146104, 0.983013093}, + {2.908333, 0.999085844, 0.983049035}, + {2.9125, 0.999028206, 0.983086228}, + {2.916667, 0.99897325, 0.983123243}, + {2.920833, 0.998921216, 0.98316133}, + {2.925, 0.998872042, 0.983199179}, + {2.929167, 0.998825967, 0.983237982}, + {2.933333, 0.998782873, 0.983276546}, + {2.9375, 0.998742998, 0.983315885}, + {2.941667, 0.998706341, 0.983354986}, + {2.945833, 0.998672962, 0.983394682}, + {2.95, 0.998642862, 0.9834342}, + {2.954167, 0.998616099, 0.983474135}, + {2.958333, 0.998592734, 0.983513892}, + {2.9625, 0.998572767, 0.983554006}, + {2.966667, 0.998556137, 0.983593881}, + {2.970833, 0.998542905, 0.983634114}, + {2.975, 0.99853307, 0.983674109}, + {2.979167, 0.998526633, 0.983714342}, + {2.983333, 0.998523533, 0.983754396}, + {2.9875, 0.998523712, 0.98379463}, + {2.991667, 0.998527169, 0.983834684}, + {2.995833, 0.998533845, 0.983874977}, + {3, 0.998543739, 0.983915091}, + {3.004167, 0.998556674, 0.983955443}, + {3.008333, 0.998572707, 0.983995676}, + {3.0125, 0.998591661, 0.984036088}, + {3.016667, 0.998613536, 0.98407644}, + {3.020833, 0.998638153, 0.984117031}, + {3.025, 0.998665512, 0.984157622}, + {3.029167, 0.998695493, 0.984198391}, + {3.033333, 0.998727977, 0.984239221}, + {3.0375, 0.998762906, 0.984280348}, + {3.041667, 0.998800099, 0.984321475}, + {3.045833, 0.998839438, 0.9843629}, + {3.05, 0.998880863, 0.984404445}, + {3.054167, 0.998924255, 0.984446287}, + {3.058333, 0.998969436, 0.984488249}, + {3.0625, 0.999016345, 0.984530509}, + {3.066667, 0.999064803, 0.984572887}, + {3.070833, 0.999114692, 0.984615624}, + {3.075, 0.999165893, 0.98465848}, + {3.079167, 0.999218225, 0.984701633}, + {3.083333, 0.999271631, 0.984744906}, + {3.0875, 0.999325931, 0.984788537}, + {3.091667, 0.999381006, 0.984832227}, + {3.095833, 0.999436736, 0.984876215}, + {3.1, 0.999492943, 0.984920263}, + {3.104167, 0.999549508, 0.984964609}, + {3.108333, 0.999606311, 0.985008955}, + {3.1125, 0.999663234, 0.98505348}, + {3.116667, 0.999720097, 0.985098004}, + {3.120833, 0.99977684, 0.985142648}, + {3.125, 0.999833286, 0.985187292}, + {3.129167, 0.999889314, 0.985231936}, + {3.133333, 0.999944806, 0.98527652}, + {3.1375, 0.999999642, 0.985321045}, + {3.141667, 1.000053763, 0.98536545}, + {3.145833, 1.000106931, 0.985409677}, + {3.15, 1.000159144, 0.985453784}, + {3.154167, 1.000210285, 0.985497534}, + {3.158333, 1.000260115, 0.985541224}, + {3.1625, 1.000308752, 0.985584378}, + {3.166667, 1.000355959, 0.985627472}, + {3.170833, 1.000401735, 0.985669911}, + {3.175, 1.000445843, 0.98571223}, + {3.179167, 1.0004884, 0.985753834}, + {3.183333, 1.00052917, 0.985795259}, + {3.1875, 1.000568032, 0.98583585}, + {3.191667, 1.000605226, 0.985876262}, + {3.195833, 1.000640273, 0.98591572}, + {3.2, 1.000673413, 0.985955}, + {3.204167, 1.000704527, 0.985993266}, + {3.208333, 1.000733614, 0.986031294}, + {3.2125, 1.000760436, 0.986068249}, + {3.216667, 1.000785112, 0.986105025}, + {3.220833, 1.000807524, 0.986140609}, + {3.225, 1.000827789, 0.986176014}, + {3.229167, 1.00084579, 0.986210167}, + {3.233333, 1.000861406, 0.986244142}, + {3.2375, 1.000874758, 0.986276925}, + {3.241667, 1.000885844, 0.986309528}, + {3.245833, 1.000894666, 0.986340821}, + {3.25, 1.000901222, 0.986372054}, + {3.254167, 1.000905395, 0.986401975}, + {3.258333, 1.000907302, 0.986431777}, + {3.2625, 1.000906944, 0.986460388}, + {3.266667, 1.000904441, 0.986488879}, + {3.270833, 1.000899673, 0.986516178}, + {3.275, 1.000892639, 0.986543477}, + {3.279167, 1.000883579, 0.986569583}, + {3.283333, 1.000872493, 0.98659569}, + {3.2875, 1.000859261, 0.986620784}, + {3.291667, 1.000844121, 0.986645818}, + {3.295833, 1.000826955, 0.986669898}, + {3.3, 1.000807881, 0.986694038}, + {3.304167, 1.000787139, 0.986717284}, + {3.308333, 1.000764608, 0.986740589}, + {3.3125, 1.00074029, 0.986763179}, + {3.316667, 1.000714421, 0.986785829}, + {3.320833, 1.000687122, 0.986807883}, + {3.325, 1.000658274, 0.986829996}, + {3.329167, 1.000628114, 0.986851633}, + {3.333333, 1.000596523, 0.986873388}, + {3.3375, 1.00056386, 0.986894786}, + {3.341667, 1.000530124, 0.986916244}, + {3.345833, 1.000495315, 0.986937523}, + {3.35, 1.000459552, 0.986958921}, + {3.354167, 1.000423074, 0.986980259}, + {3.358333, 1.000385761, 0.987001657}, + {3.3625, 1.000347853, 0.987023056}, + {3.366667, 1.000309348, 0.987044632}, + {3.370833, 1.000270367, 0.987066269}, + {3.375, 1.000231028, 0.987088084}, + {3.379167, 1.000191569, 0.987110138}, + {3.383333, 1.000151753, 0.987132251}, + {3.3875, 1.000112057, 0.987154663}, + {3.391667, 1.000072241, 0.987177193}, + {3.395833, 1.000032663, 0.987200141}, + {3.4, 0.999993145, 0.987223148}, + {3.404167, 0.999954045, 0.987246573}, + {3.408333, 0.999915302, 0.987270117}, + {3.4125, 0.999877036, 0.987294137}, + {3.416667, 0.999839365, 0.987318218}, + {3.420833, 0.999802351, 0.987342775}, + {3.425, 0.999765992, 0.987367451}, + {3.429167, 0.999730527, 0.987392604}, + {3.433333, 0.999695897, 0.987417817}, + {3.4375, 0.99966222, 0.987443566}, + {3.441667, 0.999629617, 0.987469375}, + {3.445833, 0.999598086, 0.98749572}, + {3.45, 0.999567688, 0.987522006}, + {3.454167, 0.999538481, 0.987548888}, + {3.458333, 0.999510586, 0.98757571}, + {3.4625, 0.999484062, 0.987603068}, + {3.466667, 0.999458849, 0.987630427}, + {3.470833, 0.999435067, 0.987658262}, + {3.475, 0.999412715, 0.987686098}, + {3.479167, 0.999391854, 0.98771435}, + {3.483333, 0.999372542, 0.987742543}, + {3.4875, 0.999354839, 0.987771213}, + {3.491667, 0.999338627, 0.987799883}, + {3.495833, 0.999324083, 0.987828851}, + {3.5, 0.999311149, 0.987857878}, + {3.504167, 0.999299824, 0.987887204}, + {3.508333, 0.999290168, 0.987916529}, + {3.5125, 0.999282122, 0.987946153}, + {3.516667, 0.999275744, 0.987975776}, + {3.520833, 0.999270976, 0.988005638}, + {3.525, 0.999267876, 0.9880355}, + {3.529167, 0.999266386, 0.98806566}, + {3.533333, 0.999266505, 0.98809576}, + {3.5375, 0.999268234, 0.988126099}, + {3.541667, 0.999271512, 0.988156438}, + {3.545833, 0.99927634, 0.988187015}, + {3.55, 0.999282718, 0.988217533}, + {3.554167, 0.999290526, 0.988248229}, + {3.558333, 0.999299765, 0.988278985}, + {3.5625, 0.999310493, 0.98830986}, + {3.566667, 0.999322534, 0.988340735}, + {3.570833, 0.999335885, 0.988371789}, + {3.575, 0.999350548, 0.988402784}, + {3.579167, 0.999366403, 0.988433957}, + {3.583333, 0.99938345, 0.98846513}, + {3.5875, 0.999401629, 0.988496423}, + {3.591667, 0.999420881, 0.988527715}, + {3.595833, 0.999441147, 0.988559127}, + {3.6, 0.999462366, 0.988590479}, + {3.604167, 0.999484479, 0.98862195}, + {3.608333, 0.999507427, 0.988653421}, + {3.6125, 0.99953115, 0.988684893}, + {3.616667, 0.999555588, 0.988716424}, + {3.620833, 0.999580622, 0.988747954}, + {3.625, 0.999606252, 0.988779485}, + {3.629167, 0.999632418, 0.988810956}, + {3.633333, 0.999659002, 0.988842487}, + {3.6375, 0.999685943, 0.988873959}, + {3.641667, 0.999713242, 0.98890543}, + {3.645833, 0.99974072, 0.988936782}, + {3.65, 0.999768436, 0.988968134}, + {3.654167, 0.999796212, 0.988999367}, + {3.658333, 0.999824107, 0.9890306}, + {3.6625, 0.999851942, 0.989061654}, + {3.666667, 0.999879658, 0.989092648}, + {3.670833, 0.999907255, 0.989123464}, + {3.675, 0.999934673, 0.989154279}, + {3.679167, 0.999961793, 0.989184797}, + {3.683333, 0.999988556, 0.989215255}, + {3.6875, 1.00001502, 0.989245474}, + {3.691667, 1.000041008, 0.989275634}, + {3.695833, 1.0000664, 0.989305437}, + {3.7, 1.000091314, 0.989335179}, + {3.704167, 1.000115633, 0.989364564}, + {3.708333, 1.000139356, 0.98939383}, + {3.7125, 1.000162244, 0.989422739}, + {3.716667, 1.000184536, 0.989451587}, + {3.720833, 1.000205874, 0.989479899}, + {3.725, 1.000226498, 0.989508212}, + {3.729167, 1.000246286, 0.989535987}, + {3.733333, 1.000265121, 0.989563704}, + {3.7375, 1.000283003, 0.989590943}, + {3.741667, 1.000299931, 0.989618063}, + {3.745833, 1.000315905, 0.989644587}, + {3.75, 1.000330806, 0.989671111}, + {3.754167, 1.000344634, 0.989697039}, + {3.758333, 1.000357509, 0.989722848}, + {3.7625, 1.000369191, 0.98974812}, + {3.766667, 1.000379801, 0.989773333}, + {3.770833, 1.000389338, 0.98979789}, + {3.775, 1.000397801, 0.989822447}, + {3.779167, 1.000405073, 0.989846408}, + {3.783333, 1.000411153, 0.98987025}, + {3.7875, 1.00041616, 0.989893556}, + {3.791667, 1.000419974, 0.989916801}, + {3.795833, 1.000422716, 0.989939451}, + {3.8, 1.000424385, 0.989962041}, + {3.804167, 1.000424862, 0.989984095}, + {3.808333, 1.000424266, 0.990006089}, + {3.8125, 1.000422597, 0.990027547}, + {3.816667, 1.000419736, 0.990049005}, + {3.820833, 1.000415921, 0.990069926}, + {3.825, 1.000411034, 0.990090847}, + {3.829167, 1.000405192, 0.990111291}, + {3.833333, 1.000398278, 0.990131736}, + {3.8375, 1.00039053, 0.990151703}, + {3.841667, 1.000381708, 0.990171731}, + {3.845833, 1.000372052, 0.99019134}, + {3.85, 1.000361443, 0.99021095}, + {3.854167, 1.000350118, 0.990230203}, + {3.858333, 1.000337839, 0.990249455}, + {3.8625, 1.000324965, 0.990268469}, + {3.866667, 1.000311255, 0.990287483}, + {3.870833, 1.000296831, 0.990306258}, + {3.875, 1.000281811, 0.990325034}, + {3.879167, 1.000266194, 0.99034363}, + {3.883333, 1.000249982, 0.990362227}, + {3.8875, 1.000233293, 0.990380764}, + {3.891667, 1.000216126, 0.990399241}, + {3.895833, 1.000198603, 0.990417659}, + {3.9, 1.000180602, 0.990436137}, + {3.904167, 1.000162244, 0.990454555}, + {3.908333, 1.000143766, 0.990473032}, + {3.9125, 1.000124931, 0.990491509}, + {3.916667, 1.000105858, 0.990509987}, + {3.920833, 1.000086665, 0.990528524}, + {3.925, 1.000067472, 0.990547061}, + {3.929167, 1.000048161, 0.990565717}, + {3.933333, 1.000028849, 0.990584433}, + {3.9375, 1.000009537, 0.990603209}, + {3.941667, 0.999990344, 0.990622103}, + {3.945833, 0.999971271, 0.990641057}, + {3.95, 0.999952376, 0.990660071}, + {3.954167, 0.99993372, 0.990679264}, + {3.958333, 0.999915302, 0.990698457}, + {3.9625, 0.999897242, 0.990717828}, + {3.966667, 0.999879479, 0.990737259}, + {3.970833, 0.999862075, 0.990756929}, + {3.975, 0.999845088, 0.990776539}, + {3.979167, 0.999828577, 0.990796447}, + {3.983333, 0.999812543, 0.990816295}, + {3.9875, 0.999797046, 0.990836442}, + {3.991667, 0.999782085, 0.990856528}, + {3.995833, 0.999767721, 0.990876913}, + {4, 0.999753952, 0.990897238}, + {4.004167, 0.999740779, 0.990917861}, + {4.008333, 0.999728322, 0.990938425}, + {4.0125, 0.99971652, 0.990959287}, + {4.016667, 0.999705434, 0.990980089}, + {4.020833, 0.999695063, 0.991001189}, + {4.025, 0.999685407, 0.991022229}, + {4.029167, 0.999676526, 0.991043508}, + {4.033333, 0.999668419, 0.991064787}, + {4.0375, 0.999661088, 0.991086245}, + {4.041667, 0.999654531, 0.991107702}, + {4.045833, 0.99964875, 0.991129398}, + {4.05, 0.999643803, 0.991151035}, + {4.054167, 0.99963963, 0.99117291}, + {4.058333, 0.999636233, 0.991194725}, + {4.0625, 0.99963367, 0.991216719}, + {4.066667, 0.999631941, 0.991238713}, + {4.070833, 0.999630928, 0.991260886}, + {4.075, 0.999630749, 0.991283059}, + {4.079167, 0.999631345, 0.991305292}, + {4.083333, 0.999632716, 0.991327584}, + {4.0875, 0.999634802, 0.991349995}, + {4.091667, 0.999637663, 0.991372347}, + {4.095833, 0.999641299, 0.991394877}, + {4.1, 0.999645591, 0.991417348}, + {4.104167, 0.999650598, 0.991439939}, + {4.108333, 0.99965626, 0.991462469}, + {4.1125, 0.999662578, 0.991485119}, + {4.116667, 0.999669552, 0.991507709}, + {4.120833, 0.999677122, 0.991530359}, + {4.125, 0.999685287, 0.991553009}, + {4.129167, 0.99969399, 0.991575718}, + {4.133333, 0.999703228, 0.991598368}, + {4.1375, 0.999713004, 0.991621077}, + {4.141667, 0.999723196, 0.991643786}, + {4.145833, 0.999733865, 0.991666436}, + {4.15, 0.999745011, 0.991689086}, + {4.154167, 0.999756455, 0.991711676}, + {4.158333, 0.999768317, 0.991734326}, + {4.1625, 0.999780476, 0.991756856}, + {4.166667, 0.999792933, 0.991779447}, + {4.170833, 0.999805629, 0.991801858}, + {4.175, 0.999818563, 0.991824329}, + {4.179167, 0.999831676, 0.991846681}, + {4.183333, 0.999844968, 0.991869032}, + {4.1875, 0.999858439, 0.991891265}, + {4.191667, 0.999871969, 0.991913497}, + {4.195833, 0.999885499, 0.991935551}, + {4.2, 0.999899149, 0.991957605}, + {4.204167, 0.999912739, 0.99197948}, + {4.208333, 0.999926329, 0.992001355}, + {4.2125, 0.999939859, 0.992023051}, + {4.216667, 0.99995327, 0.992044747}, + {4.220833, 0.999966562, 0.992066205}, + {4.225, 0.999979734, 0.992087603}, + {4.229167, 0.999992669, 0.992108822}, + {4.233333, 1.000005484, 0.992130041}, + {4.2375, 1.000018001, 0.992150962}, + {4.241667, 1.00003016, 0.992171884}, + {4.245833, 1.0000422, 0.992192566}, + {4.25, 1.000053763, 0.99221319}, + {4.254167, 1.000065088, 0.992233574}, + {4.258333, 1.000076056, 0.9922539}, + {4.2625, 1.000086665, 0.992273927}, + {4.266667, 1.000096798, 0.992293954}, + {4.270833, 1.000106454, 0.992313683}, + {4.275, 1.000115752, 0.992333353}, + {4.279167, 1.000124574, 0.992352784}, + {4.283333, 1.000133038, 0.992372096}, + {4.2875, 1.000140905, 0.992391169}, + {4.291667, 1.000148177, 0.992410183}, + {4.295833, 1.000155091, 0.992428839}, + {4.3, 1.000161409, 0.992447555}, + {4.304167, 1.000167251, 0.992465854}, + {4.308333, 1.000172496, 0.992484212}, + {4.3125, 1.000177264, 0.992502213}, + {4.316667, 1.000181437, 0.992520213}, + {4.320833, 1.000185013, 0.992537856}, + {4.325, 1.000188112, 0.992555499}, + {4.329167, 1.000190616, 0.992572844}, + {4.333333, 1.000192642, 0.992590189}, + {4.3375, 1.000193954, 0.992607176}, + {4.341667, 1.000194788, 0.992624164}, + {4.345833, 1.000195146, 0.992640913}, + {4.35, 1.000194907, 0.992657602}, + {4.354167, 1.000194073, 0.992673993}, + {4.358333, 1.000192881, 0.992690444}, + {4.3625, 1.000190973, 0.992706597}, + {4.366667, 1.000188708, 0.99272275}, + {4.370833, 1.000185847, 0.992738664}, + {4.375, 1.000182509, 0.992754579}, + {4.379167, 1.000178695, 0.992770255}, + {4.383333, 1.000174522, 0.992785931}, + {4.3875, 1.000169754, 0.992801368}, + {4.391667, 1.000164747, 0.992816865}, + {4.395833, 1.000159144, 0.992832184}, + {4.4, 1.000153303, 0.992847502}, + {4.404167, 1.000146985, 0.992862642}, + {4.408333, 1.000140309, 0.992877781}, + {4.4125, 1.000133276, 0.992892802}, + {4.416667, 1.000126004, 0.992907822}, + {4.420833, 1.000118494, 0.992922723}, + {4.425, 1.000110626, 0.992937624}, + {4.429167, 1.00010252, 0.992952466}, + {4.433333, 1.000094175, 0.992967308}, + {4.4375, 1.000085592, 0.99298209}, + {4.441667, 1.00007689, 0.992996871}, + {4.445833, 1.000067949, 0.993011653}, + {4.45, 1.000058889, 0.993026376}, + {4.454167, 1.00004971, 0.993041158}, + {4.458333, 1.000040531, 0.99305588}, + {4.4625, 1.000031233, 0.993070602}, + {4.466667, 1.000021815, 0.993085384}, + {4.470833, 1.000012517, 0.993100107}, + {4.475, 1.000003099, 0.993114889}, + {4.479167, 0.999993742, 0.99312973}, + {4.483333, 0.999984443, 0.993144512}, + {4.4875, 0.999975204, 0.993159413}, + {4.491667, 0.999966025, 0.993174255}, + {4.495833, 0.999956965, 0.993189216}, + {4.5, 0.999948025, 0.993204176}, + {4.504167, 0.999939263, 0.993219137}, + {4.508333, 0.99993062, 0.993234158}, + {4.5125, 0.999922216, 0.993249297}, + {4.516667, 0.999913991, 0.993264377}, + {4.520833, 0.999906003, 0.993279576}, + {4.525, 0.999898255, 0.993294775}, + {4.529167, 0.999890745, 0.993310034}, + {4.533333, 0.999883533, 0.993325353}, + {4.5375, 0.999876559, 0.993340731}, + {4.541667, 0.999869883, 0.993356109}, + {4.545833, 0.999863565, 0.993371606}, + {4.55, 0.999857545, 0.993387103}, + {4.554167, 0.999851882, 0.993402719}, + {4.558333, 0.999846518, 0.993418276}, + {4.5625, 0.999841511, 0.993434012}, + {4.566667, 0.999836922, 0.993449688}, + {4.570833, 0.99983263, 0.993465483}, + {4.575, 0.999828756, 0.993481219}, + {4.579167, 0.999825239, 0.993497133}, + {4.583333, 0.99982208, 0.993512988}, + {4.5875, 0.999819338, 0.993528962}, + {4.591667, 0.999817014, 0.993544877}, + {4.595833, 0.999815047, 0.99356091}, + {4.6, 0.999813497, 0.993576944}, + {4.604167, 0.999812305, 0.993593037}, + {4.608333, 0.99981153, 0.99360913}, + {4.6125, 0.999811113, 0.993625283}, + {4.616667, 0.999811053, 0.993641496}, + {4.620833, 0.999811411, 0.993657649}, + {4.625, 0.999812186, 0.993673861}, + {4.629167, 0.999813259, 0.993690133}, + {4.633333, 0.999814749, 0.993706405}, + {4.6375, 0.999816537, 0.993722677}, + {4.641667, 0.999818742, 0.993738949}, + {4.645833, 0.999821246, 0.993755221}, + {4.65, 0.999824047, 0.993771493}, + {4.654167, 0.999827206, 0.993787825}, + {4.658333, 0.999830663, 0.993804097}, + {4.6625, 0.999834418, 0.993820429}, + {4.666667, 0.999838471, 0.993836701}, + {4.670833, 0.999842763, 0.993852973}, + {4.675, 0.999847353, 0.993869245}, + {4.679167, 0.999852121, 0.993885517}, + {4.683333, 0.999857187, 0.99390173}, + {4.6875, 0.999862432, 0.993917942}, + {4.691667, 0.999867916, 0.993934095}, + {4.695833, 0.999873579, 0.993950248}, + {4.7, 0.99987936, 0.993966401}, + {4.704167, 0.99988538, 0.993982494}, + {4.708333, 0.99989146, 0.993998528}, + {4.7125, 0.999897718, 0.994014502}, + {4.716667, 0.999904037, 0.994030535}, + {4.720833, 0.999910533, 0.99404639}, + {4.725, 0.99991703, 0.994062304}, + {4.729167, 0.999923587, 0.9940781}, + {4.733333, 0.999930203, 0.994093835}, + {4.7375, 0.999936879, 0.994109511}, + {4.741667, 0.999943554, 0.994125187}, + {4.745833, 0.999950171, 0.994140744}, + {4.75, 0.999956846, 0.994156241}, + {4.754167, 0.999963462, 0.994171679}, + {4.758333, 0.999970019, 0.994187057}, + {4.7625, 0.999976516, 0.994202256}, + {4.766667, 0.999982893, 0.994217515}, + {4.770833, 0.999989212, 0.994232595}, + {4.775, 0.99999547, 0.994247675}, + {4.779167, 1.00000155, 0.994262576}, + {4.783333, 1.00000751, 0.994277477}, + {4.7875, 1.000013351, 0.994292259}, + {4.791667, 1.000018954, 0.994306982}, + {4.795833, 1.000024438, 0.994321525}, + {4.8, 1.000029802, 0.994336069}, + {4.804167, 1.000034928, 0.994350433}, + {4.808333, 1.000039816, 0.994364798}, + {4.8125, 1.000044584, 0.994378984}, + {4.816667, 1.000048995, 0.99439317}, + {4.820833, 1.000053287, 0.994407177}, + {4.825, 1.00005734, 0.994421124}, + {4.829167, 1.000061154, 0.994434953}, + {4.833333, 1.000064611, 0.994448721}, + {4.8375, 1.000067949, 0.994462311}, + {4.841667, 1.000071049, 0.994475901}, + {4.845833, 1.000073791, 0.994489312}, + {4.85, 1.000076294, 0.994502723}, + {4.854167, 1.000078559, 0.994515955}, + {4.858333, 1.000080466, 0.994529188}, + {4.8625, 1.000082254, 0.994542241}, + {4.866667, 1.000083685, 0.994555235}, + {4.870833, 1.000084758, 0.99456811}, + {4.875, 1.000085711, 0.994580984}, + {4.879167, 1.000086308, 0.99459368}, + {4.883333, 1.000086665, 0.994606376}, + {4.8875, 1.000086784, 0.994618893}, + {4.891667, 1.000086546, 0.99463141}, + {4.895833, 1.000086069, 0.994643748}, + {4.9, 1.000085354, 0.994656146}, + {4.904167, 1.0000844, 0.994668365}, + {4.908333, 1.000083208, 0.994680583}, + {4.9125, 1.000081778, 0.994692683}, + {4.916667, 1.000080109, 0.994704783}, + {4.920833, 1.000078201, 0.994716704}, + {4.925, 1.000076056, 0.994728684}, + {4.929167, 1.000073791, 0.994740546}, + {4.933333, 1.000071168, 0.994752407}, + {4.9375, 1.000068426, 0.994764149}, + {4.941667, 1.000065565, 0.994775891}, + {4.945833, 1.000062346, 0.994787514}, + {4.95, 1.000059128, 0.994799197}, + {4.954167, 1.000055671, 0.99481076}, + {4.958333, 1.000052094, 0.994822323}, + {4.9625, 1.000048399, 0.994833887}, + {4.966667, 1.000044465, 0.99484539}, + {4.970833, 1.000040531, 0.994856834}, + {4.975, 1.000036478, 0.994868279}, + {4.979167, 1.000032187, 0.994879723}, + {4.983333, 1.000028014, 0.994891107}, + {4.9875, 1.000023603, 0.994902492}, + {4.991667, 1.000019193, 0.994913876}, + {4.995833, 1.000014782, 0.994925261}, + {5, 1.000010252, 0.994936585}, + {5.004167, 1.000005722, 0.99494797}, + {5.008333, 1.000001192, 0.994959295}, + {5.0125, 0.999996662, 0.99497062}, + {5.016667, 0.999992073, 0.994981945}, + {5.020833, 0.999987543, 0.994993329}, + {5.025, 0.999983072, 0.995004654}, + {5.029167, 0.999978602, 0.995015979}, + {5.033333, 0.999974132, 0.995027363}, + {5.0375, 0.99996978, 0.995038688}, + {5.041667, 0.999965489, 0.995050073}, + {5.045833, 0.999961257, 0.995061457}, + {5.05, 0.999957144, 0.995072842}, + {5.054167, 0.999953091, 0.995084286}, + {5.058333, 0.999949157, 0.99509567}, + {5.0625, 0.999945343, 0.995107114}, + {5.066667, 0.999941587, 0.995118558}, + {5.070833, 0.999938011, 0.995130002}, + {5.075, 0.999934614, 0.995141506}, + {5.079167, 0.999931276, 0.99515301}, + {5.083333, 0.999928117, 0.995164514}, + {5.0875, 0.999925137, 0.995176017}, + {5.091667, 0.999922276, 0.995187581}, + {5.095833, 0.999919593, 0.995199144}, + {5.1, 0.99991709, 0.995210707}, + {5.104167, 0.999914765, 0.99522233}, + {5.108333, 0.99991262, 0.995233953}, + {5.1125, 0.999910653, 0.995245576}, + {5.116667, 0.999908865, 0.995257199}, + {5.120833, 0.999907255, 0.995268881}, + {5.125, 0.999905825, 0.995280504}, + {5.129167, 0.999904573, 0.995292187}, + {5.133333, 0.99990356, 0.995303869}, + {5.1375, 0.999902725, 0.995315611}, + {5.141667, 0.99990201, 0.995327294}, + {5.145833, 0.999901593, 0.995339036}, + {5.15, 0.999901295, 0.995350778}, + {5.154167, 0.999901176, 0.99536252}, + {5.158333, 0.999901295, 0.995374262}, + {5.1625, 0.999901593, 0.995386004}, + {5.166667, 0.99990201, 0.995397747}, + {5.170833, 0.999902666, 0.995409489}, + {5.175, 0.9999035, 0.995421231}, + {5.179167, 0.999904454, 0.995432973}, + {5.183333, 0.999905646, 0.995444715}, + {5.1875, 0.999906957, 0.995456457}, + {5.191667, 0.999908388, 0.995468199}, + {5.195833, 0.999910057, 0.995479882}, + {5.2, 0.999911845, 0.995491624}, + {5.204167, 0.999913752, 0.995503306}, + {5.208333, 0.999915779, 0.995514989}, + {5.2125, 0.999917984, 0.995526671}, + {5.216667, 0.999920249, 0.995538294}, + {5.220833, 0.999922693, 0.995549917}, + {5.225, 0.999925196, 0.99556154}, + {5.229167, 0.999927878, 0.995573103}, + {5.233333, 0.999930561, 0.995584726}, + {5.2375, 0.999933362, 0.99559623}, + {5.241667, 0.999936283, 0.995607734}, + {5.245833, 0.999939263, 0.995619237}, + {5.25, 0.999942303, 0.995630682}, + {5.254167, 0.999945343, 0.995642126}, + {5.258333, 0.999948502, 0.99565351}, + {5.2625, 0.999951661, 0.995664835}, + {5.266667, 0.999954879, 0.99567616}, + {5.270833, 0.999958098, 0.995687425}, + {5.275, 0.999961376, 0.99569869}, + {5.279167, 0.999964654, 0.995709896}, + {5.283333, 0.999967933, 0.995721042}, + {5.2875, 0.999971151, 0.995732129}, + {5.291667, 0.99997443, 0.995743215}, + {5.295833, 0.999977648, 0.995754182}, + {5.3, 0.999980807, 0.995765209}, + {5.304167, 0.999983966, 0.995776117}, + {5.308333, 0.999987125, 0.995787024}, + {5.3125, 0.999990165, 0.995797813}, + {5.316667, 0.999993205, 0.995808601}, + {5.320833, 0.999996126, 0.995819271}, + {5.325, 0.999999046, 0.995829999}, + {5.329167, 1.000001788, 0.995840549}, + {5.333333, 1.00000453, 0.995851159}, + {5.3375, 1.000007153, 0.99586159}, + {5.341667, 1.000009775, 0.99587208}, + {5.345833, 1.000012159, 0.995882452}, + {5.35, 1.000014544, 0.995892823}, + {5.354167, 1.000016809, 0.995903075}, + {5.358333, 1.000018954, 0.995913327}, + {5.3625, 1.000020981, 0.99592346}, + {5.366667, 1.000022888, 0.995933592}, + {5.370833, 1.000024676, 0.995943606}, + {5.375, 1.000026345, 0.995953619}, + {5.379167, 1.000027895, 0.995963573}, + {5.383333, 1.000029325, 0.995973468}, + {5.3875, 1.000030637, 0.995983303}, + {5.391667, 1.000031829, 0.995993078}, + {5.395833, 1.000032783, 0.996002793}, + {5.4, 1.000033736, 0.996012509}, + {5.404167, 1.000034451, 0.996022105}, + {5.408333, 1.000035167, 0.996031642}, + {5.4125, 1.000035644, 0.996041179}, + {5.416667, 1.000036001, 0.996050656}, + {5.420833, 1.00003624, 0.996060073}, + {5.425, 1.000036359, 0.996069431}, + {5.429167, 1.00003624, 0.99607873}, + {5.433333, 1.00003612, 0.996088028}, + {5.4375, 1.000035882, 0.996097267}, + {5.441667, 1.000035405, 0.996106446}, + {5.445833, 1.000034928, 0.996115625}, + {5.45, 1.000034213, 0.996124744}, + {5.454167, 1.000033498, 0.996133745}, + {5.458333, 1.000032663, 0.996142805}, + {5.4625, 1.00003159, 0.996151805}, + {5.466667, 1.000030518, 0.996160746}, + {5.470833, 1.000029325, 0.996169686}, + {5.475, 1.000028014, 0.996178567}, + {5.479167, 1.000026703, 0.996187449}, + {5.483333, 1.000025153, 0.99619627}, + {5.4875, 1.000023603, 0.996205091}, + {5.491667, 1.000022054, 0.996213853}, + {5.495833, 1.000020266, 0.996222615}, + {5.5, 1.000018477, 0.996231318}, + {5.504167, 1.000016689, 0.99624002}, + {5.508333, 1.000014782, 0.996248722}, + {5.5125, 1.000012755, 0.996257365}, + {5.516667, 1.000010729, 0.996266007}, + {5.520833, 1.000008702, 0.99627465}, + {5.525, 1.000006676, 0.996283293}, + {5.529167, 1.00000453, 0.996291876}, + {5.533333, 1.000002384, 0.996300459}, + {5.5375, 1.000000238, 0.996309042}, + {5.541667, 0.999998033, 0.996317625}, + {5.545833, 0.999995828, 0.996326149}, + {5.55, 0.999993622, 0.996334672}, + {5.554167, 0.999991417, 0.996343195}, + {5.558333, 0.999989212, 0.996351779}, + {5.5625, 0.999987006, 0.996360302}, + {5.566667, 0.99998486, 0.996368825}, + {5.570833, 0.999982715, 0.996377289}, + {5.575, 0.999980569, 0.996385813}, + {5.579167, 0.999978483, 0.996394336}, + {5.583333, 0.999976397, 0.99640286}, + {5.5875, 0.99997443, 0.996411324}, + {5.591667, 0.999972463, 0.996419847}, + {5.595833, 0.999970496, 0.99642837}, + {5.6, 0.999968648, 0.996436894}, + {5.604167, 0.99996686, 0.996445358}, + {5.608333, 0.999965072, 0.996453881}, + {5.6125, 0.999963403, 0.996462405}, + {5.616667, 0.999961793, 0.996470869}, + {5.620833, 0.999960244, 0.996479392}, + {5.625, 0.999958754, 0.996487916}, + {5.629167, 0.999957383, 0.996496439}, + {5.633333, 0.999956071, 0.996504962}, + {5.6375, 0.99995482, 0.996513486}, + {5.641667, 0.999953687, 0.996522009}, + {5.645833, 0.999952614, 0.996530533}, + {5.65, 0.999951661, 0.996539056}, + {5.654167, 0.999950767, 0.99654758}, + {5.658333, 0.999949932, 0.996556044}, + {5.6625, 0.999949276, 0.996564627}, + {5.666667, 0.999948621, 0.99657315}, + {5.670833, 0.999948144, 0.996581614}, + {5.675, 0.999947667, 0.996590137}, + {5.679167, 0.999947369, 0.996598661}, + {5.683333, 0.999947131, 0.996607184}, + {5.6875, 0.999946952, 0.996615708}, + {5.691667, 0.999946892, 0.996624231}, + {5.695833, 0.999946952, 0.996632755}, + {5.7, 0.999947071, 0.996641219}, + {5.704167, 0.999947309, 0.996649742}, + {5.708333, 0.999947608, 0.996658266}, + {5.7125, 0.999947965, 0.996666729}, + {5.716667, 0.999948442, 0.996675193}, + {5.720833, 0.999948978, 0.996683657}, + {5.725, 0.999949634, 0.996692121}, + {5.729167, 0.999950349, 0.996700585}, + {5.733333, 0.999951124, 0.996709049}, + {5.7375, 0.999952018, 0.996717453}, + {5.741667, 0.999952912, 0.996725857}, + {5.745833, 0.999953926, 0.996734262}, + {5.75, 0.999954998, 0.996742666}, + {5.754167, 0.999956131, 0.99675101}, + {5.758333, 0.999957263, 0.996759415}, + {5.7625, 0.999958515, 0.9967677}, + {5.766667, 0.999959826, 0.996776044}, + {5.770833, 0.999961138, 0.996784329}, + {5.775, 0.999962509, 0.996792674}, + {5.779167, 0.999963939, 0.9968009}, + {5.783333, 0.99996537, 0.996809185}, + {5.7875, 0.99996686, 0.99681735}, + {5.791667, 0.99996835, 0.996825576}, + {5.795833, 0.9999699, 0.996833742}, + {5.8, 0.999971449, 0.996841908}, + {5.804167, 0.999972999, 0.996850014}, + {5.808333, 0.999974608, 0.99685812}, + {5.8125, 0.999976218, 0.996866167}, + {5.816667, 0.999977827, 0.996874273}, + {5.820833, 0.999979436, 0.99688226}, + {5.825, 0.999980986, 0.996890247}, + {5.829167, 0.999982595, 0.996898234}, + {5.833333, 0.999984205, 0.996906161}, + {5.8375, 0.999985754, 0.996914029}, + {5.841667, 0.999987304, 0.996921897}, + {5.845833, 0.999988854, 0.996929765}, + {5.85, 0.999990344, 0.996937573}, + {5.854167, 0.999991834, 0.996945322}, + {5.858333, 0.999993324, 0.99695307}, + {5.8625, 0.999994755, 0.996960759}, + {5.866667, 0.999996126, 0.996968508}, + {5.870833, 0.999997497, 0.996976137}, + {5.875, 0.999998748, 0.996983767}, + {5.879167, 1, 0.996991277}, + {5.883333, 1.000001311, 0.996998847}, + {5.8875, 1.000002384, 0.997006357}, + {5.891667, 1.000003576, 0.997013867}, + {5.895833, 1.000004649, 0.997021258}, + {5.9, 1.000005603, 0.997028708}, + {5.904167, 1.000006557, 0.99703604}, + {5.908333, 1.00000751, 0.997043431}, + {5.9125, 1.000008345, 0.997050703}, + {5.916667, 1.00000906, 0.997057974}, + {5.920833, 1.000009775, 0.997065246}, + {5.925, 1.00001049, 0.997072458}, + {5.929167, 1.000011086, 0.997079611}, + {5.933333, 1.000011563, 0.997086763}, + {5.9375, 1.00001204, 0.997093856}, + {5.941667, 1.000012398, 0.997100949}, + {5.945833, 1.000012755, 0.997107983}, + {5.95, 1.000012994, 0.997115016}, + {5.954167, 1.000013232, 0.99712199}, + {5.958333, 1.000013351, 0.997128963}, + {5.9625, 1.000013351, 0.997135878}, + {5.966667, 1.000013471, 0.997142792}, + {5.970833, 1.000013351, 0.997149646}, + {5.975, 1.000013232, 0.997156501}, + {5.979167, 1.000013113, 0.997163296}, + {5.983333, 1.000012875, 0.99717015}, + {5.9875, 1.000012517, 0.997176886}, + {5.991667, 1.000012159, 0.997183621}, + {5.995833, 1.000011802, 0.997190356}, + {6, 1.000011325, 0.997197032}, + {6.004167, 1.000010729, 0.997203708}, + {6.008333, 1.000010252, 0.997210383}, + {6.0125, 1.000009656, 0.997217}, + {6.016667, 1.000008941, 0.997223616}, + {6.020833, 1.000008225, 0.997230172}, + {6.025, 1.00000751, 0.997236729}, + {6.029167, 1.000006676, 0.997243285}, + {6.033333, 1.00000596, 0.997249842}, + {6.0375, 1.000005007, 0.997256339}, + {6.041667, 1.000004172, 0.997262836}, + {6.045833, 1.000003219, 0.997269332}, + {6.05, 1.000002265, 0.99727577}, + {6.054167, 1.000001311, 0.997282207}, + {6.058333, 1.000000358, 0.997288644}, + {6.0625, 0.999999344, 0.997295082}, + {6.066667, 0.999998331, 0.997301519}, + {6.070833, 0.999997258, 0.997307897}, + {6.075, 0.999996245, 0.997314274}, + {6.079167, 0.999995172, 0.997320652}, + {6.083333, 0.999994099, 0.99732703}, + {6.0875, 0.999993026, 0.997333407}, + {6.091667, 0.999992013, 0.997339785}, + {6.095833, 0.99999094, 0.997346103}, + {6.1, 0.999989867, 0.997352421}, + {6.104167, 0.999988794, 0.997358739}, + {6.108333, 0.999987781, 0.997365057}, + {6.1125, 0.999986768, 0.997371376}, + {6.116667, 0.999985754, 0.997377694}, + {6.120833, 0.999984741, 0.997384012}, + {6.125, 0.999983788, 0.99739027}, + {6.129167, 0.999982834, 0.997396588}, + {6.133333, 0.99998188, 0.997402847}, + {6.1375, 0.999980986, 0.997409165}, + {6.141667, 0.999980092, 0.997415423}, + {6.145833, 0.999979258, 0.997421682}, + {6.15, 0.999978423, 0.99742794}, + {6.154167, 0.999977648, 0.997434199}, + {6.158333, 0.999976933, 0.997440457}, + {6.1625, 0.999976218, 0.997446716}, + {6.166667, 0.999975562, 0.997452974}, + {6.170833, 0.999974906, 0.997459233}, + {6.175, 0.99997431, 0.997465432}, + {6.179167, 0.999973774, 0.99747169}, + {6.183333, 0.999973238, 0.997477889}, + {6.1875, 0.999972761, 0.997484148}, + {6.191667, 0.999972343, 0.997490346}, + {6.195833, 0.999971986, 0.997496605}, + {6.2, 0.999971628, 0.997502804}, + {6.204167, 0.99997133, 0.997509003}, + {6.208333, 0.999971092, 0.997515202}, + {6.2125, 0.999970913, 0.9975214}, + {6.216667, 0.999970734, 0.997527599}, + {6.220833, 0.999970615, 0.997533798}, + {6.225, 0.999970555, 0.997539937}, + {6.229167, 0.999970555, 0.997546136}, + {6.233333, 0.999970555, 0.997552276}, + {6.2375, 0.999970615, 0.997558475}, + {6.241667, 0.999970734, 0.997564614}, + {6.245833, 0.999970853, 0.997570753}, + {6.25, 0.999971092, 0.997576892}, + {6.254167, 0.99997133, 0.997583032}, + {6.258333, 0.999971569, 0.997589111}, + {6.2625, 0.999971926, 0.997595251}, + {6.266667, 0.999972284, 0.99760133}, + {6.270833, 0.999972641, 0.99760741}, + {6.275, 0.999973059, 0.99761349}, + {6.279167, 0.999973536, 0.997619569}, + {6.283333, 0.999974012, 0.997625649}, + {6.2875, 0.999974549, 0.997631669}, + {6.291667, 0.999975085, 0.997637689}, + {6.295833, 0.999975681, 0.997643709}, + {6.3, 0.999976277, 0.997649729}, + {6.304167, 0.999976933, 0.997655749}, + {6.308333, 0.999977589, 0.99766171}, + {6.3125, 0.999978244, 0.99766767}, + {6.316667, 0.99997896, 0.997673631}, + {6.320833, 0.999979675, 0.997679532}, + {6.325, 0.99998039, 0.997685492}, + {6.329167, 0.999981165, 0.997691393}, + {6.333333, 0.99998188, 0.997697234}, + {6.3375, 0.999982655, 0.997703135}, + {6.341667, 0.99998343, 0.997708976}, + {6.345833, 0.999984205, 0.997714818}, + {6.35, 0.999985039, 0.997720659}, + {6.354167, 0.999985814, 0.99772644}, + {6.358333, 0.999986589, 0.997732222}, + {6.3625, 0.999987364, 0.997737944}, + {6.366667, 0.999988139, 0.997743726}, + {6.370833, 0.999988973, 0.997749448}, + {6.375, 0.999989748, 0.99775517}, + {6.379167, 0.999990463, 0.997760832}, + {6.383333, 0.999991238, 0.997766495}, + {6.3875, 0.999992013, 0.997772098}, + {6.391667, 0.999992728, 0.99777776}, + {6.395833, 0.999993443, 0.997783363}, + {6.4, 0.999994159, 0.997788966}, + {6.404167, 0.999994814, 0.997794509}, + {6.408333, 0.99999547, 0.997800052}, + {6.4125, 0.999996126, 0.997805536}, + {6.416667, 0.999996781, 0.997811079}, + {6.420833, 0.999997377, 0.997816503}, + {6.425, 0.999997973, 0.997821987}, + {6.429167, 0.99999851, 0.997827411}, + {6.433333, 0.999999046, 0.997832835}, + {6.4375, 0.999999523, 0.997838199}, + {6.441667, 1, 0.997843623}, + {6.445833, 1.000000477, 0.997848928}, + {6.45, 1.000000834, 0.997854292}, + {6.454167, 1.000001192, 0.997859597}, + {6.458333, 1.00000155, 0.997864902}, + {6.4625, 1.000001907, 0.997870147}, + {6.466667, 1.000002265, 0.997875392}, + {6.470833, 1.000002503, 0.997880638}, + {6.475, 1.000002742, 0.997885823}, + {6.479167, 1.000002861, 0.997891009}, + {6.483333, 1.000003099, 0.997896194}, + {6.4875, 1.000003219, 0.99790132}, + {6.491667, 1.000003338, 0.997906446}, + {6.495833, 1.000003457, 0.997911572}, + {6.5, 1.000003457, 0.997916639}, + {6.504167, 1.000003457, 0.997921705}, + {6.508333, 1.000003457, 0.997926772}, + {6.5125, 1.000003338, 0.997931838}, + {6.516667, 1.000003338, 0.997936845}, + {6.520833, 1.000003219, 0.997941852}, + {6.525, 1.000003099, 0.997946858}, + {6.529167, 1.000002861, 0.997951806}, + {6.533333, 1.000002742, 0.997956753}, + {6.5375, 1.000002503, 0.9979617}, + {6.541667, 1.000002265, 0.997966647}, + {6.545833, 1.000002027, 0.997971535}, + {6.55, 1.000001669, 0.997976422}, + {6.554167, 1.000001311, 0.99798131}, + {6.558333, 1.000001073, 0.997986197}, + {6.5625, 1.000000715, 0.997991025}, + {6.566667, 1.000000238, 0.997995913}, + {6.570833, 0.999999881, 0.998000741}, + {6.575, 0.999999523, 0.998005509}, + {6.579167, 0.999999046, 0.998010337}, + {6.583333, 0.999998629, 0.998015106}, + {6.5875, 0.999998152, 0.998019934}, + {6.591667, 0.999997735, 0.998024702}, + {6.595833, 0.999997258, 0.998029411}, + {6.6, 0.999996781, 0.998034179}, + {6.604167, 0.999996245, 0.998038948}, + {6.608333, 0.999995768, 0.998043656}, + {6.6125, 0.999995232, 0.998048365}, + {6.616667, 0.999994755, 0.998053074}, + {6.620833, 0.999994218, 0.998057783}, + {6.625, 0.999993742, 0.998062491}, + {6.629167, 0.999993205, 0.998067141}, + {6.633333, 0.999992728, 0.998071849}, + {6.6375, 0.999992192, 0.998076499}, + {6.641667, 0.999991715, 0.998081207}, + {6.645833, 0.999991179, 0.998085856}, + {6.65, 0.999990702, 0.998090506}, + {6.654167, 0.999990225, 0.998095095}, + {6.658333, 0.999989748, 0.998099744}, + {6.6625, 0.999989271, 0.998104393}, + {6.666667, 0.999988794, 0.998108983}, + {6.670833, 0.999988377, 0.998113632}, + {6.675, 0.99998796, 0.998118222}, + {6.679167, 0.999987543, 0.998122811}, + {6.683333, 0.999987125, 0.998127401}, + {6.6875, 0.999986708, 0.99813199}, + {6.691667, 0.999986351, 0.99813658}, + {6.695833, 0.999985993, 0.99814117}, + {6.7, 0.999985635, 0.998145759}, + {6.704167, 0.999985337, 0.998150289}, + {6.708333, 0.999985039, 0.998154879}, + {6.7125, 0.999984741, 0.998159409}, + {6.716667, 0.999984503, 0.998163998}, + {6.720833, 0.999984264, 0.998168528}, + {6.725, 0.999984026, 0.998173058}, + {6.729167, 0.999983847, 0.998177588}, + {6.733333, 0.999983668, 0.998182118}, + {6.7375, 0.99998349, 0.998186648}, + {6.741667, 0.99998337, 0.998191178}, + {6.745833, 0.999983251, 0.998195648}, + {6.75, 0.999983132, 0.998200178}, + {6.754167, 0.999983072, 0.998204648}, + {6.758333, 0.999983072, 0.998209178}, + {6.7625, 0.999983013, 0.998213649}, + {6.766667, 0.999983013, 0.998218119}, + {6.770833, 0.999983013, 0.998222589}, + {6.775, 0.999983072, 0.99822706}, + {6.779167, 0.999983132, 0.99823153}, + {6.783333, 0.999983251, 0.998235941}, + {6.7875, 0.999983311, 0.998240411}, + {6.791667, 0.99998343, 0.998244822}, + {6.795833, 0.999983609, 0.998249233}, + {6.8, 0.999983728, 0.998253644}, + {6.804167, 0.999983907, 0.998258054}, + {6.808333, 0.999984145, 0.998262465}, + {6.8125, 0.999984324, 0.998266876}, + {6.816667, 0.999984562, 0.998271227}, + {6.820833, 0.999984801, 0.998275638}, + {6.825, 0.999985099, 0.998279989}, + {6.829167, 0.999985337, 0.99828434}, + {6.833333, 0.999985635, 0.998288691}, + {6.8375, 0.999985933, 0.998292983}, + {6.841667, 0.999986291, 0.998297334}, + {6.845833, 0.999986589, 0.998301625}, + {6.85, 0.999986947, 0.998305976}, + {6.854167, 0.999987304, 0.998310208}, + {6.858333, 0.999987662, 0.9983145}, + {6.8625, 0.999988019, 0.998318791}, + {6.866667, 0.999988377, 0.998323023}, + {6.870833, 0.999988735, 0.998327315}, + {6.875, 0.999989152, 0.998331547}, + {6.879167, 0.99998951, 0.998335719}, + {6.883333, 0.999989927, 0.998339951}, + {6.8875, 0.999990284, 0.998344183}, + {6.891667, 0.999990702, 0.998348355}, + {6.895833, 0.999991059, 0.998352528}, + {6.9, 0.999991477, 0.9983567}, + {6.904167, 0.999991834, 0.998360813}, + {6.908333, 0.999992251, 0.998364985}, + {6.9125, 0.999992609, 0.998369098}, + {6.916667, 0.999993026, 0.99837321}, + {6.920833, 0.999993384, 0.998377264}, + {6.925, 0.999993742, 0.998381376}, + {6.929167, 0.999994099, 0.998385429}, + {6.933333, 0.999994457, 0.998389482}, + {6.9375, 0.999994814, 0.998393536}, + {6.941667, 0.999995172, 0.998397589}, + {6.945833, 0.99999547, 0.998401582}, + {6.95, 0.999995768, 0.998405576}, + {6.954167, 0.999996126, 0.998409569}, + {6.958333, 0.999996424, 0.998413563}, + {6.9625, 0.999996662, 0.998417497}, + {6.966667, 0.99999696, 0.99842149}, + {6.970833, 0.999997199, 0.998425424}, + {6.975, 0.999997497, 0.998429298}, + {6.979167, 0.999997735, 0.998433232}, + {6.983333, 0.999997914, 0.998437107}, + {6.9875, 0.999998152, 0.998440981}, + {6.991667, 0.999998331, 0.998444855}, + {6.995833, 0.99999851, 0.99844873}, + {7, 0.999998689, 0.998452544}, + {7.004167, 0.999998808, 0.998456359}, + {7.008333, 0.999998927, 0.998460233}, + {7.0125, 0.999999046, 0.998463988}, + {7.016667, 0.999999166, 0.998467803}, + {7.020833, 0.999999225, 0.998471558}, + {7.025, 0.999999344, 0.998475313}, + {7.029167, 0.999999404, 0.998479068}, + {7.033333, 0.999999404, 0.998482823}, + {7.0375, 0.999999464, 0.998486519}, + {7.041667, 0.999999464, 0.998490274}, + {7.045833, 0.999999464, 0.998493969}, + {7.05, 0.999999404, 0.998497665}, + {7.054167, 0.999999404, 0.99850136}, + {7.058333, 0.999999344, 0.998504996}, + {7.0625, 0.999999285, 0.998508692}, + {7.066667, 0.999999225, 0.998512328}, + {7.070833, 0.999999106, 0.998515964}, + {7.075, 0.999998987, 0.998519599}, + {7.079167, 0.999998868, 0.998523176}, + {7.083333, 0.999998748, 0.998526812}, + {7.0875, 0.999998629, 0.998530388}, + {7.091667, 0.99999845, 0.998533964}, + {7.095833, 0.999998331, 0.99853754}, + {7.1, 0.999998152, 0.998541117}, + {7.104167, 0.999997973, 0.998544693}, + {7.108333, 0.999997795, 0.99854821}, + {7.1125, 0.999997616, 0.998551726}, + {7.116667, 0.999997377, 0.998555303}, + {7.120833, 0.999997199, 0.998558819}, + {7.125, 0.99999696, 0.998562336}, + {7.129167, 0.999996722, 0.998565793}, + {7.133333, 0.999996483, 0.99856931}, + {7.1375, 0.999996305, 0.998572826}, + {7.141667, 0.999996066, 0.998576283}, + {7.145833, 0.999995828, 0.998579741}, + {7.15, 0.999995589, 0.998583198}, + {7.154167, 0.999995351, 0.998586655}, + {7.158333, 0.999995053, 0.998590112}, + {7.1625, 0.999994814, 0.998593569}, + {7.166667, 0.999994576, 0.998597026}, + {7.170833, 0.999994338, 0.998600423}, + {7.175, 0.999994099, 0.99860388}, + {7.179167, 0.999993861, 0.998607278}, + {7.183333, 0.999993622, 0.998610675}, + {7.1875, 0.999993384, 0.998614073}, + {7.191667, 0.999993145, 0.99861753}, + {7.195833, 0.999992907, 0.998620868}, + {7.2, 0.999992728, 0.998624265}, + {7.204167, 0.99999249, 0.998627663}, + {7.208333, 0.999992311, 0.99863106}, + {7.2125, 0.999992073, 0.998634398}, + {7.216667, 0.999991894, 0.998637795}, + {7.220833, 0.999991715, 0.998641133}, + {7.225, 0.999991536, 0.998644471}, + {7.229167, 0.999991357, 0.998647809}, + {7.233333, 0.999991179, 0.998651147}, + {7.2375, 0.999991, 0.998654485}, + {7.241667, 0.99999088, 0.998657823}, + {7.245833, 0.999990702, 0.99866116}, + {7.25, 0.999990582, 0.998664498}, + {7.254167, 0.999990463, 0.998667777}, + {7.258333, 0.999990344, 0.998671114}, + {7.2625, 0.999990225, 0.998674393}, + {7.266667, 0.999990165, 0.998677671}, + {7.270833, 0.999990106, 0.998681009}, + {7.275, 0.999989986, 0.998684287}, + {7.279167, 0.999989927, 0.998687565}, + {7.283333, 0.999989927, 0.998690844}, + {7.2875, 0.999989867, 0.998694062}, + {7.291667, 0.999989867, 0.99869734}, + {7.295833, 0.999989808, 0.998700619}, + {7.3, 0.999989808, 0.998703837}, + {7.304167, 0.999989808, 0.998707116}, + {7.308333, 0.999989867, 0.998710334}, + {7.3125, 0.999989867, 0.998713553}, + {7.316667, 0.999989927, 0.998716831}, + {7.320833, 0.999989927, 0.99872005}, + {7.325, 0.999989986, 0.998723269}, + {7.329167, 0.999990046, 0.998726428}, + {7.333333, 0.999990165, 0.998729646}, + {7.3375, 0.999990225, 0.998732865}, + {7.341667, 0.999990344, 0.998736024}, + {7.345833, 0.999990404, 0.998739183}, + {7.35, 0.999990523, 0.998742402}, + {7.354167, 0.999990642, 0.998745561}, + {7.358333, 0.999990761, 0.99874872}, + {7.3625, 0.99999094, 0.998751879}, + {7.366667, 0.999991059, 0.998755038}, + {7.370833, 0.999991238, 0.998758137}, + {7.375, 0.999991357, 0.998761296}, + {7.379167, 0.999991536, 0.998764396}, + {7.383333, 0.999991715, 0.998767495}, + {7.3875, 0.999991834, 0.998770654}, + {7.391667, 0.999992013, 0.998773754}, + {7.395833, 0.999992192, 0.998776793}, + {7.4, 0.999992371, 0.998779893}, + {7.404167, 0.999992549, 0.998782992}, + {7.408333, 0.999992788, 0.998786032}, + {7.4125, 0.999992967, 0.998789132}, + {7.416667, 0.999993145, 0.998792171}, + {7.420833, 0.999993324, 0.998795211}, + {7.425, 0.999993563, 0.998798251}, + {7.429167, 0.999993742, 0.998801291}, + {7.433333, 0.99999392, 0.998804271}, + {7.4375, 0.999994099, 0.998807311}, + {7.441667, 0.999994338, 0.998810291}, + {7.445833, 0.999994516, 0.998813272}, + {7.45, 0.999994695, 0.998816252}, + {7.454167, 0.999994874, 0.998819232}, + {7.458333, 0.999995053, 0.998822212}, + {7.4625, 0.999995232, 0.998825133}, + {7.466667, 0.99999541, 0.998828113}, + {7.470833, 0.999995589, 0.998831034}, + {7.475, 0.999995768, 0.998833954}, + {7.479167, 0.999995947, 0.998836875}, + {7.483333, 0.999996126, 0.998839796}, + {7.4875, 0.999996305, 0.998842716}, + {7.491667, 0.999996424, 0.998845577}, + {7.495833, 0.999996603, 0.998848498}, + {7.5, 0.999996722, 0.998851359}, + {7.504167, 0.999996841, 0.99885422}, + {7.508333, 0.99999696, 0.998857081}, + {7.5125, 0.999997139, 0.998859942}, + {7.516667, 0.999997258, 0.998862803}, + {7.520833, 0.999997318, 0.998865604}, + {7.525, 0.999997437, 0.998868406}, + {7.529167, 0.999997556, 0.998871207}, + {7.533333, 0.999997616, 0.998874068}, + {7.5375, 0.999997735, 0.99887681}, + {7.541667, 0.999997795, 0.998879611}, + {7.545833, 0.999997854, 0.998882413}, + {7.55, 0.999997914, 0.998885155}, + {7.554167, 0.999997973, 0.998887956}, + {7.558333, 0.999998033, 0.998890698}, + {7.5625, 0.999998033, 0.99889344}, + {7.566667, 0.999998093, 0.998896182}, + {7.570833, 0.999998093, 0.998898864}, + {7.575, 0.999998093, 0.998901606}, + {7.579167, 0.999998093, 0.998904347}, + {7.583333, 0.999998093, 0.99890703}, + {7.5875, 0.999998093, 0.998909712}, + {7.591667, 0.999998093, 0.998912394}, + {7.595833, 0.999998093, 0.998915076}, + {7.6, 0.999998033, 0.998917758}, + {7.604167, 0.999998033, 0.998920441}, + {7.608333, 0.999997973, 0.998923063}, + {7.6125, 0.999997914, 0.998925745}, + {7.616667, 0.999997854, 0.998928368}, + {7.620833, 0.999997795, 0.998930991}, + {7.625, 0.999997735, 0.998933613}, + {7.629167, 0.999997675, 0.998936236}, + {7.633333, 0.999997616, 0.998938859}, + {7.6375, 0.999997497, 0.998941481}, + {7.641667, 0.999997437, 0.998944104}, + {7.645833, 0.999997318, 0.998946667}, + {7.65, 0.999997258, 0.998949289}, + {7.654167, 0.999997139, 0.998951852}, + {7.658333, 0.999997079, 0.998954415}, + {7.6625, 0.99999696, 0.998956978}, + {7.666667, 0.999996841, 0.998959541}, + {7.670833, 0.999996722, 0.998962104}, + {7.675, 0.999996662, 0.998964667}, + {7.679167, 0.999996543, 0.99896723}, + {7.683333, 0.999996424, 0.998969734}, + {7.6875, 0.999996305, 0.998972297}, + {7.691667, 0.999996185, 0.9989748}, + {7.695833, 0.999996066, 0.998977304}, + {7.7, 0.999995947, 0.998979867}, + {7.704167, 0.999995828, 0.99898237}, + {7.708333, 0.999995708, 0.998984873}, + {7.7125, 0.999995589, 0.998987377}, + {7.716667, 0.99999547, 0.99898988}, + {7.720833, 0.99999541, 0.998992324}, + {7.725, 0.999995291, 0.998994827}, + {7.729167, 0.999995172, 0.998997331}, + {7.733333, 0.999995053, 0.998999774}, + {7.7375, 0.999994934, 0.999002278}, + {7.741667, 0.999994874, 0.999004722}, + {7.745833, 0.999994755, 0.999007165}, + {7.75, 0.999994636, 0.999009669}, + {7.754167, 0.999994576, 0.999012113}, + {7.758333, 0.999994457, 0.999014556}, + {7.7625, 0.999994397, 0.999017}, + {7.766667, 0.999994338, 0.999019444}, + {7.770833, 0.999994218, 0.999021828}, + {7.775, 0.999994159, 0.999024272}, + {7.779167, 0.999994099, 0.999026716}, + {7.783333, 0.99999404, 0.9990291}, + {7.7875, 0.99999398, 0.999031544}, + {7.791667, 0.99999392, 0.999033928}, + {7.795833, 0.999993861, 0.999036372}, + {7.8, 0.999993801, 0.999038756}, + {7.804167, 0.999993801, 0.99904114}, + {7.808333, 0.999993742, 0.999043524}, + {7.8125, 0.999993742, 0.999045908}, + {7.816667, 0.999993682, 0.999048293}, + {7.820833, 0.999993682, 0.999050677}, + {7.825, 0.999993682, 0.999053061}, + {7.829167, 0.999993682, 0.999055445}, + {7.833333, 0.999993682, 0.99905777}, + {7.8375, 0.999993682, 0.999060154}, + {7.841667, 0.999993682, 0.999062479}, + {7.845833, 0.999993682, 0.999064863}, + {7.85, 0.999993682, 0.999067187}, + {7.854167, 0.999993742, 0.999069512}, + {7.858333, 0.999993742, 0.999071836}, + {7.8625, 0.999993801, 0.999074161}, + {7.866667, 0.999993801, 0.999076486}, + {7.870833, 0.999993861, 0.99907881}, + {7.875, 0.99999392, 0.999081135}, + {7.879167, 0.99999398, 0.999083459}, + {7.883333, 0.99999398, 0.999085724}, + {7.8875, 0.99999404, 0.999088049}, + {7.891667, 0.999994099, 0.999090314}, + {7.895833, 0.999994218, 0.999092638}, + {7.9, 0.999994278, 0.999094903}, + {7.904167, 0.999994338, 0.999097168}, + {7.908333, 0.999994397, 0.999099433}, + {7.9125, 0.999994516, 0.999101698}, + {7.916667, 0.999994576, 0.999103963}, + {7.920833, 0.999994636, 0.999106228}, + {7.925, 0.999994755, 0.999108434}, + {7.929167, 0.999994814, 0.999110699}, + {7.933333, 0.999994934, 0.999112964}, + {7.9375, 0.999994993, 0.999115169}, + {7.941667, 0.999995112, 0.999117374}, + {7.945833, 0.999995232, 0.999119639}, + {7.95, 0.999995291, 0.999121845}, + {7.954167, 0.99999541, 0.99912405}, + {7.958333, 0.99999547, 0.999126256}, + {7.9625, 0.999995589, 0.999128401}, + {7.966667, 0.999995708, 0.999130607}, + {7.970833, 0.999995768, 0.999132812}, + {7.975, 0.999995887, 0.999134958}, + {7.979167, 0.999996006, 0.999137163}, + {7.983333, 0.999996066, 0.999139309}, + {7.9875, 0.999996185, 0.999141455}, + {7.991667, 0.999996245, 0.99914366}, + {7.995833, 0.999996364, 0.999145746}, + {8, 0.999996483, 0.999147892}, + {8.004167, 0.999996543, 0.999150038}, + {8.008333, 0.999996662, 0.999152184}, + {8.0125, 0.999996722, 0.999154329}, + {8.016667, 0.999996781, 0.999156415}, + {8.020833, 0.999996901, 0.999158502}, + {8.025, 0.99999696, 0.999160647}, + {8.029167, 0.99999702, 0.999162734}, + {8.033333, 0.999997139, 0.99916482}, + {8.0375, 0.999997199, 0.999166906}, + {8.041667, 0.999997258, 0.999168992}, + {8.045833, 0.999997318, 0.999171078}, + {8.05, 0.999997377, 0.999173105}, + {8.054167, 0.999997437, 0.999175191}, + {8.058333, 0.999997497, 0.999177277}, + {8.0625, 0.999997556, 0.999179304}, + {8.066667, 0.999997616, 0.99918133}, + {8.070833, 0.999997675, 0.999183357}, + {8.075, 0.999997675, 0.999185443}, + {8.079167, 0.999997735, 0.99918741}, + {8.083333, 0.999997795, 0.999189436}, + {8.0875, 0.999997795, 0.999191463}, + {8.091667, 0.999997854, 0.99919349}, + {8.095833, 0.999997854, 0.999195457}, + {8.1, 0.999997854, 0.999197483}, + {8.104167, 0.999997914, 0.99919945}, + {8.108333, 0.999997914, 0.999201477}, + {8.1125, 0.999997914, 0.999203444}, + {8.116667, 0.999997914, 0.99920541}, + {8.120833, 0.999997914, 0.999207377}, + {8.125, 0.999997914, 0.999209344}, + {8.129167, 0.999997914, 0.999211311}, + {8.133333, 0.999997914, 0.999213278}, + {8.1375, 0.999997914, 0.999215186}, + {8.141667, 0.999997854, 0.999217153}, + {8.145833, 0.999997854, 0.99921906}, + {8.15, 0.999997854, 0.999221027}, + {8.154167, 0.999997795, 0.999222934}, + {8.158333, 0.999997795, 0.999224842}, + {8.1625, 0.999997735, 0.999226749}, + {8.166667, 0.999997735, 0.999228716}, + {8.170833, 0.999997675, 0.999230564}, + {8.175, 0.999997675, 0.999232471}, + {8.179167, 0.999997616, 0.999234378}, + {8.183333, 0.999997556, 0.999236286}, + {8.1875, 0.999997556, 0.999238193}, + {8.191667, 0.999997497, 0.999240041}, + {8.195833, 0.999997437, 0.999241948}, + {8.2, 0.999997377, 0.999243796}, + {8.204167, 0.999997318, 0.999245644}, + {8.208333, 0.999997318, 0.999247551}, + {8.2125, 0.999997258, 0.999249399}, + {8.216667, 0.999997199, 0.999251246}, + {8.220833, 0.999997139, 0.999253094}, + {8.225, 0.999997079, 0.999254942}, + {8.229167, 0.99999702, 0.99925679}, + {8.233333, 0.99999696, 0.999258637}, + {8.2375, 0.999996901, 0.999260485}, + {8.241667, 0.999996901, 0.999262273}, + {8.245833, 0.999996841, 0.999264121}, + {8.25, 0.999996781, 0.999265969}, + {8.254167, 0.999996722, 0.999267757}, + {8.258333, 0.999996662, 0.999269605}, + {8.2625, 0.999996603, 0.999271393}, + {8.266667, 0.999996543, 0.999273181}, + {8.270833, 0.999996483, 0.999274969}, + {8.275, 0.999996483, 0.999276817}, + {8.279167, 0.999996424, 0.999278605}, + {8.283333, 0.999996364, 0.999280393}, + {8.2875, 0.999996305, 0.999282181}, + {8.291667, 0.999996305, 0.999283969}, + {8.295833, 0.999996245, 0.999285758}, + {8.3, 0.999996185, 0.999287486}, + {8.304167, 0.999996185, 0.999289274}, + {8.308333, 0.999996126, 0.999291062}, + {8.3125, 0.999996126, 0.999292791}, + {8.316667, 0.999996066, 0.999294579}, + {8.320833, 0.999996066, 0.999296308}, + {8.325, 0.999996006, 0.999298096}, + {8.329167, 0.999996006, 0.999299824}, + {8.333333, 0.999996006, 0.999301553}, + {8.3375, 0.999995947, 0.999303341}, + {8.341667, 0.999995947, 0.999305069}, + {8.345833, 0.999995947, 0.999306798}, + {8.35, 0.999995947, 0.999308527}, + {8.354167, 0.999995887, 0.999310255}, + {8.358333, 0.999995887, 0.999311984}, + {8.3625, 0.999995887, 0.999313712}, + {8.366667, 0.999995887, 0.999315381}, + {8.370833, 0.999995887, 0.99931711}, + {8.375, 0.999995887, 0.999318838}, + {8.379167, 0.999995887, 0.999320507}, + {8.383333, 0.999995947, 0.999322236}, + {8.3875, 0.999995947, 0.999323905}, + {8.391667, 0.999995947, 0.999325633}, + {8.395833, 0.999995947, 0.999327302}, + {8.4, 0.999996006, 0.999329031}, + {8.404167, 0.999996006, 0.999330699}, + {8.408333, 0.999996006, 0.999332368}, + {8.4125, 0.999996066, 0.999334037}, + {8.416667, 0.999996066, 0.999335706}, + {8.420833, 0.999996126, 0.999337375}, + {8.425, 0.999996126, 0.999339044}, + {8.429167, 0.999996185, 0.999340713}, + {8.433333, 0.999996185, 0.999342322}, + {8.4375, 0.999996245, 0.999343991}, + {8.441667, 0.999996305, 0.99934566}, + {8.445833, 0.999996305, 0.99934727}, + {8.45, 0.999996364, 0.999348938}, + {8.454167, 0.999996424, 0.999350548}, + {8.458333, 0.999996483, 0.999352217}, + {8.4625, 0.999996483, 0.999353826}, + {8.466667, 0.999996543, 0.999355435}, + {8.470833, 0.999996603, 0.999357045}, + {8.475, 0.999996662, 0.999358654}, + {8.479167, 0.999996662, 0.999360263}, + {8.483333, 0.999996722, 0.999361873}, + {8.4875, 0.999996781, 0.999363482}, + {8.491667, 0.999996841, 0.999365091}, + {8.495833, 0.999996901, 0.999366701}, + {8.5, 0.99999696, 0.99936825}, + {8.504167, 0.99999696, 0.99936986}, + {8.508333, 0.99999702, 0.999371409}, + {8.5125, 0.999997079, 0.999373019}, + {8.516667, 0.999997139, 0.999374568}, + {8.520833, 0.999997199, 0.999376178}, + {8.525, 0.999997258, 0.999377728}, + {8.529167, 0.999997258, 0.999379277}, + {8.533333, 0.999997318, 0.999380827}, + {8.5375, 0.999997377, 0.999382377}, + {8.541667, 0.999997437, 0.999383926}, + {8.545833, 0.999997497, 0.999385476}, + {8.55, 0.999997497, 0.999387026}, + {8.554167, 0.999997556, 0.999388516}, + {8.558333, 0.999997616, 0.999390066}, + {8.5625, 0.999997616, 0.999391615}, + {8.566667, 0.999997675, 0.999393106}, + {8.570833, 0.999997735, 0.999394655}, + {8.575, 0.999997735, 0.999396145}, + {8.579167, 0.999997795, 0.999397635}, + {8.583333, 0.999997795, 0.999399185}, + {8.5875, 0.999997854, 0.999400675}, + {8.591667, 0.999997914, 0.999402165}, + {8.595833, 0.999997914, 0.999403656}, + {8.6, 0.999997914, 0.999405146}, + {8.604167, 0.999997973, 0.999406636}, + {8.608333, 0.999997973, 0.999408126}, + {8.6125, 0.999998033, 0.999409556}, + {8.616667, 0.999998033, 0.999411047}, + {8.620833, 0.999998033, 0.999412537}, + {8.625, 0.999998093, 0.999413967}, + {8.629167, 0.999998093, 0.999415457}, + {8.633333, 0.999998093, 0.999416888}, + {8.6375, 0.999998093, 0.999418318}, + {8.641667, 0.999998093, 0.999419808}, + {8.645833, 0.999998152, 0.999421239}, + {8.65, 0.999998152, 0.999422669}, + {8.654167, 0.999998152, 0.9994241}, + {8.658333, 0.999998152, 0.99942553}, + {8.6625, 0.999998152, 0.999426961}, + {8.666667, 0.999998152, 0.999428391}, + {8.670833, 0.999998152, 0.999429822}, + {8.675, 0.999998152, 0.999431252}, + {8.679167, 0.999998152, 0.999432623}, + {8.683333, 0.999998093, 0.999434054}, + {8.6875, 0.999998093, 0.999435425}, + {8.691667, 0.999998093, 0.999436855}, + {8.695833, 0.999998093, 0.999438226}, + {8.7, 0.999998093, 0.999439657}, + {8.704167, 0.999998033, 0.999441028}, + {8.708333, 0.999998033, 0.999442399}, + {8.7125, 0.999998033, 0.999443829}, + {8.716667, 0.999998033, 0.9994452}, + {8.720833, 0.999997973, 0.999446571}, + {8.725, 0.999997973, 0.999447942}, + {8.729167, 0.999997973, 0.999449313}, + {8.733333, 0.999997914, 0.999450684}, + {8.7375, 0.999997914, 0.999452055}, + {8.741667, 0.999997914, 0.999453425}, + {8.745833, 0.999997854, 0.999454737}, + {8.75, 0.999997854, 0.999456108}, + {8.754167, 0.999997795, 0.999457479}, + {8.758333, 0.999997795, 0.99945879}, + {8.7625, 0.999997795, 0.999460161}, + {8.766667, 0.999997735, 0.999461472}, + {8.770833, 0.999997735, 0.999462843}, + {8.775, 0.999997675, 0.999464154}, + {8.779167, 0.999997675, 0.999465525}, + {8.783333, 0.999997675, 0.999466836}, + {8.7875, 0.999997616, 0.999468148}, + {8.791667, 0.999997616, 0.999469459}, + {8.795833, 0.999997616, 0.99947077}, + {8.8, 0.999997556, 0.999472082}, + {8.804167, 0.999997556, 0.999473393}, + {8.808333, 0.999997497, 0.999474704}, + {8.8125, 0.999997497, 0.999476016}, + {8.816667, 0.999997497, 0.999477327}, + {8.820833, 0.999997437, 0.999478638}, + {8.825, 0.999997437, 0.999479949}, + {8.829167, 0.999997437, 0.999481261}, + {8.833333, 0.999997377, 0.999482512}, + {8.8375, 0.999997377, 0.999483824}, + {8.841667, 0.999997377, 0.999485135}, + {8.845833, 0.999997377, 0.999486387}, + {8.85, 0.999997318, 0.999487698}, + {8.854167, 0.999997318, 0.99948895}, + {8.858333, 0.999997318, 0.999490201}, + {8.8625, 0.999997318, 0.999491513}, + {8.866667, 0.999997318, 0.999492764}, + {8.870833, 0.999997318, 0.999494016}, + {8.875, 0.999997258, 0.999495268}, + {8.879167, 0.999997258, 0.999496579}, + {8.883333, 0.999997258, 0.999497831}, + {8.8875, 0.999997258, 0.999499083}, + {8.891667, 0.999997258, 0.999500334}, + {8.895833, 0.999997258, 0.999501586}, + {8.9, 0.999997258, 0.999502838}, + {8.904167, 0.999997258, 0.999504089}, + {8.908333, 0.999997258, 0.999505281}, + {8.9125, 0.999997258, 0.999506533}, + {8.916667, 0.999997258, 0.999507785}, + {8.920833, 0.999997318, 0.999509037}, + {8.925, 0.999997318, 0.999510229}, + {8.929167, 0.999997318, 0.99951148}, + {8.933333, 0.999997318, 0.999512672}, + {8.9375, 0.999997318, 0.999513924}, + {8.941667, 0.999997318, 0.999515116}, + {8.945833, 0.999997377, 0.999516368}, + {8.95, 0.999997377, 0.99951756}, + {8.954167, 0.999997377, 0.999518752}, + {8.958333, 0.999997377, 0.999520004}, + {8.9625, 0.999997437, 0.999521196}, + {8.966667, 0.999997437, 0.999522388}, + {8.970833, 0.999997437, 0.99952358}, + {8.975, 0.999997497, 0.999524772}, + {8.979167, 0.999997497, 0.999525964}, + {8.983333, 0.999997497, 0.999527156}, + {8.9875, 0.999997556, 0.999528348}, + {8.991667, 0.999997556, 0.999529541}, + {8.995833, 0.999997616, 0.999530733}, + {9, 0.999997616, 0.999531865}, + {9.004167, 0.999997616, 0.999533057}, + {9.008333, 0.999997675, 0.999534249}, + {9.0125, 0.999997675, 0.999535382}, + {9.016667, 0.999997735, 0.999536574}, + {9.020833, 0.999997735, 0.999537706}, + {9.025, 0.999997735, 0.999538898}, + {9.029167, 0.999997795, 0.999540031}, + {9.033333, 0.999997795, 0.999541223}, + {9.0375, 0.999997854, 0.999542356}, + {9.041667, 0.999997854, 0.999543488}, + {9.045833, 0.999997914, 0.999544621}, + {9.05, 0.999997914, 0.999545753}, + {9.054167, 0.999997973, 0.999546945}, + {9.058333, 0.999997973, 0.999548078}, + {9.0625, 0.999997973, 0.99954921}, + {9.066667, 0.999998033, 0.999550343}, + {9.070833, 0.999998033, 0.999551415}, + {9.075, 0.999998093, 0.999552548}, + {9.079167, 0.999998093, 0.99955368}, + {9.083333, 0.999998093, 0.999554813}, + {9.0875, 0.999998152, 0.999555945}, + {9.091667, 0.999998152, 0.999557018}, + {9.095833, 0.999998212, 0.999558151}, + {9.1, 0.999998212, 0.999559224}, + {9.104167, 0.999998212, 0.999560356}, + {9.108333, 0.999998271, 0.999561429}, + {9.1125, 0.999998271, 0.999562562}, + {9.116667, 0.999998271, 0.999563634}, + {9.120833, 0.999998331, 0.999564707}, + {9.125, 0.999998331, 0.99956584}, + {9.129167, 0.999998331, 0.999566913}, + {9.133333, 0.999998331, 0.999567986}, + {9.1375, 0.999998391, 0.999569058}, + {9.141667, 0.999998391, 0.999570131}, + {9.145833, 0.999998391, 0.999571204}, + {9.15, 0.999998391, 0.999572277}, + {9.154167, 0.999998391, 0.99957335}, + {9.158333, 0.99999845, 0.999574423}, + {9.1625, 0.99999845, 0.999575496}, + {9.166667, 0.99999845, 0.999576569}, + {9.170833, 0.99999845, 0.999577582}, + {9.175, 0.99999845, 0.999578655}, + {9.179167, 0.99999845, 0.999579728}, + {9.183333, 0.99999845, 0.999580741}, + {9.1875, 0.99999845, 0.999581814}, + {9.191667, 0.99999845, 0.999582827}, + {9.195833, 0.99999851, 0.9995839}, + {9.2, 0.99999851, 0.999584913}, + {9.204167, 0.99999851, 0.999585927}, + {9.208333, 0.99999851, 0.999586999}, + {9.2125, 0.99999851, 0.999588013}, + {9.216667, 0.99999851, 0.999589026}, + {9.220833, 0.99999845, 0.999590039}, + {9.225, 0.99999845, 0.999591053}, + {9.229167, 0.99999845, 0.999592125}, + {9.233333, 0.99999845, 0.999593139}, + {9.2375, 0.99999845, 0.999594152}, + {9.241667, 0.99999845, 0.999595165}, + {9.245833, 0.99999845, 0.999596119}, + {9.25, 0.99999845, 0.999597132}, + {9.254167, 0.99999845, 0.999598145}, + {9.258333, 0.99999845, 0.999599159}, + {9.2625, 0.99999845, 0.999600172}, + {9.266667, 0.999998391, 0.999601126}, + {9.270833, 0.999998391, 0.999602139}, + {9.275, 0.999998391, 0.999603152}, + {9.279167, 0.999998391, 0.999604106}, + {9.283333, 0.999998391, 0.999605119}, + {9.2875, 0.999998391, 0.999606073}, + {9.291667, 0.999998331, 0.999607086}, + {9.295833, 0.999998331, 0.99960804}, + {9.3, 0.999998331, 0.999609053}, + {9.304167, 0.999998331, 0.999610007}, + {9.308333, 0.999998331, 0.99961096}, + {9.3125, 0.999998331, 0.999611914}, + {9.316667, 0.999998271, 0.999612927}, + {9.320833, 0.999998271, 0.999613881}, + {9.325, 0.999998271, 0.999614835}, + {9.329167, 0.999998271, 0.999615788}, + {9.333333, 0.999998271, 0.999616742}, + {9.3375, 0.999998271, 0.999617696}, + {9.341667, 0.999998212, 0.999618649}, + {9.345833, 0.999998212, 0.999619603}, + {9.35, 0.999998212, 0.999620557}, + {9.354167, 0.999998212, 0.999621511}, + {9.358333, 0.999998212, 0.999622464}, + {9.3625, 0.999998212, 0.999623418}, + {9.366667, 0.999998212, 0.999624312}, + {9.370833, 0.999998152, 0.999625266}, + {9.375, 0.999998152, 0.999626219}, + {9.379167, 0.999998152, 0.999627173}, + {9.383333, 0.999998152, 0.999628067}, + {9.3875, 0.999998152, 0.999629021}, + {9.391667, 0.999998152, 0.999629915}, + {9.395833, 0.999998152, 0.999630868}, + {9.4, 0.999998152, 0.999631763}, + {9.404167, 0.999998152, 0.999632716}, + {9.408333, 0.999998152, 0.99963361}, + {9.4125, 0.999998152, 0.999634564}, + {9.416667, 0.999998152, 0.999635458}, + {9.420833, 0.999998152, 0.999636352}, + {9.425, 0.999998152, 0.999637246}, + {9.429167, 0.999998152, 0.9996382}, + {9.433333, 0.999998152, 0.999639094}, + {9.4375, 0.999998152, 0.999639988}, + {9.441667, 0.999998152, 0.999640882}, + {9.445833, 0.999998152, 0.999641776}, + {9.45, 0.999998152, 0.99964267}, + {9.454167, 0.999998152, 0.999643564}, + {9.458333, 0.999998152, 0.999644458}, + {9.4625, 0.999998152, 0.999645352}, + {9.466667, 0.999998152, 0.999646246}, + {9.470833, 0.999998152, 0.999647141}, + {9.475, 0.999998212, 0.999648035}, + {9.479167, 0.999998212, 0.999648929}, + {9.483333, 0.999998212, 0.999649763}, + {9.4875, 0.999998212, 0.999650657}, + {9.491667, 0.999998212, 0.999651551}, + {9.495833, 0.999998212, 0.999652445}, + {9.5, 0.999998212, 0.99965328}, + {9.504167, 0.999998271, 0.999654174}, + {9.508333, 0.999998271, 0.999655008}, + {9.5125, 0.999998271, 0.999655902}, + {9.516667, 0.999998271, 0.999656737}, + {9.520833, 0.999998271, 0.999657631}, + {9.525, 0.999998331, 0.999658465}, + {9.529167, 0.999998331, 0.999659359}, + {9.533333, 0.999998331, 0.999660194}, + {9.5375, 0.999998331, 0.999661028}, + {9.541667, 0.999998331, 0.999661863}, + {9.545833, 0.999998391, 0.999662757}, + {9.55, 0.999998391, 0.999663591}, + {9.554167, 0.999998391, 0.999664426}, + {9.558333, 0.999998391, 0.99966526}, + {9.5625, 0.99999845, 0.999666095}, + {9.566667, 0.99999845, 0.999666929}, + {9.570833, 0.99999845, 0.999667764}, + {9.575, 0.99999845, 0.999668598}, + {9.579167, 0.99999845, 0.999669433}, + {9.583333, 0.99999851, 0.999670267}, + {9.5875, 0.99999851, 0.999671102}, + {9.591667, 0.99999851, 0.999671936}, + {9.595833, 0.99999851, 0.999672771}, + {9.6, 0.999998569, 0.999673545}, + {9.604167, 0.999998569, 0.99967438}, + {9.608333, 0.999998569, 0.999675214}, + {9.6125, 0.999998569, 0.999676049}, + {9.616667, 0.999998629, 0.999676824}, + {9.620833, 0.999998629, 0.999677658}, + {9.625, 0.999998629, 0.999678433}, + {9.629167, 0.999998629, 0.999679267}, + {9.633333, 0.999998629, 0.999680042}, + {9.6375, 0.999998689, 0.999680877}, + {9.641667, 0.999998689, 0.999681652}, + {9.645833, 0.999998689, 0.999682486}, + {9.65, 0.999998689, 0.999683261}, + {9.654167, 0.999998689, 0.999684036}, + {9.658333, 0.999998689, 0.999684811}, + {9.6625, 0.999998748, 0.999685645}, + {9.666667, 0.999998748, 0.99968642}, + {9.670833, 0.999998748, 0.999687195}, + {9.675, 0.999998748, 0.99968797}, + {9.679167, 0.999998748, 0.999688745}, + {9.683333, 0.999998748, 0.999689519}, + {9.6875, 0.999998748, 0.999690294}, + {9.691667, 0.999998748, 0.999691069}, + {9.695833, 0.999998808, 0.999691844}, + {9.7, 0.999998808, 0.999692619}, + {9.704167, 0.999998808, 0.999693394}, + {9.708333, 0.999998808, 0.999694169}, + {9.7125, 0.999998808, 0.999694943}, + {9.716667, 0.999998808, 0.999695718}, + {9.720833, 0.999998808, 0.999696434}, + {9.725, 0.999998808, 0.999697208}, + {9.729167, 0.999998808, 0.999697983}, + {9.733333, 0.999998808, 0.999698699}, + {9.7375, 0.999998808, 0.999699473}, + {9.741667, 0.999998808, 0.999700248}, + {9.745833, 0.999998808, 0.999700963}, + {9.75, 0.999998808, 0.999701738}, + {9.754167, 0.999998808, 0.999702454}, + {9.758333, 0.999998808, 0.999703228}, + {9.7625, 0.999998808, 0.999703944}, + {9.766667, 0.999998808, 0.999704719}, + {9.770833, 0.999998808, 0.999705434}, + {9.775, 0.999998808, 0.999706149}, + {9.779167, 0.999998808, 0.999706924}, + {9.783333, 0.999998808, 0.999707639}, + {9.7875, 0.999998808, 0.999708354}, + {9.791667, 0.999998808, 0.99970907}, + {9.795833, 0.999998808, 0.999709845}, + {9.8, 0.999998808, 0.99971056}, + {9.804167, 0.999998808, 0.999711275}, + {9.808333, 0.999998808, 0.99971199}, + {9.8125, 0.999998808, 0.999712706}, + {9.816667, 0.999998808, 0.999713421}, + {9.820833, 0.999998808, 0.999714136}, + {9.825, 0.999998808, 0.999714851}, + {9.829167, 0.999998808, 0.999715567}, + {9.833333, 0.999998748, 0.999716282}, + {9.8375, 0.999998748, 0.999716997}, + {9.841667, 0.999998748, 0.999717712}, + {9.845833, 0.999998748, 0.999718368}, + {9.85, 0.999998748, 0.999719083}, + {9.854167, 0.999998748, 0.999719799}, + {9.858333, 0.999998748, 0.999720514}, + {9.8625, 0.999998748, 0.999721169}, + {9.866667, 0.999998748, 0.999721885}, + {9.870833, 0.999998748, 0.9997226}, + {9.875, 0.999998748, 0.999723256}, + {9.879167, 0.999998748, 0.999723971}, + {9.883333, 0.999998748, 0.999724686}, + {9.8875, 0.999998748, 0.999725342}, + {9.891667, 0.999998748, 0.999726057}, + {9.895833, 0.999998748, 0.999726713}, + {9.9, 0.999998689, 0.999727428}, + {9.904167, 0.999998689, 0.999728084}, + {9.908333, 0.999998689, 0.999728799}, + {9.9125, 0.999998689, 0.999729455}, + {9.916667, 0.999998689, 0.99973011}, + {9.920833, 0.999998689, 0.999730825}, + {9.925, 0.999998689, 0.999731481}, + {9.929167, 0.999998689, 0.999732137}, + {9.933333, 0.999998689, 0.999732792}, + {9.9375, 0.999998689, 0.999733508}, + {9.941667, 0.999998689, 0.999734163}, + {9.945833, 0.999998689, 0.999734819}, + {9.95, 0.999998689, 0.999735475}, + {9.954167, 0.999998689, 0.99973613}, + {9.958333, 0.999998689, 0.999736786}, + {9.9625, 0.999998689, 0.999737501}, + {9.966667, 0.999998689, 0.999738157}, + {9.970833, 0.999998689, 0.999738812}, + {9.975, 0.999998689, 0.999739468}, + {9.979167, 0.999998689, 0.999740124}, + {9.983333, 0.999998689, 0.99974072}, + {9.9875, 0.999998689, 0.999741375}, + {9.991667, 0.999998748, 0.999742031}, + {9.995833, 0.999998748, 0.999742687}, + {10, 0.999998748, 0.999743342}}; diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp new file mode 100644 index 000000000..66f15a4db --- /dev/null +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -0,0 +1,172 @@ +#include +#define _USE_MATH_DEFINES +#include +#include + +// #include +#include +#include +#include +#include +#include + +#include "Example3_Powerworld_Reference.hpp" +#include "Model/PhasorDynamics/Branch/Branch.cpp" +#include "Model/PhasorDynamics/Branch/Branch.hpp" +#include "Model/PhasorDynamics/Bus/Bus.cpp" +#include "Model/PhasorDynamics/Bus/Bus.hpp" +#include "Model/PhasorDynamics/Bus/BusInfinite.cpp" +#include "Model/PhasorDynamics/Bus/BusInfinite.hpp" +#include "Model/PhasorDynamics/BusFault/BusFault.hpp" +#include "Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp" +#include "Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp" +#include "Model/PhasorDynamics/SystemModel.hpp" +#include "Solver/Dynamic/Ida.cpp" +#include "Solver/Dynamic/Ida.hpp" +#include + +#define _CRT_SECURE_NO_WARNINGS + +int main() +{ + using namespace GridKit::PhasorDynamics; + using namespace AnalysisManager::Sundials; + + printf("Example 3\n"); + + /* Create model parts */ + SystemModel sys; + Bus bus1(0.9949877346411762, 0.09999703952427966); + BusInfinite bus2(1.0, 0.0); + Branch branch(&bus1, &bus2, 0, 0.1, 0, 0); + BusFault fault(&bus1, 0, 1e-3, 0); + + Genrou gen(&bus1, + 1, + 1., + 0.05013, + 3., + 0., + 0., + 7., + .04, + .05, + .75, + 2.1, + 0.2, + 0.18, + 0.5, + 0.5, + 0.18, + 0.15, + 0., + 0.); + + // Governor of Generator + TurbineGov turb(&gen); + + /* Connect everything together */ + sys.addBus(&bus1); + sys.addBus(&bus2); + sys.addComponent(&branch); + sys.addComponent(&fault); + sys.addComponent(&gen); + sys.allocate(); + + double dt = 1.0 / 4.0 / 60.0; + + std::stringstream buffer; + + /* Set up simulation */ + Ida ida(&sys); + ida.configureSimulation(); + + /* Run simulation */ + double start = static_cast(clock()); + // ida.printOutputF(0, 0, buffer); + ida.initializeSimulation(0.0, false); + ida.runSimulationFixed(0.0, dt, 1.0, buffer); + fault.setStatus(1); + ida.initializeSimulation(1.0, false); + ida.runSimulationFixed(1.0, dt, 1.1, buffer); + fault.setStatus(0); + ida.initializeSimulation(1.1, false); + ida.runSimulationFixed(1.1, dt, 10.0, buffer); + double stop = static_cast(clock()); + + // Go to the beginning of the data buffer + buffer.seekg(0, std::ios::beg); + + double data; + + size_t i = 0; // data row counter + size_t j = 0; // data column counter + double Vr = 0.0; // Bus real voltage + double Vi = 0.0; // Bus imaginary voltage + double dw = 0.0; // Generator frequency deviation [rad/s] + double ti = 0.0; // time + double error_V = 0.0; // error in |V| + + // Read through the simulation data storred in the buffer + while (buffer >> data) + { + // At the end of each data line compare computed data to Powerworld results + // and reset column counter to zero. + if ((i % 48) == 0) + { + double err = + std::abs(std::sqrt(Vr * Vr + Vi * Vi) - reference_solution[i / 48][2]) + / (1.0 + std::abs(reference_solution[i / 48][2])); + if (err > error_V) + error_V = err; + // std::cout << "t = " << ti << ": Vr = " << Vr << ", Vi = " << Vi << ", dw = " << dw; + std::cout << "GridKit: t = " << ti + << ", |V| = " << std::sqrt(Vr * Vr + Vi * Vi) + << ", w = " << (1.0 + dw) << "\n"; + std::cout << "Ref : t = " << reference_solution[i / 48][0] + << ", |V| = " << reference_solution[i / 48][2] + << ", w = " << reference_solution[i / 48][1] + << "\n"; + std::cout << "Error in |V| = " + << err + << "\n"; + j = 0; + Vr = 0.0; + Vi = 0.0; + std::cout << "\n"; + } + if (j == 0) + { + ti = data; + } + if (j == 2) + { + Vr = data; + } + if (j == 3) + { + Vi = data; + } + if (j == 5) + { + dw = data; + } + ++j; + ++i; + // if (i > 500) + // break; + } + + // std::cout << buffer.str(); + int status = 0; + std::cout << "Max error in |V| = " << error_V << "\n"; + if (error_V > 2e-4) + { + std::cout << "Test failed with error too large!\n"; + status = 1; + } + + std::cout << "\n\nComplete in " << (stop - start) / CLOCKS_PER_SEC << " seconds\n"; + + return 0; +} diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 9b06dd997..117bbb862 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -4,7 +4,6 @@ * @author Adam Birchfield (abirchfield@tamu.edu) * @brief Definition of a Turbine Governor Model (IEEET1). * - * */ // NOTES From f5b17c3935aa7fe1faeab83d288d7027f532c257 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:03:23 -0500 Subject: [PATCH 048/139] edit: joint genrou and ieeet1 attempt [skip ci] --- examples/PhasorDynamics/Example3/example3.cpp | 6 +- .../Governor/TGOV1/TurbineGov.cpp | 2 +- .../Governor/TGOV1/TurbineGov.hpp | 5 +- src/Model/PhasorDynamics/GovernorBase.hpp | 23 +++++++ .../SynchronousMachine/GENROUwS/Genrou.cpp | 61 +++++++++---------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 11 ++++ 6 files changed, 73 insertions(+), 35 deletions(-) create mode 100644 src/Model/PhasorDynamics/GovernorBase.hpp diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 66f15a4db..c2ff8b4e7 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -63,7 +63,10 @@ int main() 0.); // Governor of Generator - TurbineGov turb(&gen); + TurbineGov gov(&gen); + + // Temporary Implementation, eventually move to 'Signal' framework + gen.setgov(&gov) /* Connect everything together */ sys.addBus(&bus1); @@ -71,6 +74,7 @@ int main() sys.addComponent(&branch); sys.addComponent(&fault); sys.addComponent(&gen); + sys.addComponent(&gov); sys.allocate(); double dt = 1.0 / 4.0 / 60.0; diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 117bbb862..928b3d60b 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -242,7 +242,7 @@ namespace GridKit * @return ScalarT - Mechanical output power value. */ template - ScalarT TurbineGov::pmech() + ScalarT TurbineGov::Pmech() { // Relevant Variables diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 69dad7118..d080e0731 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -8,6 +8,7 @@ #pragma once +#include #include // Forward declarations @@ -27,7 +28,7 @@ namespace GridKit { template - class TurbineGov : public Component + class TurbineGov : public Component, public GovernorBase { using Component::alpha_; using Component::f_; @@ -77,7 +78,7 @@ namespace GridKit } // Public Access to Pmech - ScalarT pmech(); + ScalarT Pmech() override; private: diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp new file mode 100644 index 000000000..90799f9c1 --- /dev/null +++ b/src/Model/PhasorDynamics/GovernorBase.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief GovernorBase model implementation base class. + * + */ + template + class GovernorBase + { + public: + + virtual ScalarT& Pmech() = 0; + + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 029f9e9fa..bd943b0a7 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -53,7 +53,7 @@ namespace GridKit S10_(0.), S12_(0.) { - size_ = 21; + size_ = 20; // 21; 20 without Pmech setDerivedParams(); // Temporary, to eliminate compiler warnings @@ -113,22 +113,10 @@ namespace GridKit S10_(S10), S12_(S12) { - size_ = 21; + size_ = 20;// 21; 20 without Pmech setDerivedParams(); } - // /** - // * @brief Destroy the Genrou - // * - // * @tparam ScalarT - // * @tparam IdxT - // */ - // template - // Genrou::~Genrou() - // { - // // std::cout << "Destroy Genrou..." << std::endl; - // } - /*! * @brief allocate method computes sparsity pattern of the Jacobian. */ @@ -182,17 +170,17 @@ namespace GridKit ScalarT ksat; ScalarT psipp; - y_[0] = delta; //= 0.55399038; + y_[0] = delta; // = 0.55399038; y_[1] = omega; // = 0; y_[2] = Eqp; // = 0.995472581; y_[3] = psidp; // = 0.971299567; y_[4] = psiqp; // = 0.306880069; y_[5] = Edp; // = 0; - y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; - y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; - y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); - y_[9] = ksat = SB_ * pow(psipp - SA_, 2); + y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; + y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; + y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); + y_[9] = ksat = SB_ * pow(psipp - SA_, 2); y_[10] = vd = -psiqpp * (1 + omega); y_[11] = vq = psidpp * (1 + omega); y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; @@ -200,13 +188,16 @@ namespace GridKit y_[14] = iq; y_[15] = ir; y_[16] = ii; - y_[17] = pmech_set_ = Te; - y_[18] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; - y_[19] = G_ * (vd * sin(delta) + vq * cos(delta)) + //y_[17] = pmech_set_ = Te; + y_[17] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; + y_[18] = G_ * (vd * sin(delta) + vq * cos(delta)) - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ - y_[20] = B_ * (vd * sin(delta) + vq * cos(delta)) + y_[19] = B_ * (vd * sin(delta) + vq * cos(delta)) + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ + // Set Setpoint mechanical power, which may or may not be used + pmech_set_ = Te; + for (IdxT i = 0; i < size_; ++i) yp_[i] = 0.0; @@ -252,12 +243,20 @@ namespace GridKit ScalarT iq = y_[14]; ScalarT ir = y_[15]; ScalarT ii = y_[16]; - ScalarT pmech = y_[17]; - ScalarT efd = y_[18]; - ScalarT inr = y_[19]; - ScalarT ini = y_[20]; + ScalarT efd = y_[17]; + ScalarT inr = y_[18]; + ScalarT ini = y_[19]; ScalarT vr = Vr(); ScalarT vi = Vi(); + ScalarT pmech; + if(gov_) + { + pmech = pmech_set_ + } + else + { + pmech = gov_->Pmech() + } /* Read derivatives */ ScalarT delta_dot = yp_[0]; @@ -289,12 +288,12 @@ namespace GridKit f_[16] = ii + B_ * vr + G_ * vi - ini; /* 2 Genrou control inputs are set to constant for this example */ - f_[17] = pmech - pmech_set_; - f_[18] = efd - efd_set_; + //f_[17] = pmech - pmech_set_; + f_[17] = efd - efd_set_; /* 2 Genrou current source definitions */ - f_[19] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); - f_[20] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); + f_[18] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); + f_[19] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); /* Current balance */ Ir() += inr - Vr() * G_ + Vi() * B_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 8850740bd..5d1719da8 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -18,6 +18,8 @@ namespace GridKit { template class BusBase; + template + class GovernorBase; } } // namespace GridKit @@ -45,6 +47,7 @@ namespace GridKit using Component::ypB_; using bus_type = BusBase; + using gov_type = GovernorBase; using real_type = typename Component::real_type; public: @@ -97,6 +100,11 @@ namespace GridKit return y_[1]; } + void setgov(gov_type* gov) + { + gov_(gov); + } + private: void setDerivedParams(); @@ -126,6 +134,9 @@ namespace GridKit const int busID_; int unit_id_; + // Components + gov_type* gov_; + /* Initial terminal conditions */ ScalarT p0_; ScalarT q0_; From 7a46e3f5b8c8712d1bc6901c3d063d0c52b57b02 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:08:58 -0500 Subject: [PATCH 049/139] fix: compilation error [skip ci] --- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 4 ++-- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index bd943b0a7..4f60cc7fb 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -251,11 +251,11 @@ namespace GridKit ScalarT pmech; if(gov_) { - pmech = pmech_set_ + pmech = gov_->Pmech(); } else { - pmech = gov_->Pmech() + pmech = pmech_set_; } /* Read derivatives */ diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 5d1719da8..77aafa585 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -102,7 +102,7 @@ namespace GridKit void setgov(gov_type* gov) { - gov_(gov); + gov_ = gov } private: From 6efff98c4c6de5648ab92a345f7847dbdf9d0a0f Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:14:45 -0500 Subject: [PATCH 050/139] fix: compile issues [skip ci] --- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 77aafa585..983d314d4 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -102,7 +102,7 @@ namespace GridKit void setgov(gov_type* gov) { - gov_ = gov + gov_ = gov; } private: From a5e8b2c8a087e8fdda2e18846bba1173ed434e35 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:21:51 -0500 Subject: [PATCH 051/139] edit: cmake issue gov [skip ci] --- src/Model/PhasorDynamics/CMakeLists.txt | 2 +- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/CMakeLists.txt b/src/Model/PhasorDynamics/CMakeLists.txt index 6066594c6..c5d8504d4 100644 --- a/src/Model/PhasorDynamics/CMakeLists.txt +++ b/src/Model/PhasorDynamics/CMakeLists.txt @@ -8,4 +8,4 @@ add_subdirectory(Bus) add_subdirectory(BusFault) add_subdirectory(Load) add_subdirectory(SynchronousMachine) -#add_subdirectory(Governor) +add_subdirectory(Governor) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 4f60cc7fb..7229111e2 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -13,6 +13,8 @@ #include #include +#include + #define _USE_MATH_DEFINES From d74eb31713e95c1014735aaed302e4590e33fd6e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:25:38 -0500 Subject: [PATCH 052/139] edit: type alignments --- src/Model/PhasorDynamics/GovernorBase.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp index 90799f9c1..89ee5fc96 100644 --- a/src/Model/PhasorDynamics/GovernorBase.hpp +++ b/src/Model/PhasorDynamics/GovernorBase.hpp @@ -15,7 +15,7 @@ namespace GridKit { public: - virtual ScalarT& Pmech() = 0; + virtual ScalarT Pmech() = 0; }; From c8f674681e633bedee34882265d439dbf52b4f26 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:27:45 -0500 Subject: [PATCH 053/139] edit: semicolon [skip ci] --- examples/PhasorDynamics/Example3/example3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index c2ff8b4e7..454762620 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -66,7 +66,7 @@ int main() TurbineGov gov(&gen); // Temporary Implementation, eventually move to 'Signal' framework - gen.setgov(&gov) + gen.setgov(&gov); /* Connect everything together */ sys.addBus(&bus1); From 6440e81779993c80f1d504aa881ccd41d1d4fa5d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:34:20 -0500 Subject: [PATCH 054/139] fix: cmake correction [skip ci] --- examples/PhasorDynamics/Example3/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/PhasorDynamics/Example3/CMakeLists.txt b/examples/PhasorDynamics/Example3/CMakeLists.txt index 0fa3f496b..ec00ec207 100644 --- a/examples/PhasorDynamics/Example3/CMakeLists.txt +++ b/examples/PhasorDynamics/Example3/CMakeLists.txt @@ -10,6 +10,6 @@ target_link_libraries(phasordynamics_example3 SUNDIALS::ida SUNDIALS::idas SUNDIALS::sunmatrixdense) -install(TARGETS phasordynamics_example1 RUNTIME DESTINATION bin) +install(TARGETS phasordynamics_example3 RUNTIME DESTINATION bin) -add_test(NAME GenrouTest COMMAND $) +add_test(NAME GenrouTest COMMAND $) From 542b4b25a845c4fe6495089139284d9827c646c1 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:43:11 -0500 Subject: [PATCH 055/139] edit: method signature [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 12 ++++++++++++ .../SynchronousMachine/GENROUwS/Genrou.hpp | 10 ++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 7229111e2..0429b59f6 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -405,6 +405,18 @@ namespace GridKit B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); } + template + void Genrou::setgov(gov_type* gov) + { + gov_ = gov; + } + + template + ScalarT& Genrou::speed() + { + return y_[1]; + } + // Available template instantiations template class Genrou; template class Genrou; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 983d314d4..f6eb07f29 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -95,15 +95,9 @@ namespace GridKit * * @return Reference to speed state variable */ - ScalarT& speed() override - { - return y_[1]; - } + ScalarT& speed() override; - void setgov(gov_type* gov) - { - gov_ = gov; - } + void setgov(gov_type* gov); private: void setDerivedParams(); From 91f0eccdb78db4bee3f673999a51aa2d836f9eef Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 19:57:36 -0500 Subject: [PATCH 056/139] edit: constructor overloading --- examples/PhasorDynamics/Example3/example3.cpp | 16 ++- .../SynchronousMachine/GENROUwS/Genrou.cpp | 118 +++++++++--------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 54 ++++---- 3 files changed, 97 insertions(+), 91 deletions(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 454762620..0cd456a99 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -41,8 +41,14 @@ int main() Branch branch(&bus1, &bus2, 0, 0.1, 0, 0); BusFault fault(&bus1, 0, 1e-3, 0); - Genrou gen(&bus1, + // Decleration + Genrou* gen; + TurbineGov* gov; + + // Instatiation + gen = new Genrou(&bus1, 1, + gov 1., 0.05013, 3., @@ -63,18 +69,16 @@ int main() 0.); // Governor of Generator - TurbineGov gov(&gen); + gov = TurbineGov(gen); - // Temporary Implementation, eventually move to 'Signal' framework - gen.setgov(&gov); /* Connect everything together */ sys.addBus(&bus1); sys.addBus(&bus2); sys.addComponent(&branch); sys.addComponent(&fault); - sys.addComponent(&gen); - sys.addComponent(&gov); + sys.addComponent(gen); + sys.addComponent(gov); sys.allocate(); double dt = 1.0 / 4.0 / 60.0; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 0429b59f6..8b949c4f8 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -22,59 +22,18 @@ namespace GridKit { namespace PhasorDynamics { - /*! - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ - template - Genrou::Genrou(bus_type* bus, int unit_id) - : bus_(bus), - busID_(0), - unit_id_(unit_id), - p0_(0.), - q0_(0.), - H_(3.), - D_(0.), - Ra_(0.), - Tdop_(7.), - Tdopp_(.04), - Tqopp_(.05), - Tqop_(.75), - Xd_(2.1), - Xdp_(0.2), - Xdpp_(0.18), - Xq_(.5), - Xqp_(.5), - Xqpp_(.18), - Xl_(.15), - S10_(0.), - S12_(0.) - { - size_ = 20; // 21; 20 without Pmech - setDerivedParams(); - // Temporary, to eliminate compiler warnings - (void) busID_; - (void) unit_id_; - } + /*! - * @brief Constructor for a pi-model branch + * @brief Constructor for all custom arguments * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 + * @param bus */ template Genrou::Genrou(bus_type* bus, int unit_id, + gov_type* gov, ScalarT p0, ScalarT q0, real_type H, @@ -96,6 +55,7 @@ namespace GridKit : bus_(bus), busID_(0), unit_id_(unit_id), + gov_(gov), p0_(p0), q0_(q0), H_(H), @@ -115,10 +75,62 @@ namespace GridKit S10_(S10), S12_(S12) { - size_ = 20;// 21; 20 without Pmech + size_ = 20; + setDerivedParams(); + } + + + /*! + * @brief Constructor for default parameters + */ + template + Genrou::Genrou(bus_type* bus, int unit_id, gov_type* gov) + : bus_(bus), + busID_(0), + unit_id_(unit_id), + gov_(gov), + p0_(0.), + q0_(0.), + H_(3.), + D_(0.), + Ra_(0.), + Tdop_(7.), + Tdopp_(.04), + Tqopp_(.05), + Tqop_(.75), + Xd_(2.1), + Xdp_(0.2), + Xdpp_(0.18), + Xq_(.5), + Xqp_(.5), + Xqpp_(.18), + Xl_(.15), + S10_(0.), + S12_(0.), + + { + size_ = 20; // 21; 20 without Pmech + gov_ = nullptr; setDerivedParams(); + + // Temporary, to eliminate compiler warnings + (void) busID_; + (void) unit_id_; } + /*! + * @brief Constructor for default no governor + * + * @param bus Pointer to Bus + * @param unit_id Unique int to index generators at the bus + */ + template + Genrou::Genrou(bus_type* bus, int unit_id) + :Genrou(bus, unit_id, nullptr) + { + } + + /*! * @brief allocate method computes sparsity pattern of the Jacobian. */ @@ -206,8 +218,8 @@ namespace GridKit return 0; } - /** - * \brief Identify differential variables. + /*! + * @brief Identify differential variables. */ template int Genrou::tagDifferentiable() @@ -219,8 +231,8 @@ namespace GridKit return 0; } - /** - * \brief Residual contribution of the branch is pushed to the + /*! + * @brief Residual contribution of the branch is pushed to the * two terminal buses. * */ @@ -405,12 +417,6 @@ namespace GridKit B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); } - template - void Genrou::setgov(gov_type* gov) - { - gov_ = gov; - } - template ScalarT& Genrou::speed() { diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index f6eb07f29..7dc11aca5 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -51,27 +51,30 @@ namespace GridKit using real_type = typename Component::real_type; public: - Genrou(bus_type* bus, int unit_id); - Genrou(bus_type* bus, - int unit_id, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12); + Genrou(bus_type* bus, + int unit_id, + gov_type* gov, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12); + Genrou(bus_type* bus, int unit_id, gov_type* gov); + Genrou(bus_type* bus, int unit_id) + ~Genrou() = default; int allocate() override; @@ -90,15 +93,8 @@ namespace GridKit { } - /*! - * @brief Getter for machine speed deviation - * - * @return Reference to speed state variable - */ ScalarT& speed() override; - void setgov(gov_type* gov); - private: void setDerivedParams(); @@ -128,7 +124,7 @@ namespace GridKit const int busID_; int unit_id_; - // Components + // Governor Pointer gov_type* gov_; /* Initial terminal conditions */ From e4539f0e0028635364aa107b844d4236cac1dded Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 20:00:45 -0500 Subject: [PATCH 057/139] edit: compile error [skip ci] --- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 8 ++------ .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 8b949c4f8..6dea4aa8e 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -23,8 +23,6 @@ namespace GridKit namespace PhasorDynamics { - - /*! * @brief Constructor for all custom arguments * @@ -106,11 +104,9 @@ namespace GridKit Xqpp_(.18), Xl_(.15), S10_(0.), - S12_(0.), - + S12_(0.) { - size_ = 20; // 21; 20 without Pmech - gov_ = nullptr; + size_ = 20; setDerivedParams(); // Temporary, to eliminate compiler warnings diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 7dc11aca5..928f47a0a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -73,7 +73,7 @@ namespace GridKit real_type S10, real_type S12); Genrou(bus_type* bus, int unit_id, gov_type* gov); - Genrou(bus_type* bus, int unit_id) + Genrou(bus_type* bus, int unit_id); ~Genrou() = default; From 95f41fce8f4fe9fb1793a3e9596c5dfd248b9426 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 20:10:24 -0500 Subject: [PATCH 058/139] fix: example runtime [skip ci] --- examples/PhasorDynamics/Example3/example3.cpp | 24 ++----------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 0cd456a99..f0466707f 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -46,30 +46,10 @@ int main() TurbineGov* gov; // Instatiation - gen = new Genrou(&bus1, - 1, - gov - 1., - 0.05013, - 3., - 0., - 0., - 7., - .04, - .05, - .75, - 2.1, - 0.2, - 0.18, - 0.5, - 0.5, - 0.18, - 0.15, - 0., - 0.); + gen = new Genrou(&bus1, 1, gov); // Governor of Generator - gov = TurbineGov(gen); + gov = new TurbineGov(gen); /* Connect everything together */ From 26336c664d7e62166d2e8d3baf80a9d2fb24ad6a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 18:05:33 -0500 Subject: [PATCH 059/139] chore: new doc format and misc improvments [skip ci] --- .../PhasorDynamics/Governor/TGOV1/README.md | 60 ++++++++++++------- .../Governor/TGOV1/TurbineGov.cpp | 44 ++++++-------- .../Governor/TGOV1/TurbineGov.hpp | 8 +-- src/Model/PhasorDynamics/MachineBase.hpp | 2 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 4 +- .../SynchronousMachine/GENROUwS/Genrou.hpp | 3 +- 6 files changed, 65 insertions(+), 56 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index a8b7c8e29..574de9218 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -11,27 +11,45 @@ Standard model of the stream turbine Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) -## Nomenclature - -### Algebraic Variables -- $\Delta\omega$ - Per-unit Speed Deviation (p.u.) -- $P_{ref}$ - Reference Power (p.u.) -- $P_{mech}$ - Mechnical Power to Generator (p.u.) - -### Differential Variables -- $P_{tx}$ - Turbine Power (p.u.) (State 1 in Fig. 1) -- $P_{v}$ - Valve Position (State 2 in Fig. 1) - -### Parameters -- $R$ - Droop Constant (p.u.) -- $T_1$ - Valve Time Delay (sec) -- $T_2$ - Turbine Numerator Time Constat (sec) -- $T_3$ - Turbine Delay (sec) -- $P_{vmax}$ - Max Valve Position -- $P_{vmin}$ - Min Valve Position -- $D_t$ - Turbine Damping Coefficient (p.u.) - -## Equations +## Model Parameters + +Symbol | Units | Description | Typical Value | Note +------------|--------|-----------------------------------|---------------| ------ +$R$ | [p.u.] | Droop Constant | 1 | +$T_1$ | [sec] | Valve Time Delay | 1 | +$T_2$ | [sec] | Turbine Numerator Time Constant | 1 | +$T_3$ | [sec] | Turbine Delay | 1 | +$P_{vmax}$ | [p.u.] | Stator leakage reactance | 1 | +$P_{vmin}$ | [p.u.] | Max Valve Position | 1 | +$D_t$ | [p.u.] | Turbine Damping Coefficient | 1 | + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +----------|--------|-----------------------------------|------- +$P_{tx}$ | [p.u.] | Turbine Power (State 1 in Fig. 1) | +$P_{v}$ | [p.u.] | Valve Position (State 2 in Fig. 1)| + +#### Algebraic +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$P_{mech}$ | [p.u.] | Mechnical Power to Generator | Read by a Machine Model + +### External Variables + +#### Differential +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$\Delta\omega$ | [p.u.] | Speed Deviation | + +#### Algebraic +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$P_{ref}$ | [p.u.] | Reference Power | + +## Model Equations ### Algebraic Equations diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 928b3d60b..f37ccea7c 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -42,10 +42,8 @@ namespace GridKit Dt_(.75) { // 2 Internal Variables - size_ = 2; + size_ = 3; - // 7 Parameters - size_param_ = 7; } /*! @@ -82,10 +80,7 @@ namespace GridKit { // 2 Internal Variables - size_ = 2; - - // 7 Parameters - size_param_ = 7; + size_ = 3; } @@ -114,9 +109,15 @@ namespace GridKit int TurbineGov::initialize() { - // D.V. Value - y_[0] = (T3_-T2_) * pmech_; // Ptx (Turbine Power ) - y_[1] = pmech_; // Pv (Valve Position) + // Input Variables (Parameter for now) + pref_ = 1 / R_; + + // Differential Variables + y_[0] = (T3_-T2_) * R_ * pref_; // Ptx (Turbine Power ) + y_[1] = R_ * pref_; // Pv (Valve Position) + + // Algebraic Variables + y_[2] = R_ * pref_; // Pmech // D.V. Derivative yp_[0] = 0.0; // Ptx @@ -132,11 +133,9 @@ namespace GridKit int TurbineGov::tagDifferentiable() { - // Indicate which variables in y_ are differential - for (IdxT i = 0; i < size_; ++i) - { - tag_[i] = true; - } + tag_[0] = true; // Pv + tag_[1] = true; // Ptx + tag_[2] = false; // Pmech return 0; } @@ -154,6 +153,7 @@ namespace GridKit // Internal Variables ScalarT pv = y_[0]; ScalarT ptx = y_[1]; + ScalarT pmech = y_[2]; // Internal Derivatives ScalarT pv_dot = yp_[0]; @@ -162,6 +162,9 @@ namespace GridKit // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; f_[1] = pv_dot + (pv - (pref_ - omega) / R_ ) / T3_; + + // Internal Algebraic Equations + f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); return 0; } @@ -244,16 +247,7 @@ namespace GridKit template ScalarT TurbineGov::Pmech() { - - // Relevant Variables - ScalarT omega = machine_->speed(); - ScalarT pv = y_[0]; - ScalarT ptx = y_[1]; - - // Output Variable - ScalarT pmech = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); - - return pmech; + return y_[2]; } // Available template instantiations diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index d080e0731..fb4b1e772 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -8,11 +8,10 @@ #pragma once -#include #include +#include // Forward declarations -// TODO: Make a MachineBase class for use with any synch. machine namespace GridKit { namespace PhasorDynamics @@ -77,7 +76,7 @@ namespace GridKit { } - // Public Access to Pmech + // Read Access to Pmech ScalarT Pmech() override; private: @@ -97,9 +96,6 @@ namespace GridKit // Input States (which can be parameters) ScalarT pref_; - // Output States - ScalarT pmech_; - }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp index fc3688b6a..502765ea6 100644 --- a/src/Model/PhasorDynamics/MachineBase.hpp +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -15,7 +15,7 @@ namespace GridKit { public: - virtual ScalarT& speed() = 0; + virtual ScalarT speed() = 0; }; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 6dea4aa8e..7aee347cc 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -261,7 +261,7 @@ namespace GridKit ScalarT pmech; if(gov_) { - pmech = gov_->Pmech(); + pmech = gov_->Pmech(); // ISSUE IS HERE? } else { @@ -414,7 +414,7 @@ namespace GridKit } template - ScalarT& Genrou::speed() + ScalarT Genrou::speed() { return y_[1]; } diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 928f47a0a..685a68757 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -93,7 +93,8 @@ namespace GridKit { } - ScalarT& speed() override; + // Read Access to Machine Relative Speed + ScalarT speed() override; private: void setDerivedParams(); From 8a7c07e37795ae3ffee7405dd26b1ac3e3fbb929 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 3 May 2025 00:21:41 -0500 Subject: [PATCH 060/139] init: governor README folder structure --- src/Model/PhasorDynamics/Governor/README.md | 61 +++--------------- .../PhasorDynamics/Governor/TGOV1/README.md | 63 +++++++++++++++++++ 2 files changed, 71 insertions(+), 53 deletions(-) create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/README.md diff --git a/src/Model/PhasorDynamics/Governor/README.md b/src/Model/PhasorDynamics/Governor/README.md index 19e9dde2f..6490404c2 100644 --- a/src/Model/PhasorDynamics/Governor/README.md +++ b/src/Model/PhasorDynamics/Governor/README.md @@ -1,57 +1,12 @@ -# **Governor** +# **Governor Model** -## TGOV1 Model +> [!NOTE] +> No implementation yet. +## Introduction -**Note: Governor model not yet implemented** +A governor models the control system that regulates the output power of a machine. -Standard model of the stream turbine - -
- - - - Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) -
- -## Nomenclature - -### Inputs -- $`P_{REF}`$ - reference power (set point) -- $`\Delta\omega`$ -### States -- $`P`$ - turbine power (state 1 in the Figure) -- $`V`$ - valve position (state 2 in the Figure) -### Parameters -- $`R`$ - permanent droop, pu (0.05) -- $`T2`$ - steam bowl time constant, sec (0.5) -- $`V_{max}`$ - maximum valve position limit (1) -- $`V_{min}`$ - minimum valve position limit (0) -- $`T2`$ - numerator time constant of T2, T3 block, sec (2.5) -- $`T3`$ - reheater time constant, sec (7.5) -- $`D_{t}`$ - turbine damping coefficient, pu (0) -- $`T_{rate}`$ - turbine rating, MW (0) - -## Equations -```math -\Delta\omega=\dfrac{\omega-\omega_{s}}{\omega_{s}} -``` -First block -```math -\dfrac{dV}{dt} = \begin{cases} - \dfrac{1}{T1}(\dfrac{P_{REF}-\Delta\omega}{R}-V) &\text{if } V_{min}<=V<= V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}>0 \text{ and } V>=V_{max} &\text{ also then } V=V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}<0 \text{ and } V<=V_{min} &\text{ also then } V=V_{min}\\ -\end{cases} -``` -Second block -```math -\dfrac{dx}{dt}=\dfrac{1}{T3}(V-P) -``` -```math -P=x+\dfrac{T2}{T3}V -``` -Output -```math -P_{mech}=P-\Delta\omega D_{t} -``` +## Types +There are a few standard Governor models +- Turbine Governor (See [TGOV1](TGOV1/README.md)) \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md new file mode 100644 index 000000000..96ee09fbb --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -0,0 +1,63 @@ +# **TGOV1** + +## Control Diagram + +Standard model of the stream turbine + +
+ + + + Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) +
+ +## Nomenclature + +### Inputs +- $`P_{REF}`$ - reference power (set point) +- $`\Delta\omega`$ + +### Algebraic Variables +### Differential Variables +- $`P`$ - turbine power (state 1 in the Figure) +- $`V`$ - valve position (state 2 in the Figure) + +### Parameters +- $`R`$ - permanent droop, pu (0.05) +- $`T2`$ - steam bowl time constant, sec (0.5) +- $`V_{max}`$ - maximum valve position limit (1) +- $`V_{min}`$ - minimum valve position limit (0) +- $`T2`$ - numerator time constant of T2, T3 block, sec (2.5) +- $`T3`$ - reheater time constant, sec (7.5) +- $`D_{t}`$ - turbine damping coefficient, pu (0) +- $`T_{rate}`$ - turbine rating, MW (0) + +## Equations + + +### Algebraic Equations + +```math +\Delta\omega=\dfrac{\omega-\omega_{s}}{\omega_{s}} +``` + +### Differential Equations +First block +```math +\dfrac{dV}{dt} = \begin{cases} + \dfrac{1}{T1}(\dfrac{P_{REF}-\Delta\omega}{R}-V) &\text{if } V_{min}<=V<= V_{max}\\ + 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}>0 \text{ and } V>=V_{max} &\text{ also then } V=V_{max}\\ + 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}<0 \text{ and } V<=V_{min} &\text{ also then } V=V_{min}\\ +\end{cases} +``` +Second block +```math +\dfrac{dx}{dt}=\dfrac{1}{T3}(V-P) +``` +```math +P=x+\dfrac{T2}{T3}V +``` +Output +```math +P_{mech}=P-\Delta\omega D_{t} +``` From af0293ab965f1fe2b889a760d60db7a5ee64ea64 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 4 May 2025 22:45:49 -0500 Subject: [PATCH 061/139] edit: equations but misplaced --- .../PhasorDynamics/Governor/TGOV1/README.md | 14 ++++++++++++-- .../SynchronousMachine/GENROUwS/README.md | 16 ++++++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 96ee09fbb..af8648adf 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -17,10 +17,20 @@ Standard model of the stream turbine - $`P_{REF}`$ - reference power (set point) - $`\Delta\omega`$ +(Below is for exciter oops) + ### Algebraic Variables +- $V_{tr}$ - Sensed terminal voltage +- $V_{F}$ - Voltage Regulator +- $V_{E}'$ - Field Current +- $E_{fd}$ - Exciter Feedback Internal State +- $k_{sat}$ - Exciter Feedback Internal State + ### Differential Variables -- $`P`$ - turbine power (state 1 in the Figure) -- $`V`$ - valve position (state 2 in the Figure) +- $V_{ts}$ - Sensed terminal voltage +- $V_{R}$ - Voltage Regulator +- $E_{FD}'$ - Field Current +- $V_{fx}$ - Exciter Feedback Internal State ### Parameters - $`R`$ - permanent droop, pu (0.05) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md index 3ea288ad5..c9394bb6f 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/README.md @@ -152,18 +152,18 @@ from the steady-state initial conditions. \begin{aligned} \omega &= 1 \\ \delta &= \text{arg} \left[V_r + jV_i + (R_a + jX_q) (I_r + jI_i)\right] \\ - \psi^{''}_{d} &= V_q \\ - \psi^{''}_{q} &= -V_d \\ - \psi^{''} &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ - k_{sat} &= S_B(\psi^{''}-S_A)^2 \\ - T_{elec} &= (\psi''_{d} - I_dX_d^{''})I_q-(\psi''_{q} - I_qX_d^{''})I_d \\ + \psi''_{d} &= V_q \\ + \psi''_{q} &= -V_d \\ + \psi'' &= \sqrt{(\psi''_{d})^2+(\psi''_{q})^2} \\ + k_{sat} &= S_B(\psi''-S_A)^2 \\ + T_{elec} &= (\psi''_{d} - I_dX_d'')I_q-(\psi''_{q} - I_qX_d'')I_d \\ P_{mech} &= T_{elec} \\ \psi^{'}_d &= - \dfrac{\psi^{''}_d-X_{d5}X_{d2}I_d}{X_{d5}+1}\\ - \psi^{'}_q &=\dfrac{X_{q5}X_{q2}I_q-\psi^{''}_q}{X_{q5}+1}\\ + \dfrac{\psi''_d-X_{d5}X_{d2}I_d}{X_{d5}+1}\\ + \psi^{'}_q &=\dfrac{X_{q5}X_{q2}I_q-\psi''_q}{X_{q5}+1}\\ E^{'}_d &=\psi^{'}_q - X_{q2}I_q \\ E^{'}_q &=\psi^{'}_d + X_{d2}I_d \\ - E_{fd} &= E'_{q}+X_{d1}I_{d}+\psi^{''}_{d}k_{sat} \\ + E_{fd} &= E'_{q}+X_{d1}I_{d}+\psi''_{d}k_{sat} \\ \end{aligned} ``` From 84f4b749bce35b1598ef04d05f0537fafbbb3f53 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:09:05 -0500 Subject: [PATCH 062/139] edit: variables and parameters --- .../PhasorDynamics/Governor/TGOV1/README.md | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index af8648adf..2d10fe043 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -13,34 +13,23 @@ Standard model of the stream turbine ## Nomenclature -### Inputs -- $`P_{REF}`$ - reference power (set point) -- $`\Delta\omega`$ - -(Below is for exciter oops) - ### Algebraic Variables -- $V_{tr}$ - Sensed terminal voltage -- $V_{F}$ - Voltage Regulator -- $V_{E}'$ - Field Current -- $E_{fd}$ - Exciter Feedback Internal State -- $k_{sat}$ - Exciter Feedback Internal State +- $\omega$ - Per-unit Speed Deviation +- $P_{ref}$ - Reference Power +- $P_{mech}$ - Mechnical Power to Generator ### Differential Variables -- $V_{ts}$ - Sensed terminal voltage -- $V_{R}$ - Voltage Regulator -- $E_{FD}'$ - Field Current -- $V_{fx}$ - Exciter Feedback Internal State +- $P_{tx}$ - Turbine Power +- $P_{v}$ - Valve Position ### Parameters -- $`R`$ - permanent droop, pu (0.05) -- $`T2`$ - steam bowl time constant, sec (0.5) -- $`V_{max}`$ - maximum valve position limit (1) -- $`V_{min}`$ - minimum valve position limit (0) -- $`T2`$ - numerator time constant of T2, T3 block, sec (2.5) -- $`T3`$ - reheater time constant, sec (7.5) -- $`D_{t}`$ - turbine damping coefficient, pu (0) -- $`T_{rate}`$ - turbine rating, MW (0) +- $R$ - Droop Constant +- $T_1$ - Valve Time Delay +- $V_{max}$ - Max Valve Position +- $V_{min}$ - Min Valve Position +- $T_2$ - Turbine Numerator Time Constat +- $T_3$ - Turbine Delay +- $D_t$ - Turbine Damping Coefficient ## Equations From 31025fd60e6c07a3fc2bd5dbb5f16a37051ea668 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:17:28 -0500 Subject: [PATCH 063/139] edit: alg and diff equations --- .../PhasorDynamics/Governor/TGOV1/README.md | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 2d10fe043..ac0a64902 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -25,10 +25,10 @@ Standard model of the stream turbine ### Parameters - $R$ - Droop Constant - $T_1$ - Valve Time Delay -- $V_{max}$ - Max Valve Position -- $V_{min}$ - Min Valve Position - $T_2$ - Turbine Numerator Time Constat - $T_3$ - Turbine Delay +- $V_{max}$ - Max Valve Position +- $V_{min}$ - Min Valve Position - $D_t$ - Turbine Damping Coefficient ## Equations @@ -37,26 +37,22 @@ Standard model of the stream turbine ### Algebraic Equations ```math -\Delta\omega=\dfrac{\omega-\omega_{s}}{\omega_{s}} +\begin{aligned} + \dot{P}_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ +\end{aligned} ``` ### Differential Equations First block ```math -\dfrac{dV}{dt} = \begin{cases} - \dfrac{1}{T1}(\dfrac{P_{REF}-\Delta\omega}{R}-V) &\text{if } V_{min}<=V<= V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}>0 \text{ and } V>=V_{max} &\text{ also then } V=V_{max}\\ - 0 &\text{if } \dfrac{P_{REF}-\Delta\omega}{R}<0 \text{ and } V<=V_{min} &\text{ also then } V=V_{min}\\ -\end{cases} -``` -Second block -```math -\dfrac{dx}{dt}=\dfrac{1}{T3}(V-P) -``` -```math -P=x+\dfrac{T2}{T3}V -``` -Output -```math -P_{mech}=P-\Delta\omega D_{t} +\begin{aligned} + \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ + \dfrac{dV}{dt} &= + \begin{cases} + \dfrac{1}{T1}(\dfrac{P_{ref}-\Delta\omega}{R}-V) + & \text{if } P_v \geq V_{max}\\ + 0 & \text{if } P_v \leq V_{min}\\ + & \text{else } \\ + \end{cases} +\end{aligned} ``` From deafec61c0b99159c7f183ebfb7085909ca5f74b Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:25:13 -0500 Subject: [PATCH 064/139] edit: differential system --- .../PhasorDynamics/Governor/TGOV1/README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index ac0a64902..6c891e754 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -35,23 +35,27 @@ Standard model of the stream turbine ### Algebraic Equations - +The algebraic equation dictating the mechnical power output. ```math \begin{aligned} - \dot{P}_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ + P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ \end{aligned} ``` ### Differential Equations -First block +The TGOV1 differential equations, which include a piecewise definition. +The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced +through the piece-wise definition below. ```math \begin{aligned} \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ - \dfrac{dV}{dt} &= + \dot{P}_{v} &= \begin{cases} - \dfrac{1}{T1}(\dfrac{P_{ref}-\Delta\omega}{R}-V) - & \text{if } P_v \geq V_{max}\\ - 0 & \text{if } P_v \leq V_{min}\\ + \dfrac{1}{T_1}( + -P_{v} + \frac{1}{R}(P_{ref}-\omega) + ) & \text{if } P_v \geq V_{max}\\ + 0 + & \text{if } P_v \leq V_{min}\\ & \text{else } \\ \end{cases} \end{aligned} From bad9e79629e2d79b6ccc2d0d56152ed8385aebfb Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:29:14 -0500 Subject: [PATCH 065/139] edit: domain of piecewise --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 6c891e754..713ac1148 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -50,12 +50,11 @@ through the piece-wise definition below. \begin{aligned} \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ \dot{P}_{v} &= + \dfrac{1}{T_1} \begin{cases} - \dfrac{1}{T_1}( - -P_{v} + \frac{1}{R}(P_{ref}-\omega) - ) & \text{if } P_v \geq V_{max}\\ + -P_{v} + \frac{1}{R}(P_{ref}-\omega) + & \text{if } P_v \in \in[V_{min}, V_{max}]\\ 0 - & \text{if } P_v \leq V_{min}\\ & \text{else } \\ \end{cases} \end{aligned} From 1d2172a110083decc633cbaa40962386d1a5aec2 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:36:02 -0500 Subject: [PATCH 066/139] edit: notation cleanup --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 713ac1148..c405383e3 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -53,7 +53,7 @@ through the piece-wise definition below. \dfrac{1}{T_1} \begin{cases} -P_{v} + \frac{1}{R}(P_{ref}-\omega) - & \text{if } P_v \in \in[V_{min}, V_{max}]\\ + & \text{if } P_v \in (V_{min}, V_{max})\\ 0 & \text{else } \\ \end{cases} From 46cf9e0ab31e57c2adfa780ddc1e3df8f42643db Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 11:59:04 -0500 Subject: [PATCH 067/139] propose: continuous domain constraint --- .../PhasorDynamics/Governor/TGOV1/README.md | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index c405383e3..d50988603 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -43,9 +43,7 @@ The algebraic equation dictating the mechnical power output. ``` ### Differential Equations -The TGOV1 differential equations, which include a piecewise definition. -The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced -through the piece-wise definition below. +The TGOV1 differential equations, as derived from the model diagram. ```math \begin{aligned} \dot{P}_{tx} &= P_v - \dfrac{1}{T_3}(P_{tx}+T_2P_v) \\ @@ -59,3 +57,39 @@ through the piece-wise definition below. \end{cases} \end{aligned} ``` +The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced +through the piece-wise definition above. However, depending on the +general solver's requirments, this may need to be expressed as a +smooth approximation (bump function/smooth indicator). +```math +\begin{aligned} + f(x) &= \dfrac{1}{T_1}(-P_{v} + \frac{1}{R}(P_{ref}-\omega)) + I(x) &= \dfrac{1}{2}(1 + \tanh x) + \phi(x) &= I\left( + \dfrac{P_v-V_{min}}{\epsilon} + \right) + - + I\left( + \dfrac{P_v-V_{max}}{\epsilon} + \right) + \dot{P}_{v} &= f(x)\cdot I(x) +\end{aligned} +``` +Perhaps like the following. +$$ +\begin{aligned} + I(x,a,\epsilon) + &= \dfrac{1}{2} + \dfrac{1}{2}\tanh + \left(\dfrac{x-b}{\epsilon}\right) \\ + \phi(x) &= I\left(x;V_{min}, \epsilon + \right) - + I\left(x;V_{max}, \epsilon + \right)\qquad \epsilon <<1\\ + \dot{P}_{v} + &= \ + \dfrac{1}{T_1}\cdot I(P_v) + \left[ + -P_{v} + \frac{1}{R}(P_{ref}-\omega) + \right] +\end{aligned} +$$ \ No newline at end of file From c76d618210e7a867f6f0bd8b2c879ef315510af3 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 12:04:55 -0500 Subject: [PATCH 068/139] edit: bump function --- .../PhasorDynamics/Governor/TGOV1/README.md | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index d50988603..64ad1073c 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -60,23 +60,9 @@ The TGOV1 differential equations, as derived from the model diagram. The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced through the piece-wise definition above. However, depending on the general solver's requirments, this may need to be expressed as a -smooth approximation (bump function/smooth indicator). +smooth approximation (bump function/smooth indicator). Perhaps like the +following. ```math -\begin{aligned} - f(x) &= \dfrac{1}{T_1}(-P_{v} + \frac{1}{R}(P_{ref}-\omega)) - I(x) &= \dfrac{1}{2}(1 + \tanh x) - \phi(x) &= I\left( - \dfrac{P_v-V_{min}}{\epsilon} - \right) - - - I\left( - \dfrac{P_v-V_{max}}{\epsilon} - \right) - \dot{P}_{v} &= f(x)\cdot I(x) -\end{aligned} -``` -Perhaps like the following. -$$ \begin{aligned} I(x,a,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh @@ -90,6 +76,7 @@ $$ \dfrac{1}{T_1}\cdot I(P_v) \left[ -P_{v} + \frac{1}{R}(P_{ref}-\omega) - \right] + \right] \\ + \nabla P_v \end{aligned} -$$ \ No newline at end of file +``` From e44dda262474cac6b3f094d290ca84465e3a04a8 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 12:07:04 -0500 Subject: [PATCH 069/139] edit: syntax error --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 64ad1073c..398a32f7d 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -67,16 +67,14 @@ following. I(x,a,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh \left(\dfrac{x-b}{\epsilon}\right) \\ - \phi(x) &= I\left(x;V_{min}, \epsilon - \right) - - I\left(x;V_{max}, \epsilon - \right)\qquad \epsilon <<1\\ + \phi(x) &= I \left(x;V_{min}, \epsilon \right) - + I \left(x;V_{max}, \epsilon \right) + \qquad \epsilon <<1 \\ \dot{P}_{v} - &= \ + &= \dfrac{1}{T_1}\cdot I(P_v) \left[ -P_{v} + \frac{1}{R}(P_{ref}-\omega) - \right] \\ - \nabla P_v + \right] \\ \end{aligned} ``` From 64498bb6ba9ecf358548a9b855ee01bcbb533458 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Tue, 6 May 2025 12:11:47 -0500 Subject: [PATCH 070/139] edit: completed TGOV1 draft --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 398a32f7d..3bca0c498 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -57,22 +57,22 @@ The TGOV1 differential equations, as derived from the model diagram. \end{cases} \end{aligned} ``` -The domain of the state variable $P_{v}\in[V_{min}, V_{max}]$ is enforced +The domain of the state variable $P_{v}\in(V_{min}, V_{max})$ is enforced through the piece-wise definition above. However, depending on the general solver's requirments, this may need to be expressed as a smooth approximation (bump function/smooth indicator). Perhaps like the following. ```math \begin{aligned} - I(x,a,\epsilon) + I(x,x_0,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh - \left(\dfrac{x-b}{\epsilon}\right) \\ + \left(\dfrac{x-x_0}{\epsilon}\right) \\ \phi(x) &= I \left(x;V_{min}, \epsilon \right) - I \left(x;V_{max}, \epsilon \right) \qquad \epsilon <<1 \\ \dot{P}_{v} &= - \dfrac{1}{T_1}\cdot I(P_v) + \dfrac{1}{T_1}\cdot \phi(P_v) \left[ -P_{v} + \frac{1}{R}(P_{ref}-\omega) \right] \\ From 3c88924189abe53c499f44848638b15f41ef73ed Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 12:38:28 -0500 Subject: [PATCH 071/139] edit: parameter names etc [skip ci] --- .../PhasorDynamics/Governor/TGOV1/README.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 3bca0c498..6a1d4872f 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -1,4 +1,4 @@ -# **TGOV1** +# **Steam Turbine-Governor Model (TGOV1)** ## Control Diagram @@ -14,22 +14,22 @@ Standard model of the stream turbine ## Nomenclature ### Algebraic Variables -- $\omega$ - Per-unit Speed Deviation -- $P_{ref}$ - Reference Power +- $\omega$ - Per-unit Speed Deviation (p.u.) +- $P_{ref}$ - Reference Power - $P_{mech}$ - Mechnical Power to Generator ### Differential Variables -- $P_{tx}$ - Turbine Power -- $P_{v}$ - Valve Position +- $P_{tx}$ - Turbine Power (State 1 in Fig. 1) +- $P_{v}$ - Valve Position (State 2 in Fig. 1) ### Parameters -- $R$ - Droop Constant -- $T_1$ - Valve Time Delay -- $T_2$ - Turbine Numerator Time Constat -- $T_3$ - Turbine Delay -- $V_{max}$ - Max Valve Position -- $V_{min}$ - Min Valve Position -- $D_t$ - Turbine Damping Coefficient +- $R$ - Droop Constant (p.u.) +- $T_1$ - Valve Time Delay (sec) +- $T_2$ - Turbine Numerator Time Constat (sec) +- $T_3$ - Turbine Delay (sec) +- $P_{vmax}$ - Max Valve Position +- $P_{vmin}$ - Min Valve Position +- $D_t$ - Turbine Damping Coefficient (p.u.) ## Equations @@ -50,14 +50,14 @@ The TGOV1 differential equations, as derived from the model diagram. \dot{P}_{v} &= \dfrac{1}{T_1} \begin{cases} - -P_{v} + \frac{1}{R}(P_{ref}-\omega) - & \text{if } P_v \in (V_{min}, V_{max})\\ + -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) + & \text{if } P_v \in (P_{vmin}, P_{vmax})\\ 0 & \text{else } \\ \end{cases} \end{aligned} ``` -The domain of the state variable $P_{v}\in(V_{min}, V_{max})$ is enforced +The domain of the state variable $P_{v}\in(P_{vmin}, P_{vmax})$ is enforced through the piece-wise definition above. However, depending on the general solver's requirments, this may need to be expressed as a smooth approximation (bump function/smooth indicator). Perhaps like the @@ -67,14 +67,14 @@ following. I(x,x_0,\epsilon) &= \dfrac{1}{2} + \dfrac{1}{2}\tanh \left(\dfrac{x-x_0}{\epsilon}\right) \\ - \phi(x) &= I \left(x;V_{min}, \epsilon \right) - - I \left(x;V_{max}, \epsilon \right) + \phi(x) &= I \left(x;P_{vmin}, \epsilon \right) - + I \left(x;P_{vmax}, \epsilon \right) \qquad \epsilon <<1 \\ \dot{P}_{v} &= \dfrac{1}{T_1}\cdot \phi(P_v) \left[ - -P_{v} + \frac{1}{R}(P_{ref}-\omega) + -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) \right] \\ \end{aligned} ``` From 260694d4a3afbafa70909c036980f8a91fa49ccb Mon Sep 17 00:00:00 2001 From: lukelowry Date: Wed, 7 May 2025 19:14:17 +0000 Subject: [PATCH 072/139] Apply pre-commmit fixes --- src/Model/PhasorDynamics/Governor/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Governor/README.md b/src/Model/PhasorDynamics/Governor/README.md index 6490404c2..531c9270e 100644 --- a/src/Model/PhasorDynamics/Governor/README.md +++ b/src/Model/PhasorDynamics/Governor/README.md @@ -9,4 +9,4 @@ A governor models the control system that regulates the output power of a machin ## Types There are a few standard Governor models -- Turbine Governor (See [TGOV1](TGOV1/README.md)) \ No newline at end of file +- Turbine Governor (See [TGOV1](TGOV1/README.md)) From d12a74d3c37d0e3a057c92a730ed8efbec7f2ba9 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 12:48:57 -0500 Subject: [PATCH 073/139] edit: delta omega syntax [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 6a1d4872f..757e8e42f 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -14,7 +14,7 @@ Standard model of the stream turbine ## Nomenclature ### Algebraic Variables -- $\omega$ - Per-unit Speed Deviation (p.u.) +- $\Delta\omega$ - Per-unit Speed Deviation (p.u.) - $P_{ref}$ - Reference Power - $P_{mech}$ - Mechnical Power to Generator @@ -38,7 +38,7 @@ Standard model of the stream turbine The algebraic equation dictating the mechnical power output. ```math \begin{aligned} - P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \omega \\ + P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \Delta\omega \\ \end{aligned} ``` @@ -50,7 +50,7 @@ The TGOV1 differential equations, as derived from the model diagram. \dot{P}_{v} &= \dfrac{1}{T_1} \begin{cases} - -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) + -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) & \text{if } P_v \in (P_{vmin}, P_{vmax})\\ 0 & \text{else } \\ @@ -74,7 +74,7 @@ following. &= \dfrac{1}{T_1}\cdot \phi(P_v) \left[ - -P_{v} + \dfrac{1}{R}(P_{ref}-\omega) + -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ \end{aligned} ``` From d3179dd1caa23dd6ce4b26b2032a55f95c2c44fd Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 13:06:08 -0500 Subject: [PATCH 074/139] edit: power in p.u. [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 757e8e42f..ddfe5f0c9 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -15,11 +15,11 @@ Standard model of the stream turbine ### Algebraic Variables - $\Delta\omega$ - Per-unit Speed Deviation (p.u.) -- $P_{ref}$ - Reference Power -- $P_{mech}$ - Mechnical Power to Generator +- $P_{ref}$ - Reference Power (p.u.) +- $P_{mech}$ - Mechnical Power to Generator (p.u.) ### Differential Variables -- $P_{tx}$ - Turbine Power (State 1 in Fig. 1) +- $P_{tx}$ - Turbine Power (p.u.) (State 1 in Fig. 1) - $P_{v}$ - Valve Position (State 2 in Fig. 1) ### Parameters From 255ecbdec9e6087bc61b34019b748c100d6b14c7 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 13:10:07 -0500 Subject: [PATCH 075/139] edit: indicator generalization [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index ddfe5f0c9..35fc97d30 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -58,21 +58,13 @@ The TGOV1 differential equations, as derived from the model diagram. \end{aligned} ``` The domain of the state variable $P_{v}\in(P_{vmin}, P_{vmax})$ is enforced -through the piece-wise definition above. However, depending on the -general solver's requirments, this may need to be expressed as a -smooth approximation (bump function/smooth indicator). Perhaps like the -following. +through the piece-wise definition above. This may need to be expressed as a +smooth approximation (smooth indicator $\phi$) expressed generically as follows. ```math \begin{aligned} - I(x,x_0,\epsilon) - &= \dfrac{1}{2} + \dfrac{1}{2}\tanh - \left(\dfrac{x-x_0}{\epsilon}\right) \\ - \phi(x) &= I \left(x;P_{vmin}, \epsilon \right) - - I \left(x;P_{vmax}, \epsilon \right) - \qquad \epsilon <<1 \\ \dot{P}_{v} &= - \dfrac{1}{T_1}\cdot \phi(P_v) + \phi(P_v) \cdot \dfrac{1}{T_1} \left[ -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ From f9ac661590b0bfbe4bdbce2483c7a4566b9e17e0 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 15:52:54 -0500 Subject: [PATCH 076/139] add: untested model draft cpp [skip ci] --- .../Governor/TGOV1/CMakeLists.txt | 5 + .../PhasorDynamics/Governor/TGOV1/README.md | 2 +- .../Governor/TGOV1/TurbineGov.cpp | 262 ++++++++++++++++++ .../Governor/TGOV1/TurbineGov.hpp | 95 +++++++ 4 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt new file mode 100644 index 000000000..63b28df94 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt @@ -0,0 +1,5 @@ +gridkit_add_library(phasor_dynamics_turbinegov + SOURCES + TurbineGov.cpp + OUTPUT_NAME + gridkit_phasor_dynamics_turbinegov) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 35fc97d30..7653fe91a 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -69,4 +69,4 @@ smooth approximation (smooth indicator $\phi$) expressed generically as follows. -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ \end{aligned} -``` +``` \ No newline at end of file diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp new file mode 100644 index 000000000..ec7d0e35e --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -0,0 +1,262 @@ +/** + * @file TurbineGov.cpp + * @author Luke Lowery (lukel@tamu.edu) + * @author Adam Birchfield (abirchfield@tamu.edu) + * @brief Definition of a Turbine Governor Model (IEEET1). + * + * + */ + +#include "TurbineGov.hpp" + +#include +#include + +#include + +#define _USE_MATH_DEFINES + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief Constructor for Governor with default parameters + * + * @param unit_id Associated Generator Unit ID + */ + template + TurbineGov::TurbineGov(machine_type* machine) + : unit_id_(unit_id), + R_(3.), + Pvmin_(0.), + Pvmax_(1.), + T1_(7.), + T2_(.04), + T3_(.05), + Dt_(.75), + { + // 2 Internal Variables and 7 Parameters + size_ = 2; + size_param_ = 7; + + // Eliminate compiler warnings + (void) unit_id_; + } + + /*! + * @brief Constructor for Governor + * + * @param unit_id Generator Unit ID + * @param R Droop Constant (p.u.) + * @param Pvmin Minimum Valve Position + * @param Pvmax Maximum Valve Position + * @param Dt Turbine Damping Coefficient (p.u.) + */ + template + TurbineGov::TurbineGov( + machine_type* machine, + real_type R, + real_type Pvmin, + real_type T1, + real_type T2, + real_type T3, + real_type Dt + ) + : machine_(machine), + R_(3.), + Pvmin_(0.), + Pvmax_(1.), + T1_(7.), + T2_(.04), + T3_(.05), + Dt_(.75), + { + + // 2 Internal Variables and 7 Parameters + size_ = 2; + size_param_ = 7; + + // Eliminate compiler warnings + (void) unit_id_; + } + + /*! + * @brief Destructor for Governor Model + * + */ + template + TurbineGov::~TurbineGov() + { + std::cout << "Destroy Governor ..." << std::endl; + } + + + /*! + * @brief Allocate memory for model + * + * + */ + template + int TurbineGov::allocate() + { + f_.resize(size_); + y_.resize(size_); + yp_.resize(size_); + tag_.resize(size_); + fB_.resize(size_); + yB_.resize(size_); + ypB_.resize(size_); + return 0; + } + + /** + * @brief Initialization of the Governor + * + */ + template + int TurbineGov::initialize() + { + + // Initialize Differential Variables: + y_[0] = pref_; // Valve Position + y_[1] = pmech_; // Turbine Power + + // Initialize Differential Variables + yp_[0] = 0.0; + yp_[1] = 0.0; + + return 0; + } + + /** + * @brief Identify differential variables. + */ + template + int TurbineGov::tagDifferentiable() + { + for (IdxT i = 0; i < size_; ++i) + { + tag_[i] = true; + } + return 0; + } + + /** + * @brief Residuals of system equations + * + */ + template + int TurbineGov::evaluateResidual() + { + + // External Variables + ScalarT omega = machine_->omega(); + + // Internal Variables + ScalarT pv = y_[0]; + ScalarT ptx = y_[1]; + + // Internal Derivatives + ScalarT pv_dot = yp_[0]; + ScalarT ptx_dot = yp_[1]; + + // Internal Differential Equations + f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; + f_[1] = pv_dot + (pv - (pref_ - omega) / R ) / T3_; + + // Output Variable + pmech_ = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + + return 0; + } + + /** + * @brief Jacobian evaluation not implemented yet + * + * @tparam ScalarT - Scalar data type + * @tparam IdxT - Index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateJacobian() + { + std::cout << "Jacobian evaluation not implemented!" << std::endl; + return 0; + } + + /** + * @brief Integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateIntegrand() + { + std::cout << "Evaluate Integrand for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint initialization not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::initializeAdjoint() + { + std::cout << "Initialize adjoint for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint residual evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateAdjointResidual() + { + std::cout << "Evaluate adjoint residual for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief Adjoint integrand (objective) evaluation not implemented yet + * + * @tparam ScalarT - scalar data type + * @tparam IdxT - matrix index data type + * @return int - error code, 0 = success + */ + template + int TurbineGov::evaluateAdjointIntegrand() + { + std::cout << "Evaluate adjoint Integrand for TurbineGov..." << std::endl; + return 0; + } + + /** + * @brief The mechanical power output. + * + * @return ScalarT - Mechanical output power value. + */ + template + ScalarT TurbineGov::Pmech() + { + return pmech_; + } + + // Available template instantiations + template class TurbineGov; + template class TurbineGov; + + + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp new file mode 100644 index 000000000..9d84e038f --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -0,0 +1,95 @@ +/** + * @file TurbineGov.hpp + * @author Luke Lowery (lukel@tamu.edu) + * @author Adam Birchfield (abirchfield@tamu.edu) + * @brief Declaration of a Turbine Governor Model (IEEET1). + * + */ + +#pragma once + +#include + +// Forward declarations. +namespace GridKit +{ + namespace PhasorDynamics + { + template + class MachineBase; + } +} // namespace GridKit + +namespace GridKit +{ + namespace PhasorDynamics + { + + template + class TurbineGov : public Component + { + using Component::alpha_; + using Component::f_; + using Component::fB_; + using Component::g_; + using Component::gB_; + using Component::nnz_; + using Component::param_; + using Component::size_; + using Component::tag_; + using Component::time_; + using Component::y_; + using Component::yB_; + using Component::yp_; + using Component::ypB_; + + using machine_type = MachineBase; + using real_type = typename Component::real_type; + + public: + TurbineGov(machine_type* machine); + TurbineGov(machine_type* machine, + real_type R, + real_type Pvmin, + real_type Pvmax, + real_type T1, + real_type T2, + real_type T3, + real_type Dt); + ~TurbineGov() = default; + + int allocate() override; + int initialize() override; + int tagDifferentiable() override; + int evaluateResidual() override; + + // Still to be implemented + int evaluateJacobian() override; + int evaluateIntegrand() override; + int initializeAdjoint() override; + int evaluateAdjointResidual() override; + int evaluateAdjointIntegrand() override; + + void updateTime(real_type /* t */, real_type /* a */) override + { + } + + private: + + // Associated Machine Model + machine_type* machine_; + + // Input parameters + real_type R_; + real_type T1_; + real_type T2_; + real_type T3_; + real_type Dt_; + + // Output States + ScalarT pmech_; + + }; + + } // namespace PhasorDynamics +} // namespace GridKit From dee6986767bb053e0fd8cc0e0061007983f1897f Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 11 May 2025 16:01:27 -0500 Subject: [PATCH 077/139] todo: added dev comments [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 6 +----- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index ec7d0e35e..d778e8529 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -39,9 +39,6 @@ namespace GridKit // 2 Internal Variables and 7 Parameters size_ = 2; size_param_ = 7; - - // Eliminate compiler warnings - (void) unit_id_; } /*! @@ -77,8 +74,6 @@ namespace GridKit size_ = 2; size_param_ = 7; - // Eliminate compiler warnings - (void) unit_id_; } /*! @@ -151,6 +146,7 @@ namespace GridKit { // External Variables + // TODO: should be deviation, not true speed. ScalarT omega = machine_->omega(); // Internal Variables diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 9d84e038f..17832846e 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -10,7 +10,8 @@ #include -// Forward declarations. +// Forward declarations +// TODO: Make a MachineBase class for use with any synch. machine namespace GridKit { namespace PhasorDynamics From a3819a41d7e8b146837aaeba258e9ee15a55da09 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:06:33 -0500 Subject: [PATCH 078/139] chore: environment test gov implementation [skip ci] --- src/Model/PhasorDynamics/CMakeLists.txt | 1 + .../PhasorDynamics/Governor/CMakeLists.txt | 8 + .../Governor/TGOV1/CMakeLists.txt | 6 + .../PhasorDynamics/Governor/TGOV1/README.md | 12 +- .../Governor/TGOV1/TurbineGov.cpp | 59 ++-- .../Governor/TGOV1/TurbineGov.hpp | 6 + src/Model/PhasorDynamics/MachineBase.hpp | 260 ++++++++++++++++++ .../SynchronousMachine/GENROUwS/Genrou.hpp | 42 +-- 8 files changed, 357 insertions(+), 37 deletions(-) create mode 100644 src/Model/PhasorDynamics/Governor/CMakeLists.txt create mode 100644 src/Model/PhasorDynamics/MachineBase.hpp diff --git a/src/Model/PhasorDynamics/CMakeLists.txt b/src/Model/PhasorDynamics/CMakeLists.txt index 01cd77258..6066594c6 100644 --- a/src/Model/PhasorDynamics/CMakeLists.txt +++ b/src/Model/PhasorDynamics/CMakeLists.txt @@ -8,3 +8,4 @@ add_subdirectory(Bus) add_subdirectory(BusFault) add_subdirectory(Load) add_subdirectory(SynchronousMachine) +#add_subdirectory(Governor) diff --git a/src/Model/PhasorDynamics/Governor/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/CMakeLists.txt new file mode 100644 index 000000000..dc138e5b3 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/CMakeLists.txt @@ -0,0 +1,8 @@ + +# [[ +# Author(s): +# - Luke Lowery +# - Adam Birchfield +# ]] + +add_subdirectory(TGOV1) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt index 63b28df94..da403e472 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt @@ -1,3 +1,9 @@ +# [[ +# Author(s): +# - Luke Lowery +# - Adam Birchfield +# ]] + gridkit_add_library(phasor_dynamics_turbinegov SOURCES TurbineGov.cpp diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 7653fe91a..a8b7c8e29 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -69,4 +69,14 @@ smooth approximation (smooth indicator $\phi$) expressed generically as follows. -P_{v} + \dfrac{1}{R}(P_{ref}-\Delta\omega) \right] \\ \end{aligned} -``` \ No newline at end of file +``` + +## Initialization +```math +\begin{aligned} + P_{tx} &= (T_3-T_2) P_{mech}\\ + P_{v} &= P_{mech}\\ + \dot{P}_{tx} &=0\\ + \dot{P}_{v} &=0\\ +\end{aligned} +``` diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index d778e8529..740e8a33a 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -7,6 +7,12 @@ * */ + // NOTES + // Input Variables: Machine Speed Deviation (w) + // Output Variables: Pmech, Pref + // (No algebraic variables in reduced form) + // Differential Variables: Ptx, Pv + #include "TurbineGov.hpp" #include @@ -23,7 +29,7 @@ namespace GridKit /*! * @brief Constructor for Governor with default parameters * - * @param unit_id Associated Generator Unit ID + * @param machine Associated Generator Object */ template TurbineGov::TurbineGov(machine_type* machine) @@ -36,18 +42,23 @@ namespace GridKit T3_(.05), Dt_(.75), { - // 2 Internal Variables and 7 Parameters + // 2 Internal Variables size_ = 2; + + // 7 Parameters size_param_ = 7; } /*! * @brief Constructor for Governor * - * @param unit_id Generator Unit ID + * @param machine Generator Object * @param R Droop Constant (p.u.) * @param Pvmin Minimum Valve Position * @param Pvmax Maximum Valve Position + * @param T1 Param description + * @param T2 Param description + * @param T3 Param description * @param Dt Turbine Damping Coefficient (p.u.) */ template @@ -55,6 +66,7 @@ namespace GridKit machine_type* machine, real_type R, real_type Pvmin, + real_type Pvmax, real_type T1, real_type T2, real_type T3, @@ -70,8 +82,10 @@ namespace GridKit Dt_(.75), { - // 2 Internal Variables and 7 Parameters + // 2 Internal Variables size_ = 2; + + // 7 Parameters size_param_ = 7; } @@ -90,7 +104,6 @@ namespace GridKit /*! * @brief Allocate memory for model * - * */ template int TurbineGov::allocate() @@ -113,13 +126,13 @@ namespace GridKit int TurbineGov::initialize() { - // Initialize Differential Variables: - y_[0] = pref_; // Valve Position - y_[1] = pmech_; // Turbine Power + // D.V. Value + y_[0] = (T3_-T2_) * pmech_; // Ptx (Turbine Power ) + y_[1] = pmech_; // Pv (Valve Position) - // Initialize Differential Variables - yp_[0] = 0.0; - yp_[1] = 0.0; + // D.V. Derivative + yp_[0] = 0.0; // Ptx + yp_[1] = 0.0; // Pv return 0; } @@ -130,6 +143,8 @@ namespace GridKit template int TurbineGov::tagDifferentiable() { + + // Indicate which variables in y_ are differential for (IdxT i = 0; i < size_; ++i) { tag_[i] = true; @@ -145,9 +160,8 @@ namespace GridKit int TurbineGov::evaluateResidual() { - // External Variables - // TODO: should be deviation, not true speed. - ScalarT omega = machine_->omega(); + // Input Variables + ScalarT omega = machine_->speed(); // Internal Variables ScalarT pv = y_[0]; @@ -161,9 +175,6 @@ namespace GridKit f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; f_[1] = pv_dot + (pv - (pref_ - omega) / R ) / T3_; - // Output Variable - pmech_ = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); - return 0; } @@ -243,16 +254,24 @@ namespace GridKit * @return ScalarT - Mechanical output power value. */ template - ScalarT TurbineGov::Pmech() + ScalarT TurbineGov::pmech() { - return pmech_; + + // Relevant Variables + ScalarT omega = machine_->speed(); + ScalarT pv = y_[0]; + ScalarT ptx = y_[1]; + + // Output Variable + ScalarT pmech = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + + return pmech; } // Available template instantiations template class TurbineGov; template class TurbineGov; - } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 17832846e..da7629937 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -75,6 +75,9 @@ namespace GridKit { } + // Public Access to Pmech + ScalarT pmech(); + private: // Associated Machine Model @@ -87,6 +90,9 @@ namespace GridKit real_type T3_; real_type Dt_; + // Input States (which can be parameters) + ScalarT pref_; + // Output States ScalarT pmech_; diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp new file mode 100644 index 000000000..921b8f07f --- /dev/null +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -0,0 +1,260 @@ +#pragma once + +#include + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief MachineBase model implementation base class. + * + */ + template + class MachineBase : public Model::Evaluator + { + public: + using real_type = typename Model::Evaluator::real_type; + + + MachineBase() + : size_(0), + size_quad_(0), + size_param_(0) + { + } + + MachineBase(IdxT size, IdxT size_quad, IdxT size_param) + : size_(size), + size_quad_(size_quad), + size_param_(size_param), + y_(size_), + yp_(size_), + f_(size_), + g_(size_quad_), + yB_(size_), + ypB_(size_), + fB_(size_), + gB_(size_param_), + J_(COO_Matrix()), + param_(size_param_), + param_up_(size_param_), + param_lo_(size_param_) + { + } + + virtual ~MachineBase() + { + } + + virtual IdxT size() override + { + return size_; + } + + virtual IdxT nnz() override + { + return nnz_; + } + + virtual bool hasJacobian() override + { + return false; + } + + virtual IdxT sizeQuadrature() override + { + return size_quad_; + } + + virtual IdxT sizeParams() override + { + return size_param_; + } + + virtual void updateTime(real_type /* t */, real_type /* a */) override + { + // No time to update in bus models + } + + virtual void setTolerances(real_type& rtol, real_type& atol) const override + { + rtol = rtol_; + atol = atol_; + } + + virtual void setMaxSteps(IdxT& msa) const override + { + msa = max_steps_; + } + + virtual ScalarT& speed() = 0; + + std::vector& y() override + { + return y_; + } + + const std::vector& y() const override + { + return y_; + } + + std::vector& yp() override + { + return yp_; + } + + const std::vector& yp() const override + { + return yp_; + } + + std::vector& tag() override + { + return tag_; + } + + const std::vector& tag() const override + { + return tag_; + } + + std::vector& yB() override + { + return yB_; + } + + const std::vector& yB() const override + { + return yB_; + } + + std::vector& ypB() override + { + return ypB_; + } + + const std::vector& ypB() const override + { + return ypB_; + } + + std::vector& param() override + { + return param_; + } + + const std::vector& param() const override + { + return param_; + } + + std::vector& param_up() override + { + return param_up_; + } + + const std::vector& param_up() const override + { + return param_up_; + } + + std::vector& param_lo() override + { + return param_lo_; + } + + const std::vector& param_lo() const override + { + return param_lo_; + } + + std::vector& getResidual() override + { + return f_; + } + + const std::vector& getResidual() const override + { + return f_; + } + + COO_Matrix& getJacobian() override + { + return J_; + } + + const COO_Matrix& getJacobian() const override + { + return J_; + } + + std::vector& getIntegrand() override + { + return g_; + } + + const std::vector& getIntegrand() const override + { + return g_; + } + + std::vector& getAdjointResidual() override + { + return fB_; + } + + const std::vector& getAdjointResidual() const override + { + return fB_; + } + + std::vector& getAdjointIntegrand() override + { + return gB_; + } + + const std::vector& getAdjointIntegrand() const override + { + return gB_; + } + + + protected: + + IdxT size_; + IdxT nnz_; + IdxT size_quad_; + IdxT size_param_; + + std::vector y_; + std::vector yp_; + std::vector tag_; + std::vector f_; + std::vector g_; + + std::vector yB_; + std::vector ypB_; + std::vector fB_; + std::vector gB_; + + COO_Matrix J_; + + std::vector param_; + std::vector param_up_; + std::vector param_lo_; + + real_type time_; + real_type alpha_; + + real_type rtol_; + real_type atol_; + + IdxT max_steps_; + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 305d47966..c84d99036 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -8,7 +8,7 @@ #pragma once -#include +#include // Forward declarations. namespace GridKit @@ -29,22 +29,22 @@ namespace GridKit { template - class Genrou : public Component + class Genrou : public MachineBase { - using Component::alpha_; - using Component::f_; - using Component::fB_; - using Component::g_; - using Component::gB_; - using Component::nnz_; - using Component::param_; - using Component::size_; - using Component::tag_; - using Component::time_; - using Component::y_; - using Component::yB_; - using Component::yp_; - using Component::ypB_; + using MachineBase::alpha_; + using MachineBase::f_; + using MachineBase::fB_; + using MachineBase::g_; + using MachineBase::gB_; + using MachineBase::nnz_; + using MachineBase::param_; + using MachineBase::size_; + using MachineBase::tag_; + using MachineBase::time_; + using MachineBase::y_; + using MachineBase::yB_; + using MachineBase::yp_; + using MachineBase::ypB_; using real_type = typename Component::real_type; using bus_type = BusBase; @@ -91,6 +91,16 @@ namespace GridKit { } + /*! + * @brief Getter for machine speed deviation + * + * @return Reference to speed state variable + */ + ScalarT& speed() override + { + return y_[1]; + } + private: void setDerivedParams(); From 511d80792071ed4fc421fc7e947fe596eac69bf9 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:21:00 -0500 Subject: [PATCH 079/139] edit: component inheritance [skip ci] --- src/Model/PhasorDynamics/MachineBase.hpp | 239 +----------------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 31 +-- 2 files changed, 17 insertions(+), 253 deletions(-) diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp index 921b8f07f..fc3688b6a 100644 --- a/src/Model/PhasorDynamics/MachineBase.hpp +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -2,8 +2,6 @@ #include -#include - namespace GridKit { namespace PhasorDynamics @@ -13,247 +11,12 @@ namespace GridKit * */ template - class MachineBase : public Model::Evaluator + class MachineBase { public: - using real_type = typename Model::Evaluator::real_type; - - - MachineBase() - : size_(0), - size_quad_(0), - size_param_(0) - { - } - - MachineBase(IdxT size, IdxT size_quad, IdxT size_param) - : size_(size), - size_quad_(size_quad), - size_param_(size_param), - y_(size_), - yp_(size_), - f_(size_), - g_(size_quad_), - yB_(size_), - ypB_(size_), - fB_(size_), - gB_(size_param_), - J_(COO_Matrix()), - param_(size_param_), - param_up_(size_param_), - param_lo_(size_param_) - { - } - - virtual ~MachineBase() - { - } - - virtual IdxT size() override - { - return size_; - } - - virtual IdxT nnz() override - { - return nnz_; - } - - virtual bool hasJacobian() override - { - return false; - } - - virtual IdxT sizeQuadrature() override - { - return size_quad_; - } - - virtual IdxT sizeParams() override - { - return size_param_; - } - - virtual void updateTime(real_type /* t */, real_type /* a */) override - { - // No time to update in bus models - } - - virtual void setTolerances(real_type& rtol, real_type& atol) const override - { - rtol = rtol_; - atol = atol_; - } - - virtual void setMaxSteps(IdxT& msa) const override - { - msa = max_steps_; - } virtual ScalarT& speed() = 0; - std::vector& y() override - { - return y_; - } - - const std::vector& y() const override - { - return y_; - } - - std::vector& yp() override - { - return yp_; - } - - const std::vector& yp() const override - { - return yp_; - } - - std::vector& tag() override - { - return tag_; - } - - const std::vector& tag() const override - { - return tag_; - } - - std::vector& yB() override - { - return yB_; - } - - const std::vector& yB() const override - { - return yB_; - } - - std::vector& ypB() override - { - return ypB_; - } - - const std::vector& ypB() const override - { - return ypB_; - } - - std::vector& param() override - { - return param_; - } - - const std::vector& param() const override - { - return param_; - } - - std::vector& param_up() override - { - return param_up_; - } - - const std::vector& param_up() const override - { - return param_up_; - } - - std::vector& param_lo() override - { - return param_lo_; - } - - const std::vector& param_lo() const override - { - return param_lo_; - } - - std::vector& getResidual() override - { - return f_; - } - - const std::vector& getResidual() const override - { - return f_; - } - - COO_Matrix& getJacobian() override - { - return J_; - } - - const COO_Matrix& getJacobian() const override - { - return J_; - } - - std::vector& getIntegrand() override - { - return g_; - } - - const std::vector& getIntegrand() const override - { - return g_; - } - - std::vector& getAdjointResidual() override - { - return fB_; - } - - const std::vector& getAdjointResidual() const override - { - return fB_; - } - - std::vector& getAdjointIntegrand() override - { - return gB_; - } - - const std::vector& getAdjointIntegrand() const override - { - return gB_; - } - - - protected: - - IdxT size_; - IdxT nnz_; - IdxT size_quad_; - IdxT size_param_; - - std::vector y_; - std::vector yp_; - std::vector tag_; - std::vector f_; - std::vector g_; - - std::vector yB_; - std::vector ypB_; - std::vector fB_; - std::vector gB_; - - COO_Matrix J_; - - std::vector param_; - std::vector param_up_; - std::vector param_lo_; - - real_type time_; - real_type alpha_; - - real_type rtol_; - real_type atol_; - - IdxT max_steps_; }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index c84d99036..0ea653e42 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -8,6 +8,7 @@ #pragma once +#include #include // Forward declarations. @@ -29,22 +30,22 @@ namespace GridKit { template - class Genrou : public MachineBase + class Genrou : public Component, public MachineBase { - using MachineBase::alpha_; - using MachineBase::f_; - using MachineBase::fB_; - using MachineBase::g_; - using MachineBase::gB_; - using MachineBase::nnz_; - using MachineBase::param_; - using MachineBase::size_; - using MachineBase::tag_; - using MachineBase::time_; - using MachineBase::y_; - using MachineBase::yB_; - using MachineBase::yp_; - using MachineBase::ypB_; + using Component::alpha_; + using Component::f_; + using Component::fB_; + using Component::g_; + using Component::gB_; + using Component::nnz_; + using Component::param_; + using Component::size_; + using Component::tag_; + using Component::time_; + using Component::y_; + using Component::yB_; + using Component::yp_; + using Component::ypB_; using real_type = typename Component::real_type; using bus_type = BusBase; From 4b272740f79f1fe6878d343170200bd92277e569 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:32:30 -0500 Subject: [PATCH 080/139] edit: turbine compilation issue [skip ci] --- .../Governor/TGOV1/TurbineGov.cpp | 19 ++++--------------- .../Governor/TGOV1/TurbineGov.hpp | 3 +++ 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 740e8a33a..9b06dd997 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -33,14 +33,14 @@ namespace GridKit */ template TurbineGov::TurbineGov(machine_type* machine) - : unit_id_(unit_id), + : machine_(machine), R_(3.), Pvmin_(0.), Pvmax_(1.), T1_(7.), T2_(.04), T3_(.05), - Dt_(.75), + Dt_(.75) { // 2 Internal Variables size_ = 2; @@ -79,7 +79,7 @@ namespace GridKit T1_(7.), T2_(.04), T3_(.05), - Dt_(.75), + Dt_(.75) { // 2 Internal Variables @@ -90,17 +90,6 @@ namespace GridKit } - /*! - * @brief Destructor for Governor Model - * - */ - template - TurbineGov::~TurbineGov() - { - std::cout << "Destroy Governor ..." << std::endl; - } - - /*! * @brief Allocate memory for model * @@ -173,7 +162,7 @@ namespace GridKit // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; - f_[1] = pv_dot + (pv - (pref_ - omega) / R ) / T3_; + f_[1] = pv_dot + (pv - (pref_ - omega) / R_ ) / T3_; return 0; } diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index da7629937..69dad7118 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -37,6 +37,7 @@ namespace GridKit using Component::nnz_; using Component::param_; using Component::size_; + using Component::size_param_; using Component::tag_; using Component::time_; using Component::y_; @@ -85,6 +86,8 @@ namespace GridKit // Input parameters real_type R_; + real_type Pvmin_; + real_type Pvmax_; real_type T1_; real_type T2_; real_type T3_; From 01fbd20c2b61c73cdb67d94f6f749f00bde7dfcc Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 14:56:14 -0500 Subject: [PATCH 081/139] init: example 3 turbine include --- .../Example3_Powerworld_Reference.hpp | 2406 +++++++++++++++++ .../Governor/TGOV1/TurbineGov.cpp | 1 - 2 files changed, 2406 insertions(+), 1 deletion(-) create mode 100644 examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp diff --git a/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp b/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp new file mode 100644 index 000000000..30d868076 --- /dev/null +++ b/examples/PhasorDynamics/Example3/Example3_Powerworld_Reference.hpp @@ -0,0 +1,2406 @@ +#include + +// Columns: +// Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, +std::vector> reference_solution = + {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit + {0.004167, 1, 1.000000477}, + {0.008333, 1, 1.000000477}, + {0.0125, 0.99999994, 1.000000477}, + {0.016667, 0.99999994, 1.000000477}, + {0.020833, 0.99999994, 1.000000477}, + {0.025, 0.99999994, 1.000000477}, + {0.029167, 0.99999994, 1.000000477}, + {0.033333, 0.99999994, 1.000000477}, + {0.0375, 0.99999994, 1.000000477}, + {0.041667, 0.99999994, 1.000000477}, + {0.045833, 0.99999994, 1.000000477}, + {0.05, 0.999999881, 1.000000477}, + {0.054167, 0.999999881, 1.000000477}, + {0.058333, 0.999999881, 1.000000477}, + {0.0625, 0.999999881, 1.000000477}, + {0.066667, 0.999999881, 1.000000477}, + {0.070833, 0.999999881, 1.000000477}, + {0.075, 0.999999881, 1.000000477}, + {0.079167, 0.999999881, 1.000000477}, + {0.083333, 0.999999881, 1.000000477}, + {0.0875, 0.999999881, 1.000000477}, + {0.091667, 0.999999881, 1.000000477}, + {0.095833, 0.999999881, 1.000000477}, + {0.1, 0.999999881, 1.000000477}, + {0.104167, 0.999999881, 1.000000477}, + {0.108333, 0.999999881, 1.000000477}, + {0.1125, 0.999999881, 1.000000477}, + {0.116667, 0.999999881, 1.000000477}, + {0.120833, 0.999999881, 1.000000477}, + {0.125, 0.999999881, 1.000000477}, + {0.129167, 0.999999881, 1.000000477}, + {0.133333, 0.999999881, 1.000000477}, + {0.1375, 0.99999994, 1.000000477}, + {0.141667, 0.99999994, 1.000000477}, + {0.145833, 0.99999994, 1.000000477}, + {0.15, 0.99999994, 1.000000477}, + {0.154167, 0.99999994, 1.000000477}, + {0.158333, 0.99999994, 1.000000477}, + {0.1625, 0.99999994, 1.000000477}, + {0.166667, 0.99999994, 1.000000477}, + {0.170833, 0.99999994, 1.000000477}, + {0.175, 0.99999994, 1.000000477}, + {0.179167, 0.99999994, 1.000000477}, + {0.183333, 0.99999994, 1.000000477}, + {0.1875, 0.99999994, 1.000000477}, + {0.191667, 0.99999994, 1.000000477}, + {0.195833, 1, 1.000000477}, + {0.2, 1, 1.000000477}, + {0.204167, 1, 1.000000477}, + {0.208333, 1, 1.000000477}, + {0.2125, 1, 1.000000477}, + {0.216667, 1, 1.000000477}, + {0.220833, 1, 1.000000477}, + {0.225, 1, 1.000000477}, + {0.229167, 1, 1.000000477}, + {0.233333, 1, 1.000000477}, + {0.2375, 1, 1.000000477}, + {0.241667, 1, 1.000000477}, + {0.245833, 1, 1.000000477}, + {0.25, 1, 1.000000477}, + {0.254167, 1, 1.000000477}, + {0.258333, 1, 1.000000477}, + {0.2625, 1, 1.000000477}, + {0.266667, 1, 1.000000477}, + {0.270833, 1, 1.000000477}, + {0.275, 1, 1.000000477}, + {0.279167, 1, 1.000000477}, + {0.283333, 1, 1.000000477}, + {0.2875, 1, 1.000000477}, + {0.291667, 1, 1.000000477}, + {0.295833, 1.000000119, 1.000000477}, + {0.3, 1.000000119, 1.000000477}, + {0.304167, 1.000000119, 1.000000477}, + {0.308333, 1.000000119, 1.000000477}, + {0.3125, 1.000000119, 1.000000477}, + {0.316667, 1.000000119, 1.000000477}, + {0.320833, 1.000000119, 1.000000477}, + {0.325, 1.000000119, 1.000000477}, + {0.329167, 1.000000119, 1.000000477}, + {0.333333, 1.000000119, 1.000000477}, + {0.3375, 1.000000119, 1.000000477}, + {0.341667, 1.000000119, 1.000000477}, + {0.345833, 1.000000119, 1.000000477}, + {0.35, 1.000000119, 1.000000477}, + {0.354167, 1.000000119, 1.000000477}, + {0.358333, 1.000000119, 1.000000477}, + {0.3625, 1, 1.000000477}, + {0.366667, 1, 1.000000477}, + {0.370833, 1, 1.000000477}, + {0.375, 1, 1.000000477}, + {0.379167, 1, 1.000000477}, + {0.383333, 1, 1.000000477}, + {0.3875, 1, 1.000000477}, + {0.391667, 1, 1.000000477}, + {0.395833, 1, 1.000000477}, + {0.4, 1, 1.000000477}, + {0.404167, 1, 1.000000477}, + {0.408333, 1, 1.000000477}, + {0.4125, 1, 1.000000477}, + {0.416667, 1, 1.000000477}, + {0.420833, 1, 1.000000477}, + {0.425, 1, 1.000000477}, + {0.429167, 1, 1.000000477}, + {0.433333, 1, 1.000000477}, + {0.4375, 1, 1.000000477}, + {0.441667, 1, 1.000000477}, + {0.445833, 1, 1.000000477}, + {0.45, 1, 1.000000477}, + {0.454167, 1, 1.000000477}, + {0.458333, 1, 1.000000477}, + {0.4625, 1, 1.000000477}, + {0.466667, 1, 1.000000477}, + {0.470833, 1, 1.000000477}, + {0.475, 1, 1.000000477}, + {0.479167, 1, 1.000000477}, + {0.483333, 1, 1.000000477}, + {0.4875, 1, 1.000000477}, + {0.491667, 1, 1.000000477}, + {0.495833, 1, 1.000000477}, + {0.5, 1, 1.000000477}, + {0.504167, 1, 1.000000477}, + {0.508333, 1, 1.000000477}, + {0.5125, 0.99999994, 1.000000477}, + {0.516667, 0.99999994, 1.000000477}, + {0.520833, 0.99999994, 1.000000477}, + {0.525, 0.99999994, 1.000000477}, + {0.529167, 0.99999994, 1.000000477}, + {0.533333, 0.99999994, 1.000000477}, + {0.5375, 0.99999994, 1.000000477}, + {0.541667, 0.99999994, 1.000000477}, + {0.545833, 0.99999994, 1.000000477}, + {0.55, 0.99999994, 1.000000477}, + {0.554167, 0.99999994, 1.000000477}, + {0.558333, 0.99999994, 1.000000477}, + {0.5625, 0.99999994, 1.000000477}, + {0.566667, 0.99999994, 1.000000477}, + {0.570833, 0.99999994, 1.000000477}, + {0.575, 0.99999994, 1.000000477}, + {0.579167, 0.99999994, 1.000000477}, + {0.583333, 0.99999994, 1.000000477}, + {0.5875, 0.99999994, 1.000000477}, + {0.591667, 0.99999994, 1.000000477}, + {0.595833, 0.99999994, 1.000000477}, + {0.6, 0.99999994, 1.000000477}, + {0.604167, 0.99999994, 1.000000477}, + {0.608333, 0.99999994, 1.000000477}, + {0.6125, 0.99999994, 1.000000477}, + {0.616667, 0.99999994, 1.000000477}, + {0.620833, 1, 1.000000477}, + {0.625, 1, 1.000000477}, + {0.629167, 1, 1.000000477}, + {0.633333, 1, 1.000000477}, + {0.6375, 1, 1.000000477}, + {0.641667, 1, 1.000000477}, + {0.645833, 1, 1.000000477}, + {0.65, 1, 1.000000477}, + {0.654167, 1, 1.000000477}, + {0.658333, 1, 1.000000477}, + {0.6625, 1, 1.000000477}, + {0.666667, 1, 1.000000477}, + {0.670833, 1, 1.000000477}, + {0.675, 1, 1.000000477}, + {0.679167, 1, 1.000000477}, + {0.683333, 1, 1.000000477}, + {0.6875, 1, 1.000000477}, + {0.691667, 1, 1.000000477}, + {0.695833, 1, 1.000000477}, + {0.7, 1, 1.000000477}, + {0.704167, 1, 1.000000477}, + {0.708333, 1, 1.000000477}, + {0.7125, 1, 1.000000477}, + {0.716667, 1, 1.000000477}, + {0.720833, 1, 1.000000477}, + {0.725, 1, 1.000000477}, + {0.729167, 1, 1.000000477}, + {0.733333, 1, 1.000000477}, + {0.7375, 1, 1.000000477}, + {0.741667, 1, 1.000000477}, + {0.745833, 1, 1.000000477}, + {0.75, 1, 1.000000477}, + {0.754167, 1, 1.000000477}, + {0.758333, 1, 1.000000477}, + {0.7625, 1, 1.000000477}, + {0.766667, 1, 1.000000477}, + {0.770833, 1, 1.000000477}, + {0.775, 1, 1.000000477}, + {0.779167, 1, 1.000000477}, + {0.783333, 1, 1.000000477}, + {0.7875, 1, 1.000000477}, + {0.791667, 1, 1.000000477}, + {0.795833, 1, 1.000000477}, + {0.8, 1, 1.000000477}, + {0.804167, 1, 1.000000477}, + {0.808333, 1, 1.000000477}, + {0.8125, 1, 1.000000477}, + {0.816667, 1, 1.000000477}, + {0.820833, 1, 1.000000477}, + {0.825, 1, 1.000000477}, + {0.829167, 1, 1.000000477}, + {0.833333, 1, 1.000000477}, + {0.8375, 1, 1.000000477}, + {0.841667, 1, 1.000000477}, + {0.845833, 1, 1.000000477}, + {0.85, 1, 1.000000477}, + {0.854167, 1, 1.000000477}, + {0.858333, 1, 1.000000477}, + {0.8625, 1, 1.000000477}, + {0.866667, 1, 1.000000477}, + {0.870833, 1, 1.000000477}, + {0.875, 1, 1.000000477}, + {0.879167, 1, 1.000000477}, + {0.883333, 1, 1.000000477}, + {0.8875, 1, 1.000000477}, + {0.891667, 1, 1.000000477}, + {0.895833, 1, 1.000000477}, + {0.9, 1, 1.000000477}, + {0.904167, 1, 1.000000477}, + {0.908333, 1, 1.000000477}, + {0.9125, 1, 1.000000477}, + {0.916667, 1, 1.000000477}, + {0.920833, 1, 1.000000477}, + {0.925, 1, 1.000000477}, + {0.929167, 1, 1.000000477}, + {0.933333, 1, 1.000000477}, + {0.9375, 1, 1.000000477}, + {0.941667, 1, 1.000000477}, + {0.945833, 1, 1.000000477}, + {0.95, 1, 1.000000477}, + {0.954167, 1, 1.000000477}, + {0.958333, 1, 1.000000477}, + {0.9625, 1, 1.000000477}, + {0.966667, 1, 1.000000477}, + {0.970833, 1, 1.000000477}, + {0.975, 1, 1.000000477}, + {0.979167, 1, 1.000000477}, + {0.983333, 1, 1.000000477}, + {0.9875, 1, 1.000000477}, + {0.991667, 1, 1.000000477}, + {0.995833, 1, 1.000000477}, + {1, 1, 1.000000477}, + {1.004167, 1.000682712, 0.015128844}, + {1.008333, 1.001363397, 0.014973078}, + {1.0125, 1.002042532, 0.014841928}, + {1.016667, 1.002720356, 0.014729479}, + {1.020833, 1.00339675, 0.014631276}, + {1.025, 1.004072189, 0.014543867}, + {1.029167, 1.004746675, 0.01446466}, + {1.033333, 1.00541997, 0.014391631}, + {1.0375, 1.006092548, 0.01432314}, + {1.041667, 1.006764412, 0.014257919}, + {1.045833, 1.007435203, 0.014194945}, + {1.05, 1.008105278, 0.014133334}, + {1.054167, 1.008774638, 0.014072391}, + {1.058333, 1.009443045, 0.014011139}, + {1.0625, 1.010110855, 0.01395021}, + {1.066667, 1.010777831, 0.013887996}, + {1.070833, 1.011443853, 0.013824509}, + {1.075, 1.01210916, 0.013759368}, + {1.079167, 1.012773633, 0.013692267}, + {1.083333, 1.013437271, 0.013622929}, + {1.0875, 1.014100075, 0.013551049}, + {1.091667, 1.014762163, 0.013476389}, + {1.095833, 1.015423179, 0.013398723}, + {1.1, 1.016083598, 0.013398723}, + {1.104167, 1.015262365, 0.88047874}, + {1.108333, 1.014493585, 0.89023459}, + {1.1125, 1.013762116, 0.898759723}, + {1.116667, 1.013056278, 0.906125188}, + {1.120833, 1.012367129, 0.912427425}, + {1.125, 1.01168704, 0.917777061}, + {1.129167, 1.011010766, 0.922281682}, + {1.133333, 1.010334253, 0.926045954}, + {1.1375, 1.009654403, 0.929170609}, + {1.141667, 1.008969307, 0.931745946}, + {1.145833, 1.008277893, 0.93385452}, + {1.15, 1.007579207, 0.935571969}, + {1.154167, 1.006873131, 0.936964393}, + {1.158333, 1.006160259, 0.938090801}, + {1.1625, 1.005440712, 0.939003944}, + {1.166667, 1.0047158, 0.9397493}, + {1.170833, 1.003986597, 0.940366805}, + {1.175, 1.003253937, 0.940891325}, + {1.179167, 1.002519608, 0.941352487}, + {1.183333, 1.001785278, 0.94177556}, + {1.1875, 1.001052022, 0.942182004}, + {1.191667, 1.000321627, 0.942589283}, + {1.195833, 0.999596179, 0.943011642}, + {1.2, 0.998876929, 0.943460345}, + {1.204167, 0.998165727, 0.943943799}, + {1.208333, 0.997464538, 0.944467604}, + {1.2125, 0.996774673, 0.945035696}, + {1.216667, 0.996098042, 0.945649385}, + {1.220833, 0.995436549, 0.946308196}, + {1.225, 0.994791448, 0.947010458}, + {1.229167, 0.994164526, 0.947752595}, + {1.233333, 0.993557453, 0.948529899}, + {1.2375, 0.99297154, 0.949337125}, + {1.241667, 0.992408335, 0.950167537}, + {1.245833, 0.99186933, 0.951014042}, + {1.25, 0.991355598, 0.951869369}, + {1.254167, 0.990868449, 0.952725708}, + {1.258333, 0.990409136, 0.953574955}, + {1.2625, 0.989978492, 0.954409778}, + {1.266667, 0.989577591, 0.955215633}, + {1.270833, 0.989207327, 0.956005096}, + {1.275, 0.988868177, 0.956751525}, + {1.279167, 0.988560915, 0.957458079}, + {1.283333, 0.988285899, 0.958120406}, + {1.2875, 0.988043547, 0.958723307}, + {1.291667, 0.987834036, 0.959283113}, + {1.295833, 0.987657607, 0.959768534}, + {1.3, 0.987514019, 0.960213661}, + {1.304167, 0.987403274, 0.96057564}, + {1.308333, 0.987325132, 0.96090132}, + {1.3125, 0.987279058, 0.961140752}, + {1.316667, 0.987264812, 0.961349428}, + {1.320833, 0.987281561, 0.961474001}, + {1.325, 0.987328827, 0.961574197}, + {1.329167, 0.987405658, 0.961597323}, + {1.333333, 0.987511337, 0.961602867}, + {1.3375, 0.987644792, 0.96154201}, + {1.341667, 0.987805247, 0.961470485}, + {1.345833, 0.987991393, 0.961345851}, + {1.35, 0.988202393, 0.961207449}, + {1.354167, 0.988437057, 0.961049318}, + {1.358333, 0.988694072, 0.960876703}, + {1.3625, 0.988972366, 0.960694611}, + {1.366667, 0.989270747, 0.960507751}, + {1.370833, 0.989587843, 0.96032083}, + {1.375, 0.989922643, 0.960137904}, + {1.379167, 0.990273893, 0.959962845}, + {1.383333, 0.990640223, 0.95979917}, + {1.3875, 0.991020679, 0.959649861}, + {1.391667, 0.991413951, 0.959517598}, + {1.395833, 0.991818845, 0.959404588}, + {1.4, 0.992234349, 0.959312677}, + {1.404167, 0.99265933, 0.959243178}, + {1.408333, 0.993092477, 0.959197223}, + {1.4125, 0.993533015, 0.959175408}, + {1.416667, 0.993979812, 0.95917803}, + {1.420833, 0.994431734, 0.959205091}, + {1.425, 0.994888008, 0.959256351}, + {1.429167, 0.995347559, 0.959331334}, + {1.433333, 0.995809376, 0.959429204}, + {1.4375, 0.996272743, 0.959549129}, + {1.441667, 0.996736646, 0.95968461}, + {1.445833, 0.997200072, 0.959850907}, + {1.45, 0.997662604, 0.960024655}, + {1.454167, 0.998123169, 0.960226417}, + {1.458333, 0.998580933, 0.960433066}, + {1.4625, 0.999035299, 0.960664332}, + {1.466667, 0.999485552, 0.96089834}, + {1.470833, 0.99993068, 0.961153209}, + {1.475, 1.000370383, 0.961408794}, + {1.479167, 1.000803709, 0.961681604}, + {1.483333, 1.001230001, 0.961953163}, + {1.4875, 1.001648784, 0.962238312}, + {1.491667, 1.00205946, 0.962520778}, + {1.495833, 1.002461076, 0.962813199}, + {1.5, 1.002853513, 0.963101745}, + {1.504167, 1.003236055, 0.963396966}, + {1.508333, 1.003607988, 0.96368736}, + {1.5125, 1.003968954, 0.963981271}, + {1.516667, 1.004318357, 0.964269757}, + {1.520833, 1.004655838, 0.964558721}, + {1.525, 1.004980803, 0.964841962}, + {1.529167, 1.005292892, 0.965122938}, + {1.533333, 1.005591631, 0.965397894}, + {1.5375, 1.00587666, 0.965667963}, + {1.541667, 1.006147623, 0.96593219}, + {1.545833, 1.006403923, 0.966188729}, + {1.55, 1.006645441, 0.966439664}, + {1.554167, 1.00687182, 0.966680348}, + {1.558333, 1.007082582, 0.966915607}, + {1.5625, 1.007277608, 0.967138052}, + {1.566667, 1.00745666, 0.967355549}, + {1.570833, 1.007619381, 0.96755743}, + {1.575, 1.007765532, 0.967754841}, + {1.579167, 1.007894993, 0.967934012}, + {1.583333, 1.008007526, 0.968109071}, + {1.5875, 1.008103132, 0.968263447}, + {1.591667, 1.008181453, 0.968414128}, + {1.595833, 1.008242607, 0.968541622}, + {1.6, 1.008286357, 0.968665838}, + {1.604167, 1.008312702, 0.968764782}, + {1.608333, 1.008321762, 0.968860805}, + {1.6125, 1.008313417, 0.968929827}, + {1.616667, 1.008287787, 0.968996286}, + {1.620833, 1.008244872, 0.969034612}, + {1.625, 1.00818491, 0.969070733}, + {1.629167, 1.00810802, 0.969078183}, + {1.633333, 1.008014202, 0.969083905}, + {1.6375, 1.007904053, 0.969061136}, + {1.641667, 1.007777452, 0.969037175}, + {1.645833, 1.007634878, 0.968985915}, + {1.65, 1.007476687, 0.96893394}, + {1.654167, 1.007303119, 0.968856812}, + {1.658333, 1.007114768, 0.968779624}, + {1.6625, 1.006911874, 0.968680382}, + {1.666667, 1.006694913, 0.968581617}, + {1.670833, 1.00646472, 0.968464911}, + {1.675, 1.006221414, 0.968349338}, + {1.679167, 1.005965829, 0.968220592}, + {1.683333, 1.005698442, 0.968093693}, + {1.6875, 1.005420089, 0.967959166}, + {1.691667, 1.005131125, 0.967827022}, + {1.695833, 1.004832625, 0.967693269}, + {1.7, 1.004525065, 0.967562377}, + {1.704167, 1.00420928, 0.967436075}, + {1.708333, 1.003885984, 0.967313051}, + {1.7125, 1.003556132, 0.967200637}, + {1.716667, 1.003220201, 0.967091799}, + {1.720833, 1.0028795, 0.966999233}, + {1.725, 1.00253439, 0.966910303}, + {1.729167, 1.00218606, 0.966842711}, + {1.733333, 1.001835227, 0.966778576}, + {1.7375, 1.001482844, 0.966739953}, + {1.741667, 1.001129627, 0.966711283}, + {1.745833, 1.000776529, 0.966690898}, + {1.75, 1.000424623, 0.966700375}, + {1.754167, 1.000074387, 0.96671176}, + {1.758333, 0.999727011, 0.966754198}, + {1.7625, 0.999383092, 0.966797709}, + {1.766667, 0.999043643, 0.966872096}, + {1.770833, 0.998709381, 0.966946483}, + {1.775, 0.998381138, 0.967050433}, + {1.779167, 0.99805963, 0.967153192}, + {1.783333, 0.997745872, 0.96728301}, + {1.7875, 0.997440159, 0.967410386}, + {1.791667, 0.997143567, 0.967561364}, + {1.795833, 0.99685663, 0.967714787}, + {1.8, 0.996579885, 0.967869997}, + {1.804167, 0.996314168, 0.968042195}, + {1.808333, 0.996059835, 0.968208969}, + {1.8125, 0.995817542, 0.968387842}, + {1.816667, 0.995587707, 0.968560398}, + {1.820833, 0.995370924, 0.968739927}, + {1.825, 0.995167375, 0.968912601}, + {1.829167, 0.994977593, 0.969087243}, + {1.833333, 0.994801879, 0.969254494}, + {1.8375, 0.99464041, 0.96941936}, + {1.841667, 0.994493544, 0.969576657}, + {1.845833, 0.994361401, 0.969727576}, + {1.85, 0.994244099, 0.969871104}, + {1.854167, 0.994141817, 0.970005214}, + {1.858333, 0.994054556, 0.970132172}, + {1.8625, 0.993982315, 0.970247447}, + {1.866667, 0.993925095, 0.970356286}, + {1.870833, 0.993882775, 0.97045207}, + {1.875, 0.993855238, 0.970542192}, + {1.879167, 0.993842363, 0.970618844}, + {1.883333, 0.993843973, 0.970690787}, + {1.8875, 0.993859708, 0.970749676}, + {1.891667, 0.993889451, 0.97080493}, + {1.895833, 0.993932843, 0.970848203}, + {1.9, 0.993989527, 0.970888972}, + {1.904167, 0.994059205, 0.97091943}, + {1.908333, 0.994141459, 0.970948577}, + {1.9125, 0.994235873, 0.970969498}, + {1.916667, 0.994342029, 0.970990121}, + {1.920833, 0.99445945, 0.971004903}, + {1.925, 0.994587719, 0.971020401}, + {1.929167, 0.9947263, 0.971032619}, + {1.933333, 0.994874775, 0.971046269}, + {1.9375, 0.995032549, 0.971059203}, + {1.941667, 0.995199144, 0.971074224}, + {1.945833, 0.995373964, 0.971090853}, + {1.95, 0.995556593, 0.971110106}, + {1.954167, 0.995746374, 0.971133053}, + {1.958333, 0.995942831, 0.971158922}, + {1.9625, 0.996145368, 0.971190274}, + {1.966667, 0.996353567, 0.971224725}, + {1.970833, 0.996566653, 0.97126615}, + {1.975, 0.996784389, 0.971310556}, + {1.979167, 0.997005939, 0.971363068}, + {1.983333, 0.997230887, 0.971418381}, + {1.9875, 0.997458696, 0.971482456}, + {1.991667, 0.997688949, 0.971549094}, + {1.995833, 0.997920871, 0.971624851}, + {2, 0.998154223, 0.971702695}, + {2.004167, 0.99838829, 0.971789718}, + {2.008333, 0.998622656, 0.971878409}, + {2.0125, 0.998856843, 0.971975863}, + {2.016667, 0.999090433, 0.972074568}, + {2.020833, 0.999322772, 0.972181499}, + {2.025, 0.999553561, 0.972289145}, + {2.029167, 0.999782324, 0.972404182}, + {2.033333, 1.000008583, 0.972519457}, + {2.0375, 1.000231862, 0.97264123}, + {2.041667, 1.000451922, 0.972762704}, + {2.045833, 1.000668168, 0.972889543}, + {2.05, 1.000880361, 0.973015666}, + {2.054167, 1.001088023, 0.973146021}, + {2.058333, 1.001290798, 0.973275185}, + {2.0625, 1.001488328, 0.973407388}, + {2.066667, 1.001680374, 0.973538041}, + {2.070833, 1.00186646, 0.973670363}, + {2.075, 1.002046466, 0.973800957}, + {2.079167, 1.002219915, 0.973931909}, + {2.083333, 1.002386689, 0.974060893}, + {2.0875, 1.00254631, 0.974188983}, + {2.091667, 1.002698779, 0.974314928}, + {2.095833, 1.002843618, 0.974438667}, + {2.1, 1.002980828, 0.974560261}, + {2.104167, 1.003109932, 0.974678457}, + {2.108333, 1.003231049, 0.974794388}, + {2.1125, 1.003343701, 0.974905789}, + {2.116667, 1.003448009, 0.975015044}, + {2.120833, 1.003543615, 0.975118697}, + {2.125, 1.003630638, 0.975220263}, + {2.129167, 1.00370872, 0.975315332}, + {2.133333, 1.003777862, 0.975408375}, + {2.1375, 1.003837943, 0.975494087}, + {2.141667, 1.003889084, 0.97557801}, + {2.145833, 1.003931046, 0.975653946}, + {2.15, 1.003963828, 0.975728214}, + {2.154167, 1.003987551, 0.975794077}, + {2.158333, 1.004002213, 0.97585845}, + {2.1625, 1.004007816, 0.975914061}, + {2.166667, 1.00400424, 0.97596848}, + {2.170833, 1.003991842, 0.976014078}, + {2.175, 1.003970623, 0.976058662}, + {2.179167, 1.003940463, 0.976094544}, + {2.183333, 1.003901839, 0.976129651}, + {2.1875, 1.003854632, 0.976156354}, + {2.191667, 1.003799081, 0.97618264}, + {2.195833, 1.003735423, 0.976201057}, + {2.2, 1.003663778, 0.976219237}, + {2.204167, 1.003584385, 0.976230323}, + {2.208333, 1.003497481, 0.97624141}, + {2.2125, 1.003403306, 0.976246357}, + {2.216667, 1.003302097, 0.976251602}, + {2.220833, 1.003194094, 0.976251721}, + {2.225, 1.003079653, 0.976252377}, + {2.229167, 1.002959013, 0.976249218}, + {2.233333, 1.002832532, 0.976246715}, + {2.2375, 1.002700567, 0.976241708}, + {2.241667, 1.002563357, 0.976237595}, + {2.245833, 1.002421498, 0.97623235}, + {2.25, 1.00227499, 0.976228058}, + {2.254167, 1.002124429, 0.976224005}, + {2.258333, 1.001970172, 0.976221025}, + {2.2625, 1.001812577, 0.976219654}, + {2.266667, 1.001652002, 0.976219356}, + {2.270833, 1.001489043, 0.976221859}, + {2.275, 1.001323819, 0.976225436}, + {2.279167, 1.001156807, 0.976232946}, + {2.283333, 1.000988603, 0.976241529}, + {2.2875, 1.000819445, 0.97625488}, + {2.291667, 1.000649691, 0.976269126}, + {2.295833, 1.000480056, 0.976288915}, + {2.3, 1.00031054, 0.976309478}, + {2.304167, 1.00014174, 0.976336062}, + {2.308333, 0.999974132, 0.976363182}, + {2.3125, 0.999808013, 0.97639662}, + {2.316667, 0.999643743, 0.976430357}, + {2.320833, 0.999481857, 0.976470292}, + {2.325, 0.999322474, 0.976510406}, + {2.329167, 0.999166131, 0.97655654}, + {2.333333, 0.999013186, 0.976602495}, + {2.3375, 0.998863876, 0.976654112}, + {2.341667, 0.998718619, 0.976705313}, + {2.345833, 0.998577714, 0.97676152}, + {2.35, 0.998441339, 0.976817131}, + {2.354167, 0.99830997, 0.976876974}, + {2.358333, 0.998183727, 0.976935983}, + {2.3625, 0.998062968, 0.976998508}, + {2.366667, 0.997947812, 0.97706002}, + {2.370833, 0.997838557, 0.977124095}, + {2.375, 0.997735381, 0.977187037}, + {2.379167, 0.997638524, 0.977251768}, + {2.383333, 0.997548044, 0.977315128}, + {2.3875, 0.99746418, 0.97737956}, + {2.391667, 0.997386992, 0.977442563}, + {2.395833, 0.997316659, 0.977505863}, + {2.4, 0.99725318, 0.977567792}, + {2.404167, 0.997196674, 0.977629304}, + {2.408333, 0.997147202, 0.977689505}, + {2.4125, 0.997104764, 0.977748811}, + {2.416667, 0.997069418, 0.977806926}, + {2.420833, 0.997041106, 0.977863729}, + {2.425, 0.997019887, 0.977919519}, + {2.429167, 0.997005641, 0.977973759}, + {2.433333, 0.99699831, 0.978027105}, + {2.4375, 0.996997893, 0.978078902}, + {2.441667, 0.997004211, 0.978129923}, + {2.445833, 0.997017264, 0.978179455}, + {2.45, 0.997036815, 0.97822845}, + {2.454167, 0.997062802, 0.978276134}, + {2.458333, 0.997095108, 0.97832346}, + {2.4625, 0.997133493, 0.978369713}, + {2.466667, 0.997177839, 0.978415847}, + {2.470833, 0.997227907, 0.978461266}, + {2.475, 0.997283578, 0.978506744}, + {2.479167, 0.997344553, 0.978551865}, + {2.483333, 0.997410715, 0.978597224}, + {2.4875, 0.997481763, 0.978642642}, + {2.491667, 0.99755758, 0.978688478}, + {2.495833, 0.997637749, 0.978734732}, + {2.5, 0.997722149, 0.978781521}, + {2.504167, 0.997810483, 0.978829205}, + {2.508333, 0.997902572, 0.978877366}, + {2.5125, 0.997998059, 0.978926837}, + {2.516667, 0.998096764, 0.978976846}, + {2.520833, 0.99819833, 0.979028463}, + {2.525, 0.998302639, 0.979080617}, + {2.529167, 0.998409212, 0.97913456}, + {2.533333, 0.998517931, 0.979189098}, + {2.5375, 0.998628497, 0.979245543}, + {2.541667, 0.998740673, 0.979302526}, + {2.545833, 0.998854041, 0.979361534}, + {2.55, 0.998968482, 0.97942096}, + {2.554167, 0.999083698, 0.979482412}, + {2.558333, 0.99919939, 0.979544222}, + {2.5625, 0.999315321, 0.97960794}, + {2.566667, 0.999431312, 0.979671896}, + {2.570833, 0.999546885, 0.979737639}, + {2.575, 0.999662042, 0.979803562}, + {2.579167, 0.999776363, 0.979871035}, + {2.583333, 0.999889672, 0.979938447}, + {2.5875, 1.000001788, 0.980007231}, + {2.591667, 1.000112414, 0.980075896}, + {2.595833, 1.000221252, 0.980145454}, + {2.6, 1.000328302, 0.980214894}, + {2.604167, 1.000433087, 0.98028487}, + {2.608333, 1.000535607, 0.980354488}, + {2.6125, 1.000635624, 0.980424404}, + {2.616667, 1.000732899, 0.980493844}, + {2.620833, 1.000827312, 0.980563104}, + {2.625, 1.000918627, 0.980631888}, + {2.629167, 1.001006722, 0.980700076}, + {2.633333, 1.001091361, 0.980767667}, + {2.6375, 1.001172543, 0.980834305}, + {2.641667, 1.001250029, 0.980900288}, + {2.645833, 1.001323581, 0.980964839}, + {2.65, 1.001393318, 0.981028795}, + {2.654167, 1.001459002, 0.981091022}, + {2.658333, 1.001520634, 0.981152534}, + {2.6625, 1.001577854, 0.98121196}, + {2.666667, 1.001630902, 0.98127073}, + {2.670833, 1.00167942, 0.981327116}, + {2.675, 1.001723647, 0.981382847}, + {2.679167, 1.001763225, 0.981435895}, + {2.683333, 1.001798391, 0.981488407}, + {2.6875, 1.001828909, 0.981538057}, + {2.691667, 1.001854777, 0.981587112}, + {2.695833, 1.001875997, 0.981633246}, + {2.7, 1.001892686, 0.981678843}, + {2.704167, 1.001904726, 0.981721342}, + {2.708333, 1.001912117, 0.981763482}, + {2.7125, 1.001914978, 0.981802464}, + {2.716667, 1.001913309, 0.981841147}, + {2.720833, 1.00190711, 0.981876731}, + {2.725, 1.001896501, 0.981912136}, + {2.729167, 1.00188148, 0.981944501}, + {2.733333, 1.001862168, 0.981976748}, + {2.7375, 1.001838684, 0.982006192}, + {2.741667, 1.001811028, 0.982035518}, + {2.745833, 1.001779318, 0.98206234}, + {2.75, 1.001743793, 0.982089102}, + {2.754167, 1.001704335, 0.98211354}, + {2.758333, 1.001661181, 0.982138097}, + {2.7625, 1.001614571, 0.982160687}, + {2.766667, 1.001564503, 0.982183337}, + {2.770833, 1.001511216, 0.982204437}, + {2.775, 1.001454711, 0.982225657}, + {2.779167, 1.001395345, 0.982245624}, + {2.783333, 1.001333117, 0.98226589}, + {2.7875, 1.001268268, 0.982285261}, + {2.791667, 1.001200914, 0.982304871}, + {2.795833, 1.001131415, 0.982324004}, + {2.8, 1.001059771, 0.982343495}, + {2.804167, 1.000986099, 0.982362807}, + {2.808333, 1.000910878, 0.982382476}, + {2.8125, 1.000833988, 0.982402384}, + {2.816667, 1.000755906, 0.98242265}, + {2.820833, 1.000676632, 0.982443452}, + {2.825, 1.000596285, 0.982464552}, + {2.829167, 1.000515342, 0.982486546}, + {2.833333, 1.000433803, 0.982508838}, + {2.8375, 1.000351906, 0.982532263}, + {2.841667, 1.000269771, 0.982555926}, + {2.845833, 1.000187874, 0.9825809}, + {2.85, 1.000106096, 0.982606173}, + {2.854167, 1.000024676, 0.982632816}, + {2.858333, 0.999943972, 0.982659698}, + {2.8625, 0.999864042, 0.982688129}, + {2.866667, 0.999785066, 0.98271668}, + {2.870833, 0.999707282, 0.98274678}, + {2.875, 0.999630749, 0.982777059}, + {2.879167, 0.999555767, 0.982808828}, + {2.883333, 0.999482453, 0.982840717}, + {2.8875, 0.999410987, 0.982874095}, + {2.891667, 0.999341428, 0.982907474}, + {2.895833, 0.999274015, 0.982942283}, + {2.9, 0.999208868, 0.982977033}, + {2.904167, 0.999146104, 0.983013093}, + {2.908333, 0.999085844, 0.983049035}, + {2.9125, 0.999028206, 0.983086228}, + {2.916667, 0.99897325, 0.983123243}, + {2.920833, 0.998921216, 0.98316133}, + {2.925, 0.998872042, 0.983199179}, + {2.929167, 0.998825967, 0.983237982}, + {2.933333, 0.998782873, 0.983276546}, + {2.9375, 0.998742998, 0.983315885}, + {2.941667, 0.998706341, 0.983354986}, + {2.945833, 0.998672962, 0.983394682}, + {2.95, 0.998642862, 0.9834342}, + {2.954167, 0.998616099, 0.983474135}, + {2.958333, 0.998592734, 0.983513892}, + {2.9625, 0.998572767, 0.983554006}, + {2.966667, 0.998556137, 0.983593881}, + {2.970833, 0.998542905, 0.983634114}, + {2.975, 0.99853307, 0.983674109}, + {2.979167, 0.998526633, 0.983714342}, + {2.983333, 0.998523533, 0.983754396}, + {2.9875, 0.998523712, 0.98379463}, + {2.991667, 0.998527169, 0.983834684}, + {2.995833, 0.998533845, 0.983874977}, + {3, 0.998543739, 0.983915091}, + {3.004167, 0.998556674, 0.983955443}, + {3.008333, 0.998572707, 0.983995676}, + {3.0125, 0.998591661, 0.984036088}, + {3.016667, 0.998613536, 0.98407644}, + {3.020833, 0.998638153, 0.984117031}, + {3.025, 0.998665512, 0.984157622}, + {3.029167, 0.998695493, 0.984198391}, + {3.033333, 0.998727977, 0.984239221}, + {3.0375, 0.998762906, 0.984280348}, + {3.041667, 0.998800099, 0.984321475}, + {3.045833, 0.998839438, 0.9843629}, + {3.05, 0.998880863, 0.984404445}, + {3.054167, 0.998924255, 0.984446287}, + {3.058333, 0.998969436, 0.984488249}, + {3.0625, 0.999016345, 0.984530509}, + {3.066667, 0.999064803, 0.984572887}, + {3.070833, 0.999114692, 0.984615624}, + {3.075, 0.999165893, 0.98465848}, + {3.079167, 0.999218225, 0.984701633}, + {3.083333, 0.999271631, 0.984744906}, + {3.0875, 0.999325931, 0.984788537}, + {3.091667, 0.999381006, 0.984832227}, + {3.095833, 0.999436736, 0.984876215}, + {3.1, 0.999492943, 0.984920263}, + {3.104167, 0.999549508, 0.984964609}, + {3.108333, 0.999606311, 0.985008955}, + {3.1125, 0.999663234, 0.98505348}, + {3.116667, 0.999720097, 0.985098004}, + {3.120833, 0.99977684, 0.985142648}, + {3.125, 0.999833286, 0.985187292}, + {3.129167, 0.999889314, 0.985231936}, + {3.133333, 0.999944806, 0.98527652}, + {3.1375, 0.999999642, 0.985321045}, + {3.141667, 1.000053763, 0.98536545}, + {3.145833, 1.000106931, 0.985409677}, + {3.15, 1.000159144, 0.985453784}, + {3.154167, 1.000210285, 0.985497534}, + {3.158333, 1.000260115, 0.985541224}, + {3.1625, 1.000308752, 0.985584378}, + {3.166667, 1.000355959, 0.985627472}, + {3.170833, 1.000401735, 0.985669911}, + {3.175, 1.000445843, 0.98571223}, + {3.179167, 1.0004884, 0.985753834}, + {3.183333, 1.00052917, 0.985795259}, + {3.1875, 1.000568032, 0.98583585}, + {3.191667, 1.000605226, 0.985876262}, + {3.195833, 1.000640273, 0.98591572}, + {3.2, 1.000673413, 0.985955}, + {3.204167, 1.000704527, 0.985993266}, + {3.208333, 1.000733614, 0.986031294}, + {3.2125, 1.000760436, 0.986068249}, + {3.216667, 1.000785112, 0.986105025}, + {3.220833, 1.000807524, 0.986140609}, + {3.225, 1.000827789, 0.986176014}, + {3.229167, 1.00084579, 0.986210167}, + {3.233333, 1.000861406, 0.986244142}, + {3.2375, 1.000874758, 0.986276925}, + {3.241667, 1.000885844, 0.986309528}, + {3.245833, 1.000894666, 0.986340821}, + {3.25, 1.000901222, 0.986372054}, + {3.254167, 1.000905395, 0.986401975}, + {3.258333, 1.000907302, 0.986431777}, + {3.2625, 1.000906944, 0.986460388}, + {3.266667, 1.000904441, 0.986488879}, + {3.270833, 1.000899673, 0.986516178}, + {3.275, 1.000892639, 0.986543477}, + {3.279167, 1.000883579, 0.986569583}, + {3.283333, 1.000872493, 0.98659569}, + {3.2875, 1.000859261, 0.986620784}, + {3.291667, 1.000844121, 0.986645818}, + {3.295833, 1.000826955, 0.986669898}, + {3.3, 1.000807881, 0.986694038}, + {3.304167, 1.000787139, 0.986717284}, + {3.308333, 1.000764608, 0.986740589}, + {3.3125, 1.00074029, 0.986763179}, + {3.316667, 1.000714421, 0.986785829}, + {3.320833, 1.000687122, 0.986807883}, + {3.325, 1.000658274, 0.986829996}, + {3.329167, 1.000628114, 0.986851633}, + {3.333333, 1.000596523, 0.986873388}, + {3.3375, 1.00056386, 0.986894786}, + {3.341667, 1.000530124, 0.986916244}, + {3.345833, 1.000495315, 0.986937523}, + {3.35, 1.000459552, 0.986958921}, + {3.354167, 1.000423074, 0.986980259}, + {3.358333, 1.000385761, 0.987001657}, + {3.3625, 1.000347853, 0.987023056}, + {3.366667, 1.000309348, 0.987044632}, + {3.370833, 1.000270367, 0.987066269}, + {3.375, 1.000231028, 0.987088084}, + {3.379167, 1.000191569, 0.987110138}, + {3.383333, 1.000151753, 0.987132251}, + {3.3875, 1.000112057, 0.987154663}, + {3.391667, 1.000072241, 0.987177193}, + {3.395833, 1.000032663, 0.987200141}, + {3.4, 0.999993145, 0.987223148}, + {3.404167, 0.999954045, 0.987246573}, + {3.408333, 0.999915302, 0.987270117}, + {3.4125, 0.999877036, 0.987294137}, + {3.416667, 0.999839365, 0.987318218}, + {3.420833, 0.999802351, 0.987342775}, + {3.425, 0.999765992, 0.987367451}, + {3.429167, 0.999730527, 0.987392604}, + {3.433333, 0.999695897, 0.987417817}, + {3.4375, 0.99966222, 0.987443566}, + {3.441667, 0.999629617, 0.987469375}, + {3.445833, 0.999598086, 0.98749572}, + {3.45, 0.999567688, 0.987522006}, + {3.454167, 0.999538481, 0.987548888}, + {3.458333, 0.999510586, 0.98757571}, + {3.4625, 0.999484062, 0.987603068}, + {3.466667, 0.999458849, 0.987630427}, + {3.470833, 0.999435067, 0.987658262}, + {3.475, 0.999412715, 0.987686098}, + {3.479167, 0.999391854, 0.98771435}, + {3.483333, 0.999372542, 0.987742543}, + {3.4875, 0.999354839, 0.987771213}, + {3.491667, 0.999338627, 0.987799883}, + {3.495833, 0.999324083, 0.987828851}, + {3.5, 0.999311149, 0.987857878}, + {3.504167, 0.999299824, 0.987887204}, + {3.508333, 0.999290168, 0.987916529}, + {3.5125, 0.999282122, 0.987946153}, + {3.516667, 0.999275744, 0.987975776}, + {3.520833, 0.999270976, 0.988005638}, + {3.525, 0.999267876, 0.9880355}, + {3.529167, 0.999266386, 0.98806566}, + {3.533333, 0.999266505, 0.98809576}, + {3.5375, 0.999268234, 0.988126099}, + {3.541667, 0.999271512, 0.988156438}, + {3.545833, 0.99927634, 0.988187015}, + {3.55, 0.999282718, 0.988217533}, + {3.554167, 0.999290526, 0.988248229}, + {3.558333, 0.999299765, 0.988278985}, + {3.5625, 0.999310493, 0.98830986}, + {3.566667, 0.999322534, 0.988340735}, + {3.570833, 0.999335885, 0.988371789}, + {3.575, 0.999350548, 0.988402784}, + {3.579167, 0.999366403, 0.988433957}, + {3.583333, 0.99938345, 0.98846513}, + {3.5875, 0.999401629, 0.988496423}, + {3.591667, 0.999420881, 0.988527715}, + {3.595833, 0.999441147, 0.988559127}, + {3.6, 0.999462366, 0.988590479}, + {3.604167, 0.999484479, 0.98862195}, + {3.608333, 0.999507427, 0.988653421}, + {3.6125, 0.99953115, 0.988684893}, + {3.616667, 0.999555588, 0.988716424}, + {3.620833, 0.999580622, 0.988747954}, + {3.625, 0.999606252, 0.988779485}, + {3.629167, 0.999632418, 0.988810956}, + {3.633333, 0.999659002, 0.988842487}, + {3.6375, 0.999685943, 0.988873959}, + {3.641667, 0.999713242, 0.98890543}, + {3.645833, 0.99974072, 0.988936782}, + {3.65, 0.999768436, 0.988968134}, + {3.654167, 0.999796212, 0.988999367}, + {3.658333, 0.999824107, 0.9890306}, + {3.6625, 0.999851942, 0.989061654}, + {3.666667, 0.999879658, 0.989092648}, + {3.670833, 0.999907255, 0.989123464}, + {3.675, 0.999934673, 0.989154279}, + {3.679167, 0.999961793, 0.989184797}, + {3.683333, 0.999988556, 0.989215255}, + {3.6875, 1.00001502, 0.989245474}, + {3.691667, 1.000041008, 0.989275634}, + {3.695833, 1.0000664, 0.989305437}, + {3.7, 1.000091314, 0.989335179}, + {3.704167, 1.000115633, 0.989364564}, + {3.708333, 1.000139356, 0.98939383}, + {3.7125, 1.000162244, 0.989422739}, + {3.716667, 1.000184536, 0.989451587}, + {3.720833, 1.000205874, 0.989479899}, + {3.725, 1.000226498, 0.989508212}, + {3.729167, 1.000246286, 0.989535987}, + {3.733333, 1.000265121, 0.989563704}, + {3.7375, 1.000283003, 0.989590943}, + {3.741667, 1.000299931, 0.989618063}, + {3.745833, 1.000315905, 0.989644587}, + {3.75, 1.000330806, 0.989671111}, + {3.754167, 1.000344634, 0.989697039}, + {3.758333, 1.000357509, 0.989722848}, + {3.7625, 1.000369191, 0.98974812}, + {3.766667, 1.000379801, 0.989773333}, + {3.770833, 1.000389338, 0.98979789}, + {3.775, 1.000397801, 0.989822447}, + {3.779167, 1.000405073, 0.989846408}, + {3.783333, 1.000411153, 0.98987025}, + {3.7875, 1.00041616, 0.989893556}, + {3.791667, 1.000419974, 0.989916801}, + {3.795833, 1.000422716, 0.989939451}, + {3.8, 1.000424385, 0.989962041}, + {3.804167, 1.000424862, 0.989984095}, + {3.808333, 1.000424266, 0.990006089}, + {3.8125, 1.000422597, 0.990027547}, + {3.816667, 1.000419736, 0.990049005}, + {3.820833, 1.000415921, 0.990069926}, + {3.825, 1.000411034, 0.990090847}, + {3.829167, 1.000405192, 0.990111291}, + {3.833333, 1.000398278, 0.990131736}, + {3.8375, 1.00039053, 0.990151703}, + {3.841667, 1.000381708, 0.990171731}, + {3.845833, 1.000372052, 0.99019134}, + {3.85, 1.000361443, 0.99021095}, + {3.854167, 1.000350118, 0.990230203}, + {3.858333, 1.000337839, 0.990249455}, + {3.8625, 1.000324965, 0.990268469}, + {3.866667, 1.000311255, 0.990287483}, + {3.870833, 1.000296831, 0.990306258}, + {3.875, 1.000281811, 0.990325034}, + {3.879167, 1.000266194, 0.99034363}, + {3.883333, 1.000249982, 0.990362227}, + {3.8875, 1.000233293, 0.990380764}, + {3.891667, 1.000216126, 0.990399241}, + {3.895833, 1.000198603, 0.990417659}, + {3.9, 1.000180602, 0.990436137}, + {3.904167, 1.000162244, 0.990454555}, + {3.908333, 1.000143766, 0.990473032}, + {3.9125, 1.000124931, 0.990491509}, + {3.916667, 1.000105858, 0.990509987}, + {3.920833, 1.000086665, 0.990528524}, + {3.925, 1.000067472, 0.990547061}, + {3.929167, 1.000048161, 0.990565717}, + {3.933333, 1.000028849, 0.990584433}, + {3.9375, 1.000009537, 0.990603209}, + {3.941667, 0.999990344, 0.990622103}, + {3.945833, 0.999971271, 0.990641057}, + {3.95, 0.999952376, 0.990660071}, + {3.954167, 0.99993372, 0.990679264}, + {3.958333, 0.999915302, 0.990698457}, + {3.9625, 0.999897242, 0.990717828}, + {3.966667, 0.999879479, 0.990737259}, + {3.970833, 0.999862075, 0.990756929}, + {3.975, 0.999845088, 0.990776539}, + {3.979167, 0.999828577, 0.990796447}, + {3.983333, 0.999812543, 0.990816295}, + {3.9875, 0.999797046, 0.990836442}, + {3.991667, 0.999782085, 0.990856528}, + {3.995833, 0.999767721, 0.990876913}, + {4, 0.999753952, 0.990897238}, + {4.004167, 0.999740779, 0.990917861}, + {4.008333, 0.999728322, 0.990938425}, + {4.0125, 0.99971652, 0.990959287}, + {4.016667, 0.999705434, 0.990980089}, + {4.020833, 0.999695063, 0.991001189}, + {4.025, 0.999685407, 0.991022229}, + {4.029167, 0.999676526, 0.991043508}, + {4.033333, 0.999668419, 0.991064787}, + {4.0375, 0.999661088, 0.991086245}, + {4.041667, 0.999654531, 0.991107702}, + {4.045833, 0.99964875, 0.991129398}, + {4.05, 0.999643803, 0.991151035}, + {4.054167, 0.99963963, 0.99117291}, + {4.058333, 0.999636233, 0.991194725}, + {4.0625, 0.99963367, 0.991216719}, + {4.066667, 0.999631941, 0.991238713}, + {4.070833, 0.999630928, 0.991260886}, + {4.075, 0.999630749, 0.991283059}, + {4.079167, 0.999631345, 0.991305292}, + {4.083333, 0.999632716, 0.991327584}, + {4.0875, 0.999634802, 0.991349995}, + {4.091667, 0.999637663, 0.991372347}, + {4.095833, 0.999641299, 0.991394877}, + {4.1, 0.999645591, 0.991417348}, + {4.104167, 0.999650598, 0.991439939}, + {4.108333, 0.99965626, 0.991462469}, + {4.1125, 0.999662578, 0.991485119}, + {4.116667, 0.999669552, 0.991507709}, + {4.120833, 0.999677122, 0.991530359}, + {4.125, 0.999685287, 0.991553009}, + {4.129167, 0.99969399, 0.991575718}, + {4.133333, 0.999703228, 0.991598368}, + {4.1375, 0.999713004, 0.991621077}, + {4.141667, 0.999723196, 0.991643786}, + {4.145833, 0.999733865, 0.991666436}, + {4.15, 0.999745011, 0.991689086}, + {4.154167, 0.999756455, 0.991711676}, + {4.158333, 0.999768317, 0.991734326}, + {4.1625, 0.999780476, 0.991756856}, + {4.166667, 0.999792933, 0.991779447}, + {4.170833, 0.999805629, 0.991801858}, + {4.175, 0.999818563, 0.991824329}, + {4.179167, 0.999831676, 0.991846681}, + {4.183333, 0.999844968, 0.991869032}, + {4.1875, 0.999858439, 0.991891265}, + {4.191667, 0.999871969, 0.991913497}, + {4.195833, 0.999885499, 0.991935551}, + {4.2, 0.999899149, 0.991957605}, + {4.204167, 0.999912739, 0.99197948}, + {4.208333, 0.999926329, 0.992001355}, + {4.2125, 0.999939859, 0.992023051}, + {4.216667, 0.99995327, 0.992044747}, + {4.220833, 0.999966562, 0.992066205}, + {4.225, 0.999979734, 0.992087603}, + {4.229167, 0.999992669, 0.992108822}, + {4.233333, 1.000005484, 0.992130041}, + {4.2375, 1.000018001, 0.992150962}, + {4.241667, 1.00003016, 0.992171884}, + {4.245833, 1.0000422, 0.992192566}, + {4.25, 1.000053763, 0.99221319}, + {4.254167, 1.000065088, 0.992233574}, + {4.258333, 1.000076056, 0.9922539}, + {4.2625, 1.000086665, 0.992273927}, + {4.266667, 1.000096798, 0.992293954}, + {4.270833, 1.000106454, 0.992313683}, + {4.275, 1.000115752, 0.992333353}, + {4.279167, 1.000124574, 0.992352784}, + {4.283333, 1.000133038, 0.992372096}, + {4.2875, 1.000140905, 0.992391169}, + {4.291667, 1.000148177, 0.992410183}, + {4.295833, 1.000155091, 0.992428839}, + {4.3, 1.000161409, 0.992447555}, + {4.304167, 1.000167251, 0.992465854}, + {4.308333, 1.000172496, 0.992484212}, + {4.3125, 1.000177264, 0.992502213}, + {4.316667, 1.000181437, 0.992520213}, + {4.320833, 1.000185013, 0.992537856}, + {4.325, 1.000188112, 0.992555499}, + {4.329167, 1.000190616, 0.992572844}, + {4.333333, 1.000192642, 0.992590189}, + {4.3375, 1.000193954, 0.992607176}, + {4.341667, 1.000194788, 0.992624164}, + {4.345833, 1.000195146, 0.992640913}, + {4.35, 1.000194907, 0.992657602}, + {4.354167, 1.000194073, 0.992673993}, + {4.358333, 1.000192881, 0.992690444}, + {4.3625, 1.000190973, 0.992706597}, + {4.366667, 1.000188708, 0.99272275}, + {4.370833, 1.000185847, 0.992738664}, + {4.375, 1.000182509, 0.992754579}, + {4.379167, 1.000178695, 0.992770255}, + {4.383333, 1.000174522, 0.992785931}, + {4.3875, 1.000169754, 0.992801368}, + {4.391667, 1.000164747, 0.992816865}, + {4.395833, 1.000159144, 0.992832184}, + {4.4, 1.000153303, 0.992847502}, + {4.404167, 1.000146985, 0.992862642}, + {4.408333, 1.000140309, 0.992877781}, + {4.4125, 1.000133276, 0.992892802}, + {4.416667, 1.000126004, 0.992907822}, + {4.420833, 1.000118494, 0.992922723}, + {4.425, 1.000110626, 0.992937624}, + {4.429167, 1.00010252, 0.992952466}, + {4.433333, 1.000094175, 0.992967308}, + {4.4375, 1.000085592, 0.99298209}, + {4.441667, 1.00007689, 0.992996871}, + {4.445833, 1.000067949, 0.993011653}, + {4.45, 1.000058889, 0.993026376}, + {4.454167, 1.00004971, 0.993041158}, + {4.458333, 1.000040531, 0.99305588}, + {4.4625, 1.000031233, 0.993070602}, + {4.466667, 1.000021815, 0.993085384}, + {4.470833, 1.000012517, 0.993100107}, + {4.475, 1.000003099, 0.993114889}, + {4.479167, 0.999993742, 0.99312973}, + {4.483333, 0.999984443, 0.993144512}, + {4.4875, 0.999975204, 0.993159413}, + {4.491667, 0.999966025, 0.993174255}, + {4.495833, 0.999956965, 0.993189216}, + {4.5, 0.999948025, 0.993204176}, + {4.504167, 0.999939263, 0.993219137}, + {4.508333, 0.99993062, 0.993234158}, + {4.5125, 0.999922216, 0.993249297}, + {4.516667, 0.999913991, 0.993264377}, + {4.520833, 0.999906003, 0.993279576}, + {4.525, 0.999898255, 0.993294775}, + {4.529167, 0.999890745, 0.993310034}, + {4.533333, 0.999883533, 0.993325353}, + {4.5375, 0.999876559, 0.993340731}, + {4.541667, 0.999869883, 0.993356109}, + {4.545833, 0.999863565, 0.993371606}, + {4.55, 0.999857545, 0.993387103}, + {4.554167, 0.999851882, 0.993402719}, + {4.558333, 0.999846518, 0.993418276}, + {4.5625, 0.999841511, 0.993434012}, + {4.566667, 0.999836922, 0.993449688}, + {4.570833, 0.99983263, 0.993465483}, + {4.575, 0.999828756, 0.993481219}, + {4.579167, 0.999825239, 0.993497133}, + {4.583333, 0.99982208, 0.993512988}, + {4.5875, 0.999819338, 0.993528962}, + {4.591667, 0.999817014, 0.993544877}, + {4.595833, 0.999815047, 0.99356091}, + {4.6, 0.999813497, 0.993576944}, + {4.604167, 0.999812305, 0.993593037}, + {4.608333, 0.99981153, 0.99360913}, + {4.6125, 0.999811113, 0.993625283}, + {4.616667, 0.999811053, 0.993641496}, + {4.620833, 0.999811411, 0.993657649}, + {4.625, 0.999812186, 0.993673861}, + {4.629167, 0.999813259, 0.993690133}, + {4.633333, 0.999814749, 0.993706405}, + {4.6375, 0.999816537, 0.993722677}, + {4.641667, 0.999818742, 0.993738949}, + {4.645833, 0.999821246, 0.993755221}, + {4.65, 0.999824047, 0.993771493}, + {4.654167, 0.999827206, 0.993787825}, + {4.658333, 0.999830663, 0.993804097}, + {4.6625, 0.999834418, 0.993820429}, + {4.666667, 0.999838471, 0.993836701}, + {4.670833, 0.999842763, 0.993852973}, + {4.675, 0.999847353, 0.993869245}, + {4.679167, 0.999852121, 0.993885517}, + {4.683333, 0.999857187, 0.99390173}, + {4.6875, 0.999862432, 0.993917942}, + {4.691667, 0.999867916, 0.993934095}, + {4.695833, 0.999873579, 0.993950248}, + {4.7, 0.99987936, 0.993966401}, + {4.704167, 0.99988538, 0.993982494}, + {4.708333, 0.99989146, 0.993998528}, + {4.7125, 0.999897718, 0.994014502}, + {4.716667, 0.999904037, 0.994030535}, + {4.720833, 0.999910533, 0.99404639}, + {4.725, 0.99991703, 0.994062304}, + {4.729167, 0.999923587, 0.9940781}, + {4.733333, 0.999930203, 0.994093835}, + {4.7375, 0.999936879, 0.994109511}, + {4.741667, 0.999943554, 0.994125187}, + {4.745833, 0.999950171, 0.994140744}, + {4.75, 0.999956846, 0.994156241}, + {4.754167, 0.999963462, 0.994171679}, + {4.758333, 0.999970019, 0.994187057}, + {4.7625, 0.999976516, 0.994202256}, + {4.766667, 0.999982893, 0.994217515}, + {4.770833, 0.999989212, 0.994232595}, + {4.775, 0.99999547, 0.994247675}, + {4.779167, 1.00000155, 0.994262576}, + {4.783333, 1.00000751, 0.994277477}, + {4.7875, 1.000013351, 0.994292259}, + {4.791667, 1.000018954, 0.994306982}, + {4.795833, 1.000024438, 0.994321525}, + {4.8, 1.000029802, 0.994336069}, + {4.804167, 1.000034928, 0.994350433}, + {4.808333, 1.000039816, 0.994364798}, + {4.8125, 1.000044584, 0.994378984}, + {4.816667, 1.000048995, 0.99439317}, + {4.820833, 1.000053287, 0.994407177}, + {4.825, 1.00005734, 0.994421124}, + {4.829167, 1.000061154, 0.994434953}, + {4.833333, 1.000064611, 0.994448721}, + {4.8375, 1.000067949, 0.994462311}, + {4.841667, 1.000071049, 0.994475901}, + {4.845833, 1.000073791, 0.994489312}, + {4.85, 1.000076294, 0.994502723}, + {4.854167, 1.000078559, 0.994515955}, + {4.858333, 1.000080466, 0.994529188}, + {4.8625, 1.000082254, 0.994542241}, + {4.866667, 1.000083685, 0.994555235}, + {4.870833, 1.000084758, 0.99456811}, + {4.875, 1.000085711, 0.994580984}, + {4.879167, 1.000086308, 0.99459368}, + {4.883333, 1.000086665, 0.994606376}, + {4.8875, 1.000086784, 0.994618893}, + {4.891667, 1.000086546, 0.99463141}, + {4.895833, 1.000086069, 0.994643748}, + {4.9, 1.000085354, 0.994656146}, + {4.904167, 1.0000844, 0.994668365}, + {4.908333, 1.000083208, 0.994680583}, + {4.9125, 1.000081778, 0.994692683}, + {4.916667, 1.000080109, 0.994704783}, + {4.920833, 1.000078201, 0.994716704}, + {4.925, 1.000076056, 0.994728684}, + {4.929167, 1.000073791, 0.994740546}, + {4.933333, 1.000071168, 0.994752407}, + {4.9375, 1.000068426, 0.994764149}, + {4.941667, 1.000065565, 0.994775891}, + {4.945833, 1.000062346, 0.994787514}, + {4.95, 1.000059128, 0.994799197}, + {4.954167, 1.000055671, 0.99481076}, + {4.958333, 1.000052094, 0.994822323}, + {4.9625, 1.000048399, 0.994833887}, + {4.966667, 1.000044465, 0.99484539}, + {4.970833, 1.000040531, 0.994856834}, + {4.975, 1.000036478, 0.994868279}, + {4.979167, 1.000032187, 0.994879723}, + {4.983333, 1.000028014, 0.994891107}, + {4.9875, 1.000023603, 0.994902492}, + {4.991667, 1.000019193, 0.994913876}, + {4.995833, 1.000014782, 0.994925261}, + {5, 1.000010252, 0.994936585}, + {5.004167, 1.000005722, 0.99494797}, + {5.008333, 1.000001192, 0.994959295}, + {5.0125, 0.999996662, 0.99497062}, + {5.016667, 0.999992073, 0.994981945}, + {5.020833, 0.999987543, 0.994993329}, + {5.025, 0.999983072, 0.995004654}, + {5.029167, 0.999978602, 0.995015979}, + {5.033333, 0.999974132, 0.995027363}, + {5.0375, 0.99996978, 0.995038688}, + {5.041667, 0.999965489, 0.995050073}, + {5.045833, 0.999961257, 0.995061457}, + {5.05, 0.999957144, 0.995072842}, + {5.054167, 0.999953091, 0.995084286}, + {5.058333, 0.999949157, 0.99509567}, + {5.0625, 0.999945343, 0.995107114}, + {5.066667, 0.999941587, 0.995118558}, + {5.070833, 0.999938011, 0.995130002}, + {5.075, 0.999934614, 0.995141506}, + {5.079167, 0.999931276, 0.99515301}, + {5.083333, 0.999928117, 0.995164514}, + {5.0875, 0.999925137, 0.995176017}, + {5.091667, 0.999922276, 0.995187581}, + {5.095833, 0.999919593, 0.995199144}, + {5.1, 0.99991709, 0.995210707}, + {5.104167, 0.999914765, 0.99522233}, + {5.108333, 0.99991262, 0.995233953}, + {5.1125, 0.999910653, 0.995245576}, + {5.116667, 0.999908865, 0.995257199}, + {5.120833, 0.999907255, 0.995268881}, + {5.125, 0.999905825, 0.995280504}, + {5.129167, 0.999904573, 0.995292187}, + {5.133333, 0.99990356, 0.995303869}, + {5.1375, 0.999902725, 0.995315611}, + {5.141667, 0.99990201, 0.995327294}, + {5.145833, 0.999901593, 0.995339036}, + {5.15, 0.999901295, 0.995350778}, + {5.154167, 0.999901176, 0.99536252}, + {5.158333, 0.999901295, 0.995374262}, + {5.1625, 0.999901593, 0.995386004}, + {5.166667, 0.99990201, 0.995397747}, + {5.170833, 0.999902666, 0.995409489}, + {5.175, 0.9999035, 0.995421231}, + {5.179167, 0.999904454, 0.995432973}, + {5.183333, 0.999905646, 0.995444715}, + {5.1875, 0.999906957, 0.995456457}, + {5.191667, 0.999908388, 0.995468199}, + {5.195833, 0.999910057, 0.995479882}, + {5.2, 0.999911845, 0.995491624}, + {5.204167, 0.999913752, 0.995503306}, + {5.208333, 0.999915779, 0.995514989}, + {5.2125, 0.999917984, 0.995526671}, + {5.216667, 0.999920249, 0.995538294}, + {5.220833, 0.999922693, 0.995549917}, + {5.225, 0.999925196, 0.99556154}, + {5.229167, 0.999927878, 0.995573103}, + {5.233333, 0.999930561, 0.995584726}, + {5.2375, 0.999933362, 0.99559623}, + {5.241667, 0.999936283, 0.995607734}, + {5.245833, 0.999939263, 0.995619237}, + {5.25, 0.999942303, 0.995630682}, + {5.254167, 0.999945343, 0.995642126}, + {5.258333, 0.999948502, 0.99565351}, + {5.2625, 0.999951661, 0.995664835}, + {5.266667, 0.999954879, 0.99567616}, + {5.270833, 0.999958098, 0.995687425}, + {5.275, 0.999961376, 0.99569869}, + {5.279167, 0.999964654, 0.995709896}, + {5.283333, 0.999967933, 0.995721042}, + {5.2875, 0.999971151, 0.995732129}, + {5.291667, 0.99997443, 0.995743215}, + {5.295833, 0.999977648, 0.995754182}, + {5.3, 0.999980807, 0.995765209}, + {5.304167, 0.999983966, 0.995776117}, + {5.308333, 0.999987125, 0.995787024}, + {5.3125, 0.999990165, 0.995797813}, + {5.316667, 0.999993205, 0.995808601}, + {5.320833, 0.999996126, 0.995819271}, + {5.325, 0.999999046, 0.995829999}, + {5.329167, 1.000001788, 0.995840549}, + {5.333333, 1.00000453, 0.995851159}, + {5.3375, 1.000007153, 0.99586159}, + {5.341667, 1.000009775, 0.99587208}, + {5.345833, 1.000012159, 0.995882452}, + {5.35, 1.000014544, 0.995892823}, + {5.354167, 1.000016809, 0.995903075}, + {5.358333, 1.000018954, 0.995913327}, + {5.3625, 1.000020981, 0.99592346}, + {5.366667, 1.000022888, 0.995933592}, + {5.370833, 1.000024676, 0.995943606}, + {5.375, 1.000026345, 0.995953619}, + {5.379167, 1.000027895, 0.995963573}, + {5.383333, 1.000029325, 0.995973468}, + {5.3875, 1.000030637, 0.995983303}, + {5.391667, 1.000031829, 0.995993078}, + {5.395833, 1.000032783, 0.996002793}, + {5.4, 1.000033736, 0.996012509}, + {5.404167, 1.000034451, 0.996022105}, + {5.408333, 1.000035167, 0.996031642}, + {5.4125, 1.000035644, 0.996041179}, + {5.416667, 1.000036001, 0.996050656}, + {5.420833, 1.00003624, 0.996060073}, + {5.425, 1.000036359, 0.996069431}, + {5.429167, 1.00003624, 0.99607873}, + {5.433333, 1.00003612, 0.996088028}, + {5.4375, 1.000035882, 0.996097267}, + {5.441667, 1.000035405, 0.996106446}, + {5.445833, 1.000034928, 0.996115625}, + {5.45, 1.000034213, 0.996124744}, + {5.454167, 1.000033498, 0.996133745}, + {5.458333, 1.000032663, 0.996142805}, + {5.4625, 1.00003159, 0.996151805}, + {5.466667, 1.000030518, 0.996160746}, + {5.470833, 1.000029325, 0.996169686}, + {5.475, 1.000028014, 0.996178567}, + {5.479167, 1.000026703, 0.996187449}, + {5.483333, 1.000025153, 0.99619627}, + {5.4875, 1.000023603, 0.996205091}, + {5.491667, 1.000022054, 0.996213853}, + {5.495833, 1.000020266, 0.996222615}, + {5.5, 1.000018477, 0.996231318}, + {5.504167, 1.000016689, 0.99624002}, + {5.508333, 1.000014782, 0.996248722}, + {5.5125, 1.000012755, 0.996257365}, + {5.516667, 1.000010729, 0.996266007}, + {5.520833, 1.000008702, 0.99627465}, + {5.525, 1.000006676, 0.996283293}, + {5.529167, 1.00000453, 0.996291876}, + {5.533333, 1.000002384, 0.996300459}, + {5.5375, 1.000000238, 0.996309042}, + {5.541667, 0.999998033, 0.996317625}, + {5.545833, 0.999995828, 0.996326149}, + {5.55, 0.999993622, 0.996334672}, + {5.554167, 0.999991417, 0.996343195}, + {5.558333, 0.999989212, 0.996351779}, + {5.5625, 0.999987006, 0.996360302}, + {5.566667, 0.99998486, 0.996368825}, + {5.570833, 0.999982715, 0.996377289}, + {5.575, 0.999980569, 0.996385813}, + {5.579167, 0.999978483, 0.996394336}, + {5.583333, 0.999976397, 0.99640286}, + {5.5875, 0.99997443, 0.996411324}, + {5.591667, 0.999972463, 0.996419847}, + {5.595833, 0.999970496, 0.99642837}, + {5.6, 0.999968648, 0.996436894}, + {5.604167, 0.99996686, 0.996445358}, + {5.608333, 0.999965072, 0.996453881}, + {5.6125, 0.999963403, 0.996462405}, + {5.616667, 0.999961793, 0.996470869}, + {5.620833, 0.999960244, 0.996479392}, + {5.625, 0.999958754, 0.996487916}, + {5.629167, 0.999957383, 0.996496439}, + {5.633333, 0.999956071, 0.996504962}, + {5.6375, 0.99995482, 0.996513486}, + {5.641667, 0.999953687, 0.996522009}, + {5.645833, 0.999952614, 0.996530533}, + {5.65, 0.999951661, 0.996539056}, + {5.654167, 0.999950767, 0.99654758}, + {5.658333, 0.999949932, 0.996556044}, + {5.6625, 0.999949276, 0.996564627}, + {5.666667, 0.999948621, 0.99657315}, + {5.670833, 0.999948144, 0.996581614}, + {5.675, 0.999947667, 0.996590137}, + {5.679167, 0.999947369, 0.996598661}, + {5.683333, 0.999947131, 0.996607184}, + {5.6875, 0.999946952, 0.996615708}, + {5.691667, 0.999946892, 0.996624231}, + {5.695833, 0.999946952, 0.996632755}, + {5.7, 0.999947071, 0.996641219}, + {5.704167, 0.999947309, 0.996649742}, + {5.708333, 0.999947608, 0.996658266}, + {5.7125, 0.999947965, 0.996666729}, + {5.716667, 0.999948442, 0.996675193}, + {5.720833, 0.999948978, 0.996683657}, + {5.725, 0.999949634, 0.996692121}, + {5.729167, 0.999950349, 0.996700585}, + {5.733333, 0.999951124, 0.996709049}, + {5.7375, 0.999952018, 0.996717453}, + {5.741667, 0.999952912, 0.996725857}, + {5.745833, 0.999953926, 0.996734262}, + {5.75, 0.999954998, 0.996742666}, + {5.754167, 0.999956131, 0.99675101}, + {5.758333, 0.999957263, 0.996759415}, + {5.7625, 0.999958515, 0.9967677}, + {5.766667, 0.999959826, 0.996776044}, + {5.770833, 0.999961138, 0.996784329}, + {5.775, 0.999962509, 0.996792674}, + {5.779167, 0.999963939, 0.9968009}, + {5.783333, 0.99996537, 0.996809185}, + {5.7875, 0.99996686, 0.99681735}, + {5.791667, 0.99996835, 0.996825576}, + {5.795833, 0.9999699, 0.996833742}, + {5.8, 0.999971449, 0.996841908}, + {5.804167, 0.999972999, 0.996850014}, + {5.808333, 0.999974608, 0.99685812}, + {5.8125, 0.999976218, 0.996866167}, + {5.816667, 0.999977827, 0.996874273}, + {5.820833, 0.999979436, 0.99688226}, + {5.825, 0.999980986, 0.996890247}, + {5.829167, 0.999982595, 0.996898234}, + {5.833333, 0.999984205, 0.996906161}, + {5.8375, 0.999985754, 0.996914029}, + {5.841667, 0.999987304, 0.996921897}, + {5.845833, 0.999988854, 0.996929765}, + {5.85, 0.999990344, 0.996937573}, + {5.854167, 0.999991834, 0.996945322}, + {5.858333, 0.999993324, 0.99695307}, + {5.8625, 0.999994755, 0.996960759}, + {5.866667, 0.999996126, 0.996968508}, + {5.870833, 0.999997497, 0.996976137}, + {5.875, 0.999998748, 0.996983767}, + {5.879167, 1, 0.996991277}, + {5.883333, 1.000001311, 0.996998847}, + {5.8875, 1.000002384, 0.997006357}, + {5.891667, 1.000003576, 0.997013867}, + {5.895833, 1.000004649, 0.997021258}, + {5.9, 1.000005603, 0.997028708}, + {5.904167, 1.000006557, 0.99703604}, + {5.908333, 1.00000751, 0.997043431}, + {5.9125, 1.000008345, 0.997050703}, + {5.916667, 1.00000906, 0.997057974}, + {5.920833, 1.000009775, 0.997065246}, + {5.925, 1.00001049, 0.997072458}, + {5.929167, 1.000011086, 0.997079611}, + {5.933333, 1.000011563, 0.997086763}, + {5.9375, 1.00001204, 0.997093856}, + {5.941667, 1.000012398, 0.997100949}, + {5.945833, 1.000012755, 0.997107983}, + {5.95, 1.000012994, 0.997115016}, + {5.954167, 1.000013232, 0.99712199}, + {5.958333, 1.000013351, 0.997128963}, + {5.9625, 1.000013351, 0.997135878}, + {5.966667, 1.000013471, 0.997142792}, + {5.970833, 1.000013351, 0.997149646}, + {5.975, 1.000013232, 0.997156501}, + {5.979167, 1.000013113, 0.997163296}, + {5.983333, 1.000012875, 0.99717015}, + {5.9875, 1.000012517, 0.997176886}, + {5.991667, 1.000012159, 0.997183621}, + {5.995833, 1.000011802, 0.997190356}, + {6, 1.000011325, 0.997197032}, + {6.004167, 1.000010729, 0.997203708}, + {6.008333, 1.000010252, 0.997210383}, + {6.0125, 1.000009656, 0.997217}, + {6.016667, 1.000008941, 0.997223616}, + {6.020833, 1.000008225, 0.997230172}, + {6.025, 1.00000751, 0.997236729}, + {6.029167, 1.000006676, 0.997243285}, + {6.033333, 1.00000596, 0.997249842}, + {6.0375, 1.000005007, 0.997256339}, + {6.041667, 1.000004172, 0.997262836}, + {6.045833, 1.000003219, 0.997269332}, + {6.05, 1.000002265, 0.99727577}, + {6.054167, 1.000001311, 0.997282207}, + {6.058333, 1.000000358, 0.997288644}, + {6.0625, 0.999999344, 0.997295082}, + {6.066667, 0.999998331, 0.997301519}, + {6.070833, 0.999997258, 0.997307897}, + {6.075, 0.999996245, 0.997314274}, + {6.079167, 0.999995172, 0.997320652}, + {6.083333, 0.999994099, 0.99732703}, + {6.0875, 0.999993026, 0.997333407}, + {6.091667, 0.999992013, 0.997339785}, + {6.095833, 0.99999094, 0.997346103}, + {6.1, 0.999989867, 0.997352421}, + {6.104167, 0.999988794, 0.997358739}, + {6.108333, 0.999987781, 0.997365057}, + {6.1125, 0.999986768, 0.997371376}, + {6.116667, 0.999985754, 0.997377694}, + {6.120833, 0.999984741, 0.997384012}, + {6.125, 0.999983788, 0.99739027}, + {6.129167, 0.999982834, 0.997396588}, + {6.133333, 0.99998188, 0.997402847}, + {6.1375, 0.999980986, 0.997409165}, + {6.141667, 0.999980092, 0.997415423}, + {6.145833, 0.999979258, 0.997421682}, + {6.15, 0.999978423, 0.99742794}, + {6.154167, 0.999977648, 0.997434199}, + {6.158333, 0.999976933, 0.997440457}, + {6.1625, 0.999976218, 0.997446716}, + {6.166667, 0.999975562, 0.997452974}, + {6.170833, 0.999974906, 0.997459233}, + {6.175, 0.99997431, 0.997465432}, + {6.179167, 0.999973774, 0.99747169}, + {6.183333, 0.999973238, 0.997477889}, + {6.1875, 0.999972761, 0.997484148}, + {6.191667, 0.999972343, 0.997490346}, + {6.195833, 0.999971986, 0.997496605}, + {6.2, 0.999971628, 0.997502804}, + {6.204167, 0.99997133, 0.997509003}, + {6.208333, 0.999971092, 0.997515202}, + {6.2125, 0.999970913, 0.9975214}, + {6.216667, 0.999970734, 0.997527599}, + {6.220833, 0.999970615, 0.997533798}, + {6.225, 0.999970555, 0.997539937}, + {6.229167, 0.999970555, 0.997546136}, + {6.233333, 0.999970555, 0.997552276}, + {6.2375, 0.999970615, 0.997558475}, + {6.241667, 0.999970734, 0.997564614}, + {6.245833, 0.999970853, 0.997570753}, + {6.25, 0.999971092, 0.997576892}, + {6.254167, 0.99997133, 0.997583032}, + {6.258333, 0.999971569, 0.997589111}, + {6.2625, 0.999971926, 0.997595251}, + {6.266667, 0.999972284, 0.99760133}, + {6.270833, 0.999972641, 0.99760741}, + {6.275, 0.999973059, 0.99761349}, + {6.279167, 0.999973536, 0.997619569}, + {6.283333, 0.999974012, 0.997625649}, + {6.2875, 0.999974549, 0.997631669}, + {6.291667, 0.999975085, 0.997637689}, + {6.295833, 0.999975681, 0.997643709}, + {6.3, 0.999976277, 0.997649729}, + {6.304167, 0.999976933, 0.997655749}, + {6.308333, 0.999977589, 0.99766171}, + {6.3125, 0.999978244, 0.99766767}, + {6.316667, 0.99997896, 0.997673631}, + {6.320833, 0.999979675, 0.997679532}, + {6.325, 0.99998039, 0.997685492}, + {6.329167, 0.999981165, 0.997691393}, + {6.333333, 0.99998188, 0.997697234}, + {6.3375, 0.999982655, 0.997703135}, + {6.341667, 0.99998343, 0.997708976}, + {6.345833, 0.999984205, 0.997714818}, + {6.35, 0.999985039, 0.997720659}, + {6.354167, 0.999985814, 0.99772644}, + {6.358333, 0.999986589, 0.997732222}, + {6.3625, 0.999987364, 0.997737944}, + {6.366667, 0.999988139, 0.997743726}, + {6.370833, 0.999988973, 0.997749448}, + {6.375, 0.999989748, 0.99775517}, + {6.379167, 0.999990463, 0.997760832}, + {6.383333, 0.999991238, 0.997766495}, + {6.3875, 0.999992013, 0.997772098}, + {6.391667, 0.999992728, 0.99777776}, + {6.395833, 0.999993443, 0.997783363}, + {6.4, 0.999994159, 0.997788966}, + {6.404167, 0.999994814, 0.997794509}, + {6.408333, 0.99999547, 0.997800052}, + {6.4125, 0.999996126, 0.997805536}, + {6.416667, 0.999996781, 0.997811079}, + {6.420833, 0.999997377, 0.997816503}, + {6.425, 0.999997973, 0.997821987}, + {6.429167, 0.99999851, 0.997827411}, + {6.433333, 0.999999046, 0.997832835}, + {6.4375, 0.999999523, 0.997838199}, + {6.441667, 1, 0.997843623}, + {6.445833, 1.000000477, 0.997848928}, + {6.45, 1.000000834, 0.997854292}, + {6.454167, 1.000001192, 0.997859597}, + {6.458333, 1.00000155, 0.997864902}, + {6.4625, 1.000001907, 0.997870147}, + {6.466667, 1.000002265, 0.997875392}, + {6.470833, 1.000002503, 0.997880638}, + {6.475, 1.000002742, 0.997885823}, + {6.479167, 1.000002861, 0.997891009}, + {6.483333, 1.000003099, 0.997896194}, + {6.4875, 1.000003219, 0.99790132}, + {6.491667, 1.000003338, 0.997906446}, + {6.495833, 1.000003457, 0.997911572}, + {6.5, 1.000003457, 0.997916639}, + {6.504167, 1.000003457, 0.997921705}, + {6.508333, 1.000003457, 0.997926772}, + {6.5125, 1.000003338, 0.997931838}, + {6.516667, 1.000003338, 0.997936845}, + {6.520833, 1.000003219, 0.997941852}, + {6.525, 1.000003099, 0.997946858}, + {6.529167, 1.000002861, 0.997951806}, + {6.533333, 1.000002742, 0.997956753}, + {6.5375, 1.000002503, 0.9979617}, + {6.541667, 1.000002265, 0.997966647}, + {6.545833, 1.000002027, 0.997971535}, + {6.55, 1.000001669, 0.997976422}, + {6.554167, 1.000001311, 0.99798131}, + {6.558333, 1.000001073, 0.997986197}, + {6.5625, 1.000000715, 0.997991025}, + {6.566667, 1.000000238, 0.997995913}, + {6.570833, 0.999999881, 0.998000741}, + {6.575, 0.999999523, 0.998005509}, + {6.579167, 0.999999046, 0.998010337}, + {6.583333, 0.999998629, 0.998015106}, + {6.5875, 0.999998152, 0.998019934}, + {6.591667, 0.999997735, 0.998024702}, + {6.595833, 0.999997258, 0.998029411}, + {6.6, 0.999996781, 0.998034179}, + {6.604167, 0.999996245, 0.998038948}, + {6.608333, 0.999995768, 0.998043656}, + {6.6125, 0.999995232, 0.998048365}, + {6.616667, 0.999994755, 0.998053074}, + {6.620833, 0.999994218, 0.998057783}, + {6.625, 0.999993742, 0.998062491}, + {6.629167, 0.999993205, 0.998067141}, + {6.633333, 0.999992728, 0.998071849}, + {6.6375, 0.999992192, 0.998076499}, + {6.641667, 0.999991715, 0.998081207}, + {6.645833, 0.999991179, 0.998085856}, + {6.65, 0.999990702, 0.998090506}, + {6.654167, 0.999990225, 0.998095095}, + {6.658333, 0.999989748, 0.998099744}, + {6.6625, 0.999989271, 0.998104393}, + {6.666667, 0.999988794, 0.998108983}, + {6.670833, 0.999988377, 0.998113632}, + {6.675, 0.99998796, 0.998118222}, + {6.679167, 0.999987543, 0.998122811}, + {6.683333, 0.999987125, 0.998127401}, + {6.6875, 0.999986708, 0.99813199}, + {6.691667, 0.999986351, 0.99813658}, + {6.695833, 0.999985993, 0.99814117}, + {6.7, 0.999985635, 0.998145759}, + {6.704167, 0.999985337, 0.998150289}, + {6.708333, 0.999985039, 0.998154879}, + {6.7125, 0.999984741, 0.998159409}, + {6.716667, 0.999984503, 0.998163998}, + {6.720833, 0.999984264, 0.998168528}, + {6.725, 0.999984026, 0.998173058}, + {6.729167, 0.999983847, 0.998177588}, + {6.733333, 0.999983668, 0.998182118}, + {6.7375, 0.99998349, 0.998186648}, + {6.741667, 0.99998337, 0.998191178}, + {6.745833, 0.999983251, 0.998195648}, + {6.75, 0.999983132, 0.998200178}, + {6.754167, 0.999983072, 0.998204648}, + {6.758333, 0.999983072, 0.998209178}, + {6.7625, 0.999983013, 0.998213649}, + {6.766667, 0.999983013, 0.998218119}, + {6.770833, 0.999983013, 0.998222589}, + {6.775, 0.999983072, 0.99822706}, + {6.779167, 0.999983132, 0.99823153}, + {6.783333, 0.999983251, 0.998235941}, + {6.7875, 0.999983311, 0.998240411}, + {6.791667, 0.99998343, 0.998244822}, + {6.795833, 0.999983609, 0.998249233}, + {6.8, 0.999983728, 0.998253644}, + {6.804167, 0.999983907, 0.998258054}, + {6.808333, 0.999984145, 0.998262465}, + {6.8125, 0.999984324, 0.998266876}, + {6.816667, 0.999984562, 0.998271227}, + {6.820833, 0.999984801, 0.998275638}, + {6.825, 0.999985099, 0.998279989}, + {6.829167, 0.999985337, 0.99828434}, + {6.833333, 0.999985635, 0.998288691}, + {6.8375, 0.999985933, 0.998292983}, + {6.841667, 0.999986291, 0.998297334}, + {6.845833, 0.999986589, 0.998301625}, + {6.85, 0.999986947, 0.998305976}, + {6.854167, 0.999987304, 0.998310208}, + {6.858333, 0.999987662, 0.9983145}, + {6.8625, 0.999988019, 0.998318791}, + {6.866667, 0.999988377, 0.998323023}, + {6.870833, 0.999988735, 0.998327315}, + {6.875, 0.999989152, 0.998331547}, + {6.879167, 0.99998951, 0.998335719}, + {6.883333, 0.999989927, 0.998339951}, + {6.8875, 0.999990284, 0.998344183}, + {6.891667, 0.999990702, 0.998348355}, + {6.895833, 0.999991059, 0.998352528}, + {6.9, 0.999991477, 0.9983567}, + {6.904167, 0.999991834, 0.998360813}, + {6.908333, 0.999992251, 0.998364985}, + {6.9125, 0.999992609, 0.998369098}, + {6.916667, 0.999993026, 0.99837321}, + {6.920833, 0.999993384, 0.998377264}, + {6.925, 0.999993742, 0.998381376}, + {6.929167, 0.999994099, 0.998385429}, + {6.933333, 0.999994457, 0.998389482}, + {6.9375, 0.999994814, 0.998393536}, + {6.941667, 0.999995172, 0.998397589}, + {6.945833, 0.99999547, 0.998401582}, + {6.95, 0.999995768, 0.998405576}, + {6.954167, 0.999996126, 0.998409569}, + {6.958333, 0.999996424, 0.998413563}, + {6.9625, 0.999996662, 0.998417497}, + {6.966667, 0.99999696, 0.99842149}, + {6.970833, 0.999997199, 0.998425424}, + {6.975, 0.999997497, 0.998429298}, + {6.979167, 0.999997735, 0.998433232}, + {6.983333, 0.999997914, 0.998437107}, + {6.9875, 0.999998152, 0.998440981}, + {6.991667, 0.999998331, 0.998444855}, + {6.995833, 0.99999851, 0.99844873}, + {7, 0.999998689, 0.998452544}, + {7.004167, 0.999998808, 0.998456359}, + {7.008333, 0.999998927, 0.998460233}, + {7.0125, 0.999999046, 0.998463988}, + {7.016667, 0.999999166, 0.998467803}, + {7.020833, 0.999999225, 0.998471558}, + {7.025, 0.999999344, 0.998475313}, + {7.029167, 0.999999404, 0.998479068}, + {7.033333, 0.999999404, 0.998482823}, + {7.0375, 0.999999464, 0.998486519}, + {7.041667, 0.999999464, 0.998490274}, + {7.045833, 0.999999464, 0.998493969}, + {7.05, 0.999999404, 0.998497665}, + {7.054167, 0.999999404, 0.99850136}, + {7.058333, 0.999999344, 0.998504996}, + {7.0625, 0.999999285, 0.998508692}, + {7.066667, 0.999999225, 0.998512328}, + {7.070833, 0.999999106, 0.998515964}, + {7.075, 0.999998987, 0.998519599}, + {7.079167, 0.999998868, 0.998523176}, + {7.083333, 0.999998748, 0.998526812}, + {7.0875, 0.999998629, 0.998530388}, + {7.091667, 0.99999845, 0.998533964}, + {7.095833, 0.999998331, 0.99853754}, + {7.1, 0.999998152, 0.998541117}, + {7.104167, 0.999997973, 0.998544693}, + {7.108333, 0.999997795, 0.99854821}, + {7.1125, 0.999997616, 0.998551726}, + {7.116667, 0.999997377, 0.998555303}, + {7.120833, 0.999997199, 0.998558819}, + {7.125, 0.99999696, 0.998562336}, + {7.129167, 0.999996722, 0.998565793}, + {7.133333, 0.999996483, 0.99856931}, + {7.1375, 0.999996305, 0.998572826}, + {7.141667, 0.999996066, 0.998576283}, + {7.145833, 0.999995828, 0.998579741}, + {7.15, 0.999995589, 0.998583198}, + {7.154167, 0.999995351, 0.998586655}, + {7.158333, 0.999995053, 0.998590112}, + {7.1625, 0.999994814, 0.998593569}, + {7.166667, 0.999994576, 0.998597026}, + {7.170833, 0.999994338, 0.998600423}, + {7.175, 0.999994099, 0.99860388}, + {7.179167, 0.999993861, 0.998607278}, + {7.183333, 0.999993622, 0.998610675}, + {7.1875, 0.999993384, 0.998614073}, + {7.191667, 0.999993145, 0.99861753}, + {7.195833, 0.999992907, 0.998620868}, + {7.2, 0.999992728, 0.998624265}, + {7.204167, 0.99999249, 0.998627663}, + {7.208333, 0.999992311, 0.99863106}, + {7.2125, 0.999992073, 0.998634398}, + {7.216667, 0.999991894, 0.998637795}, + {7.220833, 0.999991715, 0.998641133}, + {7.225, 0.999991536, 0.998644471}, + {7.229167, 0.999991357, 0.998647809}, + {7.233333, 0.999991179, 0.998651147}, + {7.2375, 0.999991, 0.998654485}, + {7.241667, 0.99999088, 0.998657823}, + {7.245833, 0.999990702, 0.99866116}, + {7.25, 0.999990582, 0.998664498}, + {7.254167, 0.999990463, 0.998667777}, + {7.258333, 0.999990344, 0.998671114}, + {7.2625, 0.999990225, 0.998674393}, + {7.266667, 0.999990165, 0.998677671}, + {7.270833, 0.999990106, 0.998681009}, + {7.275, 0.999989986, 0.998684287}, + {7.279167, 0.999989927, 0.998687565}, + {7.283333, 0.999989927, 0.998690844}, + {7.2875, 0.999989867, 0.998694062}, + {7.291667, 0.999989867, 0.99869734}, + {7.295833, 0.999989808, 0.998700619}, + {7.3, 0.999989808, 0.998703837}, + {7.304167, 0.999989808, 0.998707116}, + {7.308333, 0.999989867, 0.998710334}, + {7.3125, 0.999989867, 0.998713553}, + {7.316667, 0.999989927, 0.998716831}, + {7.320833, 0.999989927, 0.99872005}, + {7.325, 0.999989986, 0.998723269}, + {7.329167, 0.999990046, 0.998726428}, + {7.333333, 0.999990165, 0.998729646}, + {7.3375, 0.999990225, 0.998732865}, + {7.341667, 0.999990344, 0.998736024}, + {7.345833, 0.999990404, 0.998739183}, + {7.35, 0.999990523, 0.998742402}, + {7.354167, 0.999990642, 0.998745561}, + {7.358333, 0.999990761, 0.99874872}, + {7.3625, 0.99999094, 0.998751879}, + {7.366667, 0.999991059, 0.998755038}, + {7.370833, 0.999991238, 0.998758137}, + {7.375, 0.999991357, 0.998761296}, + {7.379167, 0.999991536, 0.998764396}, + {7.383333, 0.999991715, 0.998767495}, + {7.3875, 0.999991834, 0.998770654}, + {7.391667, 0.999992013, 0.998773754}, + {7.395833, 0.999992192, 0.998776793}, + {7.4, 0.999992371, 0.998779893}, + {7.404167, 0.999992549, 0.998782992}, + {7.408333, 0.999992788, 0.998786032}, + {7.4125, 0.999992967, 0.998789132}, + {7.416667, 0.999993145, 0.998792171}, + {7.420833, 0.999993324, 0.998795211}, + {7.425, 0.999993563, 0.998798251}, + {7.429167, 0.999993742, 0.998801291}, + {7.433333, 0.99999392, 0.998804271}, + {7.4375, 0.999994099, 0.998807311}, + {7.441667, 0.999994338, 0.998810291}, + {7.445833, 0.999994516, 0.998813272}, + {7.45, 0.999994695, 0.998816252}, + {7.454167, 0.999994874, 0.998819232}, + {7.458333, 0.999995053, 0.998822212}, + {7.4625, 0.999995232, 0.998825133}, + {7.466667, 0.99999541, 0.998828113}, + {7.470833, 0.999995589, 0.998831034}, + {7.475, 0.999995768, 0.998833954}, + {7.479167, 0.999995947, 0.998836875}, + {7.483333, 0.999996126, 0.998839796}, + {7.4875, 0.999996305, 0.998842716}, + {7.491667, 0.999996424, 0.998845577}, + {7.495833, 0.999996603, 0.998848498}, + {7.5, 0.999996722, 0.998851359}, + {7.504167, 0.999996841, 0.99885422}, + {7.508333, 0.99999696, 0.998857081}, + {7.5125, 0.999997139, 0.998859942}, + {7.516667, 0.999997258, 0.998862803}, + {7.520833, 0.999997318, 0.998865604}, + {7.525, 0.999997437, 0.998868406}, + {7.529167, 0.999997556, 0.998871207}, + {7.533333, 0.999997616, 0.998874068}, + {7.5375, 0.999997735, 0.99887681}, + {7.541667, 0.999997795, 0.998879611}, + {7.545833, 0.999997854, 0.998882413}, + {7.55, 0.999997914, 0.998885155}, + {7.554167, 0.999997973, 0.998887956}, + {7.558333, 0.999998033, 0.998890698}, + {7.5625, 0.999998033, 0.99889344}, + {7.566667, 0.999998093, 0.998896182}, + {7.570833, 0.999998093, 0.998898864}, + {7.575, 0.999998093, 0.998901606}, + {7.579167, 0.999998093, 0.998904347}, + {7.583333, 0.999998093, 0.99890703}, + {7.5875, 0.999998093, 0.998909712}, + {7.591667, 0.999998093, 0.998912394}, + {7.595833, 0.999998093, 0.998915076}, + {7.6, 0.999998033, 0.998917758}, + {7.604167, 0.999998033, 0.998920441}, + {7.608333, 0.999997973, 0.998923063}, + {7.6125, 0.999997914, 0.998925745}, + {7.616667, 0.999997854, 0.998928368}, + {7.620833, 0.999997795, 0.998930991}, + {7.625, 0.999997735, 0.998933613}, + {7.629167, 0.999997675, 0.998936236}, + {7.633333, 0.999997616, 0.998938859}, + {7.6375, 0.999997497, 0.998941481}, + {7.641667, 0.999997437, 0.998944104}, + {7.645833, 0.999997318, 0.998946667}, + {7.65, 0.999997258, 0.998949289}, + {7.654167, 0.999997139, 0.998951852}, + {7.658333, 0.999997079, 0.998954415}, + {7.6625, 0.99999696, 0.998956978}, + {7.666667, 0.999996841, 0.998959541}, + {7.670833, 0.999996722, 0.998962104}, + {7.675, 0.999996662, 0.998964667}, + {7.679167, 0.999996543, 0.99896723}, + {7.683333, 0.999996424, 0.998969734}, + {7.6875, 0.999996305, 0.998972297}, + {7.691667, 0.999996185, 0.9989748}, + {7.695833, 0.999996066, 0.998977304}, + {7.7, 0.999995947, 0.998979867}, + {7.704167, 0.999995828, 0.99898237}, + {7.708333, 0.999995708, 0.998984873}, + {7.7125, 0.999995589, 0.998987377}, + {7.716667, 0.99999547, 0.99898988}, + {7.720833, 0.99999541, 0.998992324}, + {7.725, 0.999995291, 0.998994827}, + {7.729167, 0.999995172, 0.998997331}, + {7.733333, 0.999995053, 0.998999774}, + {7.7375, 0.999994934, 0.999002278}, + {7.741667, 0.999994874, 0.999004722}, + {7.745833, 0.999994755, 0.999007165}, + {7.75, 0.999994636, 0.999009669}, + {7.754167, 0.999994576, 0.999012113}, + {7.758333, 0.999994457, 0.999014556}, + {7.7625, 0.999994397, 0.999017}, + {7.766667, 0.999994338, 0.999019444}, + {7.770833, 0.999994218, 0.999021828}, + {7.775, 0.999994159, 0.999024272}, + {7.779167, 0.999994099, 0.999026716}, + {7.783333, 0.99999404, 0.9990291}, + {7.7875, 0.99999398, 0.999031544}, + {7.791667, 0.99999392, 0.999033928}, + {7.795833, 0.999993861, 0.999036372}, + {7.8, 0.999993801, 0.999038756}, + {7.804167, 0.999993801, 0.99904114}, + {7.808333, 0.999993742, 0.999043524}, + {7.8125, 0.999993742, 0.999045908}, + {7.816667, 0.999993682, 0.999048293}, + {7.820833, 0.999993682, 0.999050677}, + {7.825, 0.999993682, 0.999053061}, + {7.829167, 0.999993682, 0.999055445}, + {7.833333, 0.999993682, 0.99905777}, + {7.8375, 0.999993682, 0.999060154}, + {7.841667, 0.999993682, 0.999062479}, + {7.845833, 0.999993682, 0.999064863}, + {7.85, 0.999993682, 0.999067187}, + {7.854167, 0.999993742, 0.999069512}, + {7.858333, 0.999993742, 0.999071836}, + {7.8625, 0.999993801, 0.999074161}, + {7.866667, 0.999993801, 0.999076486}, + {7.870833, 0.999993861, 0.99907881}, + {7.875, 0.99999392, 0.999081135}, + {7.879167, 0.99999398, 0.999083459}, + {7.883333, 0.99999398, 0.999085724}, + {7.8875, 0.99999404, 0.999088049}, + {7.891667, 0.999994099, 0.999090314}, + {7.895833, 0.999994218, 0.999092638}, + {7.9, 0.999994278, 0.999094903}, + {7.904167, 0.999994338, 0.999097168}, + {7.908333, 0.999994397, 0.999099433}, + {7.9125, 0.999994516, 0.999101698}, + {7.916667, 0.999994576, 0.999103963}, + {7.920833, 0.999994636, 0.999106228}, + {7.925, 0.999994755, 0.999108434}, + {7.929167, 0.999994814, 0.999110699}, + {7.933333, 0.999994934, 0.999112964}, + {7.9375, 0.999994993, 0.999115169}, + {7.941667, 0.999995112, 0.999117374}, + {7.945833, 0.999995232, 0.999119639}, + {7.95, 0.999995291, 0.999121845}, + {7.954167, 0.99999541, 0.99912405}, + {7.958333, 0.99999547, 0.999126256}, + {7.9625, 0.999995589, 0.999128401}, + {7.966667, 0.999995708, 0.999130607}, + {7.970833, 0.999995768, 0.999132812}, + {7.975, 0.999995887, 0.999134958}, + {7.979167, 0.999996006, 0.999137163}, + {7.983333, 0.999996066, 0.999139309}, + {7.9875, 0.999996185, 0.999141455}, + {7.991667, 0.999996245, 0.99914366}, + {7.995833, 0.999996364, 0.999145746}, + {8, 0.999996483, 0.999147892}, + {8.004167, 0.999996543, 0.999150038}, + {8.008333, 0.999996662, 0.999152184}, + {8.0125, 0.999996722, 0.999154329}, + {8.016667, 0.999996781, 0.999156415}, + {8.020833, 0.999996901, 0.999158502}, + {8.025, 0.99999696, 0.999160647}, + {8.029167, 0.99999702, 0.999162734}, + {8.033333, 0.999997139, 0.99916482}, + {8.0375, 0.999997199, 0.999166906}, + {8.041667, 0.999997258, 0.999168992}, + {8.045833, 0.999997318, 0.999171078}, + {8.05, 0.999997377, 0.999173105}, + {8.054167, 0.999997437, 0.999175191}, + {8.058333, 0.999997497, 0.999177277}, + {8.0625, 0.999997556, 0.999179304}, + {8.066667, 0.999997616, 0.99918133}, + {8.070833, 0.999997675, 0.999183357}, + {8.075, 0.999997675, 0.999185443}, + {8.079167, 0.999997735, 0.99918741}, + {8.083333, 0.999997795, 0.999189436}, + {8.0875, 0.999997795, 0.999191463}, + {8.091667, 0.999997854, 0.99919349}, + {8.095833, 0.999997854, 0.999195457}, + {8.1, 0.999997854, 0.999197483}, + {8.104167, 0.999997914, 0.99919945}, + {8.108333, 0.999997914, 0.999201477}, + {8.1125, 0.999997914, 0.999203444}, + {8.116667, 0.999997914, 0.99920541}, + {8.120833, 0.999997914, 0.999207377}, + {8.125, 0.999997914, 0.999209344}, + {8.129167, 0.999997914, 0.999211311}, + {8.133333, 0.999997914, 0.999213278}, + {8.1375, 0.999997914, 0.999215186}, + {8.141667, 0.999997854, 0.999217153}, + {8.145833, 0.999997854, 0.99921906}, + {8.15, 0.999997854, 0.999221027}, + {8.154167, 0.999997795, 0.999222934}, + {8.158333, 0.999997795, 0.999224842}, + {8.1625, 0.999997735, 0.999226749}, + {8.166667, 0.999997735, 0.999228716}, + {8.170833, 0.999997675, 0.999230564}, + {8.175, 0.999997675, 0.999232471}, + {8.179167, 0.999997616, 0.999234378}, + {8.183333, 0.999997556, 0.999236286}, + {8.1875, 0.999997556, 0.999238193}, + {8.191667, 0.999997497, 0.999240041}, + {8.195833, 0.999997437, 0.999241948}, + {8.2, 0.999997377, 0.999243796}, + {8.204167, 0.999997318, 0.999245644}, + {8.208333, 0.999997318, 0.999247551}, + {8.2125, 0.999997258, 0.999249399}, + {8.216667, 0.999997199, 0.999251246}, + {8.220833, 0.999997139, 0.999253094}, + {8.225, 0.999997079, 0.999254942}, + {8.229167, 0.99999702, 0.99925679}, + {8.233333, 0.99999696, 0.999258637}, + {8.2375, 0.999996901, 0.999260485}, + {8.241667, 0.999996901, 0.999262273}, + {8.245833, 0.999996841, 0.999264121}, + {8.25, 0.999996781, 0.999265969}, + {8.254167, 0.999996722, 0.999267757}, + {8.258333, 0.999996662, 0.999269605}, + {8.2625, 0.999996603, 0.999271393}, + {8.266667, 0.999996543, 0.999273181}, + {8.270833, 0.999996483, 0.999274969}, + {8.275, 0.999996483, 0.999276817}, + {8.279167, 0.999996424, 0.999278605}, + {8.283333, 0.999996364, 0.999280393}, + {8.2875, 0.999996305, 0.999282181}, + {8.291667, 0.999996305, 0.999283969}, + {8.295833, 0.999996245, 0.999285758}, + {8.3, 0.999996185, 0.999287486}, + {8.304167, 0.999996185, 0.999289274}, + {8.308333, 0.999996126, 0.999291062}, + {8.3125, 0.999996126, 0.999292791}, + {8.316667, 0.999996066, 0.999294579}, + {8.320833, 0.999996066, 0.999296308}, + {8.325, 0.999996006, 0.999298096}, + {8.329167, 0.999996006, 0.999299824}, + {8.333333, 0.999996006, 0.999301553}, + {8.3375, 0.999995947, 0.999303341}, + {8.341667, 0.999995947, 0.999305069}, + {8.345833, 0.999995947, 0.999306798}, + {8.35, 0.999995947, 0.999308527}, + {8.354167, 0.999995887, 0.999310255}, + {8.358333, 0.999995887, 0.999311984}, + {8.3625, 0.999995887, 0.999313712}, + {8.366667, 0.999995887, 0.999315381}, + {8.370833, 0.999995887, 0.99931711}, + {8.375, 0.999995887, 0.999318838}, + {8.379167, 0.999995887, 0.999320507}, + {8.383333, 0.999995947, 0.999322236}, + {8.3875, 0.999995947, 0.999323905}, + {8.391667, 0.999995947, 0.999325633}, + {8.395833, 0.999995947, 0.999327302}, + {8.4, 0.999996006, 0.999329031}, + {8.404167, 0.999996006, 0.999330699}, + {8.408333, 0.999996006, 0.999332368}, + {8.4125, 0.999996066, 0.999334037}, + {8.416667, 0.999996066, 0.999335706}, + {8.420833, 0.999996126, 0.999337375}, + {8.425, 0.999996126, 0.999339044}, + {8.429167, 0.999996185, 0.999340713}, + {8.433333, 0.999996185, 0.999342322}, + {8.4375, 0.999996245, 0.999343991}, + {8.441667, 0.999996305, 0.99934566}, + {8.445833, 0.999996305, 0.99934727}, + {8.45, 0.999996364, 0.999348938}, + {8.454167, 0.999996424, 0.999350548}, + {8.458333, 0.999996483, 0.999352217}, + {8.4625, 0.999996483, 0.999353826}, + {8.466667, 0.999996543, 0.999355435}, + {8.470833, 0.999996603, 0.999357045}, + {8.475, 0.999996662, 0.999358654}, + {8.479167, 0.999996662, 0.999360263}, + {8.483333, 0.999996722, 0.999361873}, + {8.4875, 0.999996781, 0.999363482}, + {8.491667, 0.999996841, 0.999365091}, + {8.495833, 0.999996901, 0.999366701}, + {8.5, 0.99999696, 0.99936825}, + {8.504167, 0.99999696, 0.99936986}, + {8.508333, 0.99999702, 0.999371409}, + {8.5125, 0.999997079, 0.999373019}, + {8.516667, 0.999997139, 0.999374568}, + {8.520833, 0.999997199, 0.999376178}, + {8.525, 0.999997258, 0.999377728}, + {8.529167, 0.999997258, 0.999379277}, + {8.533333, 0.999997318, 0.999380827}, + {8.5375, 0.999997377, 0.999382377}, + {8.541667, 0.999997437, 0.999383926}, + {8.545833, 0.999997497, 0.999385476}, + {8.55, 0.999997497, 0.999387026}, + {8.554167, 0.999997556, 0.999388516}, + {8.558333, 0.999997616, 0.999390066}, + {8.5625, 0.999997616, 0.999391615}, + {8.566667, 0.999997675, 0.999393106}, + {8.570833, 0.999997735, 0.999394655}, + {8.575, 0.999997735, 0.999396145}, + {8.579167, 0.999997795, 0.999397635}, + {8.583333, 0.999997795, 0.999399185}, + {8.5875, 0.999997854, 0.999400675}, + {8.591667, 0.999997914, 0.999402165}, + {8.595833, 0.999997914, 0.999403656}, + {8.6, 0.999997914, 0.999405146}, + {8.604167, 0.999997973, 0.999406636}, + {8.608333, 0.999997973, 0.999408126}, + {8.6125, 0.999998033, 0.999409556}, + {8.616667, 0.999998033, 0.999411047}, + {8.620833, 0.999998033, 0.999412537}, + {8.625, 0.999998093, 0.999413967}, + {8.629167, 0.999998093, 0.999415457}, + {8.633333, 0.999998093, 0.999416888}, + {8.6375, 0.999998093, 0.999418318}, + {8.641667, 0.999998093, 0.999419808}, + {8.645833, 0.999998152, 0.999421239}, + {8.65, 0.999998152, 0.999422669}, + {8.654167, 0.999998152, 0.9994241}, + {8.658333, 0.999998152, 0.99942553}, + {8.6625, 0.999998152, 0.999426961}, + {8.666667, 0.999998152, 0.999428391}, + {8.670833, 0.999998152, 0.999429822}, + {8.675, 0.999998152, 0.999431252}, + {8.679167, 0.999998152, 0.999432623}, + {8.683333, 0.999998093, 0.999434054}, + {8.6875, 0.999998093, 0.999435425}, + {8.691667, 0.999998093, 0.999436855}, + {8.695833, 0.999998093, 0.999438226}, + {8.7, 0.999998093, 0.999439657}, + {8.704167, 0.999998033, 0.999441028}, + {8.708333, 0.999998033, 0.999442399}, + {8.7125, 0.999998033, 0.999443829}, + {8.716667, 0.999998033, 0.9994452}, + {8.720833, 0.999997973, 0.999446571}, + {8.725, 0.999997973, 0.999447942}, + {8.729167, 0.999997973, 0.999449313}, + {8.733333, 0.999997914, 0.999450684}, + {8.7375, 0.999997914, 0.999452055}, + {8.741667, 0.999997914, 0.999453425}, + {8.745833, 0.999997854, 0.999454737}, + {8.75, 0.999997854, 0.999456108}, + {8.754167, 0.999997795, 0.999457479}, + {8.758333, 0.999997795, 0.99945879}, + {8.7625, 0.999997795, 0.999460161}, + {8.766667, 0.999997735, 0.999461472}, + {8.770833, 0.999997735, 0.999462843}, + {8.775, 0.999997675, 0.999464154}, + {8.779167, 0.999997675, 0.999465525}, + {8.783333, 0.999997675, 0.999466836}, + {8.7875, 0.999997616, 0.999468148}, + {8.791667, 0.999997616, 0.999469459}, + {8.795833, 0.999997616, 0.99947077}, + {8.8, 0.999997556, 0.999472082}, + {8.804167, 0.999997556, 0.999473393}, + {8.808333, 0.999997497, 0.999474704}, + {8.8125, 0.999997497, 0.999476016}, + {8.816667, 0.999997497, 0.999477327}, + {8.820833, 0.999997437, 0.999478638}, + {8.825, 0.999997437, 0.999479949}, + {8.829167, 0.999997437, 0.999481261}, + {8.833333, 0.999997377, 0.999482512}, + {8.8375, 0.999997377, 0.999483824}, + {8.841667, 0.999997377, 0.999485135}, + {8.845833, 0.999997377, 0.999486387}, + {8.85, 0.999997318, 0.999487698}, + {8.854167, 0.999997318, 0.99948895}, + {8.858333, 0.999997318, 0.999490201}, + {8.8625, 0.999997318, 0.999491513}, + {8.866667, 0.999997318, 0.999492764}, + {8.870833, 0.999997318, 0.999494016}, + {8.875, 0.999997258, 0.999495268}, + {8.879167, 0.999997258, 0.999496579}, + {8.883333, 0.999997258, 0.999497831}, + {8.8875, 0.999997258, 0.999499083}, + {8.891667, 0.999997258, 0.999500334}, + {8.895833, 0.999997258, 0.999501586}, + {8.9, 0.999997258, 0.999502838}, + {8.904167, 0.999997258, 0.999504089}, + {8.908333, 0.999997258, 0.999505281}, + {8.9125, 0.999997258, 0.999506533}, + {8.916667, 0.999997258, 0.999507785}, + {8.920833, 0.999997318, 0.999509037}, + {8.925, 0.999997318, 0.999510229}, + {8.929167, 0.999997318, 0.99951148}, + {8.933333, 0.999997318, 0.999512672}, + {8.9375, 0.999997318, 0.999513924}, + {8.941667, 0.999997318, 0.999515116}, + {8.945833, 0.999997377, 0.999516368}, + {8.95, 0.999997377, 0.99951756}, + {8.954167, 0.999997377, 0.999518752}, + {8.958333, 0.999997377, 0.999520004}, + {8.9625, 0.999997437, 0.999521196}, + {8.966667, 0.999997437, 0.999522388}, + {8.970833, 0.999997437, 0.99952358}, + {8.975, 0.999997497, 0.999524772}, + {8.979167, 0.999997497, 0.999525964}, + {8.983333, 0.999997497, 0.999527156}, + {8.9875, 0.999997556, 0.999528348}, + {8.991667, 0.999997556, 0.999529541}, + {8.995833, 0.999997616, 0.999530733}, + {9, 0.999997616, 0.999531865}, + {9.004167, 0.999997616, 0.999533057}, + {9.008333, 0.999997675, 0.999534249}, + {9.0125, 0.999997675, 0.999535382}, + {9.016667, 0.999997735, 0.999536574}, + {9.020833, 0.999997735, 0.999537706}, + {9.025, 0.999997735, 0.999538898}, + {9.029167, 0.999997795, 0.999540031}, + {9.033333, 0.999997795, 0.999541223}, + {9.0375, 0.999997854, 0.999542356}, + {9.041667, 0.999997854, 0.999543488}, + {9.045833, 0.999997914, 0.999544621}, + {9.05, 0.999997914, 0.999545753}, + {9.054167, 0.999997973, 0.999546945}, + {9.058333, 0.999997973, 0.999548078}, + {9.0625, 0.999997973, 0.99954921}, + {9.066667, 0.999998033, 0.999550343}, + {9.070833, 0.999998033, 0.999551415}, + {9.075, 0.999998093, 0.999552548}, + {9.079167, 0.999998093, 0.99955368}, + {9.083333, 0.999998093, 0.999554813}, + {9.0875, 0.999998152, 0.999555945}, + {9.091667, 0.999998152, 0.999557018}, + {9.095833, 0.999998212, 0.999558151}, + {9.1, 0.999998212, 0.999559224}, + {9.104167, 0.999998212, 0.999560356}, + {9.108333, 0.999998271, 0.999561429}, + {9.1125, 0.999998271, 0.999562562}, + {9.116667, 0.999998271, 0.999563634}, + {9.120833, 0.999998331, 0.999564707}, + {9.125, 0.999998331, 0.99956584}, + {9.129167, 0.999998331, 0.999566913}, + {9.133333, 0.999998331, 0.999567986}, + {9.1375, 0.999998391, 0.999569058}, + {9.141667, 0.999998391, 0.999570131}, + {9.145833, 0.999998391, 0.999571204}, + {9.15, 0.999998391, 0.999572277}, + {9.154167, 0.999998391, 0.99957335}, + {9.158333, 0.99999845, 0.999574423}, + {9.1625, 0.99999845, 0.999575496}, + {9.166667, 0.99999845, 0.999576569}, + {9.170833, 0.99999845, 0.999577582}, + {9.175, 0.99999845, 0.999578655}, + {9.179167, 0.99999845, 0.999579728}, + {9.183333, 0.99999845, 0.999580741}, + {9.1875, 0.99999845, 0.999581814}, + {9.191667, 0.99999845, 0.999582827}, + {9.195833, 0.99999851, 0.9995839}, + {9.2, 0.99999851, 0.999584913}, + {9.204167, 0.99999851, 0.999585927}, + {9.208333, 0.99999851, 0.999586999}, + {9.2125, 0.99999851, 0.999588013}, + {9.216667, 0.99999851, 0.999589026}, + {9.220833, 0.99999845, 0.999590039}, + {9.225, 0.99999845, 0.999591053}, + {9.229167, 0.99999845, 0.999592125}, + {9.233333, 0.99999845, 0.999593139}, + {9.2375, 0.99999845, 0.999594152}, + {9.241667, 0.99999845, 0.999595165}, + {9.245833, 0.99999845, 0.999596119}, + {9.25, 0.99999845, 0.999597132}, + {9.254167, 0.99999845, 0.999598145}, + {9.258333, 0.99999845, 0.999599159}, + {9.2625, 0.99999845, 0.999600172}, + {9.266667, 0.999998391, 0.999601126}, + {9.270833, 0.999998391, 0.999602139}, + {9.275, 0.999998391, 0.999603152}, + {9.279167, 0.999998391, 0.999604106}, + {9.283333, 0.999998391, 0.999605119}, + {9.2875, 0.999998391, 0.999606073}, + {9.291667, 0.999998331, 0.999607086}, + {9.295833, 0.999998331, 0.99960804}, + {9.3, 0.999998331, 0.999609053}, + {9.304167, 0.999998331, 0.999610007}, + {9.308333, 0.999998331, 0.99961096}, + {9.3125, 0.999998331, 0.999611914}, + {9.316667, 0.999998271, 0.999612927}, + {9.320833, 0.999998271, 0.999613881}, + {9.325, 0.999998271, 0.999614835}, + {9.329167, 0.999998271, 0.999615788}, + {9.333333, 0.999998271, 0.999616742}, + {9.3375, 0.999998271, 0.999617696}, + {9.341667, 0.999998212, 0.999618649}, + {9.345833, 0.999998212, 0.999619603}, + {9.35, 0.999998212, 0.999620557}, + {9.354167, 0.999998212, 0.999621511}, + {9.358333, 0.999998212, 0.999622464}, + {9.3625, 0.999998212, 0.999623418}, + {9.366667, 0.999998212, 0.999624312}, + {9.370833, 0.999998152, 0.999625266}, + {9.375, 0.999998152, 0.999626219}, + {9.379167, 0.999998152, 0.999627173}, + {9.383333, 0.999998152, 0.999628067}, + {9.3875, 0.999998152, 0.999629021}, + {9.391667, 0.999998152, 0.999629915}, + {9.395833, 0.999998152, 0.999630868}, + {9.4, 0.999998152, 0.999631763}, + {9.404167, 0.999998152, 0.999632716}, + {9.408333, 0.999998152, 0.99963361}, + {9.4125, 0.999998152, 0.999634564}, + {9.416667, 0.999998152, 0.999635458}, + {9.420833, 0.999998152, 0.999636352}, + {9.425, 0.999998152, 0.999637246}, + {9.429167, 0.999998152, 0.9996382}, + {9.433333, 0.999998152, 0.999639094}, + {9.4375, 0.999998152, 0.999639988}, + {9.441667, 0.999998152, 0.999640882}, + {9.445833, 0.999998152, 0.999641776}, + {9.45, 0.999998152, 0.99964267}, + {9.454167, 0.999998152, 0.999643564}, + {9.458333, 0.999998152, 0.999644458}, + {9.4625, 0.999998152, 0.999645352}, + {9.466667, 0.999998152, 0.999646246}, + {9.470833, 0.999998152, 0.999647141}, + {9.475, 0.999998212, 0.999648035}, + {9.479167, 0.999998212, 0.999648929}, + {9.483333, 0.999998212, 0.999649763}, + {9.4875, 0.999998212, 0.999650657}, + {9.491667, 0.999998212, 0.999651551}, + {9.495833, 0.999998212, 0.999652445}, + {9.5, 0.999998212, 0.99965328}, + {9.504167, 0.999998271, 0.999654174}, + {9.508333, 0.999998271, 0.999655008}, + {9.5125, 0.999998271, 0.999655902}, + {9.516667, 0.999998271, 0.999656737}, + {9.520833, 0.999998271, 0.999657631}, + {9.525, 0.999998331, 0.999658465}, + {9.529167, 0.999998331, 0.999659359}, + {9.533333, 0.999998331, 0.999660194}, + {9.5375, 0.999998331, 0.999661028}, + {9.541667, 0.999998331, 0.999661863}, + {9.545833, 0.999998391, 0.999662757}, + {9.55, 0.999998391, 0.999663591}, + {9.554167, 0.999998391, 0.999664426}, + {9.558333, 0.999998391, 0.99966526}, + {9.5625, 0.99999845, 0.999666095}, + {9.566667, 0.99999845, 0.999666929}, + {9.570833, 0.99999845, 0.999667764}, + {9.575, 0.99999845, 0.999668598}, + {9.579167, 0.99999845, 0.999669433}, + {9.583333, 0.99999851, 0.999670267}, + {9.5875, 0.99999851, 0.999671102}, + {9.591667, 0.99999851, 0.999671936}, + {9.595833, 0.99999851, 0.999672771}, + {9.6, 0.999998569, 0.999673545}, + {9.604167, 0.999998569, 0.99967438}, + {9.608333, 0.999998569, 0.999675214}, + {9.6125, 0.999998569, 0.999676049}, + {9.616667, 0.999998629, 0.999676824}, + {9.620833, 0.999998629, 0.999677658}, + {9.625, 0.999998629, 0.999678433}, + {9.629167, 0.999998629, 0.999679267}, + {9.633333, 0.999998629, 0.999680042}, + {9.6375, 0.999998689, 0.999680877}, + {9.641667, 0.999998689, 0.999681652}, + {9.645833, 0.999998689, 0.999682486}, + {9.65, 0.999998689, 0.999683261}, + {9.654167, 0.999998689, 0.999684036}, + {9.658333, 0.999998689, 0.999684811}, + {9.6625, 0.999998748, 0.999685645}, + {9.666667, 0.999998748, 0.99968642}, + {9.670833, 0.999998748, 0.999687195}, + {9.675, 0.999998748, 0.99968797}, + {9.679167, 0.999998748, 0.999688745}, + {9.683333, 0.999998748, 0.999689519}, + {9.6875, 0.999998748, 0.999690294}, + {9.691667, 0.999998748, 0.999691069}, + {9.695833, 0.999998808, 0.999691844}, + {9.7, 0.999998808, 0.999692619}, + {9.704167, 0.999998808, 0.999693394}, + {9.708333, 0.999998808, 0.999694169}, + {9.7125, 0.999998808, 0.999694943}, + {9.716667, 0.999998808, 0.999695718}, + {9.720833, 0.999998808, 0.999696434}, + {9.725, 0.999998808, 0.999697208}, + {9.729167, 0.999998808, 0.999697983}, + {9.733333, 0.999998808, 0.999698699}, + {9.7375, 0.999998808, 0.999699473}, + {9.741667, 0.999998808, 0.999700248}, + {9.745833, 0.999998808, 0.999700963}, + {9.75, 0.999998808, 0.999701738}, + {9.754167, 0.999998808, 0.999702454}, + {9.758333, 0.999998808, 0.999703228}, + {9.7625, 0.999998808, 0.999703944}, + {9.766667, 0.999998808, 0.999704719}, + {9.770833, 0.999998808, 0.999705434}, + {9.775, 0.999998808, 0.999706149}, + {9.779167, 0.999998808, 0.999706924}, + {9.783333, 0.999998808, 0.999707639}, + {9.7875, 0.999998808, 0.999708354}, + {9.791667, 0.999998808, 0.99970907}, + {9.795833, 0.999998808, 0.999709845}, + {9.8, 0.999998808, 0.99971056}, + {9.804167, 0.999998808, 0.999711275}, + {9.808333, 0.999998808, 0.99971199}, + {9.8125, 0.999998808, 0.999712706}, + {9.816667, 0.999998808, 0.999713421}, + {9.820833, 0.999998808, 0.999714136}, + {9.825, 0.999998808, 0.999714851}, + {9.829167, 0.999998808, 0.999715567}, + {9.833333, 0.999998748, 0.999716282}, + {9.8375, 0.999998748, 0.999716997}, + {9.841667, 0.999998748, 0.999717712}, + {9.845833, 0.999998748, 0.999718368}, + {9.85, 0.999998748, 0.999719083}, + {9.854167, 0.999998748, 0.999719799}, + {9.858333, 0.999998748, 0.999720514}, + {9.8625, 0.999998748, 0.999721169}, + {9.866667, 0.999998748, 0.999721885}, + {9.870833, 0.999998748, 0.9997226}, + {9.875, 0.999998748, 0.999723256}, + {9.879167, 0.999998748, 0.999723971}, + {9.883333, 0.999998748, 0.999724686}, + {9.8875, 0.999998748, 0.999725342}, + {9.891667, 0.999998748, 0.999726057}, + {9.895833, 0.999998748, 0.999726713}, + {9.9, 0.999998689, 0.999727428}, + {9.904167, 0.999998689, 0.999728084}, + {9.908333, 0.999998689, 0.999728799}, + {9.9125, 0.999998689, 0.999729455}, + {9.916667, 0.999998689, 0.99973011}, + {9.920833, 0.999998689, 0.999730825}, + {9.925, 0.999998689, 0.999731481}, + {9.929167, 0.999998689, 0.999732137}, + {9.933333, 0.999998689, 0.999732792}, + {9.9375, 0.999998689, 0.999733508}, + {9.941667, 0.999998689, 0.999734163}, + {9.945833, 0.999998689, 0.999734819}, + {9.95, 0.999998689, 0.999735475}, + {9.954167, 0.999998689, 0.99973613}, + {9.958333, 0.999998689, 0.999736786}, + {9.9625, 0.999998689, 0.999737501}, + {9.966667, 0.999998689, 0.999738157}, + {9.970833, 0.999998689, 0.999738812}, + {9.975, 0.999998689, 0.999739468}, + {9.979167, 0.999998689, 0.999740124}, + {9.983333, 0.999998689, 0.99974072}, + {9.9875, 0.999998689, 0.999741375}, + {9.991667, 0.999998748, 0.999742031}, + {9.995833, 0.999998748, 0.999742687}, + {10, 0.999998748, 0.999743342}}; diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 9b06dd997..117bbb862 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -4,7 +4,6 @@ * @author Adam Birchfield (abirchfield@tamu.edu) * @brief Definition of a Turbine Governor Model (IEEET1). * - * */ // NOTES From cf329ed61cbff7d3479ebbada10f013b68731a75 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:03:23 -0500 Subject: [PATCH 082/139] edit: joint genrou and ieeet1 attempt [skip ci] --- examples/PhasorDynamics/Example3/example3.cpp | 63 +++++++++---------- .../Governor/TGOV1/TurbineGov.cpp | 2 +- .../Governor/TGOV1/TurbineGov.hpp | 5 +- src/Model/PhasorDynamics/GovernorBase.hpp | 23 +++++++ .../SynchronousMachine/GENROUwS/Genrou.cpp | 49 +++++++++------ .../SynchronousMachine/GENROUwS/Genrou.hpp | 11 ++++ 6 files changed, 98 insertions(+), 55 deletions(-) create mode 100644 src/Model/PhasorDynamics/GovernorBase.hpp diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 398b92b1e..29bb1ec52 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -35,39 +35,35 @@ int main() using namespace AnalysisManager::Sundials; /* Create model parts */ - BusInfinite bus1(1, 0); - - Bus bus2(0.999733719609643, 0.0230757421433613); - Bus bus3(0.999047460127767, 0.0436368240395443); - Bus bus4(0.998097277498088, 0.061658775943942); - Bus bus5(0.997021447662007, 0.0771246581966912); - Bus bus6(0.946436885707683, 0.322888837484268); - Bus bus7(0.943037519659334, 0.332686393642377); - Bus bus8(0.940418229359708, 0.340019961013984); - Bus bus9(0.938638861502395, 0.344901620288291); - Bus bus10(0.937739191669114, 0.347340277548916); - - Branch branch12(&bus1, &bus2, 0.001, 0.005, 0, 0); - Branch branch23(&bus2, &bus3, 0.001, 0.005, 0, 0); - Branch branch34(&bus3, &bus4, 0.001, 0.005, 0, 0); - Branch branch45(&bus4, &bus5, 0.001, 0.005, 0, 0); - Branch branch56(&bus5, &bus6, 0.001, 0.1, 0, 0); - Branch branch67(&bus6, &bus7, 0.001, 0.005, 0, 0); - Branch branch78(&bus7, &bus8, 0.001, 0.005, 0, 0); - Branch branch89(&bus8, &bus9, 0.001, 0.005, 0, 0); - Branch branch910(&bus9, &bus10, 0.001, 0.005, 0, 0); - - Genrou gen2(&bus2, 1, 0.5, -0.00442101, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen3(&bus3, 1, 0.5, -0.02510812, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen4(&bus4, 1, 0.5, -0.04339553, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen5(&bus5, 1, 0.5, -0.2334993, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen6(&bus6, 1, 0.5, 0.69907194, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen7(&bus7, 1, 0.5, -0.08318208, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen8(&bus8, 1, 0.5, -0.09123614, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen9(&bus9, 1, 0.5, -0.09662372, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - Genrou gen10(&bus10, 1, 0.5, -0.09932297, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); - - BusFault fault(&bus10, 0, 1e-5, 0); + SystemModel sys; + Bus bus1(0.9949877346411762, 0.09999703952427966); + BusInfinite bus2(1.0, 0.0); + Branch branch(&bus1, &bus2, 0, 0.1, 0, 0); + BusFault fault(&bus1, 0, 1e-3, 0); + + Genrou gen(&bus1, + 1, + 1., + 0.05013, + 3., + 0., + 0., + 7., + .04, + .05, + .75, + 2.1, + 0.2, + 0.18, + 0.5, + 0.5, + 0.18, + 0.15, + 0., + 0.); + + // Governor of Generator + TurbineGov turb(&gen); /* Connect everything together */ SystemModel sys; @@ -101,6 +97,7 @@ int main() sys.addComponent(&gen9); sys.addComponent(&gen10); sys.addComponent(&fault); + sys.addComponent(&gen); sys.allocate(); real_type dt = 1.0 / 4.0 / 60.0; diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 117bbb862..928b3d60b 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -242,7 +242,7 @@ namespace GridKit * @return ScalarT - Mechanical output power value. */ template - ScalarT TurbineGov::pmech() + ScalarT TurbineGov::Pmech() { // Relevant Variables diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 69dad7118..d080e0731 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -8,6 +8,7 @@ #pragma once +#include #include // Forward declarations @@ -27,7 +28,7 @@ namespace GridKit { template - class TurbineGov : public Component + class TurbineGov : public Component, public GovernorBase { using Component::alpha_; using Component::f_; @@ -77,7 +78,7 @@ namespace GridKit } // Public Access to Pmech - ScalarT pmech(); + ScalarT Pmech() override; private: diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp new file mode 100644 index 000000000..90799f9c1 --- /dev/null +++ b/src/Model/PhasorDynamics/GovernorBase.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +namespace GridKit +{ + namespace PhasorDynamics + { + /*! + * @brief GovernorBase model implementation base class. + * + */ + template + class GovernorBase + { + public: + + virtual ScalarT& Pmech() = 0; + + }; + + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 31b7982db..827383f0b 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -55,7 +55,7 @@ namespace GridKit S10_(0.), S12_(0.) { - size_ = 21; + size_ = 20; // 21; 20 without Pmech setDerivedParams(); // Temporary, to eliminate compiler warnings @@ -110,7 +110,7 @@ namespace GridKit S10_(S10), S12_(S12) { - size_ = 21; + size_ = 20;// 21; 20 without Pmech setDerivedParams(); } @@ -211,17 +211,17 @@ namespace GridKit ScalarT ksat; ScalarT psipp; - y_[0] = delta; //= 0.55399038; + y_[0] = delta; // = 0.55399038; y_[1] = omega; // = 0; y_[2] = Eqp; // = 0.995472581; y_[3] = psidp; // = 0.971299567; y_[4] = psiqp; // = 0.306880069; y_[5] = Edp; // = 0; - y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; - y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; - y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); - y_[9] = ksat = SB_ * pow(psipp - SA_, 2); + y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; + y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; + y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); + y_[9] = ksat = SB_ * pow(psipp - SA_, 2); y_[10] = vd = -psiqpp * (1 + omega); y_[11] = vq = psidpp * (1 + omega); y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; @@ -229,13 +229,16 @@ namespace GridKit y_[14] = iq; y_[15] = ir; y_[16] = ii; - y_[17] = pmech_set_ = Te; - y_[18] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; - y_[19] = G_ * (vd * sin(delta) + vq * cos(delta)) + //y_[17] = pmech_set_ = Te; + y_[17] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; + y_[18] = G_ * (vd * sin(delta) + vq * cos(delta)) - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ - y_[20] = B_ * (vd * sin(delta) + vq * cos(delta)) + y_[19] = B_ * (vd * sin(delta) + vq * cos(delta)) + G_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, imag */ + // Set Setpoint mechanical power, which may or may not be used + pmech_set_ = Te; + for (IdxT i = 0; i < size_; ++i) yp_[static_cast(i)] = 0.0; @@ -281,12 +284,20 @@ namespace GridKit ScalarT iq = y_[14]; ScalarT ir = y_[15]; ScalarT ii = y_[16]; - ScalarT pmech = y_[17]; - ScalarT efd = y_[18]; - ScalarT inr = y_[19]; - ScalarT ini = y_[20]; + ScalarT efd = y_[17]; + ScalarT inr = y_[18]; + ScalarT ini = y_[19]; ScalarT vr = Vr(); ScalarT vi = Vi(); + ScalarT pmech; + if(gov_) + { + pmech = pmech_set_ + } + else + { + pmech = gov_->Pmech() + } /* Read derivatives */ ScalarT delta_dot = yp_[0]; @@ -318,12 +329,12 @@ namespace GridKit f_[16] = ii + B_ * vr + G_ * vi - ini; /* 2 Genrou control inputs are set to constant for this example */ - f_[17] = pmech - pmech_set_; - f_[18] = efd - efd_set_; + //f_[17] = pmech - pmech_set_; + f_[17] = efd - efd_set_; /* 2 Genrou current source definitions */ - f_[19] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); - f_[20] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); + f_[18] = inr - (G_ * (sin(delta) * vd + cos(delta) * vq) - B_ * (-cos(delta) * vd + sin(delta) * vq)); + f_[19] = ini - (B_ * (sin(delta) * vd + cos(delta) * vq) + G_ * (-cos(delta) * vd + sin(delta) * vq)); /* Current balance */ Ir() += inr - Vr() * G_ + Vi() * B_; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 0ea653e42..187bf4552 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -21,6 +21,8 @@ namespace GridKit template struct GenrouData; + template + class GovernorBase; } // namespace PhasorDynamics } // namespace GridKit @@ -47,6 +49,7 @@ namespace GridKit using Component::yp_; using Component::ypB_; + using gov_type = GovernorBase; using real_type = typename Component::real_type; using bus_type = BusBase; using model_data_type = GenrouData; @@ -102,6 +105,11 @@ namespace GridKit return y_[1]; } + void setgov(gov_type* gov) + { + gov_(gov); + } + private: void setDerivedParams(); @@ -131,6 +139,9 @@ namespace GridKit const int busID_; IdxT unit_id_; + // Components + gov_type* gov_; + /* Initial terminal conditions */ ScalarT p0_; ScalarT q0_; From 787b7f3183ddf4442d05b0171a88fa7afd38e19e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:08:58 -0500 Subject: [PATCH 083/139] fix: compilation error [skip ci] --- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 4 ++-- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 827383f0b..34dd4d6f2 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -292,11 +292,11 @@ namespace GridKit ScalarT pmech; if(gov_) { - pmech = pmech_set_ + pmech = gov_->Pmech(); } else { - pmech = gov_->Pmech() + pmech = pmech_set_; } /* Read derivatives */ diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 187bf4552..02f63c436 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -107,7 +107,7 @@ namespace GridKit void setgov(gov_type* gov) { - gov_(gov); + gov_ = gov } private: From e416de892f7e83e97a7fac5d9e24712db96e1b97 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:14:45 -0500 Subject: [PATCH 084/139] fix: compile issues [skip ci] --- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 02f63c436..f25445449 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -107,7 +107,7 @@ namespace GridKit void setgov(gov_type* gov) { - gov_ = gov + gov_ = gov; } private: From a8a73690204832a349251504559ec20e8eacea85 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:21:51 -0500 Subject: [PATCH 085/139] edit: cmake issue gov [skip ci] --- src/Model/PhasorDynamics/CMakeLists.txt | 2 +- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/CMakeLists.txt b/src/Model/PhasorDynamics/CMakeLists.txt index 6066594c6..c5d8504d4 100644 --- a/src/Model/PhasorDynamics/CMakeLists.txt +++ b/src/Model/PhasorDynamics/CMakeLists.txt @@ -8,4 +8,4 @@ add_subdirectory(Bus) add_subdirectory(BusFault) add_subdirectory(Load) add_subdirectory(SynchronousMachine) -#add_subdirectory(Governor) +add_subdirectory(Governor) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 34dd4d6f2..6d18100cd 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -15,6 +15,8 @@ #include #include +#include + #define _USE_MATH_DEFINES From b38db86fddf38dd593e89a7d91f89927e9608cd5 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:25:38 -0500 Subject: [PATCH 086/139] edit: type alignments --- src/Model/PhasorDynamics/GovernorBase.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp index 90799f9c1..89ee5fc96 100644 --- a/src/Model/PhasorDynamics/GovernorBase.hpp +++ b/src/Model/PhasorDynamics/GovernorBase.hpp @@ -15,7 +15,7 @@ namespace GridKit { public: - virtual ScalarT& Pmech() = 0; + virtual ScalarT Pmech() = 0; }; From 4d5025b9caf11b01eaecacea65d13542315c558b Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:34:20 -0500 Subject: [PATCH 087/139] fix: cmake correction [skip ci] --- examples/PhasorDynamics/Example3/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/PhasorDynamics/Example3/CMakeLists.txt b/examples/PhasorDynamics/Example3/CMakeLists.txt index 4e689997b..22d025f7b 100644 --- a/examples/PhasorDynamics/Example3/CMakeLists.txt +++ b/examples/PhasorDynamics/Example3/CMakeLists.txt @@ -10,3 +10,4 @@ install(TARGETS phasordynamics_example3 RUNTIME DESTINATION bin) # Not used for tesing for now. # add_test(NAME GenrouTest3 COMMAND $) +add_test(NAME GenrouTest COMMAND $) From bdfd6c26abbbe3cbfdf8eb7446e783f26cce1111 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 17:43:11 -0500 Subject: [PATCH 088/139] edit: method signature [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 12 ++++++++++++ .../SynchronousMachine/GENROUwS/Genrou.hpp | 10 ++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 6d18100cd..5bd36fe44 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -446,6 +446,18 @@ namespace GridKit B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); } + template + void Genrou::setgov(gov_type* gov) + { + gov_ = gov; + } + + template + ScalarT& Genrou::speed() + { + return y_[1]; + } + // Available template instantiations template class Genrou; template class Genrou; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index f25445449..222f3b2e4 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -100,15 +100,9 @@ namespace GridKit * * @return Reference to speed state variable */ - ScalarT& speed() override - { - return y_[1]; - } + ScalarT& speed() override; - void setgov(gov_type* gov) - { - gov_ = gov; - } + void setgov(gov_type* gov); private: void setDerivedParams(); From 98c96b818fab29c678f421867a62d9c488c9742a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 19:57:36 -0500 Subject: [PATCH 089/139] edit: constructor overloading --- examples/PhasorDynamics/Example3/example3.cpp | 8 ++++- .../SynchronousMachine/GENROUwS/Genrou.cpp | 24 +++++++------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 33 ++++++++++++++----- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 29bb1ec52..3abd39a04 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -41,8 +41,14 @@ int main() Branch branch(&bus1, &bus2, 0, 0.1, 0, 0); BusFault fault(&bus1, 0, 1e-3, 0); - Genrou gen(&bus1, + // Decleration + Genrou* gen; + TurbineGov* gov; + + // Instatiation + gen = new Genrou(&bus1, 1, + gov 1., 0.05013, 3., diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 5bd36fe44..477302a31 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -24,7 +24,13 @@ namespace GridKit { namespace PhasorDynamics { + + + /*! + * @brief Constructor for all custom arguments + * + * @param bus * @brief Constructor for a pi-model branch * * Arguments passed to ModelEvaluatorImpl: @@ -72,6 +78,7 @@ namespace GridKit template Genrou::Genrou(bus_type* bus, IdxT unit_id, + gov_type* gov, ScalarT p0, ScalarT q0, real_type H, @@ -93,6 +100,7 @@ namespace GridKit : bus_(bus), busID_(0), unit_id_(unit_id), + gov_(gov), p0_(p0), q0_(q0), H_(H), @@ -112,7 +120,7 @@ namespace GridKit S10_(S10), S12_(S12) { - size_ = 20;// 21; 20 without Pmech + size_ = 20; setDerivedParams(); } @@ -247,8 +255,8 @@ namespace GridKit return 0; } - /** - * \brief Identify differential variables. + /*! + * @brief Identify differential variables. */ template int Genrou::tagDifferentiable() @@ -260,8 +268,8 @@ namespace GridKit return 0; } - /** - * \brief Residual contribution of the branch is pushed to the + /*! + * @brief Residual contribution of the branch is pushed to the * two terminal buses. * */ @@ -446,12 +454,6 @@ namespace GridKit B_ = -Xqpp_ / (Ra_ * Ra_ + Xqpp_ * Xqpp_); } - template - void Genrou::setgov(gov_type* gov) - { - gov_ = gov; - } - template ScalarT& Genrou::speed() { diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 222f3b2e4..4da05979f 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -77,6 +77,30 @@ namespace GridKit real_type Xl, real_type S10, real_type S12); + Genrou(bus_type* bus, + int unit_id, + gov_type* gov, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12); + Genrou(bus_type* bus, int unit_id, gov_type* gov); + Genrou(bus_type* bus, int unit_id) + ~Genrou() = default; int allocate() override; @@ -95,15 +119,8 @@ namespace GridKit { } - /*! - * @brief Getter for machine speed deviation - * - * @return Reference to speed state variable - */ ScalarT& speed() override; - void setgov(gov_type* gov); - private: void setDerivedParams(); @@ -133,7 +150,7 @@ namespace GridKit const int busID_; IdxT unit_id_; - // Components + // Governor Pointer gov_type* gov_; /* Initial terminal conditions */ From 10ad2387193a6b5f98cceb98fd3687834cd75b96 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 20:00:45 -0500 Subject: [PATCH 090/139] edit: compile error [skip ci] --- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 2 -- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 477302a31..9c194127f 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -25,8 +25,6 @@ namespace GridKit namespace PhasorDynamics { - - /*! * @brief Constructor for all custom arguments * diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 4da05979f..bb1fa8145 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -99,7 +99,7 @@ namespace GridKit real_type S10, real_type S12); Genrou(bus_type* bus, int unit_id, gov_type* gov); - Genrou(bus_type* bus, int unit_id) + Genrou(bus_type* bus, int unit_id); ~Genrou() = default; From 5e3298ef75ee4c7a92ab4af55b8f0c1f2fc1ebc5 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Wed, 18 Jun 2025 20:10:24 -0500 Subject: [PATCH 091/139] fix: example runtime [skip ci] --- examples/PhasorDynamics/Example3/example3.cpp | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 3abd39a04..3999cbe6a 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -46,27 +46,7 @@ int main() TurbineGov* gov; // Instatiation - gen = new Genrou(&bus1, - 1, - gov - 1., - 0.05013, - 3., - 0., - 0., - 7., - .04, - .05, - .75, - 2.1, - 0.2, - 0.18, - 0.5, - 0.5, - 0.18, - 0.15, - 0., - 0.); + gen = new Genrou(&bus1, 1, gov); // Governor of Generator TurbineGov turb(&gen); From da37c0a9e22d40c3af8625c0c2ac88e8281c9230 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 18:05:33 -0500 Subject: [PATCH 092/139] chore: new doc format and misc improvments [skip ci] --- .../PhasorDynamics/Governor/TGOV1/README.md | 60 ++++++++++++------- .../Governor/TGOV1/TurbineGov.cpp | 44 ++++++-------- .../Governor/TGOV1/TurbineGov.hpp | 8 +-- src/Model/PhasorDynamics/MachineBase.hpp | 2 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 4 +- .../SynchronousMachine/GENROUwS/Genrou.hpp | 3 +- 6 files changed, 65 insertions(+), 56 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index a8b7c8e29..574de9218 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -11,27 +11,45 @@ Standard model of the stream turbine Figure 1: Governor TGOV1 model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/) -## Nomenclature - -### Algebraic Variables -- $\Delta\omega$ - Per-unit Speed Deviation (p.u.) -- $P_{ref}$ - Reference Power (p.u.) -- $P_{mech}$ - Mechnical Power to Generator (p.u.) - -### Differential Variables -- $P_{tx}$ - Turbine Power (p.u.) (State 1 in Fig. 1) -- $P_{v}$ - Valve Position (State 2 in Fig. 1) - -### Parameters -- $R$ - Droop Constant (p.u.) -- $T_1$ - Valve Time Delay (sec) -- $T_2$ - Turbine Numerator Time Constat (sec) -- $T_3$ - Turbine Delay (sec) -- $P_{vmax}$ - Max Valve Position -- $P_{vmin}$ - Min Valve Position -- $D_t$ - Turbine Damping Coefficient (p.u.) - -## Equations +## Model Parameters + +Symbol | Units | Description | Typical Value | Note +------------|--------|-----------------------------------|---------------| ------ +$R$ | [p.u.] | Droop Constant | 1 | +$T_1$ | [sec] | Valve Time Delay | 1 | +$T_2$ | [sec] | Turbine Numerator Time Constant | 1 | +$T_3$ | [sec] | Turbine Delay | 1 | +$P_{vmax}$ | [p.u.] | Stator leakage reactance | 1 | +$P_{vmin}$ | [p.u.] | Max Valve Position | 1 | +$D_t$ | [p.u.] | Turbine Damping Coefficient | 1 | + +### Internal Variables + +#### Differential + +Symbol | Units | Description | Note +----------|--------|-----------------------------------|------- +$P_{tx}$ | [p.u.] | Turbine Power (State 1 in Fig. 1) | +$P_{v}$ | [p.u.] | Valve Position (State 2 in Fig. 1)| + +#### Algebraic +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$P_{mech}$ | [p.u.] | Mechnical Power to Generator | Read by a Machine Model + +### External Variables + +#### Differential +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$\Delta\omega$ | [p.u.] | Speed Deviation | + +#### Algebraic +Symbol | Units | Description | Note +----------------|--------|-----------------------------------|------- +$P_{ref}$ | [p.u.] | Reference Power | + +## Model Equations ### Algebraic Equations diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 928b3d60b..f37ccea7c 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -42,10 +42,8 @@ namespace GridKit Dt_(.75) { // 2 Internal Variables - size_ = 2; + size_ = 3; - // 7 Parameters - size_param_ = 7; } /*! @@ -82,10 +80,7 @@ namespace GridKit { // 2 Internal Variables - size_ = 2; - - // 7 Parameters - size_param_ = 7; + size_ = 3; } @@ -114,9 +109,15 @@ namespace GridKit int TurbineGov::initialize() { - // D.V. Value - y_[0] = (T3_-T2_) * pmech_; // Ptx (Turbine Power ) - y_[1] = pmech_; // Pv (Valve Position) + // Input Variables (Parameter for now) + pref_ = 1 / R_; + + // Differential Variables + y_[0] = (T3_-T2_) * R_ * pref_; // Ptx (Turbine Power ) + y_[1] = R_ * pref_; // Pv (Valve Position) + + // Algebraic Variables + y_[2] = R_ * pref_; // Pmech // D.V. Derivative yp_[0] = 0.0; // Ptx @@ -132,11 +133,9 @@ namespace GridKit int TurbineGov::tagDifferentiable() { - // Indicate which variables in y_ are differential - for (IdxT i = 0; i < size_; ++i) - { - tag_[i] = true; - } + tag_[0] = true; // Pv + tag_[1] = true; // Ptx + tag_[2] = false; // Pmech return 0; } @@ -154,6 +153,7 @@ namespace GridKit // Internal Variables ScalarT pv = y_[0]; ScalarT ptx = y_[1]; + ScalarT pmech = y_[2]; // Internal Derivatives ScalarT pv_dot = yp_[0]; @@ -162,6 +162,9 @@ namespace GridKit // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; f_[1] = pv_dot + (pv - (pref_ - omega) / R_ ) / T3_; + + // Internal Algebraic Equations + f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); return 0; } @@ -244,16 +247,7 @@ namespace GridKit template ScalarT TurbineGov::Pmech() { - - // Relevant Variables - ScalarT omega = machine_->speed(); - ScalarT pv = y_[0]; - ScalarT ptx = y_[1]; - - // Output Variable - ScalarT pmech = (ptx + T2_ * pv) / T3_ - (Dt_ * omega); - - return pmech; + return y_[2]; } // Available template instantiations diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index d080e0731..fb4b1e772 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -8,11 +8,10 @@ #pragma once -#include #include +#include // Forward declarations -// TODO: Make a MachineBase class for use with any synch. machine namespace GridKit { namespace PhasorDynamics @@ -77,7 +76,7 @@ namespace GridKit { } - // Public Access to Pmech + // Read Access to Pmech ScalarT Pmech() override; private: @@ -97,9 +96,6 @@ namespace GridKit // Input States (which can be parameters) ScalarT pref_; - // Output States - ScalarT pmech_; - }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp index fc3688b6a..502765ea6 100644 --- a/src/Model/PhasorDynamics/MachineBase.hpp +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -15,7 +15,7 @@ namespace GridKit { public: - virtual ScalarT& speed() = 0; + virtual ScalarT speed() = 0; }; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 9c194127f..ddf0f4089 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -300,7 +300,7 @@ namespace GridKit ScalarT pmech; if(gov_) { - pmech = gov_->Pmech(); + pmech = gov_->Pmech(); // ISSUE IS HERE? } else { @@ -453,7 +453,7 @@ namespace GridKit } template - ScalarT& Genrou::speed() + ScalarT Genrou::speed() { return y_[1]; } diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index bb1fa8145..5396832eb 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -119,7 +119,8 @@ namespace GridKit { } - ScalarT& speed() override; + // Read Access to Machine Relative Speed + ScalarT speed() override; private: void setDerivedParams(); From 34852a763fe8abd2a4e042516c8e28a82013af81 Mon Sep 17 00:00:00 2001 From: lukelowry Date: Thu, 19 Jun 2025 23:50:02 +0000 Subject: [PATCH 093/139] Apply pre-commmit fixes --- examples/PhasorDynamics/Example3/example3.cpp | 2 +- .../Governor/TGOV1/TurbineGov.cpp | 80 +++++++++---------- .../Governor/TGOV1/TurbineGov.hpp | 20 +++-- src/Model/PhasorDynamics/GovernorBase.hpp | 2 - src/Model/PhasorDynamics/MachineBase.hpp | 2 - .../SynchronousMachine/GENROUwS/Genrou.cpp | 17 ++-- .../SynchronousMachine/GENROUwS/Genrou.hpp | 44 +++++----- 7 files changed, 78 insertions(+), 89 deletions(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 3999cbe6a..51233e067 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -42,7 +42,7 @@ int main() BusFault fault(&bus1, 0, 1e-3, 0); // Decleration - Genrou* gen; + Genrou* gen; TurbineGov* gov; // Instatiation diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index f37ccea7c..d980e5b8d 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -6,11 +6,11 @@ * */ - // NOTES - // Input Variables: Machine Speed Deviation (w) - // Output Variables: Pmech, Pref - // (No algebraic variables in reduced form) - // Differential Variables: Ptx, Pv +// NOTES +// Input Variables: Machine Speed Deviation (w) +// Output Variables: Pmech, Pref +// (No algebraic variables in reduced form) +// Differential Variables: Ptx, Pv #include "TurbineGov.hpp" @@ -32,25 +32,24 @@ namespace GridKit */ template TurbineGov::TurbineGov(machine_type* machine) - : machine_(machine), - R_(3.), - Pvmin_(0.), - Pvmax_(1.), - T1_(7.), - T2_(.04), - T3_(.05), - Dt_(.75) + : machine_(machine), + R_(3.), + Pvmin_(0.), + Pvmax_(1.), + T1_(7.), + T2_(.04), + T3_(.05), + Dt_(.75) { // 2 Internal Variables - size_ = 3; - + size_ = 3; } /*! * @brief Constructor for Governor * * @param machine Generator Object - * @param R Droop Constant (p.u.) + * @param R Droop Constant (p.u.) * @param Pvmin Minimum Valve Position * @param Pvmax Maximum Valve Position * @param T1 Param description @@ -61,14 +60,13 @@ namespace GridKit template TurbineGov::TurbineGov( machine_type* machine, - real_type R, - real_type Pvmin, - real_type Pvmax, - real_type T1, - real_type T2, - real_type T3, - real_type Dt - ) + real_type R, + real_type Pvmin, + real_type Pvmax, + real_type T1, + real_type T2, + real_type T3, + real_type Dt) : machine_(machine), R_(3.), Pvmin_(0.), @@ -80,8 +78,7 @@ namespace GridKit { // 2 Internal Variables - size_ = 3; - + size_ = 3; } /*! @@ -113,15 +110,15 @@ namespace GridKit pref_ = 1 / R_; // Differential Variables - y_[0] = (T3_-T2_) * R_ * pref_; // Ptx (Turbine Power ) - y_[1] = R_ * pref_; // Pv (Valve Position) + y_[0] = (T3_ - T2_) * R_ * pref_; // Ptx (Turbine Power ) + y_[1] = R_ * pref_; // Pv (Valve Position) // Algebraic Variables y_[2] = R_ * pref_; // Pmech // D.V. Derivative - yp_[0] = 0.0; // Ptx - yp_[1] = 0.0; // Pv + yp_[0] = 0.0; // Ptx + yp_[1] = 0.0; // Pv return 0; } @@ -148,24 +145,24 @@ namespace GridKit { // Input Variables - ScalarT omega = machine_->speed(); - - // Internal Variables - ScalarT pv = y_[0]; - ScalarT ptx = y_[1]; - ScalarT pmech = y_[2]; + ScalarT omega = machine_->speed(); + + // Internal Variables + ScalarT pv = y_[0]; + ScalarT ptx = y_[1]; + ScalarT pmech = y_[2]; // Internal Derivatives - ScalarT pv_dot = yp_[0]; - ScalarT ptx_dot = yp_[1]; + ScalarT pv_dot = yp_[0]; + ScalarT ptx_dot = yp_[1]; // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; - f_[1] = pv_dot + (pv - (pref_ - omega) / R_ ) / T3_; + f_[1] = pv_dot + (pv - (pref_ - omega) / R_) / T3_; // Internal Algebraic Equations f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); - + return 0; } @@ -241,7 +238,7 @@ namespace GridKit /** * @brief The mechanical power output. - * + * * @return ScalarT - Mechanical output power value. */ template @@ -254,6 +251,5 @@ namespace GridKit template class TurbineGov; template class TurbineGov; - } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index fb4b1e772..9a9b7e609 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -45,19 +45,19 @@ namespace GridKit using Component::yp_; using Component::ypB_; - using machine_type = MachineBase; - using real_type = typename Component::real_type; + using machine_type = MachineBase; + using real_type = typename Component::real_type; public: TurbineGov(machine_type* machine); TurbineGov(machine_type* machine, - real_type R, - real_type Pvmin, - real_type Pvmax, - real_type T1, - real_type T2, - real_type T3, - real_type Dt); + real_type R, + real_type Pvmin, + real_type Pvmax, + real_type T1, + real_type T2, + real_type T3, + real_type Dt); ~TurbineGov() = default; int allocate() override; @@ -80,7 +80,6 @@ namespace GridKit ScalarT Pmech() override; private: - // Associated Machine Model machine_type* machine_; @@ -95,7 +94,6 @@ namespace GridKit // Input States (which can be parameters) ScalarT pref_; - }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp index 89ee5fc96..b5644c71e 100644 --- a/src/Model/PhasorDynamics/GovernorBase.hpp +++ b/src/Model/PhasorDynamics/GovernorBase.hpp @@ -14,9 +14,7 @@ namespace GridKit class GovernorBase { public: - virtual ScalarT Pmech() = 0; - }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp index 502765ea6..dc75c2877 100644 --- a/src/Model/PhasorDynamics/MachineBase.hpp +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -14,9 +14,7 @@ namespace GridKit class MachineBase { public: - virtual ScalarT speed() = 0; - }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index ddf0f4089..09fd00cf9 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -14,9 +14,8 @@ #include #include -#include #include - +#include #define _USE_MATH_DEFINES @@ -226,10 +225,10 @@ namespace GridKit y_[4] = psiqp; // = 0.306880069; y_[5] = Edp; // = 0; - y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; - y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; - y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); - y_[9] = ksat = SB_ * pow(psipp - SA_, 2); + y_[6] = psiqpp = -psiqp * Xq4_ - Edp * Xq5_; + y_[7] = psidpp = psidp * Xd4_ + Eqp * Xd5_; + y_[8] = psipp = sqrt(psiqpp * psiqpp + psidpp * psidpp); + y_[9] = ksat = SB_ * pow(psipp - SA_, 2); y_[10] = vd = -psiqpp * (1 + omega); y_[11] = vq = psidpp * (1 + omega); y_[12] = Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; @@ -237,7 +236,7 @@ namespace GridKit y_[14] = iq; y_[15] = ir; y_[16] = ii; - //y_[17] = pmech_set_ = Te; + // y_[17] = pmech_set_ = Te; y_[17] = efd_set_ = Eqp + Xd1_ * (id + Xd3_ * (Eqp - psidp - Xd2_ * id)) + psidpp * ksat; y_[18] = G_ * (vd * sin(delta) + vq * cos(delta)) - B_ * (vd * -cos(delta) + vq * sin(delta)); /* inort, real */ @@ -298,7 +297,7 @@ namespace GridKit ScalarT vr = Vr(); ScalarT vi = Vi(); ScalarT pmech; - if(gov_) + if (gov_) { pmech = gov_->Pmech(); // ISSUE IS HERE? } @@ -337,7 +336,7 @@ namespace GridKit f_[16] = ii + B_ * vr + G_ * vi - ini; /* 2 Genrou control inputs are set to constant for this example */ - //f_[17] = pmech - pmech_set_; + // f_[17] = pmech - pmech_set_; f_[17] = efd - efd_set_; /* 2 Genrou current source definitions */ diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 9e99a59b4..83246d341 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -49,7 +49,7 @@ namespace GridKit using Component::yp_; using Component::ypB_; - using gov_type = GovernorBase; + using gov_type = GovernorBase; using real_type = typename Component::real_type; using bus_type = BusBase; using model_data_type = GenrouData; @@ -77,27 +77,27 @@ namespace GridKit real_type Xl, real_type S10, real_type S12); - Genrou(bus_type* bus, - int unit_id, - gov_type* gov, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12); + Genrou(bus_type* bus, + int unit_id, + gov_type* gov, + ScalarT p0, + ScalarT q0, + real_type H, + real_type D, + real_type Ra, + real_type Tdop, + real_type Tdopp, + real_type Tqopp, + real_type Tqop, + real_type Xd, + real_type Xdp, + real_type Xdpp, + real_type Xq, + real_type Xqp, + real_type Xqpp, + real_type Xl, + real_type S10, + real_type S12); Genrou(bus_type* bus, int unit_id, gov_type* gov); Genrou(bus_type* bus, int unit_id); From d5e05168fb8d4008797548823c4d3a4bed9cacfc Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 18:57:44 -0500 Subject: [PATCH 094/139] edit: rebase correction [skip ci] --- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index ddf0f4089..06064899f 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -76,7 +76,6 @@ namespace GridKit template Genrou::Genrou(bus_type* bus, IdxT unit_id, - gov_type* gov, ScalarT p0, ScalarT q0, real_type H, From 05fbdda5ebdcf0863fd364b44ee5041b1ceb3faa Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 19:06:39 -0500 Subject: [PATCH 095/139] edit: misc updates from rebase [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 32 ++++++------------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 26 --------------- 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index f841cffed..3e59117fa 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -96,7 +96,6 @@ namespace GridKit : bus_(bus), busID_(0), unit_id_(unit_id), - gov_(gov), p0_(p0), q0_(q0), H_(H), @@ -148,21 +147,10 @@ namespace GridKit S10_(data.S10), S12_(data.S12) { - size_ = 21; + size_ = 20; setDerivedParams(); } - // /** - // * @brief Destroy the Genrou - // * - // * @tparam ScalarT - // * @tparam IdxT - // */ - // template - // Genrou::~Genrou() - // { - // // std::cout << "Destroy Genrou..." << std::endl; - // } /*! * @brief allocate method computes sparsity pattern of the Jacobian. @@ -295,15 +283,15 @@ namespace GridKit ScalarT ini = y_[19]; ScalarT vr = Vr(); ScalarT vi = Vi(); - ScalarT pmech; - if (gov_) - { - pmech = gov_->Pmech(); // ISSUE IS HERE? - } - else - { - pmech = pmech_set_; - } + ScalarT pmech = pmech_set_; + //if (gov_) + //{ + // pmech = gov_->Pmech(); // ISSUE IS HERE? + //} + //else + //{ + // pmech = pmech_set_; + //} /* Read derivatives */ ScalarT delta_dot = yp_[0]; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 83246d341..0a695e91c 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -77,29 +77,6 @@ namespace GridKit real_type Xl, real_type S10, real_type S12); - Genrou(bus_type* bus, - int unit_id, - gov_type* gov, - ScalarT p0, - ScalarT q0, - real_type H, - real_type D, - real_type Ra, - real_type Tdop, - real_type Tdopp, - real_type Tqopp, - real_type Tqop, - real_type Xd, - real_type Xdp, - real_type Xdpp, - real_type Xq, - real_type Xqp, - real_type Xqpp, - real_type Xl, - real_type S10, - real_type S12); - Genrou(bus_type* bus, int unit_id, gov_type* gov); - Genrou(bus_type* bus, int unit_id); ~Genrou() = default; @@ -154,9 +131,6 @@ namespace GridKit // Governor Pointer gov_type* gov_; - // Governor Pointer - gov_type* gov_; - /* Initial terminal conditions */ ScalarT p0_; ScalarT q0_; From 0363b6ed76cdae555494a1d2ded3392fe6257a92 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 19:14:15 -0500 Subject: [PATCH 096/139] edit: SystemModel capitalization issue [skip ci] --- src/Model/PhasorDynamics/SystemModel.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SystemModel.hpp b/src/Model/PhasorDynamics/SystemModel.hpp index 848e87f14..b8bfbf415 100644 --- a/src/Model/PhasorDynamics/SystemModel.hpp +++ b/src/Model/PhasorDynamics/SystemModel.hpp @@ -736,7 +736,7 @@ namespace GridKit bus_type* getBus(IdxT busid) { // Need to implement mapping of bus IDs to buses in the system model - assert((buses_[busid])->BusID() == busid); + assert((buses_[busid])->busID() == busid); return buses_[busid]; } From 93bbee4b370334b5e320e9ecaf948f921dc9adaa Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 19:18:52 -0500 Subject: [PATCH 097/139] edit: example 3 rebase fix [skip ci] --- examples/PhasorDynamics/Example3/example3.cpp | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 51233e067..8a5346d1c 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -31,25 +31,40 @@ using index_type = size_t; int main() { - using namespace GridKit::PhasorDynamics; - using namespace AnalysisManager::Sundials; - /* Create model parts */ - SystemModel sys; - Bus bus1(0.9949877346411762, 0.09999703952427966); - BusInfinite bus2(1.0, 0.0); - Branch branch(&bus1, &bus2, 0, 0.1, 0, 0); - BusFault fault(&bus1, 0, 1e-3, 0); - - // Decleration - Genrou* gen; - TurbineGov* gov; - - // Instatiation - gen = new Genrou(&bus1, 1, gov); - - // Governor of Generator - TurbineGov turb(&gen); + BusInfinite bus1(1, 0); + + Bus bus2(0.999733719609643, 0.0230757421433613); + Bus bus3(0.999047460127767, 0.0436368240395443); + Bus bus4(0.998097277498088, 0.061658775943942); + Bus bus5(0.997021447662007, 0.0771246581966912); + Bus bus6(0.946436885707683, 0.322888837484268); + Bus bus7(0.943037519659334, 0.332686393642377); + Bus bus8(0.940418229359708, 0.340019961013984); + Bus bus9(0.938638861502395, 0.344901620288291); + Bus bus10(0.937739191669114, 0.347340277548916); + + Branch branch12(&bus1, &bus2, 0.001, 0.005, 0, 0); + Branch branch23(&bus2, &bus3, 0.001, 0.005, 0, 0); + Branch branch34(&bus3, &bus4, 0.001, 0.005, 0, 0); + Branch branch45(&bus4, &bus5, 0.001, 0.005, 0, 0); + Branch branch56(&bus5, &bus6, 0.001, 0.1, 0, 0); + Branch branch67(&bus6, &bus7, 0.001, 0.005, 0, 0); + Branch branch78(&bus7, &bus8, 0.001, 0.005, 0, 0); + Branch branch89(&bus8, &bus9, 0.001, 0.005, 0, 0); + Branch branch910(&bus9, &bus10, 0.001, 0.005, 0, 0); + + Genrou gen2(&bus2, 1, 0.5, -0.00442101, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen3(&bus3, 1, 0.5, -0.02510812, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen4(&bus4, 1, 0.5, -0.04339553, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen5(&bus5, 1, 0.5, -0.2334993, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen6(&bus6, 1, 0.5, 0.69907194, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen7(&bus7, 1, 0.5, -0.08318208, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen8(&bus8, 1, 0.5, -0.09123614, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen9(&bus9, 1, 0.5, -0.09662372, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + Genrou gen10(&bus10, 1, 0.5, -0.09932297, 3., 0., 0., 7., .04, .05, .75, 2.1, 0.2, 0.18, 0.5, 0.5, 0.18, 0.15, 0., 0.); + + BusFault fault(&bus10, 0, 1e-5, 0); /* Connect everything together */ SystemModel sys; From 0f61c2698e14c93e9f25c5128f5bd5d441c8dcc2 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 19:20:45 -0500 Subject: [PATCH 098/139] edit: example 3 rebase fix [skip ci] --- examples/PhasorDynamics/Example3/example3.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 8a5346d1c..940ec7b82 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -31,6 +31,9 @@ using index_type = size_t; int main() { + using namespace GridKit::PhasorDynamics; + using namespace AnalysisManager::Sundials; + /* Create model parts */ BusInfinite bus1(1, 0); @@ -98,7 +101,6 @@ int main() sys.addComponent(&gen9); sys.addComponent(&gen10); sys.addComponent(&fault); - sys.addComponent(&gen); sys.allocate(); real_type dt = 1.0 / 4.0 / 60.0; @@ -174,4 +176,4 @@ int main() fileout.close(); return 0; -} +} \ No newline at end of file From 518fe5a92f4296d48bb621e5d9e34d706e63ccfb Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 20:01:49 -0500 Subject: [PATCH 099/139] add: TurbineGovData [skip ci] --- .../Governor/TGOV1/TurbineGov.cpp | 46 ++++--------------- .../Governor/TGOV1/TurbineGov.hpp | 11 +---- .../Governor/TGOV1/TurbineGovData.hpp | 35 ++++++++++++++ src/Model/PhasorDynamics/SystemModelData.hpp | 22 +++++---- 4 files changed, 60 insertions(+), 54 deletions(-) create mode 100644 src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index d980e5b8d..ea839f03b 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -25,25 +25,6 @@ namespace GridKit { namespace PhasorDynamics { - /*! - * @brief Constructor for Governor with default parameters - * - * @param machine Associated Generator Object - */ - template - TurbineGov::TurbineGov(machine_type* machine) - : machine_(machine), - R_(3.), - Pvmin_(0.), - Pvmax_(1.), - T1_(7.), - T2_(.04), - T3_(.05), - Dt_(.75) - { - // 2 Internal Variables - size_ = 3; - } /*! * @brief Constructor for Governor @@ -58,26 +39,18 @@ namespace GridKit * @param Dt Turbine Damping Coefficient (p.u.) */ template - TurbineGov::TurbineGov( - machine_type* machine, - real_type R, - real_type Pvmin, - real_type Pvmax, - real_type T1, - real_type T2, - real_type T3, - real_type Dt) + TurbineGov::TurbineGov(machine_type* machine, const model_data_type& data) : machine_(machine), - R_(3.), - Pvmin_(0.), - Pvmax_(1.), - T1_(7.), - T2_(.04), - T3_(.05), - Dt_(.75) + R_(data.R), + Pvmin_(data.Pvmin), + Pvmax_(data.Pvmax), + T1_(data.T1), + T2_(data.T2), + T3_(data.T3), + Dt_(data.Dt) { - // 2 Internal Variables + // 3 Internal Variables size_ = 3; } @@ -133,6 +106,7 @@ namespace GridKit tag_[0] = true; // Pv tag_[1] = true; // Ptx tag_[2] = false; // Pmech + return 0; } diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 9a9b7e609..1ce329beb 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -47,17 +47,10 @@ namespace GridKit using machine_type = MachineBase; using real_type = typename Component::real_type; + using model_data_type = TurbineGovData; public: - TurbineGov(machine_type* machine); - TurbineGov(machine_type* machine, - real_type R, - real_type Pvmin, - real_type Pvmax, - real_type T1, - real_type T2, - real_type T3, - real_type Dt); + TurbineGov(machine_type* machine, const model_data_type& data); ~TurbineGov() = default; int allocate() override; diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp new file mode 100644 index 000000000..617c74b83 --- /dev/null +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp @@ -0,0 +1,35 @@ +/** + * @file GenrouData.hpp + * @author Luke Lowery (lukel@tamu.edu) + * @brief Modeling data for TGOV1 (transmission lines) + * + */ +#pragma once + +namespace GridKit +{ + namespace PhasorDynamics + { + /** + * @brief Contains modeling data for a Genrou generator model. + * + * @tparam RealT Real parameter data type + * @tparam IdxT Integer parameter data type + * + * Integer parameters are of the same type as matrix and vector indices. + * + * @todo Decide on naming scheme for model parameters. + */ + template + struct GenrouData + { + RealT R{0.0}; ///< R + RealT Pvmin{0.0}; ///< Min Valve Power + RealT Pvmax{0.0}; ///< Max Valve Power + RealT T1{0.0}; ///< + RealT T2{0.0}; ///< + RealT T3{0.0}; ///< + RealT Dt{0.0}; ///< + }; + } // namespace PhasorDynamics +} // namespace GridKit diff --git a/src/Model/PhasorDynamics/SystemModelData.hpp b/src/Model/PhasorDynamics/SystemModelData.hpp index 28696d0af..d1ee323d9 100644 --- a/src/Model/PhasorDynamics/SystemModelData.hpp +++ b/src/Model/PhasorDynamics/SystemModelData.hpp @@ -5,6 +5,8 @@ #include #include #include +#include + namespace GridKit { @@ -13,11 +15,12 @@ namespace GridKit template struct SystemModelData { - using BranchDataT = BranchData; - using BusDataT = BusData; - using BusFaultDataT = BusFaultData; - using GenrouDataT = GenrouData; - using LoadDataT = LoadData; + using BranchDataT = BranchData; + using BusDataT = BusData; + using BusFaultDataT = BusFaultData; + using GenrouDataT = GenrouData; + using TurbineGovDataT = TurbineGovData; + using LoadDataT = LoadData; // Header info unsigned short format_version; @@ -33,10 +36,11 @@ namespace GridKit std::vector bus; // Component data - std::vector branch; - std::vector bus_fault; - std::vector genrou; - std::vector load; + std::vector branch; + std::vector bus_fault; + std::vector genrou; + std::vector load; }; } // namespace PhasorDynamics } // namespace GridKit From ae17327d956f642cc2d90a113a352f330767423e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 20:06:22 -0500 Subject: [PATCH 100/139] add: Example 4 Init --- examples/PhasorDynamics/CMakeLists.txt | 1 + .../PhasorDynamics/Example4/CMakeLists.txt | 11 + examples/PhasorDynamics/Example4/example4.cpp | 230 ++ examples/PhasorDynamics/Example4/example4.hpp | 2416 +++++++++++++++++ 4 files changed, 2658 insertions(+) create mode 100644 examples/PhasorDynamics/Example4/CMakeLists.txt create mode 100644 examples/PhasorDynamics/Example4/example4.cpp create mode 100644 examples/PhasorDynamics/Example4/example4.hpp diff --git a/examples/PhasorDynamics/CMakeLists.txt b/examples/PhasorDynamics/CMakeLists.txt index 5d6752233..40615f940 100644 --- a/examples/PhasorDynamics/CMakeLists.txt +++ b/examples/PhasorDynamics/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory(Example1) add_subdirectory(Example2) add_subdirectory(Example3) +add_subdirectory(Example4) \ No newline at end of file diff --git a/examples/PhasorDynamics/Example4/CMakeLists.txt b/examples/PhasorDynamics/Example4/CMakeLists.txt new file mode 100644 index 000000000..68361cffc --- /dev/null +++ b/examples/PhasorDynamics/Example4/CMakeLists.txt @@ -0,0 +1,11 @@ +add_executable(phasordynamics_example4 example4.cpp) +target_link_libraries(phasordynamics_example4 + GRIDKIT::phasor_dynamics_bus + GRIDKIT::phasor_dynamics_bus_fault + GRIDKIT::phasor_dynamics_branch + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_load + GRIDKIT::solvers_dyn) +install(TARGETS phasordynamics_example4 RUNTIME DESTINATION bin) + +add_test(NAME GenrouTest1 COMMAND $) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp new file mode 100644 index 000000000..6be8db8b4 --- /dev/null +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -0,0 +1,230 @@ +/** + * @file example4.cpp + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Example running a 2-bus system + * + * Simulates a 2-bus system with Genrou 6th order generator model and + * compares results with data generated for the same system by Poweworld. + * + */ +#include "example4.hpp" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main() +{ + using namespace GridKit::PhasorDynamics; + using namespace AnalysisManager::Sundials; + + using scalar_type = double; + using real_type = double; + using index_type = size_t; + + std::cout << "Example 4 version 2\n"; + + // + // Create model data + // + + SystemModelData data; + + // Set bus data + data.bus.resize(2); + + data.bus[0].bus_id = 0; + data.bus[0].bus_type = BusData::DEFAULT; + data.bus[0].Vr0 = 0.9949877346411762; + data.bus[0].Vi0 = 0.09999703952427966; + + data.bus[1].bus_id = 1; + data.bus[1].bus_type = BusData::SLACK; + data.bus[1].Vr0 = 1.0; + data.bus[1].Vi0 = 0.0; + + // Set branch data + data.branch.resize(1); + + data.branch[0].bus1_id = data.bus[0].bus_id; + data.branch[0].bus2_id = data.bus[1].bus_id; + data.branch[0].R = 0.0; + data.branch[0].X = 0.1; + data.branch[0].G = 0.0; + data.branch[0].B = 0.0; + + // Set generator data + data.genrou.resize(1); + + data.genrou[0].unit_id = 1; + data.genrou[0].p0 = 1.; + data.genrou[0].q0 = 0.05013; + data.genrou[0].H = 3.; + data.genrou[0].D = 0.; + data.genrou[0].Ra = 0.; + data.genrou[0].Tdop = 7.; + data.genrou[0].Tdopp = .04; + data.genrou[0].Tqopp = .05; + data.genrou[0].Tqop = .75; + data.genrou[0].Xd = 2.1; + data.genrou[0].Xdp = 0.2; + data.genrou[0].Xdpp = 0.18; + data.genrou[0].Xq = 0.5; + data.genrou[0].Xqp = 0.5; + data.genrou[0].Xqpp = 0.18; + data.genrou[0].Xl = 0.15; + data.genrou[0].S10 = 0.; + data.genrou[0].S12 = 0.; + + // Add faults + data.bus_fault.resize(1); + + data.bus_fault[0].R = 0.0; + data.bus_fault[0].X = 1e-3; + data.bus_fault[0].status = false; + + // + // Instantiate system model + // + + SystemModel sys(data); + sys.allocate(); + + // Get access to the fault + auto* fault = sys.getBusFault(0); + + // Set time step to 1/4 of a 60Hz cycle + real_type dt = 1.0 / 4.0 / 60.0; + + // A data structure to keep track of the data we want to + // compare to the reference solution. Rather than keeping + // the entire solution vector at every time step around, + // we instead narrow down exactly what we want to keep. + // + // Since this struct is "simple" enough (no constructors or + // assignment operators, and "simple" members), it is a POD + // (plain ol' data), which have some benefits in C++. + struct OutputData + { + // Output variables are time, real and imaginary voltage and + // frequency deviation + real_type ti, Vr, Vi, dw; + }; + + // A list of output for each time step. + std::vector output; + + // A callback which will be called by the integrator after + // each time step. It will be told the time of the current + // state, and it is allowed to access the up-to-date state + // of the components, which are captured by a closure + // due to the [&] notation (every variable that is referenced + // by the callback that is external to the callback itself - + // here output, bus1, and gen - will be considered a + // reference to that variable inside the callback). We select + // the subset of the output we're interested in recording and + // push it into output, which is updated outside the callback. + auto output_cb = [&](real_type t) + { + std::vector& y_val = sys.y(); + + output.push_back(OutputData{t, y_val[0], y_val[1], y_val[3]}); + }; + + // Set up simulation + Ida ida(&sys); + ida.configureSimulation(); + + // Run simulation - making sure to pass the callback to record output + real_type start = static_cast(clock()); + + // Run for 1s + ida.initializeSimulation(0.0, false); + int nout = static_cast(std::round((1.0 - 0.0) / dt)); + ida.runSimulation(1.0, nout, output_cb); + + // Introduce fault and run for the next 0.1s + fault->setStatus(true); + ida.initializeSimulation(1.0, false); + nout = static_cast(std::round((1.1 - 1.0) / dt)); + ida.runSimulation(1.1, nout, output_cb); + + // Clear the fault and run until t = 10s. + fault->setStatus(false); + ida.initializeSimulation(1.1, false); + nout = static_cast(std::round((10.0 - 1.1) / dt)); + ida.runSimulation(10.0, nout, output_cb); + real_type stop = static_cast(clock()); + + real_type error_V = 0.0; // error in |V| + real_type error_w = 0.0; // error in rotor speed + + // Read through the simulation data stored in the buffer. + // Since we captured by reference, output should be available + // for us to read here, outside the callback. + for (size_t i = 0; i < output.size(); i++) + { + OutputData data = output[i]; + std::vector& ref_sol = Example4::reference_solution[i + 1]; + + real_type err = + std::abs(std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - ref_sol[2]) + / (1.0 + std::abs(ref_sol[2])); + if (err > error_V) + error_V = err; + + err = std::abs(1.0 + data.dw - ref_sol[1]) / (1.0 + ref_sol[1]); + if (err > error_w) + error_w = err; + + // // Optional output + // std::cout << "GridKit: t = " << data.ti + // << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) + // << ", w = " << (1.0 + data.dw) << "\n"; + // std::cout << "Ref : t = " << ref_sol[0] + // << ", |V| = " << ref_sol[2] + // << ", w = " << ref_sol[1] + // << "\n"; + // std::cout << "Error in |V| = " + // << err + // << "\n"; + // std::cout << "\n"; + } + + // Errors allowed for agreement with Powerworld results + real_type error_V_allowed = 2e-4; + real_type error_w_allowed = 1e-4; + + // Tolerances based on Powerworld reference accuracy + int status = 0; + std::cout << "Max error in |V| = " << error_V << "\n"; + if (error_V > error_V_allowed) + { + std::cout << "Test failed with error too large!\n"; + status = 1; + } + std::cout << "Max error in w = " << error_w << "\n"; + if (error_w > error_w_allowed) + { + std::cout << "Test failed with error too large!\n"; + status = 1; + } + + std::cout << "\n\nComplete in " << (stop - start) / CLOCKS_PER_SEC << " seconds\n"; + + return status; +} diff --git a/examples/PhasorDynamics/Example4/example4.hpp b/examples/PhasorDynamics/Example4/example4.hpp new file mode 100644 index 000000000..fabbdd19d --- /dev/null +++ b/examples/PhasorDynamics/Example4/example4.hpp @@ -0,0 +1,2416 @@ +/** + * @file example1.hpp + * @author Adam Birchfield (abirchfield@tamu.edu) + * @author Slaven Peles (peless@ornl.gov) + * @brief Reference solution for the 2-bus system obtained with Powerworld + * + */ +#include + +// Columns: +// Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, +namespace Example1 +{ + std::vector> reference_solution = + {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit + {0.004167, 1, 1.000000477}, + {0.008333, 1, 1.000000477}, + {0.0125, 0.99999994, 1.000000477}, + {0.016667, 0.99999994, 1.000000477}, + {0.020833, 0.99999994, 1.000000477}, + {0.025, 0.99999994, 1.000000477}, + {0.029167, 0.99999994, 1.000000477}, + {0.033333, 0.99999994, 1.000000477}, + {0.0375, 0.99999994, 1.000000477}, + {0.041667, 0.99999994, 1.000000477}, + {0.045833, 0.99999994, 1.000000477}, + {0.05, 0.999999881, 1.000000477}, + {0.054167, 0.999999881, 1.000000477}, + {0.058333, 0.999999881, 1.000000477}, + {0.0625, 0.999999881, 1.000000477}, + {0.066667, 0.999999881, 1.000000477}, + {0.070833, 0.999999881, 1.000000477}, + {0.075, 0.999999881, 1.000000477}, + {0.079167, 0.999999881, 1.000000477}, + {0.083333, 0.999999881, 1.000000477}, + {0.0875, 0.999999881, 1.000000477}, + {0.091667, 0.999999881, 1.000000477}, + {0.095833, 0.999999881, 1.000000477}, + {0.1, 0.999999881, 1.000000477}, + {0.104167, 0.999999881, 1.000000477}, + {0.108333, 0.999999881, 1.000000477}, + {0.1125, 0.999999881, 1.000000477}, + {0.116667, 0.999999881, 1.000000477}, + {0.120833, 0.999999881, 1.000000477}, + {0.125, 0.999999881, 1.000000477}, + {0.129167, 0.999999881, 1.000000477}, + {0.133333, 0.999999881, 1.000000477}, + {0.1375, 0.99999994, 1.000000477}, + {0.141667, 0.99999994, 1.000000477}, + {0.145833, 0.99999994, 1.000000477}, + {0.15, 0.99999994, 1.000000477}, + {0.154167, 0.99999994, 1.000000477}, + {0.158333, 0.99999994, 1.000000477}, + {0.1625, 0.99999994, 1.000000477}, + {0.166667, 0.99999994, 1.000000477}, + {0.170833, 0.99999994, 1.000000477}, + {0.175, 0.99999994, 1.000000477}, + {0.179167, 0.99999994, 1.000000477}, + {0.183333, 0.99999994, 1.000000477}, + {0.1875, 0.99999994, 1.000000477}, + {0.191667, 0.99999994, 1.000000477}, + {0.195833, 1, 1.000000477}, + {0.2, 1, 1.000000477}, + {0.204167, 1, 1.000000477}, + {0.208333, 1, 1.000000477}, + {0.2125, 1, 1.000000477}, + {0.216667, 1, 1.000000477}, + {0.220833, 1, 1.000000477}, + {0.225, 1, 1.000000477}, + {0.229167, 1, 1.000000477}, + {0.233333, 1, 1.000000477}, + {0.2375, 1, 1.000000477}, + {0.241667, 1, 1.000000477}, + {0.245833, 1, 1.000000477}, + {0.25, 1, 1.000000477}, + {0.254167, 1, 1.000000477}, + {0.258333, 1, 1.000000477}, + {0.2625, 1, 1.000000477}, + {0.266667, 1, 1.000000477}, + {0.270833, 1, 1.000000477}, + {0.275, 1, 1.000000477}, + {0.279167, 1, 1.000000477}, + {0.283333, 1, 1.000000477}, + {0.2875, 1, 1.000000477}, + {0.291667, 1, 1.000000477}, + {0.295833, 1.000000119, 1.000000477}, + {0.3, 1.000000119, 1.000000477}, + {0.304167, 1.000000119, 1.000000477}, + {0.308333, 1.000000119, 1.000000477}, + {0.3125, 1.000000119, 1.000000477}, + {0.316667, 1.000000119, 1.000000477}, + {0.320833, 1.000000119, 1.000000477}, + {0.325, 1.000000119, 1.000000477}, + {0.329167, 1.000000119, 1.000000477}, + {0.333333, 1.000000119, 1.000000477}, + {0.3375, 1.000000119, 1.000000477}, + {0.341667, 1.000000119, 1.000000477}, + {0.345833, 1.000000119, 1.000000477}, + {0.35, 1.000000119, 1.000000477}, + {0.354167, 1.000000119, 1.000000477}, + {0.358333, 1.000000119, 1.000000477}, + {0.3625, 1, 1.000000477}, + {0.366667, 1, 1.000000477}, + {0.370833, 1, 1.000000477}, + {0.375, 1, 1.000000477}, + {0.379167, 1, 1.000000477}, + {0.383333, 1, 1.000000477}, + {0.3875, 1, 1.000000477}, + {0.391667, 1, 1.000000477}, + {0.395833, 1, 1.000000477}, + {0.4, 1, 1.000000477}, + {0.404167, 1, 1.000000477}, + {0.408333, 1, 1.000000477}, + {0.4125, 1, 1.000000477}, + {0.416667, 1, 1.000000477}, + {0.420833, 1, 1.000000477}, + {0.425, 1, 1.000000477}, + {0.429167, 1, 1.000000477}, + {0.433333, 1, 1.000000477}, + {0.4375, 1, 1.000000477}, + {0.441667, 1, 1.000000477}, + {0.445833, 1, 1.000000477}, + {0.45, 1, 1.000000477}, + {0.454167, 1, 1.000000477}, + {0.458333, 1, 1.000000477}, + {0.4625, 1, 1.000000477}, + {0.466667, 1, 1.000000477}, + {0.470833, 1, 1.000000477}, + {0.475, 1, 1.000000477}, + {0.479167, 1, 1.000000477}, + {0.483333, 1, 1.000000477}, + {0.4875, 1, 1.000000477}, + {0.491667, 1, 1.000000477}, + {0.495833, 1, 1.000000477}, + {0.5, 1, 1.000000477}, + {0.504167, 1, 1.000000477}, + {0.508333, 1, 1.000000477}, + {0.5125, 0.99999994, 1.000000477}, + {0.516667, 0.99999994, 1.000000477}, + {0.520833, 0.99999994, 1.000000477}, + {0.525, 0.99999994, 1.000000477}, + {0.529167, 0.99999994, 1.000000477}, + {0.533333, 0.99999994, 1.000000477}, + {0.5375, 0.99999994, 1.000000477}, + {0.541667, 0.99999994, 1.000000477}, + {0.545833, 0.99999994, 1.000000477}, + {0.55, 0.99999994, 1.000000477}, + {0.554167, 0.99999994, 1.000000477}, + {0.558333, 0.99999994, 1.000000477}, + {0.5625, 0.99999994, 1.000000477}, + {0.566667, 0.99999994, 1.000000477}, + {0.570833, 0.99999994, 1.000000477}, + {0.575, 0.99999994, 1.000000477}, + {0.579167, 0.99999994, 1.000000477}, + {0.583333, 0.99999994, 1.000000477}, + {0.5875, 0.99999994, 1.000000477}, + {0.591667, 0.99999994, 1.000000477}, + {0.595833, 0.99999994, 1.000000477}, + {0.6, 0.99999994, 1.000000477}, + {0.604167, 0.99999994, 1.000000477}, + {0.608333, 0.99999994, 1.000000477}, + {0.6125, 0.99999994, 1.000000477}, + {0.616667, 0.99999994, 1.000000477}, + {0.620833, 1, 1.000000477}, + {0.625, 1, 1.000000477}, + {0.629167, 1, 1.000000477}, + {0.633333, 1, 1.000000477}, + {0.6375, 1, 1.000000477}, + {0.641667, 1, 1.000000477}, + {0.645833, 1, 1.000000477}, + {0.65, 1, 1.000000477}, + {0.654167, 1, 1.000000477}, + {0.658333, 1, 1.000000477}, + {0.6625, 1, 1.000000477}, + {0.666667, 1, 1.000000477}, + {0.670833, 1, 1.000000477}, + {0.675, 1, 1.000000477}, + {0.679167, 1, 1.000000477}, + {0.683333, 1, 1.000000477}, + {0.6875, 1, 1.000000477}, + {0.691667, 1, 1.000000477}, + {0.695833, 1, 1.000000477}, + {0.7, 1, 1.000000477}, + {0.704167, 1, 1.000000477}, + {0.708333, 1, 1.000000477}, + {0.7125, 1, 1.000000477}, + {0.716667, 1, 1.000000477}, + {0.720833, 1, 1.000000477}, + {0.725, 1, 1.000000477}, + {0.729167, 1, 1.000000477}, + {0.733333, 1, 1.000000477}, + {0.7375, 1, 1.000000477}, + {0.741667, 1, 1.000000477}, + {0.745833, 1, 1.000000477}, + {0.75, 1, 1.000000477}, + {0.754167, 1, 1.000000477}, + {0.758333, 1, 1.000000477}, + {0.7625, 1, 1.000000477}, + {0.766667, 1, 1.000000477}, + {0.770833, 1, 1.000000477}, + {0.775, 1, 1.000000477}, + {0.779167, 1, 1.000000477}, + {0.783333, 1, 1.000000477}, + {0.7875, 1, 1.000000477}, + {0.791667, 1, 1.000000477}, + {0.795833, 1, 1.000000477}, + {0.8, 1, 1.000000477}, + {0.804167, 1, 1.000000477}, + {0.808333, 1, 1.000000477}, + {0.8125, 1, 1.000000477}, + {0.816667, 1, 1.000000477}, + {0.820833, 1, 1.000000477}, + {0.825, 1, 1.000000477}, + {0.829167, 1, 1.000000477}, + {0.833333, 1, 1.000000477}, + {0.8375, 1, 1.000000477}, + {0.841667, 1, 1.000000477}, + {0.845833, 1, 1.000000477}, + {0.85, 1, 1.000000477}, + {0.854167, 1, 1.000000477}, + {0.858333, 1, 1.000000477}, + {0.8625, 1, 1.000000477}, + {0.866667, 1, 1.000000477}, + {0.870833, 1, 1.000000477}, + {0.875, 1, 1.000000477}, + {0.879167, 1, 1.000000477}, + {0.883333, 1, 1.000000477}, + {0.8875, 1, 1.000000477}, + {0.891667, 1, 1.000000477}, + {0.895833, 1, 1.000000477}, + {0.9, 1, 1.000000477}, + {0.904167, 1, 1.000000477}, + {0.908333, 1, 1.000000477}, + {0.9125, 1, 1.000000477}, + {0.916667, 1, 1.000000477}, + {0.920833, 1, 1.000000477}, + {0.925, 1, 1.000000477}, + {0.929167, 1, 1.000000477}, + {0.933333, 1, 1.000000477}, + {0.9375, 1, 1.000000477}, + {0.941667, 1, 1.000000477}, + {0.945833, 1, 1.000000477}, + {0.95, 1, 1.000000477}, + {0.954167, 1, 1.000000477}, + {0.958333, 1, 1.000000477}, + {0.9625, 1, 1.000000477}, + {0.966667, 1, 1.000000477}, + {0.970833, 1, 1.000000477}, + {0.975, 1, 1.000000477}, + {0.979167, 1, 1.000000477}, + {0.983333, 1, 1.000000477}, + {0.9875, 1, 1.000000477}, + {0.991667, 1, 1.000000477}, + {0.995833, 1, 1.000000477}, + {1, 1, 1.000000477}, + {1.004167, 1.000682712, 0.015128844}, + {1.008333, 1.001363397, 0.014973078}, + {1.0125, 1.002042532, 0.014841928}, + {1.016667, 1.002720356, 0.014729479}, + {1.020833, 1.00339675, 0.014631276}, + {1.025, 1.004072189, 0.014543867}, + {1.029167, 1.004746675, 0.01446466}, + {1.033333, 1.00541997, 0.014391631}, + {1.0375, 1.006092548, 0.01432314}, + {1.041667, 1.006764412, 0.014257919}, + {1.045833, 1.007435203, 0.014194945}, + {1.05, 1.008105278, 0.014133334}, + {1.054167, 1.008774638, 0.014072391}, + {1.058333, 1.009443045, 0.014011139}, + {1.0625, 1.010110855, 0.01395021}, + {1.066667, 1.010777831, 0.013887996}, + {1.070833, 1.011443853, 0.013824509}, + {1.075, 1.01210916, 0.013759368}, + {1.079167, 1.012773633, 0.013692267}, + {1.083333, 1.013437271, 0.013622929}, + {1.0875, 1.014100075, 0.013551049}, + {1.091667, 1.014762163, 0.013476389}, + {1.095833, 1.015423179, 0.013398723}, + {1.1, 1.016083598, 0.013398723}, + {1.104167, 1.015262365, 0.88047874}, + {1.108333, 1.014493585, 0.89023459}, + {1.1125, 1.013762116, 0.898759723}, + {1.116667, 1.013056278, 0.906125188}, + {1.120833, 1.012367129, 0.912427425}, + {1.125, 1.01168704, 0.917777061}, + {1.129167, 1.011010766, 0.922281682}, + {1.133333, 1.010334253, 0.926045954}, + {1.1375, 1.009654403, 0.929170609}, + {1.141667, 1.008969307, 0.931745946}, + {1.145833, 1.008277893, 0.93385452}, + {1.15, 1.007579207, 0.935571969}, + {1.154167, 1.006873131, 0.936964393}, + {1.158333, 1.006160259, 0.938090801}, + {1.1625, 1.005440712, 0.939003944}, + {1.166667, 1.0047158, 0.9397493}, + {1.170833, 1.003986597, 0.940366805}, + {1.175, 1.003253937, 0.940891325}, + {1.179167, 1.002519608, 0.941352487}, + {1.183333, 1.001785278, 0.94177556}, + {1.1875, 1.001052022, 0.942182004}, + {1.191667, 1.000321627, 0.942589283}, + {1.195833, 0.999596179, 0.943011642}, + {1.2, 0.998876929, 0.943460345}, + {1.204167, 0.998165727, 0.943943799}, + {1.208333, 0.997464538, 0.944467604}, + {1.2125, 0.996774673, 0.945035696}, + {1.216667, 0.996098042, 0.945649385}, + {1.220833, 0.995436549, 0.946308196}, + {1.225, 0.994791448, 0.947010458}, + {1.229167, 0.994164526, 0.947752595}, + {1.233333, 0.993557453, 0.948529899}, + {1.2375, 0.99297154, 0.949337125}, + {1.241667, 0.992408335, 0.950167537}, + {1.245833, 0.99186933, 0.951014042}, + {1.25, 0.991355598, 0.951869369}, + {1.254167, 0.990868449, 0.952725708}, + {1.258333, 0.990409136, 0.953574955}, + {1.2625, 0.989978492, 0.954409778}, + {1.266667, 0.989577591, 0.955215633}, + {1.270833, 0.989207327, 0.956005096}, + {1.275, 0.988868177, 0.956751525}, + {1.279167, 0.988560915, 0.957458079}, + {1.283333, 0.988285899, 0.958120406}, + {1.2875, 0.988043547, 0.958723307}, + {1.291667, 0.987834036, 0.959283113}, + {1.295833, 0.987657607, 0.959768534}, + {1.3, 0.987514019, 0.960213661}, + {1.304167, 0.987403274, 0.96057564}, + {1.308333, 0.987325132, 0.96090132}, + {1.3125, 0.987279058, 0.961140752}, + {1.316667, 0.987264812, 0.961349428}, + {1.320833, 0.987281561, 0.961474001}, + {1.325, 0.987328827, 0.961574197}, + {1.329167, 0.987405658, 0.961597323}, + {1.333333, 0.987511337, 0.961602867}, + {1.3375, 0.987644792, 0.96154201}, + {1.341667, 0.987805247, 0.961470485}, + {1.345833, 0.987991393, 0.961345851}, + {1.35, 0.988202393, 0.961207449}, + {1.354167, 0.988437057, 0.961049318}, + {1.358333, 0.988694072, 0.960876703}, + {1.3625, 0.988972366, 0.960694611}, + {1.366667, 0.989270747, 0.960507751}, + {1.370833, 0.989587843, 0.96032083}, + {1.375, 0.989922643, 0.960137904}, + {1.379167, 0.990273893, 0.959962845}, + {1.383333, 0.990640223, 0.95979917}, + {1.3875, 0.991020679, 0.959649861}, + {1.391667, 0.991413951, 0.959517598}, + {1.395833, 0.991818845, 0.959404588}, + {1.4, 0.992234349, 0.959312677}, + {1.404167, 0.99265933, 0.959243178}, + {1.408333, 0.993092477, 0.959197223}, + {1.4125, 0.993533015, 0.959175408}, + {1.416667, 0.993979812, 0.95917803}, + {1.420833, 0.994431734, 0.959205091}, + {1.425, 0.994888008, 0.959256351}, + {1.429167, 0.995347559, 0.959331334}, + {1.433333, 0.995809376, 0.959429204}, + {1.4375, 0.996272743, 0.959549129}, + {1.441667, 0.996736646, 0.95968461}, + {1.445833, 0.997200072, 0.959850907}, + {1.45, 0.997662604, 0.960024655}, + {1.454167, 0.998123169, 0.960226417}, + {1.458333, 0.998580933, 0.960433066}, + {1.4625, 0.999035299, 0.960664332}, + {1.466667, 0.999485552, 0.96089834}, + {1.470833, 0.99993068, 0.961153209}, + {1.475, 1.000370383, 0.961408794}, + {1.479167, 1.000803709, 0.961681604}, + {1.483333, 1.001230001, 0.961953163}, + {1.4875, 1.001648784, 0.962238312}, + {1.491667, 1.00205946, 0.962520778}, + {1.495833, 1.002461076, 0.962813199}, + {1.5, 1.002853513, 0.963101745}, + {1.504167, 1.003236055, 0.963396966}, + {1.508333, 1.003607988, 0.96368736}, + {1.5125, 1.003968954, 0.963981271}, + {1.516667, 1.004318357, 0.964269757}, + {1.520833, 1.004655838, 0.964558721}, + {1.525, 1.004980803, 0.964841962}, + {1.529167, 1.005292892, 0.965122938}, + {1.533333, 1.005591631, 0.965397894}, + {1.5375, 1.00587666, 0.965667963}, + {1.541667, 1.006147623, 0.96593219}, + {1.545833, 1.006403923, 0.966188729}, + {1.55, 1.006645441, 0.966439664}, + {1.554167, 1.00687182, 0.966680348}, + {1.558333, 1.007082582, 0.966915607}, + {1.5625, 1.007277608, 0.967138052}, + {1.566667, 1.00745666, 0.967355549}, + {1.570833, 1.007619381, 0.96755743}, + {1.575, 1.007765532, 0.967754841}, + {1.579167, 1.007894993, 0.967934012}, + {1.583333, 1.008007526, 0.968109071}, + {1.5875, 1.008103132, 0.968263447}, + {1.591667, 1.008181453, 0.968414128}, + {1.595833, 1.008242607, 0.968541622}, + {1.6, 1.008286357, 0.968665838}, + {1.604167, 1.008312702, 0.968764782}, + {1.608333, 1.008321762, 0.968860805}, + {1.6125, 1.008313417, 0.968929827}, + {1.616667, 1.008287787, 0.968996286}, + {1.620833, 1.008244872, 0.969034612}, + {1.625, 1.00818491, 0.969070733}, + {1.629167, 1.00810802, 0.969078183}, + {1.633333, 1.008014202, 0.969083905}, + {1.6375, 1.007904053, 0.969061136}, + {1.641667, 1.007777452, 0.969037175}, + {1.645833, 1.007634878, 0.968985915}, + {1.65, 1.007476687, 0.96893394}, + {1.654167, 1.007303119, 0.968856812}, + {1.658333, 1.007114768, 0.968779624}, + {1.6625, 1.006911874, 0.968680382}, + {1.666667, 1.006694913, 0.968581617}, + {1.670833, 1.00646472, 0.968464911}, + {1.675, 1.006221414, 0.968349338}, + {1.679167, 1.005965829, 0.968220592}, + {1.683333, 1.005698442, 0.968093693}, + {1.6875, 1.005420089, 0.967959166}, + {1.691667, 1.005131125, 0.967827022}, + {1.695833, 1.004832625, 0.967693269}, + {1.7, 1.004525065, 0.967562377}, + {1.704167, 1.00420928, 0.967436075}, + {1.708333, 1.003885984, 0.967313051}, + {1.7125, 1.003556132, 0.967200637}, + {1.716667, 1.003220201, 0.967091799}, + {1.720833, 1.0028795, 0.966999233}, + {1.725, 1.00253439, 0.966910303}, + {1.729167, 1.00218606, 0.966842711}, + {1.733333, 1.001835227, 0.966778576}, + {1.7375, 1.001482844, 0.966739953}, + {1.741667, 1.001129627, 0.966711283}, + {1.745833, 1.000776529, 0.966690898}, + {1.75, 1.000424623, 0.966700375}, + {1.754167, 1.000074387, 0.96671176}, + {1.758333, 0.999727011, 0.966754198}, + {1.7625, 0.999383092, 0.966797709}, + {1.766667, 0.999043643, 0.966872096}, + {1.770833, 0.998709381, 0.966946483}, + {1.775, 0.998381138, 0.967050433}, + {1.779167, 0.99805963, 0.967153192}, + {1.783333, 0.997745872, 0.96728301}, + {1.7875, 0.997440159, 0.967410386}, + {1.791667, 0.997143567, 0.967561364}, + {1.795833, 0.99685663, 0.967714787}, + {1.8, 0.996579885, 0.967869997}, + {1.804167, 0.996314168, 0.968042195}, + {1.808333, 0.996059835, 0.968208969}, + {1.8125, 0.995817542, 0.968387842}, + {1.816667, 0.995587707, 0.968560398}, + {1.820833, 0.995370924, 0.968739927}, + {1.825, 0.995167375, 0.968912601}, + {1.829167, 0.994977593, 0.969087243}, + {1.833333, 0.994801879, 0.969254494}, + {1.8375, 0.99464041, 0.96941936}, + {1.841667, 0.994493544, 0.969576657}, + {1.845833, 0.994361401, 0.969727576}, + {1.85, 0.994244099, 0.969871104}, + {1.854167, 0.994141817, 0.970005214}, + {1.858333, 0.994054556, 0.970132172}, + {1.8625, 0.993982315, 0.970247447}, + {1.866667, 0.993925095, 0.970356286}, + {1.870833, 0.993882775, 0.97045207}, + {1.875, 0.993855238, 0.970542192}, + {1.879167, 0.993842363, 0.970618844}, + {1.883333, 0.993843973, 0.970690787}, + {1.8875, 0.993859708, 0.970749676}, + {1.891667, 0.993889451, 0.97080493}, + {1.895833, 0.993932843, 0.970848203}, + {1.9, 0.993989527, 0.970888972}, + {1.904167, 0.994059205, 0.97091943}, + {1.908333, 0.994141459, 0.970948577}, + {1.9125, 0.994235873, 0.970969498}, + {1.916667, 0.994342029, 0.970990121}, + {1.920833, 0.99445945, 0.971004903}, + {1.925, 0.994587719, 0.971020401}, + {1.929167, 0.9947263, 0.971032619}, + {1.933333, 0.994874775, 0.971046269}, + {1.9375, 0.995032549, 0.971059203}, + {1.941667, 0.995199144, 0.971074224}, + {1.945833, 0.995373964, 0.971090853}, + {1.95, 0.995556593, 0.971110106}, + {1.954167, 0.995746374, 0.971133053}, + {1.958333, 0.995942831, 0.971158922}, + {1.9625, 0.996145368, 0.971190274}, + {1.966667, 0.996353567, 0.971224725}, + {1.970833, 0.996566653, 0.97126615}, + {1.975, 0.996784389, 0.971310556}, + {1.979167, 0.997005939, 0.971363068}, + {1.983333, 0.997230887, 0.971418381}, + {1.9875, 0.997458696, 0.971482456}, + {1.991667, 0.997688949, 0.971549094}, + {1.995833, 0.997920871, 0.971624851}, + {2, 0.998154223, 0.971702695}, + {2.004167, 0.99838829, 0.971789718}, + {2.008333, 0.998622656, 0.971878409}, + {2.0125, 0.998856843, 0.971975863}, + {2.016667, 0.999090433, 0.972074568}, + {2.020833, 0.999322772, 0.972181499}, + {2.025, 0.999553561, 0.972289145}, + {2.029167, 0.999782324, 0.972404182}, + {2.033333, 1.000008583, 0.972519457}, + {2.0375, 1.000231862, 0.97264123}, + {2.041667, 1.000451922, 0.972762704}, + {2.045833, 1.000668168, 0.972889543}, + {2.05, 1.000880361, 0.973015666}, + {2.054167, 1.001088023, 0.973146021}, + {2.058333, 1.001290798, 0.973275185}, + {2.0625, 1.001488328, 0.973407388}, + {2.066667, 1.001680374, 0.973538041}, + {2.070833, 1.00186646, 0.973670363}, + {2.075, 1.002046466, 0.973800957}, + {2.079167, 1.002219915, 0.973931909}, + {2.083333, 1.002386689, 0.974060893}, + {2.0875, 1.00254631, 0.974188983}, + {2.091667, 1.002698779, 0.974314928}, + {2.095833, 1.002843618, 0.974438667}, + {2.1, 1.002980828, 0.974560261}, + {2.104167, 1.003109932, 0.974678457}, + {2.108333, 1.003231049, 0.974794388}, + {2.1125, 1.003343701, 0.974905789}, + {2.116667, 1.003448009, 0.975015044}, + {2.120833, 1.003543615, 0.975118697}, + {2.125, 1.003630638, 0.975220263}, + {2.129167, 1.00370872, 0.975315332}, + {2.133333, 1.003777862, 0.975408375}, + {2.1375, 1.003837943, 0.975494087}, + {2.141667, 1.003889084, 0.97557801}, + {2.145833, 1.003931046, 0.975653946}, + {2.15, 1.003963828, 0.975728214}, + {2.154167, 1.003987551, 0.975794077}, + {2.158333, 1.004002213, 0.97585845}, + {2.1625, 1.004007816, 0.975914061}, + {2.166667, 1.00400424, 0.97596848}, + {2.170833, 1.003991842, 0.976014078}, + {2.175, 1.003970623, 0.976058662}, + {2.179167, 1.003940463, 0.976094544}, + {2.183333, 1.003901839, 0.976129651}, + {2.1875, 1.003854632, 0.976156354}, + {2.191667, 1.003799081, 0.97618264}, + {2.195833, 1.003735423, 0.976201057}, + {2.2, 1.003663778, 0.976219237}, + {2.204167, 1.003584385, 0.976230323}, + {2.208333, 1.003497481, 0.97624141}, + {2.2125, 1.003403306, 0.976246357}, + {2.216667, 1.003302097, 0.976251602}, + {2.220833, 1.003194094, 0.976251721}, + {2.225, 1.003079653, 0.976252377}, + {2.229167, 1.002959013, 0.976249218}, + {2.233333, 1.002832532, 0.976246715}, + {2.2375, 1.002700567, 0.976241708}, + {2.241667, 1.002563357, 0.976237595}, + {2.245833, 1.002421498, 0.97623235}, + {2.25, 1.00227499, 0.976228058}, + {2.254167, 1.002124429, 0.976224005}, + {2.258333, 1.001970172, 0.976221025}, + {2.2625, 1.001812577, 0.976219654}, + {2.266667, 1.001652002, 0.976219356}, + {2.270833, 1.001489043, 0.976221859}, + {2.275, 1.001323819, 0.976225436}, + {2.279167, 1.001156807, 0.976232946}, + {2.283333, 1.000988603, 0.976241529}, + {2.2875, 1.000819445, 0.97625488}, + {2.291667, 1.000649691, 0.976269126}, + {2.295833, 1.000480056, 0.976288915}, + {2.3, 1.00031054, 0.976309478}, + {2.304167, 1.00014174, 0.976336062}, + {2.308333, 0.999974132, 0.976363182}, + {2.3125, 0.999808013, 0.97639662}, + {2.316667, 0.999643743, 0.976430357}, + {2.320833, 0.999481857, 0.976470292}, + {2.325, 0.999322474, 0.976510406}, + {2.329167, 0.999166131, 0.97655654}, + {2.333333, 0.999013186, 0.976602495}, + {2.3375, 0.998863876, 0.976654112}, + {2.341667, 0.998718619, 0.976705313}, + {2.345833, 0.998577714, 0.97676152}, + {2.35, 0.998441339, 0.976817131}, + {2.354167, 0.99830997, 0.976876974}, + {2.358333, 0.998183727, 0.976935983}, + {2.3625, 0.998062968, 0.976998508}, + {2.366667, 0.997947812, 0.97706002}, + {2.370833, 0.997838557, 0.977124095}, + {2.375, 0.997735381, 0.977187037}, + {2.379167, 0.997638524, 0.977251768}, + {2.383333, 0.997548044, 0.977315128}, + {2.3875, 0.99746418, 0.97737956}, + {2.391667, 0.997386992, 0.977442563}, + {2.395833, 0.997316659, 0.977505863}, + {2.4, 0.99725318, 0.977567792}, + {2.404167, 0.997196674, 0.977629304}, + {2.408333, 0.997147202, 0.977689505}, + {2.4125, 0.997104764, 0.977748811}, + {2.416667, 0.997069418, 0.977806926}, + {2.420833, 0.997041106, 0.977863729}, + {2.425, 0.997019887, 0.977919519}, + {2.429167, 0.997005641, 0.977973759}, + {2.433333, 0.99699831, 0.978027105}, + {2.4375, 0.996997893, 0.978078902}, + {2.441667, 0.997004211, 0.978129923}, + {2.445833, 0.997017264, 0.978179455}, + {2.45, 0.997036815, 0.97822845}, + {2.454167, 0.997062802, 0.978276134}, + {2.458333, 0.997095108, 0.97832346}, + {2.4625, 0.997133493, 0.978369713}, + {2.466667, 0.997177839, 0.978415847}, + {2.470833, 0.997227907, 0.978461266}, + {2.475, 0.997283578, 0.978506744}, + {2.479167, 0.997344553, 0.978551865}, + {2.483333, 0.997410715, 0.978597224}, + {2.4875, 0.997481763, 0.978642642}, + {2.491667, 0.99755758, 0.978688478}, + {2.495833, 0.997637749, 0.978734732}, + {2.5, 0.997722149, 0.978781521}, + {2.504167, 0.997810483, 0.978829205}, + {2.508333, 0.997902572, 0.978877366}, + {2.5125, 0.997998059, 0.978926837}, + {2.516667, 0.998096764, 0.978976846}, + {2.520833, 0.99819833, 0.979028463}, + {2.525, 0.998302639, 0.979080617}, + {2.529167, 0.998409212, 0.97913456}, + {2.533333, 0.998517931, 0.979189098}, + {2.5375, 0.998628497, 0.979245543}, + {2.541667, 0.998740673, 0.979302526}, + {2.545833, 0.998854041, 0.979361534}, + {2.55, 0.998968482, 0.97942096}, + {2.554167, 0.999083698, 0.979482412}, + {2.558333, 0.99919939, 0.979544222}, + {2.5625, 0.999315321, 0.97960794}, + {2.566667, 0.999431312, 0.979671896}, + {2.570833, 0.999546885, 0.979737639}, + {2.575, 0.999662042, 0.979803562}, + {2.579167, 0.999776363, 0.979871035}, + {2.583333, 0.999889672, 0.979938447}, + {2.5875, 1.000001788, 0.980007231}, + {2.591667, 1.000112414, 0.980075896}, + {2.595833, 1.000221252, 0.980145454}, + {2.6, 1.000328302, 0.980214894}, + {2.604167, 1.000433087, 0.98028487}, + {2.608333, 1.000535607, 0.980354488}, + {2.6125, 1.000635624, 0.980424404}, + {2.616667, 1.000732899, 0.980493844}, + {2.620833, 1.000827312, 0.980563104}, + {2.625, 1.000918627, 0.980631888}, + {2.629167, 1.001006722, 0.980700076}, + {2.633333, 1.001091361, 0.980767667}, + {2.6375, 1.001172543, 0.980834305}, + {2.641667, 1.001250029, 0.980900288}, + {2.645833, 1.001323581, 0.980964839}, + {2.65, 1.001393318, 0.981028795}, + {2.654167, 1.001459002, 0.981091022}, + {2.658333, 1.001520634, 0.981152534}, + {2.6625, 1.001577854, 0.98121196}, + {2.666667, 1.001630902, 0.98127073}, + {2.670833, 1.00167942, 0.981327116}, + {2.675, 1.001723647, 0.981382847}, + {2.679167, 1.001763225, 0.981435895}, + {2.683333, 1.001798391, 0.981488407}, + {2.6875, 1.001828909, 0.981538057}, + {2.691667, 1.001854777, 0.981587112}, + {2.695833, 1.001875997, 0.981633246}, + {2.7, 1.001892686, 0.981678843}, + {2.704167, 1.001904726, 0.981721342}, + {2.708333, 1.001912117, 0.981763482}, + {2.7125, 1.001914978, 0.981802464}, + {2.716667, 1.001913309, 0.981841147}, + {2.720833, 1.00190711, 0.981876731}, + {2.725, 1.001896501, 0.981912136}, + {2.729167, 1.00188148, 0.981944501}, + {2.733333, 1.001862168, 0.981976748}, + {2.7375, 1.001838684, 0.982006192}, + {2.741667, 1.001811028, 0.982035518}, + {2.745833, 1.001779318, 0.98206234}, + {2.75, 1.001743793, 0.982089102}, + {2.754167, 1.001704335, 0.98211354}, + {2.758333, 1.001661181, 0.982138097}, + {2.7625, 1.001614571, 0.982160687}, + {2.766667, 1.001564503, 0.982183337}, + {2.770833, 1.001511216, 0.982204437}, + {2.775, 1.001454711, 0.982225657}, + {2.779167, 1.001395345, 0.982245624}, + {2.783333, 1.001333117, 0.98226589}, + {2.7875, 1.001268268, 0.982285261}, + {2.791667, 1.001200914, 0.982304871}, + {2.795833, 1.001131415, 0.982324004}, + {2.8, 1.001059771, 0.982343495}, + {2.804167, 1.000986099, 0.982362807}, + {2.808333, 1.000910878, 0.982382476}, + {2.8125, 1.000833988, 0.982402384}, + {2.816667, 1.000755906, 0.98242265}, + {2.820833, 1.000676632, 0.982443452}, + {2.825, 1.000596285, 0.982464552}, + {2.829167, 1.000515342, 0.982486546}, + {2.833333, 1.000433803, 0.982508838}, + {2.8375, 1.000351906, 0.982532263}, + {2.841667, 1.000269771, 0.982555926}, + {2.845833, 1.000187874, 0.9825809}, + {2.85, 1.000106096, 0.982606173}, + {2.854167, 1.000024676, 0.982632816}, + {2.858333, 0.999943972, 0.982659698}, + {2.8625, 0.999864042, 0.982688129}, + {2.866667, 0.999785066, 0.98271668}, + {2.870833, 0.999707282, 0.98274678}, + {2.875, 0.999630749, 0.982777059}, + {2.879167, 0.999555767, 0.982808828}, + {2.883333, 0.999482453, 0.982840717}, + {2.8875, 0.999410987, 0.982874095}, + {2.891667, 0.999341428, 0.982907474}, + {2.895833, 0.999274015, 0.982942283}, + {2.9, 0.999208868, 0.982977033}, + {2.904167, 0.999146104, 0.983013093}, + {2.908333, 0.999085844, 0.983049035}, + {2.9125, 0.999028206, 0.983086228}, + {2.916667, 0.99897325, 0.983123243}, + {2.920833, 0.998921216, 0.98316133}, + {2.925, 0.998872042, 0.983199179}, + {2.929167, 0.998825967, 0.983237982}, + {2.933333, 0.998782873, 0.983276546}, + {2.9375, 0.998742998, 0.983315885}, + {2.941667, 0.998706341, 0.983354986}, + {2.945833, 0.998672962, 0.983394682}, + {2.95, 0.998642862, 0.9834342}, + {2.954167, 0.998616099, 0.983474135}, + {2.958333, 0.998592734, 0.983513892}, + {2.9625, 0.998572767, 0.983554006}, + {2.966667, 0.998556137, 0.983593881}, + {2.970833, 0.998542905, 0.983634114}, + {2.975, 0.99853307, 0.983674109}, + {2.979167, 0.998526633, 0.983714342}, + {2.983333, 0.998523533, 0.983754396}, + {2.9875, 0.998523712, 0.98379463}, + {2.991667, 0.998527169, 0.983834684}, + {2.995833, 0.998533845, 0.983874977}, + {3, 0.998543739, 0.983915091}, + {3.004167, 0.998556674, 0.983955443}, + {3.008333, 0.998572707, 0.983995676}, + {3.0125, 0.998591661, 0.984036088}, + {3.016667, 0.998613536, 0.98407644}, + {3.020833, 0.998638153, 0.984117031}, + {3.025, 0.998665512, 0.984157622}, + {3.029167, 0.998695493, 0.984198391}, + {3.033333, 0.998727977, 0.984239221}, + {3.0375, 0.998762906, 0.984280348}, + {3.041667, 0.998800099, 0.984321475}, + {3.045833, 0.998839438, 0.9843629}, + {3.05, 0.998880863, 0.984404445}, + {3.054167, 0.998924255, 0.984446287}, + {3.058333, 0.998969436, 0.984488249}, + {3.0625, 0.999016345, 0.984530509}, + {3.066667, 0.999064803, 0.984572887}, + {3.070833, 0.999114692, 0.984615624}, + {3.075, 0.999165893, 0.98465848}, + {3.079167, 0.999218225, 0.984701633}, + {3.083333, 0.999271631, 0.984744906}, + {3.0875, 0.999325931, 0.984788537}, + {3.091667, 0.999381006, 0.984832227}, + {3.095833, 0.999436736, 0.984876215}, + {3.1, 0.999492943, 0.984920263}, + {3.104167, 0.999549508, 0.984964609}, + {3.108333, 0.999606311, 0.985008955}, + {3.1125, 0.999663234, 0.98505348}, + {3.116667, 0.999720097, 0.985098004}, + {3.120833, 0.99977684, 0.985142648}, + {3.125, 0.999833286, 0.985187292}, + {3.129167, 0.999889314, 0.985231936}, + {3.133333, 0.999944806, 0.98527652}, + {3.1375, 0.999999642, 0.985321045}, + {3.141667, 1.000053763, 0.98536545}, + {3.145833, 1.000106931, 0.985409677}, + {3.15, 1.000159144, 0.985453784}, + {3.154167, 1.000210285, 0.985497534}, + {3.158333, 1.000260115, 0.985541224}, + {3.1625, 1.000308752, 0.985584378}, + {3.166667, 1.000355959, 0.985627472}, + {3.170833, 1.000401735, 0.985669911}, + {3.175, 1.000445843, 0.98571223}, + {3.179167, 1.0004884, 0.985753834}, + {3.183333, 1.00052917, 0.985795259}, + {3.1875, 1.000568032, 0.98583585}, + {3.191667, 1.000605226, 0.985876262}, + {3.195833, 1.000640273, 0.98591572}, + {3.2, 1.000673413, 0.985955}, + {3.204167, 1.000704527, 0.985993266}, + {3.208333, 1.000733614, 0.986031294}, + {3.2125, 1.000760436, 0.986068249}, + {3.216667, 1.000785112, 0.986105025}, + {3.220833, 1.000807524, 0.986140609}, + {3.225, 1.000827789, 0.986176014}, + {3.229167, 1.00084579, 0.986210167}, + {3.233333, 1.000861406, 0.986244142}, + {3.2375, 1.000874758, 0.986276925}, + {3.241667, 1.000885844, 0.986309528}, + {3.245833, 1.000894666, 0.986340821}, + {3.25, 1.000901222, 0.986372054}, + {3.254167, 1.000905395, 0.986401975}, + {3.258333, 1.000907302, 0.986431777}, + {3.2625, 1.000906944, 0.986460388}, + {3.266667, 1.000904441, 0.986488879}, + {3.270833, 1.000899673, 0.986516178}, + {3.275, 1.000892639, 0.986543477}, + {3.279167, 1.000883579, 0.986569583}, + {3.283333, 1.000872493, 0.98659569}, + {3.2875, 1.000859261, 0.986620784}, + {3.291667, 1.000844121, 0.986645818}, + {3.295833, 1.000826955, 0.986669898}, + {3.3, 1.000807881, 0.986694038}, + {3.304167, 1.000787139, 0.986717284}, + {3.308333, 1.000764608, 0.986740589}, + {3.3125, 1.00074029, 0.986763179}, + {3.316667, 1.000714421, 0.986785829}, + {3.320833, 1.000687122, 0.986807883}, + {3.325, 1.000658274, 0.986829996}, + {3.329167, 1.000628114, 0.986851633}, + {3.333333, 1.000596523, 0.986873388}, + {3.3375, 1.00056386, 0.986894786}, + {3.341667, 1.000530124, 0.986916244}, + {3.345833, 1.000495315, 0.986937523}, + {3.35, 1.000459552, 0.986958921}, + {3.354167, 1.000423074, 0.986980259}, + {3.358333, 1.000385761, 0.987001657}, + {3.3625, 1.000347853, 0.987023056}, + {3.366667, 1.000309348, 0.987044632}, + {3.370833, 1.000270367, 0.987066269}, + {3.375, 1.000231028, 0.987088084}, + {3.379167, 1.000191569, 0.987110138}, + {3.383333, 1.000151753, 0.987132251}, + {3.3875, 1.000112057, 0.987154663}, + {3.391667, 1.000072241, 0.987177193}, + {3.395833, 1.000032663, 0.987200141}, + {3.4, 0.999993145, 0.987223148}, + {3.404167, 0.999954045, 0.987246573}, + {3.408333, 0.999915302, 0.987270117}, + {3.4125, 0.999877036, 0.987294137}, + {3.416667, 0.999839365, 0.987318218}, + {3.420833, 0.999802351, 0.987342775}, + {3.425, 0.999765992, 0.987367451}, + {3.429167, 0.999730527, 0.987392604}, + {3.433333, 0.999695897, 0.987417817}, + {3.4375, 0.99966222, 0.987443566}, + {3.441667, 0.999629617, 0.987469375}, + {3.445833, 0.999598086, 0.98749572}, + {3.45, 0.999567688, 0.987522006}, + {3.454167, 0.999538481, 0.987548888}, + {3.458333, 0.999510586, 0.98757571}, + {3.4625, 0.999484062, 0.987603068}, + {3.466667, 0.999458849, 0.987630427}, + {3.470833, 0.999435067, 0.987658262}, + {3.475, 0.999412715, 0.987686098}, + {3.479167, 0.999391854, 0.98771435}, + {3.483333, 0.999372542, 0.987742543}, + {3.4875, 0.999354839, 0.987771213}, + {3.491667, 0.999338627, 0.987799883}, + {3.495833, 0.999324083, 0.987828851}, + {3.5, 0.999311149, 0.987857878}, + {3.504167, 0.999299824, 0.987887204}, + {3.508333, 0.999290168, 0.987916529}, + {3.5125, 0.999282122, 0.987946153}, + {3.516667, 0.999275744, 0.987975776}, + {3.520833, 0.999270976, 0.988005638}, + {3.525, 0.999267876, 0.9880355}, + {3.529167, 0.999266386, 0.98806566}, + {3.533333, 0.999266505, 0.98809576}, + {3.5375, 0.999268234, 0.988126099}, + {3.541667, 0.999271512, 0.988156438}, + {3.545833, 0.99927634, 0.988187015}, + {3.55, 0.999282718, 0.988217533}, + {3.554167, 0.999290526, 0.988248229}, + {3.558333, 0.999299765, 0.988278985}, + {3.5625, 0.999310493, 0.98830986}, + {3.566667, 0.999322534, 0.988340735}, + {3.570833, 0.999335885, 0.988371789}, + {3.575, 0.999350548, 0.988402784}, + {3.579167, 0.999366403, 0.988433957}, + {3.583333, 0.99938345, 0.98846513}, + {3.5875, 0.999401629, 0.988496423}, + {3.591667, 0.999420881, 0.988527715}, + {3.595833, 0.999441147, 0.988559127}, + {3.6, 0.999462366, 0.988590479}, + {3.604167, 0.999484479, 0.98862195}, + {3.608333, 0.999507427, 0.988653421}, + {3.6125, 0.99953115, 0.988684893}, + {3.616667, 0.999555588, 0.988716424}, + {3.620833, 0.999580622, 0.988747954}, + {3.625, 0.999606252, 0.988779485}, + {3.629167, 0.999632418, 0.988810956}, + {3.633333, 0.999659002, 0.988842487}, + {3.6375, 0.999685943, 0.988873959}, + {3.641667, 0.999713242, 0.98890543}, + {3.645833, 0.99974072, 0.988936782}, + {3.65, 0.999768436, 0.988968134}, + {3.654167, 0.999796212, 0.988999367}, + {3.658333, 0.999824107, 0.9890306}, + {3.6625, 0.999851942, 0.989061654}, + {3.666667, 0.999879658, 0.989092648}, + {3.670833, 0.999907255, 0.989123464}, + {3.675, 0.999934673, 0.989154279}, + {3.679167, 0.999961793, 0.989184797}, + {3.683333, 0.999988556, 0.989215255}, + {3.6875, 1.00001502, 0.989245474}, + {3.691667, 1.000041008, 0.989275634}, + {3.695833, 1.0000664, 0.989305437}, + {3.7, 1.000091314, 0.989335179}, + {3.704167, 1.000115633, 0.989364564}, + {3.708333, 1.000139356, 0.98939383}, + {3.7125, 1.000162244, 0.989422739}, + {3.716667, 1.000184536, 0.989451587}, + {3.720833, 1.000205874, 0.989479899}, + {3.725, 1.000226498, 0.989508212}, + {3.729167, 1.000246286, 0.989535987}, + {3.733333, 1.000265121, 0.989563704}, + {3.7375, 1.000283003, 0.989590943}, + {3.741667, 1.000299931, 0.989618063}, + {3.745833, 1.000315905, 0.989644587}, + {3.75, 1.000330806, 0.989671111}, + {3.754167, 1.000344634, 0.989697039}, + {3.758333, 1.000357509, 0.989722848}, + {3.7625, 1.000369191, 0.98974812}, + {3.766667, 1.000379801, 0.989773333}, + {3.770833, 1.000389338, 0.98979789}, + {3.775, 1.000397801, 0.989822447}, + {3.779167, 1.000405073, 0.989846408}, + {3.783333, 1.000411153, 0.98987025}, + {3.7875, 1.00041616, 0.989893556}, + {3.791667, 1.000419974, 0.989916801}, + {3.795833, 1.000422716, 0.989939451}, + {3.8, 1.000424385, 0.989962041}, + {3.804167, 1.000424862, 0.989984095}, + {3.808333, 1.000424266, 0.990006089}, + {3.8125, 1.000422597, 0.990027547}, + {3.816667, 1.000419736, 0.990049005}, + {3.820833, 1.000415921, 0.990069926}, + {3.825, 1.000411034, 0.990090847}, + {3.829167, 1.000405192, 0.990111291}, + {3.833333, 1.000398278, 0.990131736}, + {3.8375, 1.00039053, 0.990151703}, + {3.841667, 1.000381708, 0.990171731}, + {3.845833, 1.000372052, 0.99019134}, + {3.85, 1.000361443, 0.99021095}, + {3.854167, 1.000350118, 0.990230203}, + {3.858333, 1.000337839, 0.990249455}, + {3.8625, 1.000324965, 0.990268469}, + {3.866667, 1.000311255, 0.990287483}, + {3.870833, 1.000296831, 0.990306258}, + {3.875, 1.000281811, 0.990325034}, + {3.879167, 1.000266194, 0.99034363}, + {3.883333, 1.000249982, 0.990362227}, + {3.8875, 1.000233293, 0.990380764}, + {3.891667, 1.000216126, 0.990399241}, + {3.895833, 1.000198603, 0.990417659}, + {3.9, 1.000180602, 0.990436137}, + {3.904167, 1.000162244, 0.990454555}, + {3.908333, 1.000143766, 0.990473032}, + {3.9125, 1.000124931, 0.990491509}, + {3.916667, 1.000105858, 0.990509987}, + {3.920833, 1.000086665, 0.990528524}, + {3.925, 1.000067472, 0.990547061}, + {3.929167, 1.000048161, 0.990565717}, + {3.933333, 1.000028849, 0.990584433}, + {3.9375, 1.000009537, 0.990603209}, + {3.941667, 0.999990344, 0.990622103}, + {3.945833, 0.999971271, 0.990641057}, + {3.95, 0.999952376, 0.990660071}, + {3.954167, 0.99993372, 0.990679264}, + {3.958333, 0.999915302, 0.990698457}, + {3.9625, 0.999897242, 0.990717828}, + {3.966667, 0.999879479, 0.990737259}, + {3.970833, 0.999862075, 0.990756929}, + {3.975, 0.999845088, 0.990776539}, + {3.979167, 0.999828577, 0.990796447}, + {3.983333, 0.999812543, 0.990816295}, + {3.9875, 0.999797046, 0.990836442}, + {3.991667, 0.999782085, 0.990856528}, + {3.995833, 0.999767721, 0.990876913}, + {4, 0.999753952, 0.990897238}, + {4.004167, 0.999740779, 0.990917861}, + {4.008333, 0.999728322, 0.990938425}, + {4.0125, 0.99971652, 0.990959287}, + {4.016667, 0.999705434, 0.990980089}, + {4.020833, 0.999695063, 0.991001189}, + {4.025, 0.999685407, 0.991022229}, + {4.029167, 0.999676526, 0.991043508}, + {4.033333, 0.999668419, 0.991064787}, + {4.0375, 0.999661088, 0.991086245}, + {4.041667, 0.999654531, 0.991107702}, + {4.045833, 0.99964875, 0.991129398}, + {4.05, 0.999643803, 0.991151035}, + {4.054167, 0.99963963, 0.99117291}, + {4.058333, 0.999636233, 0.991194725}, + {4.0625, 0.99963367, 0.991216719}, + {4.066667, 0.999631941, 0.991238713}, + {4.070833, 0.999630928, 0.991260886}, + {4.075, 0.999630749, 0.991283059}, + {4.079167, 0.999631345, 0.991305292}, + {4.083333, 0.999632716, 0.991327584}, + {4.0875, 0.999634802, 0.991349995}, + {4.091667, 0.999637663, 0.991372347}, + {4.095833, 0.999641299, 0.991394877}, + {4.1, 0.999645591, 0.991417348}, + {4.104167, 0.999650598, 0.991439939}, + {4.108333, 0.99965626, 0.991462469}, + {4.1125, 0.999662578, 0.991485119}, + {4.116667, 0.999669552, 0.991507709}, + {4.120833, 0.999677122, 0.991530359}, + {4.125, 0.999685287, 0.991553009}, + {4.129167, 0.99969399, 0.991575718}, + {4.133333, 0.999703228, 0.991598368}, + {4.1375, 0.999713004, 0.991621077}, + {4.141667, 0.999723196, 0.991643786}, + {4.145833, 0.999733865, 0.991666436}, + {4.15, 0.999745011, 0.991689086}, + {4.154167, 0.999756455, 0.991711676}, + {4.158333, 0.999768317, 0.991734326}, + {4.1625, 0.999780476, 0.991756856}, + {4.166667, 0.999792933, 0.991779447}, + {4.170833, 0.999805629, 0.991801858}, + {4.175, 0.999818563, 0.991824329}, + {4.179167, 0.999831676, 0.991846681}, + {4.183333, 0.999844968, 0.991869032}, + {4.1875, 0.999858439, 0.991891265}, + {4.191667, 0.999871969, 0.991913497}, + {4.195833, 0.999885499, 0.991935551}, + {4.2, 0.999899149, 0.991957605}, + {4.204167, 0.999912739, 0.99197948}, + {4.208333, 0.999926329, 0.992001355}, + {4.2125, 0.999939859, 0.992023051}, + {4.216667, 0.99995327, 0.992044747}, + {4.220833, 0.999966562, 0.992066205}, + {4.225, 0.999979734, 0.992087603}, + {4.229167, 0.999992669, 0.992108822}, + {4.233333, 1.000005484, 0.992130041}, + {4.2375, 1.000018001, 0.992150962}, + {4.241667, 1.00003016, 0.992171884}, + {4.245833, 1.0000422, 0.992192566}, + {4.25, 1.000053763, 0.99221319}, + {4.254167, 1.000065088, 0.992233574}, + {4.258333, 1.000076056, 0.9922539}, + {4.2625, 1.000086665, 0.992273927}, + {4.266667, 1.000096798, 0.992293954}, + {4.270833, 1.000106454, 0.992313683}, + {4.275, 1.000115752, 0.992333353}, + {4.279167, 1.000124574, 0.992352784}, + {4.283333, 1.000133038, 0.992372096}, + {4.2875, 1.000140905, 0.992391169}, + {4.291667, 1.000148177, 0.992410183}, + {4.295833, 1.000155091, 0.992428839}, + {4.3, 1.000161409, 0.992447555}, + {4.304167, 1.000167251, 0.992465854}, + {4.308333, 1.000172496, 0.992484212}, + {4.3125, 1.000177264, 0.992502213}, + {4.316667, 1.000181437, 0.992520213}, + {4.320833, 1.000185013, 0.992537856}, + {4.325, 1.000188112, 0.992555499}, + {4.329167, 1.000190616, 0.992572844}, + {4.333333, 1.000192642, 0.992590189}, + {4.3375, 1.000193954, 0.992607176}, + {4.341667, 1.000194788, 0.992624164}, + {4.345833, 1.000195146, 0.992640913}, + {4.35, 1.000194907, 0.992657602}, + {4.354167, 1.000194073, 0.992673993}, + {4.358333, 1.000192881, 0.992690444}, + {4.3625, 1.000190973, 0.992706597}, + {4.366667, 1.000188708, 0.99272275}, + {4.370833, 1.000185847, 0.992738664}, + {4.375, 1.000182509, 0.992754579}, + {4.379167, 1.000178695, 0.992770255}, + {4.383333, 1.000174522, 0.992785931}, + {4.3875, 1.000169754, 0.992801368}, + {4.391667, 1.000164747, 0.992816865}, + {4.395833, 1.000159144, 0.992832184}, + {4.4, 1.000153303, 0.992847502}, + {4.404167, 1.000146985, 0.992862642}, + {4.408333, 1.000140309, 0.992877781}, + {4.4125, 1.000133276, 0.992892802}, + {4.416667, 1.000126004, 0.992907822}, + {4.420833, 1.000118494, 0.992922723}, + {4.425, 1.000110626, 0.992937624}, + {4.429167, 1.00010252, 0.992952466}, + {4.433333, 1.000094175, 0.992967308}, + {4.4375, 1.000085592, 0.99298209}, + {4.441667, 1.00007689, 0.992996871}, + {4.445833, 1.000067949, 0.993011653}, + {4.45, 1.000058889, 0.993026376}, + {4.454167, 1.00004971, 0.993041158}, + {4.458333, 1.000040531, 0.99305588}, + {4.4625, 1.000031233, 0.993070602}, + {4.466667, 1.000021815, 0.993085384}, + {4.470833, 1.000012517, 0.993100107}, + {4.475, 1.000003099, 0.993114889}, + {4.479167, 0.999993742, 0.99312973}, + {4.483333, 0.999984443, 0.993144512}, + {4.4875, 0.999975204, 0.993159413}, + {4.491667, 0.999966025, 0.993174255}, + {4.495833, 0.999956965, 0.993189216}, + {4.5, 0.999948025, 0.993204176}, + {4.504167, 0.999939263, 0.993219137}, + {4.508333, 0.99993062, 0.993234158}, + {4.5125, 0.999922216, 0.993249297}, + {4.516667, 0.999913991, 0.993264377}, + {4.520833, 0.999906003, 0.993279576}, + {4.525, 0.999898255, 0.993294775}, + {4.529167, 0.999890745, 0.993310034}, + {4.533333, 0.999883533, 0.993325353}, + {4.5375, 0.999876559, 0.993340731}, + {4.541667, 0.999869883, 0.993356109}, + {4.545833, 0.999863565, 0.993371606}, + {4.55, 0.999857545, 0.993387103}, + {4.554167, 0.999851882, 0.993402719}, + {4.558333, 0.999846518, 0.993418276}, + {4.5625, 0.999841511, 0.993434012}, + {4.566667, 0.999836922, 0.993449688}, + {4.570833, 0.99983263, 0.993465483}, + {4.575, 0.999828756, 0.993481219}, + {4.579167, 0.999825239, 0.993497133}, + {4.583333, 0.99982208, 0.993512988}, + {4.5875, 0.999819338, 0.993528962}, + {4.591667, 0.999817014, 0.993544877}, + {4.595833, 0.999815047, 0.99356091}, + {4.6, 0.999813497, 0.993576944}, + {4.604167, 0.999812305, 0.993593037}, + {4.608333, 0.99981153, 0.99360913}, + {4.6125, 0.999811113, 0.993625283}, + {4.616667, 0.999811053, 0.993641496}, + {4.620833, 0.999811411, 0.993657649}, + {4.625, 0.999812186, 0.993673861}, + {4.629167, 0.999813259, 0.993690133}, + {4.633333, 0.999814749, 0.993706405}, + {4.6375, 0.999816537, 0.993722677}, + {4.641667, 0.999818742, 0.993738949}, + {4.645833, 0.999821246, 0.993755221}, + {4.65, 0.999824047, 0.993771493}, + {4.654167, 0.999827206, 0.993787825}, + {4.658333, 0.999830663, 0.993804097}, + {4.6625, 0.999834418, 0.993820429}, + {4.666667, 0.999838471, 0.993836701}, + {4.670833, 0.999842763, 0.993852973}, + {4.675, 0.999847353, 0.993869245}, + {4.679167, 0.999852121, 0.993885517}, + {4.683333, 0.999857187, 0.99390173}, + {4.6875, 0.999862432, 0.993917942}, + {4.691667, 0.999867916, 0.993934095}, + {4.695833, 0.999873579, 0.993950248}, + {4.7, 0.99987936, 0.993966401}, + {4.704167, 0.99988538, 0.993982494}, + {4.708333, 0.99989146, 0.993998528}, + {4.7125, 0.999897718, 0.994014502}, + {4.716667, 0.999904037, 0.994030535}, + {4.720833, 0.999910533, 0.99404639}, + {4.725, 0.99991703, 0.994062304}, + {4.729167, 0.999923587, 0.9940781}, + {4.733333, 0.999930203, 0.994093835}, + {4.7375, 0.999936879, 0.994109511}, + {4.741667, 0.999943554, 0.994125187}, + {4.745833, 0.999950171, 0.994140744}, + {4.75, 0.999956846, 0.994156241}, + {4.754167, 0.999963462, 0.994171679}, + {4.758333, 0.999970019, 0.994187057}, + {4.7625, 0.999976516, 0.994202256}, + {4.766667, 0.999982893, 0.994217515}, + {4.770833, 0.999989212, 0.994232595}, + {4.775, 0.99999547, 0.994247675}, + {4.779167, 1.00000155, 0.994262576}, + {4.783333, 1.00000751, 0.994277477}, + {4.7875, 1.000013351, 0.994292259}, + {4.791667, 1.000018954, 0.994306982}, + {4.795833, 1.000024438, 0.994321525}, + {4.8, 1.000029802, 0.994336069}, + {4.804167, 1.000034928, 0.994350433}, + {4.808333, 1.000039816, 0.994364798}, + {4.8125, 1.000044584, 0.994378984}, + {4.816667, 1.000048995, 0.99439317}, + {4.820833, 1.000053287, 0.994407177}, + {4.825, 1.00005734, 0.994421124}, + {4.829167, 1.000061154, 0.994434953}, + {4.833333, 1.000064611, 0.994448721}, + {4.8375, 1.000067949, 0.994462311}, + {4.841667, 1.000071049, 0.994475901}, + {4.845833, 1.000073791, 0.994489312}, + {4.85, 1.000076294, 0.994502723}, + {4.854167, 1.000078559, 0.994515955}, + {4.858333, 1.000080466, 0.994529188}, + {4.8625, 1.000082254, 0.994542241}, + {4.866667, 1.000083685, 0.994555235}, + {4.870833, 1.000084758, 0.99456811}, + {4.875, 1.000085711, 0.994580984}, + {4.879167, 1.000086308, 0.99459368}, + {4.883333, 1.000086665, 0.994606376}, + {4.8875, 1.000086784, 0.994618893}, + {4.891667, 1.000086546, 0.99463141}, + {4.895833, 1.000086069, 0.994643748}, + {4.9, 1.000085354, 0.994656146}, + {4.904167, 1.0000844, 0.994668365}, + {4.908333, 1.000083208, 0.994680583}, + {4.9125, 1.000081778, 0.994692683}, + {4.916667, 1.000080109, 0.994704783}, + {4.920833, 1.000078201, 0.994716704}, + {4.925, 1.000076056, 0.994728684}, + {4.929167, 1.000073791, 0.994740546}, + {4.933333, 1.000071168, 0.994752407}, + {4.9375, 1.000068426, 0.994764149}, + {4.941667, 1.000065565, 0.994775891}, + {4.945833, 1.000062346, 0.994787514}, + {4.95, 1.000059128, 0.994799197}, + {4.954167, 1.000055671, 0.99481076}, + {4.958333, 1.000052094, 0.994822323}, + {4.9625, 1.000048399, 0.994833887}, + {4.966667, 1.000044465, 0.99484539}, + {4.970833, 1.000040531, 0.994856834}, + {4.975, 1.000036478, 0.994868279}, + {4.979167, 1.000032187, 0.994879723}, + {4.983333, 1.000028014, 0.994891107}, + {4.9875, 1.000023603, 0.994902492}, + {4.991667, 1.000019193, 0.994913876}, + {4.995833, 1.000014782, 0.994925261}, + {5, 1.000010252, 0.994936585}, + {5.004167, 1.000005722, 0.99494797}, + {5.008333, 1.000001192, 0.994959295}, + {5.0125, 0.999996662, 0.99497062}, + {5.016667, 0.999992073, 0.994981945}, + {5.020833, 0.999987543, 0.994993329}, + {5.025, 0.999983072, 0.995004654}, + {5.029167, 0.999978602, 0.995015979}, + {5.033333, 0.999974132, 0.995027363}, + {5.0375, 0.99996978, 0.995038688}, + {5.041667, 0.999965489, 0.995050073}, + {5.045833, 0.999961257, 0.995061457}, + {5.05, 0.999957144, 0.995072842}, + {5.054167, 0.999953091, 0.995084286}, + {5.058333, 0.999949157, 0.99509567}, + {5.0625, 0.999945343, 0.995107114}, + {5.066667, 0.999941587, 0.995118558}, + {5.070833, 0.999938011, 0.995130002}, + {5.075, 0.999934614, 0.995141506}, + {5.079167, 0.999931276, 0.99515301}, + {5.083333, 0.999928117, 0.995164514}, + {5.0875, 0.999925137, 0.995176017}, + {5.091667, 0.999922276, 0.995187581}, + {5.095833, 0.999919593, 0.995199144}, + {5.1, 0.99991709, 0.995210707}, + {5.104167, 0.999914765, 0.99522233}, + {5.108333, 0.99991262, 0.995233953}, + {5.1125, 0.999910653, 0.995245576}, + {5.116667, 0.999908865, 0.995257199}, + {5.120833, 0.999907255, 0.995268881}, + {5.125, 0.999905825, 0.995280504}, + {5.129167, 0.999904573, 0.995292187}, + {5.133333, 0.99990356, 0.995303869}, + {5.1375, 0.999902725, 0.995315611}, + {5.141667, 0.99990201, 0.995327294}, + {5.145833, 0.999901593, 0.995339036}, + {5.15, 0.999901295, 0.995350778}, + {5.154167, 0.999901176, 0.99536252}, + {5.158333, 0.999901295, 0.995374262}, + {5.1625, 0.999901593, 0.995386004}, + {5.166667, 0.99990201, 0.995397747}, + {5.170833, 0.999902666, 0.995409489}, + {5.175, 0.9999035, 0.995421231}, + {5.179167, 0.999904454, 0.995432973}, + {5.183333, 0.999905646, 0.995444715}, + {5.1875, 0.999906957, 0.995456457}, + {5.191667, 0.999908388, 0.995468199}, + {5.195833, 0.999910057, 0.995479882}, + {5.2, 0.999911845, 0.995491624}, + {5.204167, 0.999913752, 0.995503306}, + {5.208333, 0.999915779, 0.995514989}, + {5.2125, 0.999917984, 0.995526671}, + {5.216667, 0.999920249, 0.995538294}, + {5.220833, 0.999922693, 0.995549917}, + {5.225, 0.999925196, 0.99556154}, + {5.229167, 0.999927878, 0.995573103}, + {5.233333, 0.999930561, 0.995584726}, + {5.2375, 0.999933362, 0.99559623}, + {5.241667, 0.999936283, 0.995607734}, + {5.245833, 0.999939263, 0.995619237}, + {5.25, 0.999942303, 0.995630682}, + {5.254167, 0.999945343, 0.995642126}, + {5.258333, 0.999948502, 0.99565351}, + {5.2625, 0.999951661, 0.995664835}, + {5.266667, 0.999954879, 0.99567616}, + {5.270833, 0.999958098, 0.995687425}, + {5.275, 0.999961376, 0.99569869}, + {5.279167, 0.999964654, 0.995709896}, + {5.283333, 0.999967933, 0.995721042}, + {5.2875, 0.999971151, 0.995732129}, + {5.291667, 0.99997443, 0.995743215}, + {5.295833, 0.999977648, 0.995754182}, + {5.3, 0.999980807, 0.995765209}, + {5.304167, 0.999983966, 0.995776117}, + {5.308333, 0.999987125, 0.995787024}, + {5.3125, 0.999990165, 0.995797813}, + {5.316667, 0.999993205, 0.995808601}, + {5.320833, 0.999996126, 0.995819271}, + {5.325, 0.999999046, 0.995829999}, + {5.329167, 1.000001788, 0.995840549}, + {5.333333, 1.00000453, 0.995851159}, + {5.3375, 1.000007153, 0.99586159}, + {5.341667, 1.000009775, 0.99587208}, + {5.345833, 1.000012159, 0.995882452}, + {5.35, 1.000014544, 0.995892823}, + {5.354167, 1.000016809, 0.995903075}, + {5.358333, 1.000018954, 0.995913327}, + {5.3625, 1.000020981, 0.99592346}, + {5.366667, 1.000022888, 0.995933592}, + {5.370833, 1.000024676, 0.995943606}, + {5.375, 1.000026345, 0.995953619}, + {5.379167, 1.000027895, 0.995963573}, + {5.383333, 1.000029325, 0.995973468}, + {5.3875, 1.000030637, 0.995983303}, + {5.391667, 1.000031829, 0.995993078}, + {5.395833, 1.000032783, 0.996002793}, + {5.4, 1.000033736, 0.996012509}, + {5.404167, 1.000034451, 0.996022105}, + {5.408333, 1.000035167, 0.996031642}, + {5.4125, 1.000035644, 0.996041179}, + {5.416667, 1.000036001, 0.996050656}, + {5.420833, 1.00003624, 0.996060073}, + {5.425, 1.000036359, 0.996069431}, + {5.429167, 1.00003624, 0.99607873}, + {5.433333, 1.00003612, 0.996088028}, + {5.4375, 1.000035882, 0.996097267}, + {5.441667, 1.000035405, 0.996106446}, + {5.445833, 1.000034928, 0.996115625}, + {5.45, 1.000034213, 0.996124744}, + {5.454167, 1.000033498, 0.996133745}, + {5.458333, 1.000032663, 0.996142805}, + {5.4625, 1.00003159, 0.996151805}, + {5.466667, 1.000030518, 0.996160746}, + {5.470833, 1.000029325, 0.996169686}, + {5.475, 1.000028014, 0.996178567}, + {5.479167, 1.000026703, 0.996187449}, + {5.483333, 1.000025153, 0.99619627}, + {5.4875, 1.000023603, 0.996205091}, + {5.491667, 1.000022054, 0.996213853}, + {5.495833, 1.000020266, 0.996222615}, + {5.5, 1.000018477, 0.996231318}, + {5.504167, 1.000016689, 0.99624002}, + {5.508333, 1.000014782, 0.996248722}, + {5.5125, 1.000012755, 0.996257365}, + {5.516667, 1.000010729, 0.996266007}, + {5.520833, 1.000008702, 0.99627465}, + {5.525, 1.000006676, 0.996283293}, + {5.529167, 1.00000453, 0.996291876}, + {5.533333, 1.000002384, 0.996300459}, + {5.5375, 1.000000238, 0.996309042}, + {5.541667, 0.999998033, 0.996317625}, + {5.545833, 0.999995828, 0.996326149}, + {5.55, 0.999993622, 0.996334672}, + {5.554167, 0.999991417, 0.996343195}, + {5.558333, 0.999989212, 0.996351779}, + {5.5625, 0.999987006, 0.996360302}, + {5.566667, 0.99998486, 0.996368825}, + {5.570833, 0.999982715, 0.996377289}, + {5.575, 0.999980569, 0.996385813}, + {5.579167, 0.999978483, 0.996394336}, + {5.583333, 0.999976397, 0.99640286}, + {5.5875, 0.99997443, 0.996411324}, + {5.591667, 0.999972463, 0.996419847}, + {5.595833, 0.999970496, 0.99642837}, + {5.6, 0.999968648, 0.996436894}, + {5.604167, 0.99996686, 0.996445358}, + {5.608333, 0.999965072, 0.996453881}, + {5.6125, 0.999963403, 0.996462405}, + {5.616667, 0.999961793, 0.996470869}, + {5.620833, 0.999960244, 0.996479392}, + {5.625, 0.999958754, 0.996487916}, + {5.629167, 0.999957383, 0.996496439}, + {5.633333, 0.999956071, 0.996504962}, + {5.6375, 0.99995482, 0.996513486}, + {5.641667, 0.999953687, 0.996522009}, + {5.645833, 0.999952614, 0.996530533}, + {5.65, 0.999951661, 0.996539056}, + {5.654167, 0.999950767, 0.99654758}, + {5.658333, 0.999949932, 0.996556044}, + {5.6625, 0.999949276, 0.996564627}, + {5.666667, 0.999948621, 0.99657315}, + {5.670833, 0.999948144, 0.996581614}, + {5.675, 0.999947667, 0.996590137}, + {5.679167, 0.999947369, 0.996598661}, + {5.683333, 0.999947131, 0.996607184}, + {5.6875, 0.999946952, 0.996615708}, + {5.691667, 0.999946892, 0.996624231}, + {5.695833, 0.999946952, 0.996632755}, + {5.7, 0.999947071, 0.996641219}, + {5.704167, 0.999947309, 0.996649742}, + {5.708333, 0.999947608, 0.996658266}, + {5.7125, 0.999947965, 0.996666729}, + {5.716667, 0.999948442, 0.996675193}, + {5.720833, 0.999948978, 0.996683657}, + {5.725, 0.999949634, 0.996692121}, + {5.729167, 0.999950349, 0.996700585}, + {5.733333, 0.999951124, 0.996709049}, + {5.7375, 0.999952018, 0.996717453}, + {5.741667, 0.999952912, 0.996725857}, + {5.745833, 0.999953926, 0.996734262}, + {5.75, 0.999954998, 0.996742666}, + {5.754167, 0.999956131, 0.99675101}, + {5.758333, 0.999957263, 0.996759415}, + {5.7625, 0.999958515, 0.9967677}, + {5.766667, 0.999959826, 0.996776044}, + {5.770833, 0.999961138, 0.996784329}, + {5.775, 0.999962509, 0.996792674}, + {5.779167, 0.999963939, 0.9968009}, + {5.783333, 0.99996537, 0.996809185}, + {5.7875, 0.99996686, 0.99681735}, + {5.791667, 0.99996835, 0.996825576}, + {5.795833, 0.9999699, 0.996833742}, + {5.8, 0.999971449, 0.996841908}, + {5.804167, 0.999972999, 0.996850014}, + {5.808333, 0.999974608, 0.99685812}, + {5.8125, 0.999976218, 0.996866167}, + {5.816667, 0.999977827, 0.996874273}, + {5.820833, 0.999979436, 0.99688226}, + {5.825, 0.999980986, 0.996890247}, + {5.829167, 0.999982595, 0.996898234}, + {5.833333, 0.999984205, 0.996906161}, + {5.8375, 0.999985754, 0.996914029}, + {5.841667, 0.999987304, 0.996921897}, + {5.845833, 0.999988854, 0.996929765}, + {5.85, 0.999990344, 0.996937573}, + {5.854167, 0.999991834, 0.996945322}, + {5.858333, 0.999993324, 0.99695307}, + {5.8625, 0.999994755, 0.996960759}, + {5.866667, 0.999996126, 0.996968508}, + {5.870833, 0.999997497, 0.996976137}, + {5.875, 0.999998748, 0.996983767}, + {5.879167, 1, 0.996991277}, + {5.883333, 1.000001311, 0.996998847}, + {5.8875, 1.000002384, 0.997006357}, + {5.891667, 1.000003576, 0.997013867}, + {5.895833, 1.000004649, 0.997021258}, + {5.9, 1.000005603, 0.997028708}, + {5.904167, 1.000006557, 0.99703604}, + {5.908333, 1.00000751, 0.997043431}, + {5.9125, 1.000008345, 0.997050703}, + {5.916667, 1.00000906, 0.997057974}, + {5.920833, 1.000009775, 0.997065246}, + {5.925, 1.00001049, 0.997072458}, + {5.929167, 1.000011086, 0.997079611}, + {5.933333, 1.000011563, 0.997086763}, + {5.9375, 1.00001204, 0.997093856}, + {5.941667, 1.000012398, 0.997100949}, + {5.945833, 1.000012755, 0.997107983}, + {5.95, 1.000012994, 0.997115016}, + {5.954167, 1.000013232, 0.99712199}, + {5.958333, 1.000013351, 0.997128963}, + {5.9625, 1.000013351, 0.997135878}, + {5.966667, 1.000013471, 0.997142792}, + {5.970833, 1.000013351, 0.997149646}, + {5.975, 1.000013232, 0.997156501}, + {5.979167, 1.000013113, 0.997163296}, + {5.983333, 1.000012875, 0.99717015}, + {5.9875, 1.000012517, 0.997176886}, + {5.991667, 1.000012159, 0.997183621}, + {5.995833, 1.000011802, 0.997190356}, + {6, 1.000011325, 0.997197032}, + {6.004167, 1.000010729, 0.997203708}, + {6.008333, 1.000010252, 0.997210383}, + {6.0125, 1.000009656, 0.997217}, + {6.016667, 1.000008941, 0.997223616}, + {6.020833, 1.000008225, 0.997230172}, + {6.025, 1.00000751, 0.997236729}, + {6.029167, 1.000006676, 0.997243285}, + {6.033333, 1.00000596, 0.997249842}, + {6.0375, 1.000005007, 0.997256339}, + {6.041667, 1.000004172, 0.997262836}, + {6.045833, 1.000003219, 0.997269332}, + {6.05, 1.000002265, 0.99727577}, + {6.054167, 1.000001311, 0.997282207}, + {6.058333, 1.000000358, 0.997288644}, + {6.0625, 0.999999344, 0.997295082}, + {6.066667, 0.999998331, 0.997301519}, + {6.070833, 0.999997258, 0.997307897}, + {6.075, 0.999996245, 0.997314274}, + {6.079167, 0.999995172, 0.997320652}, + {6.083333, 0.999994099, 0.99732703}, + {6.0875, 0.999993026, 0.997333407}, + {6.091667, 0.999992013, 0.997339785}, + {6.095833, 0.99999094, 0.997346103}, + {6.1, 0.999989867, 0.997352421}, + {6.104167, 0.999988794, 0.997358739}, + {6.108333, 0.999987781, 0.997365057}, + {6.1125, 0.999986768, 0.997371376}, + {6.116667, 0.999985754, 0.997377694}, + {6.120833, 0.999984741, 0.997384012}, + {6.125, 0.999983788, 0.99739027}, + {6.129167, 0.999982834, 0.997396588}, + {6.133333, 0.99998188, 0.997402847}, + {6.1375, 0.999980986, 0.997409165}, + {6.141667, 0.999980092, 0.997415423}, + {6.145833, 0.999979258, 0.997421682}, + {6.15, 0.999978423, 0.99742794}, + {6.154167, 0.999977648, 0.997434199}, + {6.158333, 0.999976933, 0.997440457}, + {6.1625, 0.999976218, 0.997446716}, + {6.166667, 0.999975562, 0.997452974}, + {6.170833, 0.999974906, 0.997459233}, + {6.175, 0.99997431, 0.997465432}, + {6.179167, 0.999973774, 0.99747169}, + {6.183333, 0.999973238, 0.997477889}, + {6.1875, 0.999972761, 0.997484148}, + {6.191667, 0.999972343, 0.997490346}, + {6.195833, 0.999971986, 0.997496605}, + {6.2, 0.999971628, 0.997502804}, + {6.204167, 0.99997133, 0.997509003}, + {6.208333, 0.999971092, 0.997515202}, + {6.2125, 0.999970913, 0.9975214}, + {6.216667, 0.999970734, 0.997527599}, + {6.220833, 0.999970615, 0.997533798}, + {6.225, 0.999970555, 0.997539937}, + {6.229167, 0.999970555, 0.997546136}, + {6.233333, 0.999970555, 0.997552276}, + {6.2375, 0.999970615, 0.997558475}, + {6.241667, 0.999970734, 0.997564614}, + {6.245833, 0.999970853, 0.997570753}, + {6.25, 0.999971092, 0.997576892}, + {6.254167, 0.99997133, 0.997583032}, + {6.258333, 0.999971569, 0.997589111}, + {6.2625, 0.999971926, 0.997595251}, + {6.266667, 0.999972284, 0.99760133}, + {6.270833, 0.999972641, 0.99760741}, + {6.275, 0.999973059, 0.99761349}, + {6.279167, 0.999973536, 0.997619569}, + {6.283333, 0.999974012, 0.997625649}, + {6.2875, 0.999974549, 0.997631669}, + {6.291667, 0.999975085, 0.997637689}, + {6.295833, 0.999975681, 0.997643709}, + {6.3, 0.999976277, 0.997649729}, + {6.304167, 0.999976933, 0.997655749}, + {6.308333, 0.999977589, 0.99766171}, + {6.3125, 0.999978244, 0.99766767}, + {6.316667, 0.99997896, 0.997673631}, + {6.320833, 0.999979675, 0.997679532}, + {6.325, 0.99998039, 0.997685492}, + {6.329167, 0.999981165, 0.997691393}, + {6.333333, 0.99998188, 0.997697234}, + {6.3375, 0.999982655, 0.997703135}, + {6.341667, 0.99998343, 0.997708976}, + {6.345833, 0.999984205, 0.997714818}, + {6.35, 0.999985039, 0.997720659}, + {6.354167, 0.999985814, 0.99772644}, + {6.358333, 0.999986589, 0.997732222}, + {6.3625, 0.999987364, 0.997737944}, + {6.366667, 0.999988139, 0.997743726}, + {6.370833, 0.999988973, 0.997749448}, + {6.375, 0.999989748, 0.99775517}, + {6.379167, 0.999990463, 0.997760832}, + {6.383333, 0.999991238, 0.997766495}, + {6.3875, 0.999992013, 0.997772098}, + {6.391667, 0.999992728, 0.99777776}, + {6.395833, 0.999993443, 0.997783363}, + {6.4, 0.999994159, 0.997788966}, + {6.404167, 0.999994814, 0.997794509}, + {6.408333, 0.99999547, 0.997800052}, + {6.4125, 0.999996126, 0.997805536}, + {6.416667, 0.999996781, 0.997811079}, + {6.420833, 0.999997377, 0.997816503}, + {6.425, 0.999997973, 0.997821987}, + {6.429167, 0.99999851, 0.997827411}, + {6.433333, 0.999999046, 0.997832835}, + {6.4375, 0.999999523, 0.997838199}, + {6.441667, 1, 0.997843623}, + {6.445833, 1.000000477, 0.997848928}, + {6.45, 1.000000834, 0.997854292}, + {6.454167, 1.000001192, 0.997859597}, + {6.458333, 1.00000155, 0.997864902}, + {6.4625, 1.000001907, 0.997870147}, + {6.466667, 1.000002265, 0.997875392}, + {6.470833, 1.000002503, 0.997880638}, + {6.475, 1.000002742, 0.997885823}, + {6.479167, 1.000002861, 0.997891009}, + {6.483333, 1.000003099, 0.997896194}, + {6.4875, 1.000003219, 0.99790132}, + {6.491667, 1.000003338, 0.997906446}, + {6.495833, 1.000003457, 0.997911572}, + {6.5, 1.000003457, 0.997916639}, + {6.504167, 1.000003457, 0.997921705}, + {6.508333, 1.000003457, 0.997926772}, + {6.5125, 1.000003338, 0.997931838}, + {6.516667, 1.000003338, 0.997936845}, + {6.520833, 1.000003219, 0.997941852}, + {6.525, 1.000003099, 0.997946858}, + {6.529167, 1.000002861, 0.997951806}, + {6.533333, 1.000002742, 0.997956753}, + {6.5375, 1.000002503, 0.9979617}, + {6.541667, 1.000002265, 0.997966647}, + {6.545833, 1.000002027, 0.997971535}, + {6.55, 1.000001669, 0.997976422}, + {6.554167, 1.000001311, 0.99798131}, + {6.558333, 1.000001073, 0.997986197}, + {6.5625, 1.000000715, 0.997991025}, + {6.566667, 1.000000238, 0.997995913}, + {6.570833, 0.999999881, 0.998000741}, + {6.575, 0.999999523, 0.998005509}, + {6.579167, 0.999999046, 0.998010337}, + {6.583333, 0.999998629, 0.998015106}, + {6.5875, 0.999998152, 0.998019934}, + {6.591667, 0.999997735, 0.998024702}, + {6.595833, 0.999997258, 0.998029411}, + {6.6, 0.999996781, 0.998034179}, + {6.604167, 0.999996245, 0.998038948}, + {6.608333, 0.999995768, 0.998043656}, + {6.6125, 0.999995232, 0.998048365}, + {6.616667, 0.999994755, 0.998053074}, + {6.620833, 0.999994218, 0.998057783}, + {6.625, 0.999993742, 0.998062491}, + {6.629167, 0.999993205, 0.998067141}, + {6.633333, 0.999992728, 0.998071849}, + {6.6375, 0.999992192, 0.998076499}, + {6.641667, 0.999991715, 0.998081207}, + {6.645833, 0.999991179, 0.998085856}, + {6.65, 0.999990702, 0.998090506}, + {6.654167, 0.999990225, 0.998095095}, + {6.658333, 0.999989748, 0.998099744}, + {6.6625, 0.999989271, 0.998104393}, + {6.666667, 0.999988794, 0.998108983}, + {6.670833, 0.999988377, 0.998113632}, + {6.675, 0.99998796, 0.998118222}, + {6.679167, 0.999987543, 0.998122811}, + {6.683333, 0.999987125, 0.998127401}, + {6.6875, 0.999986708, 0.99813199}, + {6.691667, 0.999986351, 0.99813658}, + {6.695833, 0.999985993, 0.99814117}, + {6.7, 0.999985635, 0.998145759}, + {6.704167, 0.999985337, 0.998150289}, + {6.708333, 0.999985039, 0.998154879}, + {6.7125, 0.999984741, 0.998159409}, + {6.716667, 0.999984503, 0.998163998}, + {6.720833, 0.999984264, 0.998168528}, + {6.725, 0.999984026, 0.998173058}, + {6.729167, 0.999983847, 0.998177588}, + {6.733333, 0.999983668, 0.998182118}, + {6.7375, 0.99998349, 0.998186648}, + {6.741667, 0.99998337, 0.998191178}, + {6.745833, 0.999983251, 0.998195648}, + {6.75, 0.999983132, 0.998200178}, + {6.754167, 0.999983072, 0.998204648}, + {6.758333, 0.999983072, 0.998209178}, + {6.7625, 0.999983013, 0.998213649}, + {6.766667, 0.999983013, 0.998218119}, + {6.770833, 0.999983013, 0.998222589}, + {6.775, 0.999983072, 0.99822706}, + {6.779167, 0.999983132, 0.99823153}, + {6.783333, 0.999983251, 0.998235941}, + {6.7875, 0.999983311, 0.998240411}, + {6.791667, 0.99998343, 0.998244822}, + {6.795833, 0.999983609, 0.998249233}, + {6.8, 0.999983728, 0.998253644}, + {6.804167, 0.999983907, 0.998258054}, + {6.808333, 0.999984145, 0.998262465}, + {6.8125, 0.999984324, 0.998266876}, + {6.816667, 0.999984562, 0.998271227}, + {6.820833, 0.999984801, 0.998275638}, + {6.825, 0.999985099, 0.998279989}, + {6.829167, 0.999985337, 0.99828434}, + {6.833333, 0.999985635, 0.998288691}, + {6.8375, 0.999985933, 0.998292983}, + {6.841667, 0.999986291, 0.998297334}, + {6.845833, 0.999986589, 0.998301625}, + {6.85, 0.999986947, 0.998305976}, + {6.854167, 0.999987304, 0.998310208}, + {6.858333, 0.999987662, 0.9983145}, + {6.8625, 0.999988019, 0.998318791}, + {6.866667, 0.999988377, 0.998323023}, + {6.870833, 0.999988735, 0.998327315}, + {6.875, 0.999989152, 0.998331547}, + {6.879167, 0.99998951, 0.998335719}, + {6.883333, 0.999989927, 0.998339951}, + {6.8875, 0.999990284, 0.998344183}, + {6.891667, 0.999990702, 0.998348355}, + {6.895833, 0.999991059, 0.998352528}, + {6.9, 0.999991477, 0.9983567}, + {6.904167, 0.999991834, 0.998360813}, + {6.908333, 0.999992251, 0.998364985}, + {6.9125, 0.999992609, 0.998369098}, + {6.916667, 0.999993026, 0.99837321}, + {6.920833, 0.999993384, 0.998377264}, + {6.925, 0.999993742, 0.998381376}, + {6.929167, 0.999994099, 0.998385429}, + {6.933333, 0.999994457, 0.998389482}, + {6.9375, 0.999994814, 0.998393536}, + {6.941667, 0.999995172, 0.998397589}, + {6.945833, 0.99999547, 0.998401582}, + {6.95, 0.999995768, 0.998405576}, + {6.954167, 0.999996126, 0.998409569}, + {6.958333, 0.999996424, 0.998413563}, + {6.9625, 0.999996662, 0.998417497}, + {6.966667, 0.99999696, 0.99842149}, + {6.970833, 0.999997199, 0.998425424}, + {6.975, 0.999997497, 0.998429298}, + {6.979167, 0.999997735, 0.998433232}, + {6.983333, 0.999997914, 0.998437107}, + {6.9875, 0.999998152, 0.998440981}, + {6.991667, 0.999998331, 0.998444855}, + {6.995833, 0.99999851, 0.99844873}, + {7, 0.999998689, 0.998452544}, + {7.004167, 0.999998808, 0.998456359}, + {7.008333, 0.999998927, 0.998460233}, + {7.0125, 0.999999046, 0.998463988}, + {7.016667, 0.999999166, 0.998467803}, + {7.020833, 0.999999225, 0.998471558}, + {7.025, 0.999999344, 0.998475313}, + {7.029167, 0.999999404, 0.998479068}, + {7.033333, 0.999999404, 0.998482823}, + {7.0375, 0.999999464, 0.998486519}, + {7.041667, 0.999999464, 0.998490274}, + {7.045833, 0.999999464, 0.998493969}, + {7.05, 0.999999404, 0.998497665}, + {7.054167, 0.999999404, 0.99850136}, + {7.058333, 0.999999344, 0.998504996}, + {7.0625, 0.999999285, 0.998508692}, + {7.066667, 0.999999225, 0.998512328}, + {7.070833, 0.999999106, 0.998515964}, + {7.075, 0.999998987, 0.998519599}, + {7.079167, 0.999998868, 0.998523176}, + {7.083333, 0.999998748, 0.998526812}, + {7.0875, 0.999998629, 0.998530388}, + {7.091667, 0.99999845, 0.998533964}, + {7.095833, 0.999998331, 0.99853754}, + {7.1, 0.999998152, 0.998541117}, + {7.104167, 0.999997973, 0.998544693}, + {7.108333, 0.999997795, 0.99854821}, + {7.1125, 0.999997616, 0.998551726}, + {7.116667, 0.999997377, 0.998555303}, + {7.120833, 0.999997199, 0.998558819}, + {7.125, 0.99999696, 0.998562336}, + {7.129167, 0.999996722, 0.998565793}, + {7.133333, 0.999996483, 0.99856931}, + {7.1375, 0.999996305, 0.998572826}, + {7.141667, 0.999996066, 0.998576283}, + {7.145833, 0.999995828, 0.998579741}, + {7.15, 0.999995589, 0.998583198}, + {7.154167, 0.999995351, 0.998586655}, + {7.158333, 0.999995053, 0.998590112}, + {7.1625, 0.999994814, 0.998593569}, + {7.166667, 0.999994576, 0.998597026}, + {7.170833, 0.999994338, 0.998600423}, + {7.175, 0.999994099, 0.99860388}, + {7.179167, 0.999993861, 0.998607278}, + {7.183333, 0.999993622, 0.998610675}, + {7.1875, 0.999993384, 0.998614073}, + {7.191667, 0.999993145, 0.99861753}, + {7.195833, 0.999992907, 0.998620868}, + {7.2, 0.999992728, 0.998624265}, + {7.204167, 0.99999249, 0.998627663}, + {7.208333, 0.999992311, 0.99863106}, + {7.2125, 0.999992073, 0.998634398}, + {7.216667, 0.999991894, 0.998637795}, + {7.220833, 0.999991715, 0.998641133}, + {7.225, 0.999991536, 0.998644471}, + {7.229167, 0.999991357, 0.998647809}, + {7.233333, 0.999991179, 0.998651147}, + {7.2375, 0.999991, 0.998654485}, + {7.241667, 0.99999088, 0.998657823}, + {7.245833, 0.999990702, 0.99866116}, + {7.25, 0.999990582, 0.998664498}, + {7.254167, 0.999990463, 0.998667777}, + {7.258333, 0.999990344, 0.998671114}, + {7.2625, 0.999990225, 0.998674393}, + {7.266667, 0.999990165, 0.998677671}, + {7.270833, 0.999990106, 0.998681009}, + {7.275, 0.999989986, 0.998684287}, + {7.279167, 0.999989927, 0.998687565}, + {7.283333, 0.999989927, 0.998690844}, + {7.2875, 0.999989867, 0.998694062}, + {7.291667, 0.999989867, 0.99869734}, + {7.295833, 0.999989808, 0.998700619}, + {7.3, 0.999989808, 0.998703837}, + {7.304167, 0.999989808, 0.998707116}, + {7.308333, 0.999989867, 0.998710334}, + {7.3125, 0.999989867, 0.998713553}, + {7.316667, 0.999989927, 0.998716831}, + {7.320833, 0.999989927, 0.99872005}, + {7.325, 0.999989986, 0.998723269}, + {7.329167, 0.999990046, 0.998726428}, + {7.333333, 0.999990165, 0.998729646}, + {7.3375, 0.999990225, 0.998732865}, + {7.341667, 0.999990344, 0.998736024}, + {7.345833, 0.999990404, 0.998739183}, + {7.35, 0.999990523, 0.998742402}, + {7.354167, 0.999990642, 0.998745561}, + {7.358333, 0.999990761, 0.99874872}, + {7.3625, 0.99999094, 0.998751879}, + {7.366667, 0.999991059, 0.998755038}, + {7.370833, 0.999991238, 0.998758137}, + {7.375, 0.999991357, 0.998761296}, + {7.379167, 0.999991536, 0.998764396}, + {7.383333, 0.999991715, 0.998767495}, + {7.3875, 0.999991834, 0.998770654}, + {7.391667, 0.999992013, 0.998773754}, + {7.395833, 0.999992192, 0.998776793}, + {7.4, 0.999992371, 0.998779893}, + {7.404167, 0.999992549, 0.998782992}, + {7.408333, 0.999992788, 0.998786032}, + {7.4125, 0.999992967, 0.998789132}, + {7.416667, 0.999993145, 0.998792171}, + {7.420833, 0.999993324, 0.998795211}, + {7.425, 0.999993563, 0.998798251}, + {7.429167, 0.999993742, 0.998801291}, + {7.433333, 0.99999392, 0.998804271}, + {7.4375, 0.999994099, 0.998807311}, + {7.441667, 0.999994338, 0.998810291}, + {7.445833, 0.999994516, 0.998813272}, + {7.45, 0.999994695, 0.998816252}, + {7.454167, 0.999994874, 0.998819232}, + {7.458333, 0.999995053, 0.998822212}, + {7.4625, 0.999995232, 0.998825133}, + {7.466667, 0.99999541, 0.998828113}, + {7.470833, 0.999995589, 0.998831034}, + {7.475, 0.999995768, 0.998833954}, + {7.479167, 0.999995947, 0.998836875}, + {7.483333, 0.999996126, 0.998839796}, + {7.4875, 0.999996305, 0.998842716}, + {7.491667, 0.999996424, 0.998845577}, + {7.495833, 0.999996603, 0.998848498}, + {7.5, 0.999996722, 0.998851359}, + {7.504167, 0.999996841, 0.99885422}, + {7.508333, 0.99999696, 0.998857081}, + {7.5125, 0.999997139, 0.998859942}, + {7.516667, 0.999997258, 0.998862803}, + {7.520833, 0.999997318, 0.998865604}, + {7.525, 0.999997437, 0.998868406}, + {7.529167, 0.999997556, 0.998871207}, + {7.533333, 0.999997616, 0.998874068}, + {7.5375, 0.999997735, 0.99887681}, + {7.541667, 0.999997795, 0.998879611}, + {7.545833, 0.999997854, 0.998882413}, + {7.55, 0.999997914, 0.998885155}, + {7.554167, 0.999997973, 0.998887956}, + {7.558333, 0.999998033, 0.998890698}, + {7.5625, 0.999998033, 0.99889344}, + {7.566667, 0.999998093, 0.998896182}, + {7.570833, 0.999998093, 0.998898864}, + {7.575, 0.999998093, 0.998901606}, + {7.579167, 0.999998093, 0.998904347}, + {7.583333, 0.999998093, 0.99890703}, + {7.5875, 0.999998093, 0.998909712}, + {7.591667, 0.999998093, 0.998912394}, + {7.595833, 0.999998093, 0.998915076}, + {7.6, 0.999998033, 0.998917758}, + {7.604167, 0.999998033, 0.998920441}, + {7.608333, 0.999997973, 0.998923063}, + {7.6125, 0.999997914, 0.998925745}, + {7.616667, 0.999997854, 0.998928368}, + {7.620833, 0.999997795, 0.998930991}, + {7.625, 0.999997735, 0.998933613}, + {7.629167, 0.999997675, 0.998936236}, + {7.633333, 0.999997616, 0.998938859}, + {7.6375, 0.999997497, 0.998941481}, + {7.641667, 0.999997437, 0.998944104}, + {7.645833, 0.999997318, 0.998946667}, + {7.65, 0.999997258, 0.998949289}, + {7.654167, 0.999997139, 0.998951852}, + {7.658333, 0.999997079, 0.998954415}, + {7.6625, 0.99999696, 0.998956978}, + {7.666667, 0.999996841, 0.998959541}, + {7.670833, 0.999996722, 0.998962104}, + {7.675, 0.999996662, 0.998964667}, + {7.679167, 0.999996543, 0.99896723}, + {7.683333, 0.999996424, 0.998969734}, + {7.6875, 0.999996305, 0.998972297}, + {7.691667, 0.999996185, 0.9989748}, + {7.695833, 0.999996066, 0.998977304}, + {7.7, 0.999995947, 0.998979867}, + {7.704167, 0.999995828, 0.99898237}, + {7.708333, 0.999995708, 0.998984873}, + {7.7125, 0.999995589, 0.998987377}, + {7.716667, 0.99999547, 0.99898988}, + {7.720833, 0.99999541, 0.998992324}, + {7.725, 0.999995291, 0.998994827}, + {7.729167, 0.999995172, 0.998997331}, + {7.733333, 0.999995053, 0.998999774}, + {7.7375, 0.999994934, 0.999002278}, + {7.741667, 0.999994874, 0.999004722}, + {7.745833, 0.999994755, 0.999007165}, + {7.75, 0.999994636, 0.999009669}, + {7.754167, 0.999994576, 0.999012113}, + {7.758333, 0.999994457, 0.999014556}, + {7.7625, 0.999994397, 0.999017}, + {7.766667, 0.999994338, 0.999019444}, + {7.770833, 0.999994218, 0.999021828}, + {7.775, 0.999994159, 0.999024272}, + {7.779167, 0.999994099, 0.999026716}, + {7.783333, 0.99999404, 0.9990291}, + {7.7875, 0.99999398, 0.999031544}, + {7.791667, 0.99999392, 0.999033928}, + {7.795833, 0.999993861, 0.999036372}, + {7.8, 0.999993801, 0.999038756}, + {7.804167, 0.999993801, 0.99904114}, + {7.808333, 0.999993742, 0.999043524}, + {7.8125, 0.999993742, 0.999045908}, + {7.816667, 0.999993682, 0.999048293}, + {7.820833, 0.999993682, 0.999050677}, + {7.825, 0.999993682, 0.999053061}, + {7.829167, 0.999993682, 0.999055445}, + {7.833333, 0.999993682, 0.99905777}, + {7.8375, 0.999993682, 0.999060154}, + {7.841667, 0.999993682, 0.999062479}, + {7.845833, 0.999993682, 0.999064863}, + {7.85, 0.999993682, 0.999067187}, + {7.854167, 0.999993742, 0.999069512}, + {7.858333, 0.999993742, 0.999071836}, + {7.8625, 0.999993801, 0.999074161}, + {7.866667, 0.999993801, 0.999076486}, + {7.870833, 0.999993861, 0.99907881}, + {7.875, 0.99999392, 0.999081135}, + {7.879167, 0.99999398, 0.999083459}, + {7.883333, 0.99999398, 0.999085724}, + {7.8875, 0.99999404, 0.999088049}, + {7.891667, 0.999994099, 0.999090314}, + {7.895833, 0.999994218, 0.999092638}, + {7.9, 0.999994278, 0.999094903}, + {7.904167, 0.999994338, 0.999097168}, + {7.908333, 0.999994397, 0.999099433}, + {7.9125, 0.999994516, 0.999101698}, + {7.916667, 0.999994576, 0.999103963}, + {7.920833, 0.999994636, 0.999106228}, + {7.925, 0.999994755, 0.999108434}, + {7.929167, 0.999994814, 0.999110699}, + {7.933333, 0.999994934, 0.999112964}, + {7.9375, 0.999994993, 0.999115169}, + {7.941667, 0.999995112, 0.999117374}, + {7.945833, 0.999995232, 0.999119639}, + {7.95, 0.999995291, 0.999121845}, + {7.954167, 0.99999541, 0.99912405}, + {7.958333, 0.99999547, 0.999126256}, + {7.9625, 0.999995589, 0.999128401}, + {7.966667, 0.999995708, 0.999130607}, + {7.970833, 0.999995768, 0.999132812}, + {7.975, 0.999995887, 0.999134958}, + {7.979167, 0.999996006, 0.999137163}, + {7.983333, 0.999996066, 0.999139309}, + {7.9875, 0.999996185, 0.999141455}, + {7.991667, 0.999996245, 0.99914366}, + {7.995833, 0.999996364, 0.999145746}, + {8, 0.999996483, 0.999147892}, + {8.004167, 0.999996543, 0.999150038}, + {8.008333, 0.999996662, 0.999152184}, + {8.0125, 0.999996722, 0.999154329}, + {8.016667, 0.999996781, 0.999156415}, + {8.020833, 0.999996901, 0.999158502}, + {8.025, 0.99999696, 0.999160647}, + {8.029167, 0.99999702, 0.999162734}, + {8.033333, 0.999997139, 0.99916482}, + {8.0375, 0.999997199, 0.999166906}, + {8.041667, 0.999997258, 0.999168992}, + {8.045833, 0.999997318, 0.999171078}, + {8.05, 0.999997377, 0.999173105}, + {8.054167, 0.999997437, 0.999175191}, + {8.058333, 0.999997497, 0.999177277}, + {8.0625, 0.999997556, 0.999179304}, + {8.066667, 0.999997616, 0.99918133}, + {8.070833, 0.999997675, 0.999183357}, + {8.075, 0.999997675, 0.999185443}, + {8.079167, 0.999997735, 0.99918741}, + {8.083333, 0.999997795, 0.999189436}, + {8.0875, 0.999997795, 0.999191463}, + {8.091667, 0.999997854, 0.99919349}, + {8.095833, 0.999997854, 0.999195457}, + {8.1, 0.999997854, 0.999197483}, + {8.104167, 0.999997914, 0.99919945}, + {8.108333, 0.999997914, 0.999201477}, + {8.1125, 0.999997914, 0.999203444}, + {8.116667, 0.999997914, 0.99920541}, + {8.120833, 0.999997914, 0.999207377}, + {8.125, 0.999997914, 0.999209344}, + {8.129167, 0.999997914, 0.999211311}, + {8.133333, 0.999997914, 0.999213278}, + {8.1375, 0.999997914, 0.999215186}, + {8.141667, 0.999997854, 0.999217153}, + {8.145833, 0.999997854, 0.99921906}, + {8.15, 0.999997854, 0.999221027}, + {8.154167, 0.999997795, 0.999222934}, + {8.158333, 0.999997795, 0.999224842}, + {8.1625, 0.999997735, 0.999226749}, + {8.166667, 0.999997735, 0.999228716}, + {8.170833, 0.999997675, 0.999230564}, + {8.175, 0.999997675, 0.999232471}, + {8.179167, 0.999997616, 0.999234378}, + {8.183333, 0.999997556, 0.999236286}, + {8.1875, 0.999997556, 0.999238193}, + {8.191667, 0.999997497, 0.999240041}, + {8.195833, 0.999997437, 0.999241948}, + {8.2, 0.999997377, 0.999243796}, + {8.204167, 0.999997318, 0.999245644}, + {8.208333, 0.999997318, 0.999247551}, + {8.2125, 0.999997258, 0.999249399}, + {8.216667, 0.999997199, 0.999251246}, + {8.220833, 0.999997139, 0.999253094}, + {8.225, 0.999997079, 0.999254942}, + {8.229167, 0.99999702, 0.99925679}, + {8.233333, 0.99999696, 0.999258637}, + {8.2375, 0.999996901, 0.999260485}, + {8.241667, 0.999996901, 0.999262273}, + {8.245833, 0.999996841, 0.999264121}, + {8.25, 0.999996781, 0.999265969}, + {8.254167, 0.999996722, 0.999267757}, + {8.258333, 0.999996662, 0.999269605}, + {8.2625, 0.999996603, 0.999271393}, + {8.266667, 0.999996543, 0.999273181}, + {8.270833, 0.999996483, 0.999274969}, + {8.275, 0.999996483, 0.999276817}, + {8.279167, 0.999996424, 0.999278605}, + {8.283333, 0.999996364, 0.999280393}, + {8.2875, 0.999996305, 0.999282181}, + {8.291667, 0.999996305, 0.999283969}, + {8.295833, 0.999996245, 0.999285758}, + {8.3, 0.999996185, 0.999287486}, + {8.304167, 0.999996185, 0.999289274}, + {8.308333, 0.999996126, 0.999291062}, + {8.3125, 0.999996126, 0.999292791}, + {8.316667, 0.999996066, 0.999294579}, + {8.320833, 0.999996066, 0.999296308}, + {8.325, 0.999996006, 0.999298096}, + {8.329167, 0.999996006, 0.999299824}, + {8.333333, 0.999996006, 0.999301553}, + {8.3375, 0.999995947, 0.999303341}, + {8.341667, 0.999995947, 0.999305069}, + {8.345833, 0.999995947, 0.999306798}, + {8.35, 0.999995947, 0.999308527}, + {8.354167, 0.999995887, 0.999310255}, + {8.358333, 0.999995887, 0.999311984}, + {8.3625, 0.999995887, 0.999313712}, + {8.366667, 0.999995887, 0.999315381}, + {8.370833, 0.999995887, 0.99931711}, + {8.375, 0.999995887, 0.999318838}, + {8.379167, 0.999995887, 0.999320507}, + {8.383333, 0.999995947, 0.999322236}, + {8.3875, 0.999995947, 0.999323905}, + {8.391667, 0.999995947, 0.999325633}, + {8.395833, 0.999995947, 0.999327302}, + {8.4, 0.999996006, 0.999329031}, + {8.404167, 0.999996006, 0.999330699}, + {8.408333, 0.999996006, 0.999332368}, + {8.4125, 0.999996066, 0.999334037}, + {8.416667, 0.999996066, 0.999335706}, + {8.420833, 0.999996126, 0.999337375}, + {8.425, 0.999996126, 0.999339044}, + {8.429167, 0.999996185, 0.999340713}, + {8.433333, 0.999996185, 0.999342322}, + {8.4375, 0.999996245, 0.999343991}, + {8.441667, 0.999996305, 0.99934566}, + {8.445833, 0.999996305, 0.99934727}, + {8.45, 0.999996364, 0.999348938}, + {8.454167, 0.999996424, 0.999350548}, + {8.458333, 0.999996483, 0.999352217}, + {8.4625, 0.999996483, 0.999353826}, + {8.466667, 0.999996543, 0.999355435}, + {8.470833, 0.999996603, 0.999357045}, + {8.475, 0.999996662, 0.999358654}, + {8.479167, 0.999996662, 0.999360263}, + {8.483333, 0.999996722, 0.999361873}, + {8.4875, 0.999996781, 0.999363482}, + {8.491667, 0.999996841, 0.999365091}, + {8.495833, 0.999996901, 0.999366701}, + {8.5, 0.99999696, 0.99936825}, + {8.504167, 0.99999696, 0.99936986}, + {8.508333, 0.99999702, 0.999371409}, + {8.5125, 0.999997079, 0.999373019}, + {8.516667, 0.999997139, 0.999374568}, + {8.520833, 0.999997199, 0.999376178}, + {8.525, 0.999997258, 0.999377728}, + {8.529167, 0.999997258, 0.999379277}, + {8.533333, 0.999997318, 0.999380827}, + {8.5375, 0.999997377, 0.999382377}, + {8.541667, 0.999997437, 0.999383926}, + {8.545833, 0.999997497, 0.999385476}, + {8.55, 0.999997497, 0.999387026}, + {8.554167, 0.999997556, 0.999388516}, + {8.558333, 0.999997616, 0.999390066}, + {8.5625, 0.999997616, 0.999391615}, + {8.566667, 0.999997675, 0.999393106}, + {8.570833, 0.999997735, 0.999394655}, + {8.575, 0.999997735, 0.999396145}, + {8.579167, 0.999997795, 0.999397635}, + {8.583333, 0.999997795, 0.999399185}, + {8.5875, 0.999997854, 0.999400675}, + {8.591667, 0.999997914, 0.999402165}, + {8.595833, 0.999997914, 0.999403656}, + {8.6, 0.999997914, 0.999405146}, + {8.604167, 0.999997973, 0.999406636}, + {8.608333, 0.999997973, 0.999408126}, + {8.6125, 0.999998033, 0.999409556}, + {8.616667, 0.999998033, 0.999411047}, + {8.620833, 0.999998033, 0.999412537}, + {8.625, 0.999998093, 0.999413967}, + {8.629167, 0.999998093, 0.999415457}, + {8.633333, 0.999998093, 0.999416888}, + {8.6375, 0.999998093, 0.999418318}, + {8.641667, 0.999998093, 0.999419808}, + {8.645833, 0.999998152, 0.999421239}, + {8.65, 0.999998152, 0.999422669}, + {8.654167, 0.999998152, 0.9994241}, + {8.658333, 0.999998152, 0.99942553}, + {8.6625, 0.999998152, 0.999426961}, + {8.666667, 0.999998152, 0.999428391}, + {8.670833, 0.999998152, 0.999429822}, + {8.675, 0.999998152, 0.999431252}, + {8.679167, 0.999998152, 0.999432623}, + {8.683333, 0.999998093, 0.999434054}, + {8.6875, 0.999998093, 0.999435425}, + {8.691667, 0.999998093, 0.999436855}, + {8.695833, 0.999998093, 0.999438226}, + {8.7, 0.999998093, 0.999439657}, + {8.704167, 0.999998033, 0.999441028}, + {8.708333, 0.999998033, 0.999442399}, + {8.7125, 0.999998033, 0.999443829}, + {8.716667, 0.999998033, 0.9994452}, + {8.720833, 0.999997973, 0.999446571}, + {8.725, 0.999997973, 0.999447942}, + {8.729167, 0.999997973, 0.999449313}, + {8.733333, 0.999997914, 0.999450684}, + {8.7375, 0.999997914, 0.999452055}, + {8.741667, 0.999997914, 0.999453425}, + {8.745833, 0.999997854, 0.999454737}, + {8.75, 0.999997854, 0.999456108}, + {8.754167, 0.999997795, 0.999457479}, + {8.758333, 0.999997795, 0.99945879}, + {8.7625, 0.999997795, 0.999460161}, + {8.766667, 0.999997735, 0.999461472}, + {8.770833, 0.999997735, 0.999462843}, + {8.775, 0.999997675, 0.999464154}, + {8.779167, 0.999997675, 0.999465525}, + {8.783333, 0.999997675, 0.999466836}, + {8.7875, 0.999997616, 0.999468148}, + {8.791667, 0.999997616, 0.999469459}, + {8.795833, 0.999997616, 0.99947077}, + {8.8, 0.999997556, 0.999472082}, + {8.804167, 0.999997556, 0.999473393}, + {8.808333, 0.999997497, 0.999474704}, + {8.8125, 0.999997497, 0.999476016}, + {8.816667, 0.999997497, 0.999477327}, + {8.820833, 0.999997437, 0.999478638}, + {8.825, 0.999997437, 0.999479949}, + {8.829167, 0.999997437, 0.999481261}, + {8.833333, 0.999997377, 0.999482512}, + {8.8375, 0.999997377, 0.999483824}, + {8.841667, 0.999997377, 0.999485135}, + {8.845833, 0.999997377, 0.999486387}, + {8.85, 0.999997318, 0.999487698}, + {8.854167, 0.999997318, 0.99948895}, + {8.858333, 0.999997318, 0.999490201}, + {8.8625, 0.999997318, 0.999491513}, + {8.866667, 0.999997318, 0.999492764}, + {8.870833, 0.999997318, 0.999494016}, + {8.875, 0.999997258, 0.999495268}, + {8.879167, 0.999997258, 0.999496579}, + {8.883333, 0.999997258, 0.999497831}, + {8.8875, 0.999997258, 0.999499083}, + {8.891667, 0.999997258, 0.999500334}, + {8.895833, 0.999997258, 0.999501586}, + {8.9, 0.999997258, 0.999502838}, + {8.904167, 0.999997258, 0.999504089}, + {8.908333, 0.999997258, 0.999505281}, + {8.9125, 0.999997258, 0.999506533}, + {8.916667, 0.999997258, 0.999507785}, + {8.920833, 0.999997318, 0.999509037}, + {8.925, 0.999997318, 0.999510229}, + {8.929167, 0.999997318, 0.99951148}, + {8.933333, 0.999997318, 0.999512672}, + {8.9375, 0.999997318, 0.999513924}, + {8.941667, 0.999997318, 0.999515116}, + {8.945833, 0.999997377, 0.999516368}, + {8.95, 0.999997377, 0.99951756}, + {8.954167, 0.999997377, 0.999518752}, + {8.958333, 0.999997377, 0.999520004}, + {8.9625, 0.999997437, 0.999521196}, + {8.966667, 0.999997437, 0.999522388}, + {8.970833, 0.999997437, 0.99952358}, + {8.975, 0.999997497, 0.999524772}, + {8.979167, 0.999997497, 0.999525964}, + {8.983333, 0.999997497, 0.999527156}, + {8.9875, 0.999997556, 0.999528348}, + {8.991667, 0.999997556, 0.999529541}, + {8.995833, 0.999997616, 0.999530733}, + {9, 0.999997616, 0.999531865}, + {9.004167, 0.999997616, 0.999533057}, + {9.008333, 0.999997675, 0.999534249}, + {9.0125, 0.999997675, 0.999535382}, + {9.016667, 0.999997735, 0.999536574}, + {9.020833, 0.999997735, 0.999537706}, + {9.025, 0.999997735, 0.999538898}, + {9.029167, 0.999997795, 0.999540031}, + {9.033333, 0.999997795, 0.999541223}, + {9.0375, 0.999997854, 0.999542356}, + {9.041667, 0.999997854, 0.999543488}, + {9.045833, 0.999997914, 0.999544621}, + {9.05, 0.999997914, 0.999545753}, + {9.054167, 0.999997973, 0.999546945}, + {9.058333, 0.999997973, 0.999548078}, + {9.0625, 0.999997973, 0.99954921}, + {9.066667, 0.999998033, 0.999550343}, + {9.070833, 0.999998033, 0.999551415}, + {9.075, 0.999998093, 0.999552548}, + {9.079167, 0.999998093, 0.99955368}, + {9.083333, 0.999998093, 0.999554813}, + {9.0875, 0.999998152, 0.999555945}, + {9.091667, 0.999998152, 0.999557018}, + {9.095833, 0.999998212, 0.999558151}, + {9.1, 0.999998212, 0.999559224}, + {9.104167, 0.999998212, 0.999560356}, + {9.108333, 0.999998271, 0.999561429}, + {9.1125, 0.999998271, 0.999562562}, + {9.116667, 0.999998271, 0.999563634}, + {9.120833, 0.999998331, 0.999564707}, + {9.125, 0.999998331, 0.99956584}, + {9.129167, 0.999998331, 0.999566913}, + {9.133333, 0.999998331, 0.999567986}, + {9.1375, 0.999998391, 0.999569058}, + {9.141667, 0.999998391, 0.999570131}, + {9.145833, 0.999998391, 0.999571204}, + {9.15, 0.999998391, 0.999572277}, + {9.154167, 0.999998391, 0.99957335}, + {9.158333, 0.99999845, 0.999574423}, + {9.1625, 0.99999845, 0.999575496}, + {9.166667, 0.99999845, 0.999576569}, + {9.170833, 0.99999845, 0.999577582}, + {9.175, 0.99999845, 0.999578655}, + {9.179167, 0.99999845, 0.999579728}, + {9.183333, 0.99999845, 0.999580741}, + {9.1875, 0.99999845, 0.999581814}, + {9.191667, 0.99999845, 0.999582827}, + {9.195833, 0.99999851, 0.9995839}, + {9.2, 0.99999851, 0.999584913}, + {9.204167, 0.99999851, 0.999585927}, + {9.208333, 0.99999851, 0.999586999}, + {9.2125, 0.99999851, 0.999588013}, + {9.216667, 0.99999851, 0.999589026}, + {9.220833, 0.99999845, 0.999590039}, + {9.225, 0.99999845, 0.999591053}, + {9.229167, 0.99999845, 0.999592125}, + {9.233333, 0.99999845, 0.999593139}, + {9.2375, 0.99999845, 0.999594152}, + {9.241667, 0.99999845, 0.999595165}, + {9.245833, 0.99999845, 0.999596119}, + {9.25, 0.99999845, 0.999597132}, + {9.254167, 0.99999845, 0.999598145}, + {9.258333, 0.99999845, 0.999599159}, + {9.2625, 0.99999845, 0.999600172}, + {9.266667, 0.999998391, 0.999601126}, + {9.270833, 0.999998391, 0.999602139}, + {9.275, 0.999998391, 0.999603152}, + {9.279167, 0.999998391, 0.999604106}, + {9.283333, 0.999998391, 0.999605119}, + {9.2875, 0.999998391, 0.999606073}, + {9.291667, 0.999998331, 0.999607086}, + {9.295833, 0.999998331, 0.99960804}, + {9.3, 0.999998331, 0.999609053}, + {9.304167, 0.999998331, 0.999610007}, + {9.308333, 0.999998331, 0.99961096}, + {9.3125, 0.999998331, 0.999611914}, + {9.316667, 0.999998271, 0.999612927}, + {9.320833, 0.999998271, 0.999613881}, + {9.325, 0.999998271, 0.999614835}, + {9.329167, 0.999998271, 0.999615788}, + {9.333333, 0.999998271, 0.999616742}, + {9.3375, 0.999998271, 0.999617696}, + {9.341667, 0.999998212, 0.999618649}, + {9.345833, 0.999998212, 0.999619603}, + {9.35, 0.999998212, 0.999620557}, + {9.354167, 0.999998212, 0.999621511}, + {9.358333, 0.999998212, 0.999622464}, + {9.3625, 0.999998212, 0.999623418}, + {9.366667, 0.999998212, 0.999624312}, + {9.370833, 0.999998152, 0.999625266}, + {9.375, 0.999998152, 0.999626219}, + {9.379167, 0.999998152, 0.999627173}, + {9.383333, 0.999998152, 0.999628067}, + {9.3875, 0.999998152, 0.999629021}, + {9.391667, 0.999998152, 0.999629915}, + {9.395833, 0.999998152, 0.999630868}, + {9.4, 0.999998152, 0.999631763}, + {9.404167, 0.999998152, 0.999632716}, + {9.408333, 0.999998152, 0.99963361}, + {9.4125, 0.999998152, 0.999634564}, + {9.416667, 0.999998152, 0.999635458}, + {9.420833, 0.999998152, 0.999636352}, + {9.425, 0.999998152, 0.999637246}, + {9.429167, 0.999998152, 0.9996382}, + {9.433333, 0.999998152, 0.999639094}, + {9.4375, 0.999998152, 0.999639988}, + {9.441667, 0.999998152, 0.999640882}, + {9.445833, 0.999998152, 0.999641776}, + {9.45, 0.999998152, 0.99964267}, + {9.454167, 0.999998152, 0.999643564}, + {9.458333, 0.999998152, 0.999644458}, + {9.4625, 0.999998152, 0.999645352}, + {9.466667, 0.999998152, 0.999646246}, + {9.470833, 0.999998152, 0.999647141}, + {9.475, 0.999998212, 0.999648035}, + {9.479167, 0.999998212, 0.999648929}, + {9.483333, 0.999998212, 0.999649763}, + {9.4875, 0.999998212, 0.999650657}, + {9.491667, 0.999998212, 0.999651551}, + {9.495833, 0.999998212, 0.999652445}, + {9.5, 0.999998212, 0.99965328}, + {9.504167, 0.999998271, 0.999654174}, + {9.508333, 0.999998271, 0.999655008}, + {9.5125, 0.999998271, 0.999655902}, + {9.516667, 0.999998271, 0.999656737}, + {9.520833, 0.999998271, 0.999657631}, + {9.525, 0.999998331, 0.999658465}, + {9.529167, 0.999998331, 0.999659359}, + {9.533333, 0.999998331, 0.999660194}, + {9.5375, 0.999998331, 0.999661028}, + {9.541667, 0.999998331, 0.999661863}, + {9.545833, 0.999998391, 0.999662757}, + {9.55, 0.999998391, 0.999663591}, + {9.554167, 0.999998391, 0.999664426}, + {9.558333, 0.999998391, 0.99966526}, + {9.5625, 0.99999845, 0.999666095}, + {9.566667, 0.99999845, 0.999666929}, + {9.570833, 0.99999845, 0.999667764}, + {9.575, 0.99999845, 0.999668598}, + {9.579167, 0.99999845, 0.999669433}, + {9.583333, 0.99999851, 0.999670267}, + {9.5875, 0.99999851, 0.999671102}, + {9.591667, 0.99999851, 0.999671936}, + {9.595833, 0.99999851, 0.999672771}, + {9.6, 0.999998569, 0.999673545}, + {9.604167, 0.999998569, 0.99967438}, + {9.608333, 0.999998569, 0.999675214}, + {9.6125, 0.999998569, 0.999676049}, + {9.616667, 0.999998629, 0.999676824}, + {9.620833, 0.999998629, 0.999677658}, + {9.625, 0.999998629, 0.999678433}, + {9.629167, 0.999998629, 0.999679267}, + {9.633333, 0.999998629, 0.999680042}, + {9.6375, 0.999998689, 0.999680877}, + {9.641667, 0.999998689, 0.999681652}, + {9.645833, 0.999998689, 0.999682486}, + {9.65, 0.999998689, 0.999683261}, + {9.654167, 0.999998689, 0.999684036}, + {9.658333, 0.999998689, 0.999684811}, + {9.6625, 0.999998748, 0.999685645}, + {9.666667, 0.999998748, 0.99968642}, + {9.670833, 0.999998748, 0.999687195}, + {9.675, 0.999998748, 0.99968797}, + {9.679167, 0.999998748, 0.999688745}, + {9.683333, 0.999998748, 0.999689519}, + {9.6875, 0.999998748, 0.999690294}, + {9.691667, 0.999998748, 0.999691069}, + {9.695833, 0.999998808, 0.999691844}, + {9.7, 0.999998808, 0.999692619}, + {9.704167, 0.999998808, 0.999693394}, + {9.708333, 0.999998808, 0.999694169}, + {9.7125, 0.999998808, 0.999694943}, + {9.716667, 0.999998808, 0.999695718}, + {9.720833, 0.999998808, 0.999696434}, + {9.725, 0.999998808, 0.999697208}, + {9.729167, 0.999998808, 0.999697983}, + {9.733333, 0.999998808, 0.999698699}, + {9.7375, 0.999998808, 0.999699473}, + {9.741667, 0.999998808, 0.999700248}, + {9.745833, 0.999998808, 0.999700963}, + {9.75, 0.999998808, 0.999701738}, + {9.754167, 0.999998808, 0.999702454}, + {9.758333, 0.999998808, 0.999703228}, + {9.7625, 0.999998808, 0.999703944}, + {9.766667, 0.999998808, 0.999704719}, + {9.770833, 0.999998808, 0.999705434}, + {9.775, 0.999998808, 0.999706149}, + {9.779167, 0.999998808, 0.999706924}, + {9.783333, 0.999998808, 0.999707639}, + {9.7875, 0.999998808, 0.999708354}, + {9.791667, 0.999998808, 0.99970907}, + {9.795833, 0.999998808, 0.999709845}, + {9.8, 0.999998808, 0.99971056}, + {9.804167, 0.999998808, 0.999711275}, + {9.808333, 0.999998808, 0.99971199}, + {9.8125, 0.999998808, 0.999712706}, + {9.816667, 0.999998808, 0.999713421}, + {9.820833, 0.999998808, 0.999714136}, + {9.825, 0.999998808, 0.999714851}, + {9.829167, 0.999998808, 0.999715567}, + {9.833333, 0.999998748, 0.999716282}, + {9.8375, 0.999998748, 0.999716997}, + {9.841667, 0.999998748, 0.999717712}, + {9.845833, 0.999998748, 0.999718368}, + {9.85, 0.999998748, 0.999719083}, + {9.854167, 0.999998748, 0.999719799}, + {9.858333, 0.999998748, 0.999720514}, + {9.8625, 0.999998748, 0.999721169}, + {9.866667, 0.999998748, 0.999721885}, + {9.870833, 0.999998748, 0.9997226}, + {9.875, 0.999998748, 0.999723256}, + {9.879167, 0.999998748, 0.999723971}, + {9.883333, 0.999998748, 0.999724686}, + {9.8875, 0.999998748, 0.999725342}, + {9.891667, 0.999998748, 0.999726057}, + {9.895833, 0.999998748, 0.999726713}, + {9.9, 0.999998689, 0.999727428}, + {9.904167, 0.999998689, 0.999728084}, + {9.908333, 0.999998689, 0.999728799}, + {9.9125, 0.999998689, 0.999729455}, + {9.916667, 0.999998689, 0.99973011}, + {9.920833, 0.999998689, 0.999730825}, + {9.925, 0.999998689, 0.999731481}, + {9.929167, 0.999998689, 0.999732137}, + {9.933333, 0.999998689, 0.999732792}, + {9.9375, 0.999998689, 0.999733508}, + {9.941667, 0.999998689, 0.999734163}, + {9.945833, 0.999998689, 0.999734819}, + {9.95, 0.999998689, 0.999735475}, + {9.954167, 0.999998689, 0.99973613}, + {9.958333, 0.999998689, 0.999736786}, + {9.9625, 0.999998689, 0.999737501}, + {9.966667, 0.999998689, 0.999738157}, + {9.970833, 0.999998689, 0.999738812}, + {9.975, 0.999998689, 0.999739468}, + {9.979167, 0.999998689, 0.999740124}, + {9.983333, 0.999998689, 0.99974072}, + {9.9875, 0.999998689, 0.999741375}, + {9.991667, 0.999998748, 0.999742031}, + {9.995833, 0.999998748, 0.999742687}, + {10, 0.999998748, 0.999743342}}; +} // namespace Example1 From 034ebb04583523a1e12a5e728fee410aa626bb30 Mon Sep 17 00:00:00 2001 From: lukelowry Date: Fri, 20 Jun 2025 01:03:21 +0000 Subject: [PATCH 101/139] Apply pre-commmit fixes --- examples/PhasorDynamics/CMakeLists.txt | 2 +- examples/PhasorDynamics/Example3/example3.cpp | 2 +- .../PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 2 +- .../PhasorDynamics/Governor/TGOV1/TurbineGov.hpp | 4 ++-- .../Governor/TGOV1/TurbineGovData.hpp | 8 ++++---- .../SynchronousMachine/GENROUwS/Genrou.cpp | 13 ++++++------- src/Model/PhasorDynamics/SystemModelData.hpp | 13 ++++++------- 7 files changed, 21 insertions(+), 23 deletions(-) diff --git a/examples/PhasorDynamics/CMakeLists.txt b/examples/PhasorDynamics/CMakeLists.txt index 40615f940..36696ce66 100644 --- a/examples/PhasorDynamics/CMakeLists.txt +++ b/examples/PhasorDynamics/CMakeLists.txt @@ -1,4 +1,4 @@ add_subdirectory(Example1) add_subdirectory(Example2) add_subdirectory(Example3) -add_subdirectory(Example4) \ No newline at end of file +add_subdirectory(Example4) diff --git a/examples/PhasorDynamics/Example3/example3.cpp b/examples/PhasorDynamics/Example3/example3.cpp index 940ec7b82..398b92b1e 100644 --- a/examples/PhasorDynamics/Example3/example3.cpp +++ b/examples/PhasorDynamics/Example3/example3.cpp @@ -176,4 +176,4 @@ int main() fileout.close(); return 0; -} \ No newline at end of file +} diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index ea839f03b..8f4f19473 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -106,7 +106,7 @@ namespace GridKit tag_[0] = true; // Pv tag_[1] = true; // Ptx tag_[2] = false; // Pmech - + return 0; } diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 1ce329beb..0fedcf8b8 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -45,8 +45,8 @@ namespace GridKit using Component::yp_; using Component::ypB_; - using machine_type = MachineBase; - using real_type = typename Component::real_type; + using machine_type = MachineBase; + using real_type = typename Component::real_type; using model_data_type = TurbineGovData; public: diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp index 617c74b83..90bf639df 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp @@ -26,10 +26,10 @@ namespace GridKit RealT R{0.0}; ///< R RealT Pvmin{0.0}; ///< Min Valve Power RealT Pvmax{0.0}; ///< Max Valve Power - RealT T1{0.0}; ///< - RealT T2{0.0}; ///< - RealT T3{0.0}; ///< - RealT Dt{0.0}; ///< + RealT T1{0.0}; ///< + RealT T2{0.0}; ///< + RealT T3{0.0}; ///< + RealT Dt{0.0}; ///< }; } // namespace PhasorDynamics } // namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 3e59117fa..76652f521 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -151,7 +151,6 @@ namespace GridKit setDerivedParams(); } - /*! * @brief allocate method computes sparsity pattern of the Jacobian. */ @@ -284,14 +283,14 @@ namespace GridKit ScalarT vr = Vr(); ScalarT vi = Vi(); ScalarT pmech = pmech_set_; - //if (gov_) + // if (gov_) //{ - // pmech = gov_->Pmech(); // ISSUE IS HERE? - //} - //else + // pmech = gov_->Pmech(); // ISSUE IS HERE? + // } + // else //{ - // pmech = pmech_set_; - //} + // pmech = pmech_set_; + // } /* Read derivatives */ ScalarT delta_dot = yp_[0]; diff --git a/src/Model/PhasorDynamics/SystemModelData.hpp b/src/Model/PhasorDynamics/SystemModelData.hpp index d1ee323d9..b1bac809b 100644 --- a/src/Model/PhasorDynamics/SystemModelData.hpp +++ b/src/Model/PhasorDynamics/SystemModelData.hpp @@ -3,10 +3,9 @@ #include #include #include +#include #include #include -#include - namespace GridKit { @@ -36,11 +35,11 @@ namespace GridKit std::vector bus; // Component data - std::vector branch; - std::vector bus_fault; - std::vector genrou; - std::vector load; + std::vector branch; + std::vector bus_fault; + std::vector genrou; + std::vector < TurbineGovDataT gov; + std::vector load; }; } // namespace PhasorDynamics } // namespace GridKit From dd6ece0860057de31cf0eea0b0487c32a98ad0ca Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 21:04:53 -0500 Subject: [PATCH 102/139] edit: Gov data format error [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 5 +++++ .../PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 15 ++------------- .../PhasorDynamics/Governor/TGOV1/TurbineGov.hpp | 2 ++ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 6be8db8b4..42a7c2316 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -102,6 +102,11 @@ int main() // SystemModel sys(data); + + // Manual add gov components since SignalBus not implemented + + + sys.allocate(); // Get access to the fault diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 8f4f19473..086c231b5 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -6,18 +6,13 @@ * */ -// NOTES -// Input Variables: Machine Speed Deviation (w) -// Output Variables: Pmech, Pref -// (No algebraic variables in reduced form) -// Differential Variables: Ptx, Pv - #include "TurbineGov.hpp" #include #include #include +#include #define _USE_MATH_DEFINES @@ -30,13 +25,7 @@ namespace GridKit * @brief Constructor for Governor * * @param machine Generator Object - * @param R Droop Constant (p.u.) - * @param Pvmin Minimum Valve Position - * @param Pvmax Maximum Valve Position - * @param T1 Param description - * @param T2 Param description - * @param T3 Param description - * @param Dt Turbine Damping Coefficient (p.u.) + * @param data TGOV1 Data Object */ template TurbineGov::TurbineGov(machine_type* machine, const model_data_type& data) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 0fedcf8b8..be10c495c 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -16,6 +16,8 @@ namespace GridKit { namespace PhasorDynamics { + template + class TurbineGovData; template class MachineBase; } From 5612204d45e4fdbb0d58333ba4b87013804e8c58 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 21:12:39 -0500 Subject: [PATCH 103/139] edit: struct definition correction [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp | 2 +- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp | 2 +- src/Model/PhasorDynamics/SystemModelData.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index be10c495c..3e6ecf3d0 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -17,7 +17,7 @@ namespace GridKit namespace PhasorDynamics { template - class TurbineGovData; + struct TurbineGovData; template class MachineBase; } diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp index 90bf639df..242328ea7 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp @@ -1,5 +1,5 @@ /** - * @file GenrouData.hpp + * @file TurbineGovData.hpp * @author Luke Lowery (lukel@tamu.edu) * @brief Modeling data for TGOV1 (transmission lines) * diff --git a/src/Model/PhasorDynamics/SystemModelData.hpp b/src/Model/PhasorDynamics/SystemModelData.hpp index b1bac809b..9196971a0 100644 --- a/src/Model/PhasorDynamics/SystemModelData.hpp +++ b/src/Model/PhasorDynamics/SystemModelData.hpp @@ -38,7 +38,7 @@ namespace GridKit std::vector branch; std::vector bus_fault; std::vector genrou; - std::vector < TurbineGovDataT gov; + std::vector gov; std::vector load; }; } // namespace PhasorDynamics From 0fdaca2e5e0536302ec483212af35a5cecf86b6c Mon Sep 17 00:00:00 2001 From: lukelowry Date: Fri, 20 Jun 2025 02:39:43 +0000 Subject: [PATCH 104/139] Apply pre-commmit fixes --- examples/PhasorDynamics/Example4/example4.cpp | 17 +++++++---------- .../Governor/TGOV1/TurbineGov.cpp | 2 +- .../Governor/TGOV1/TurbineGov.hpp | 2 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 2 +- src/Model/PhasorDynamics/SystemModelData.hpp | 10 +++++----- 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 65450ce27..61405c115 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -82,12 +82,12 @@ int main() SystemModel sys(data); - // Manual add gen & gov components + // Manual add gen & gov components // since SignalBus not implemented // This is a hack // Create Pointers first - Genrou* gen; + Genrou* gen; TurbineGov* gov; // Set generator data @@ -124,20 +124,17 @@ int main() // Instatiate Genrou & add to system model gen = new Genrou( - sys.getBus(0), - gov, - data.genrou[0] - ); + sys.getBus(0), + gov, + data.genrou[0]); sys.addComponent(gen); // Instatiate TGOV1 & add to system model gov = new TurbineGov( - gen, - data.gov[0] - ); + gen, + data.gov[0]); sys.addComponent(gov); - sys.allocate(); // Get access to the fault diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 086c231b5..58840e5fb 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -11,8 +11,8 @@ #include #include -#include #include +#include #define _USE_MATH_DEFINES diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 3e6ecf3d0..98c41d1a0 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -20,7 +20,7 @@ namespace GridKit struct TurbineGovData; template class MachineBase; - } + } // namespace PhasorDynamics } // namespace GridKit namespace GridKit diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 3399d8854..44c8ceb0b 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -159,7 +159,7 @@ namespace GridKit * */ template - Genrou::Genrou(bus_type* bus, gov_type* gov,const model_data_type& data) + Genrou::Genrou(bus_type* bus, gov_type* gov, const model_data_type& data) : bus_(bus), busID_(0), gov_(gov), diff --git a/src/Model/PhasorDynamics/SystemModelData.hpp b/src/Model/PhasorDynamics/SystemModelData.hpp index 9196971a0..6899aa529 100644 --- a/src/Model/PhasorDynamics/SystemModelData.hpp +++ b/src/Model/PhasorDynamics/SystemModelData.hpp @@ -35,11 +35,11 @@ namespace GridKit std::vector bus; // Component data - std::vector branch; - std::vector bus_fault; - std::vector genrou; - std::vector gov; - std::vector load; + std::vector branch; + std::vector bus_fault; + std::vector genrou; + std::vector gov; + std::vector load; }; } // namespace PhasorDynamics } // namespace GridKit From ed22001a1187438d92acad376e705e24f7524e6c Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 21:40:01 -0500 Subject: [PATCH 105/139] edit: example 4 model init [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 63 ++++++++++++++----- .../Governor/TGOV1/TurbineGovData.hpp | 2 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 54 +++++++++++++--- .../SynchronousMachine/GENROUwS/Genrou.hpp | 1 + 4 files changed, 94 insertions(+), 26 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 42a7c2316..bfc8cb4e4 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include #include @@ -67,6 +69,27 @@ int main() data.branch[0].G = 0.0; data.branch[0].B = 0.0; + // Add faults + data.bus_fault.resize(1); + + data.bus_fault[0].R = 0.0; + data.bus_fault[0].X = 1e-3; + data.bus_fault[0].status = false; + + // + // Instantiate system model + // + + SystemModel sys(data); + + // Manual add gen & gov components + // since SignalBus not implemented + // This is a hack + + // Create Pointers first + Genrou* gen; + TurbineGov* gov; + // Set generator data data.genrou.resize(1); @@ -90,21 +113,29 @@ int main() data.genrou[0].S10 = 0.; data.genrou[0].S12 = 0.; - // Add faults - data.bus_fault.resize(1); - - data.bus_fault[0].R = 0.0; - data.bus_fault[0].X = 1e-3; - data.bus_fault[0].status = false; - - // - // Instantiate system model - // - - SystemModel sys(data); - - // Manual add gov components since SignalBus not implemented - + // Set Gov data + data.gov[0].R = 1; + data.gov[0].Pvmin = 0.2; + data.gov[0].Pvmax = 1; + data.gov[0].T1 = 1; + data.gov[0].T2 = 1; + data.gov[0].T3 = 1; + data.gov[0].Dt = 1; + + // Instatiate Genrou & add to system model + gen = new Genrou( + sys.getBus(gendata.bus_id), + gov, + data.genrou[0] + ); + sys.addComponent(gen); + + // Instatiate TGOV1 & add to system model + gov = new TurbineGov( + gen, + data.gov[0] + ); + sys.addComponent(gov); sys.allocate(); @@ -184,7 +215,7 @@ int main() for (size_t i = 0; i < output.size(); i++) { OutputData data = output[i]; - std::vector& ref_sol = Example4::reference_solution[i + 1]; + std::vector& ref_sol = Example1::reference_solution[i + 1]; real_type err = std::abs(std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - ref_sol[2]) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp index 242328ea7..d308bb92f 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp @@ -21,7 +21,7 @@ namespace GridKit * @todo Decide on naming scheme for model parameters. */ template - struct GenrouData + struct TurbineGovData { RealT R{0.0}; ///< R RealT Pvmin{0.0}; ///< Min Valve Power diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 76652f521..3399d8854 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -40,6 +40,7 @@ namespace GridKit Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), busID_(0), + gov_(nullptr), unit_id_(unit_id), p0_(0.), q0_(0.), @@ -95,6 +96,7 @@ namespace GridKit real_type S12) : bus_(bus), busID_(0), + gov_(nullptr), unit_id_(unit_id), p0_(p0), q0_(q0), @@ -127,6 +129,40 @@ namespace GridKit Genrou::Genrou(bus_type* bus, const model_data_type& data) : bus_(bus), busID_(0), + gov_(nullptr), + unit_id_(data.unit_id), + p0_(data.p0), + q0_(data.q0), + H_(data.H), + D_(data.D), + Ra_(data.Ra), + Tdop_(data.Tdop), + Tdopp_(data.Tdopp), + Tqopp_(data.Tqopp), + Tqop_(data.Tqop), + Xd_(data.Xd), + Xdp_(data.Xdp), + Xdpp_(data.Xdpp), + Xq_(data.Xq), + Xqp_(data.Xqp), + Xqpp_(data.Xqpp), + Xl_(data.Xl), + S10_(data.S10), + S12_(data.S12) + { + size_ = 20; + setDerivedParams(); + } + + /*! + * @brief Constructor for the GENROU generator with governor pointer + * + */ + template + Genrou::Genrou(bus_type* bus, gov_type* gov,const model_data_type& data) + : bus_(bus), + busID_(0), + gov_(gov), unit_id_(data.unit_id), p0_(data.p0), q0_(data.q0), @@ -282,15 +318,15 @@ namespace GridKit ScalarT ini = y_[19]; ScalarT vr = Vr(); ScalarT vi = Vi(); - ScalarT pmech = pmech_set_; - // if (gov_) - //{ - // pmech = gov_->Pmech(); // ISSUE IS HERE? - // } - // else - //{ - // pmech = pmech_set_; - // } + ScalarT pmech; + if (gov_) + { + pmech = gov_->Pmech(); // ISSUE IS HERE? + } + else + { + pmech = pmech_set_; + } /* Read derivatives */ ScalarT delta_dot = yp_[0]; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 0a695e91c..f6961b85c 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -57,6 +57,7 @@ namespace GridKit public: Genrou(bus_type* bus, IdxT unit_id); Genrou(bus_type* bus, const model_data_type& data); + Genrou(bus_type* bus, gov_type* gov, const model_data_type& data); Genrou(bus_type* bus, IdxT unit_id, ScalarT p0, From 3e1cfc2a21d3a082f5cc5215f65d2635c5e9c766 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 21:43:29 -0500 Subject: [PATCH 106/139] edit: fix type parameter --- examples/PhasorDynamics/Example4/example4.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index bfc8cb4e4..65450ce27 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -123,15 +123,15 @@ int main() data.gov[0].Dt = 1; // Instatiate Genrou & add to system model - gen = new Genrou( - sys.getBus(gendata.bus_id), + gen = new Genrou( + sys.getBus(0), gov, data.genrou[0] ); sys.addComponent(gen); // Instatiate TGOV1 & add to system model - gov = new TurbineGov( + gov = new TurbineGov( gen, data.gov[0] ); From 1b42ff8f7bf383d4e0cfdfb573909cd8580ed87a Mon Sep 17 00:00:00 2001 From: lukelowry Date: Fri, 20 Jun 2025 02:46:51 +0000 Subject: [PATCH 107/139] Apply pre-commmit fixes --- examples/PhasorDynamics/Example4/example4.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/PhasorDynamics/Example4/example4.hpp b/examples/PhasorDynamics/Example4/example4.hpp index df2378394..f8ce1a966 100644 --- a/examples/PhasorDynamics/Example4/example4.hpp +++ b/examples/PhasorDynamics/Example4/example4.hpp @@ -2413,4 +2413,4 @@ namespace Example4 {9.991667, 0.999998748, 0.999742031}, {9.995833, 0.999998748, 0.999742687}, {10, 0.999998748, 0.999743342}}; -} // namespace Example1 +} // namespace Example4 From 9c59bafbb6568c0ce6420768ef87f9733bf4b735 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 21:50:35 -0500 Subject: [PATCH 108/139] edit: allocation example 4 [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 7 ++++++- examples/PhasorDynamics/Example4/example4.hpp | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 65450ce27..8a7ab01c6 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -90,6 +90,9 @@ int main() Genrou* gen; TurbineGov* gov; + gen = nullptr; + gov = nullptr; + // Set generator data data.genrou.resize(1); @@ -113,6 +116,8 @@ int main() data.genrou[0].S10 = 0.; data.genrou[0].S12 = 0.; + data.gov.resize(1); + // Set Gov data data.gov[0].R = 1; data.gov[0].Pvmin = 0.2; @@ -215,7 +220,7 @@ int main() for (size_t i = 0; i < output.size(); i++) { OutputData data = output[i]; - std::vector& ref_sol = Example1::reference_solution[i + 1]; + std::vector& ref_sol = Example4::reference_solution[i + 1]; real_type err = std::abs(std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - ref_sol[2]) diff --git a/examples/PhasorDynamics/Example4/example4.hpp b/examples/PhasorDynamics/Example4/example4.hpp index fabbdd19d..df2378394 100644 --- a/examples/PhasorDynamics/Example4/example4.hpp +++ b/examples/PhasorDynamics/Example4/example4.hpp @@ -1,5 +1,5 @@ /** - * @file example1.hpp + * @file example4.hpp * @author Adam Birchfield (abirchfield@tamu.edu) * @author Slaven Peles (peless@ornl.gov) * @brief Reference solution for the 2-bus system obtained with Powerworld @@ -9,7 +9,7 @@ // Columns: // Time, Machine Speed (PowerWorld), Bus 1 Voltage Magnitude (PowerWorld)}, -namespace Example1 +namespace Example4 { std::vector> reference_solution = {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit From 5fdbe55e30ba7f0405542550990fa82c48ba1b8d Mon Sep 17 00:00:00 2001 From: lukelowry Date: Fri, 20 Jun 2025 04:15:44 +0000 Subject: [PATCH 109/139] Apply pre-commmit fixes --- examples/PhasorDynamics/Example4/example4.cpp | 5 +---- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 2 +- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 4700efd9e..a037015ab 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -82,8 +82,6 @@ int main() SystemModel sys(data); - - // Set generator data data.genrou.resize(1); @@ -118,7 +116,7 @@ int main() data.gov[0].T3 = 1; data.gov[0].Dt = 1; - // Manual add gen & gov components + // Manual add gen & gov components // since SignalBus not implemented // This is a hack @@ -140,7 +138,6 @@ int main() sys.addComponent(gen); sys.addComponent(gov); - sys.allocate(); // Get access to the fault diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 086c231b5..58840e5fb 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -11,8 +11,8 @@ #include #include -#include #include +#include #define _USE_MATH_DEFINES diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 02794a032..8ca799af7 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -451,7 +451,7 @@ namespace GridKit { gov_ = gov; } - + // Available template instantiations template class Genrou; template class Genrou; From 6a27baf97ff3348d9636bb781fadcd350f250058 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 23:19:31 -0500 Subject: [PATCH 110/139] add: gov setter for gen --- examples/PhasorDynamics/Example4/example4.cpp | 23 +++++------ .../Governor/TGOV1/TurbineGov.cpp | 2 +- .../SynchronousMachine/GENROUwS/Genrou.cpp | 39 +++---------------- .../SynchronousMachine/GENROUwS/Genrou.hpp | 4 +- 4 files changed, 22 insertions(+), 46 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 8207ff639..4700efd9e 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -82,16 +82,7 @@ int main() SystemModel sys(data); - // Manual add gen & gov components - // since SignalBus not implemented - // This is a hack - // Create Pointers first - Genrou* gen; - TurbineGov* gov; - - gen = nullptr; - gov = nullptr; // Set generator data data.genrou.resize(1); @@ -127,19 +118,29 @@ int main() data.gov[0].T3 = 1; data.gov[0].Dt = 1; + // Manual add gen & gov components + // since SignalBus not implemented + // This is a hack + + // Create Pointers first + Genrou* gen; + TurbineGov* gov; + // Instatiate Genrou & add to system model gen = new Genrou( sys.getBus(0), - gov, data.genrou[0]); - sys.addComponent(gen); // Instatiate TGOV1 & add to system model gov = new TurbineGov( gen, data.gov[0]); + gen->setgovenor(gov); + + sys.addComponent(gen); sys.addComponent(gov); + sys.allocate(); // Get access to the fault diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 58840e5fb..086c231b5 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -11,8 +11,8 @@ #include #include -#include #include +#include #define _USE_MATH_DEFINES diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 44c8ceb0b..02794a032 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -154,39 +154,6 @@ namespace GridKit setDerivedParams(); } - /*! - * @brief Constructor for the GENROU generator with governor pointer - * - */ - template - Genrou::Genrou(bus_type* bus, gov_type* gov, const model_data_type& data) - : bus_(bus), - busID_(0), - gov_(gov), - unit_id_(data.unit_id), - p0_(data.p0), - q0_(data.q0), - H_(data.H), - D_(data.D), - Ra_(data.Ra), - Tdop_(data.Tdop), - Tdopp_(data.Tdopp), - Tqopp_(data.Tqopp), - Tqop_(data.Tqop), - Xd_(data.Xd), - Xdp_(data.Xdp), - Xdpp_(data.Xdpp), - Xq_(data.Xq), - Xqp_(data.Xqp), - Xqpp_(data.Xqpp), - Xl_(data.Xl), - S10_(data.S10), - S12_(data.S12) - { - size_ = 20; - setDerivedParams(); - } - /*! * @brief allocate method computes sparsity pattern of the Jacobian. */ @@ -479,6 +446,12 @@ namespace GridKit return y_[1]; } + template + void Genrou::setgovenor(gov_type* gov) + { + gov_ = gov; + } + // Available template instantiations template class Genrou; template class Genrou; diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index f6961b85c..33dad1ce3 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -57,7 +57,6 @@ namespace GridKit public: Genrou(bus_type* bus, IdxT unit_id); Genrou(bus_type* bus, const model_data_type& data); - Genrou(bus_type* bus, gov_type* gov, const model_data_type& data); Genrou(bus_type* bus, IdxT unit_id, ScalarT p0, @@ -100,6 +99,9 @@ namespace GridKit // Read Access to Machine Relative Speed ScalarT speed() override; + // TODO set governor method + void setgovenor(gov_type* gov); + private: void setDerivedParams(); From 7755e3e65b5f9d786be265f985c8af4fb20f37b3 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Thu, 19 Jun 2025 23:33:19 -0500 Subject: [PATCH 111/139] fix: Gov data struct defined incorrectly --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 98c41d1a0..7bb757edd 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -16,7 +16,7 @@ namespace GridKit { namespace PhasorDynamics { - template + template struct TurbineGovData; template class MachineBase; From 02f0552020b6254decb59891052111b13cb465cf Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 20 Jun 2025 17:04:50 -0500 Subject: [PATCH 112/139] edit: cmake example 4 link turbine gov [skip ci] --- examples/PhasorDynamics/Example4/CMakeLists.txt | 3 ++- .../PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 2 +- .../PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp | 4 +++- .../SynchronousMachine/GENROUwS/Genrou.cpp | 12 ------------ .../SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 5 files changed, 7 insertions(+), 16 deletions(-) diff --git a/examples/PhasorDynamics/Example4/CMakeLists.txt b/examples/PhasorDynamics/Example4/CMakeLists.txt index 68361cffc..6a5ac6bc6 100644 --- a/examples/PhasorDynamics/Example4/CMakeLists.txt +++ b/examples/PhasorDynamics/Example4/CMakeLists.txt @@ -3,7 +3,8 @@ target_link_libraries(phasordynamics_example4 GRIDKIT::phasor_dynamics_bus GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch - GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_genrou, + GRIDKIT::phasor_dynamics_turbinegov, GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS phasordynamics_example4 RUNTIME DESTINATION bin) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 58840e5fb..086c231b5 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -11,8 +11,8 @@ #include #include -#include #include +#include #define _USE_MATH_DEFINES diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp index d308bb92f..6e027e367 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp @@ -1,7 +1,7 @@ /** * @file TurbineGovData.hpp * @author Luke Lowery (lukel@tamu.edu) - * @brief Modeling data for TGOV1 (transmission lines) + * @brief Modeling data for TGOV1 * */ #pragma once @@ -23,6 +23,8 @@ namespace GridKit template struct TurbineGovData { + IdxT gov_id{0}; ///< Unique unit ID + RealT R{0.0}; ///< R RealT Pvmin{0.0}; ///< Min Valve Power RealT Pvmax{0.0}; ///< Max Valve Power diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 8ca799af7..5c765461c 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -24,18 +24,6 @@ namespace GridKit namespace PhasorDynamics { - /*! - * @brief Constructor for all custom arguments - * - * @param bus - * @brief Constructor for a pi-model branch - * - * Arguments passed to ModelEvaluatorImpl: - * - Number of equations = 0 - * - Number of independent variables = 0 - * - Number of quadratures = 0 - * - Number of optimization parameters = 0 - */ template Genrou::Genrou(bus_type* bus, IdxT unit_id) : bus_(bus), diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 33dad1ce3..c1f637b4a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -1,5 +1,5 @@ /** - * @file Genrou.cpp + * @file Genrou.hpp * @author Adam Birchfield (abirchfield@tamu.edu) * @author Slaven Peles (peless@ornl.gov) * @brief Declaration of a GENROU generator model. From ff60d122b5d1bfe3a0ded19506f014b7dd15cba4 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 20 Jun 2025 18:10:24 -0500 Subject: [PATCH 113/139] edit: typical gov params (docs and example) [skip ci] --- examples/PhasorDynamics/Example4/CMakeLists.txt | 4 ++-- examples/PhasorDynamics/Example4/example4.cpp | 14 +++++++------- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/examples/PhasorDynamics/Example4/CMakeLists.txt b/examples/PhasorDynamics/Example4/CMakeLists.txt index 6a5ac6bc6..55d69eaab 100644 --- a/examples/PhasorDynamics/Example4/CMakeLists.txt +++ b/examples/PhasorDynamics/Example4/CMakeLists.txt @@ -3,8 +3,8 @@ target_link_libraries(phasordynamics_example4 GRIDKIT::phasor_dynamics_bus GRIDKIT::phasor_dynamics_bus_fault GRIDKIT::phasor_dynamics_branch - GRIDKIT::phasor_dynamics_genrou, - GRIDKIT::phasor_dynamics_turbinegov, + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_turbinegov GRIDKIT::phasor_dynamics_load GRIDKIT::solvers_dyn) install(TARGETS phasordynamics_example4 RUNTIME DESTINATION bin) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index a037015ab..af6ca62fa 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -107,14 +107,14 @@ int main() data.gov.resize(1); - // Set Gov data - data.gov[0].R = 1; - data.gov[0].Pvmin = 0.2; + // Set Gov data (Default PW values) + data.gov[0].R = 0.05; + data.gov[0].Pvmin = 0; data.gov[0].Pvmax = 1; - data.gov[0].T1 = 1; - data.gov[0].T2 = 1; - data.gov[0].T3 = 1; - data.gov[0].Dt = 1; + data.gov[0].T1 = 0.5; + data.gov[0].T2 = 2.5; + data.gov[0].T3 = 7.5; + data.gov[0].Dt = 0; // Manual add gen & gov components // since SignalBus not implemented diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 574de9218..34b7d664c 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -15,13 +15,13 @@ Standard model of the stream turbine Symbol | Units | Description | Typical Value | Note ------------|--------|-----------------------------------|---------------| ------ -$R$ | [p.u.] | Droop Constant | 1 | -$T_1$ | [sec] | Valve Time Delay | 1 | -$T_2$ | [sec] | Turbine Numerator Time Constant | 1 | -$T_3$ | [sec] | Turbine Delay | 1 | -$P_{vmax}$ | [p.u.] | Stator leakage reactance | 1 | -$P_{vmin}$ | [p.u.] | Max Valve Position | 1 | -$D_t$ | [p.u.] | Turbine Damping Coefficient | 1 | +$R$ | [p.u.] | Droop Constant | 0.05 | +$T_1$ | [sec] | Valve Time Delay | 0.5 | +$T_2$ | [sec] | Turbine Numerator Time Constant | 2.5 | +$T_3$ | [sec] | Turbine Delay | 7.5 | +$P_{vmax}$ | [p.u.] | Stator leakage reactance | 1 | +$P_{vmin}$ | [p.u.] | Max Valve Position | 0 | +$D_t$ | [p.u.] | Turbine Damping Coefficient | 0 | ### Internal Variables From 077fcde5f423ac0e0ba5b6c2bd0bc079e1d004ff Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Fri, 20 Jun 2025 18:40:28 -0500 Subject: [PATCH 114/139] edit: initialization correction w no limit function [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/README.md | 8 ++++++++ .../PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 12 ++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/TGOV1/README.md index 34b7d664c..852b7ecd0 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/README.md +++ b/src/Model/PhasorDynamics/Governor/TGOV1/README.md @@ -90,6 +90,7 @@ smooth approximation (smooth indicator $\phi$) expressed generically as follows. ``` ## Initialization +Assuming no limits are reached, initialized reveals: ```math \begin{aligned} P_{tx} &= (T_3-T_2) P_{mech}\\ @@ -98,3 +99,10 @@ smooth approximation (smooth indicator $\phi$) expressed generically as follows. \dot{P}_{v} &=0\\ \end{aligned} ``` + +And if the reference power is a parameter, we can deduce +```math +\begin{aligned} + P_{ref} &= R P_{mech}\\ +\end{aligned} +``` diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 086c231b5..b3f384470 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -68,15 +68,19 @@ namespace GridKit int TurbineGov::initialize() { + // Initial mechanical = initial electric power + // TODO obtain from generator value + ScalarT p0 = 1; + // Input Variables (Parameter for now) - pref_ = 1 / R_; + pref_ = R_ * p0; // Differential Variables - y_[0] = (T3_ - T2_) * R_ * pref_; // Ptx (Turbine Power ) - y_[1] = R_ * pref_; // Pv (Valve Position) + y_[0] = (T3_ - T2_) * p0; // Ptx (Turbine Power ) + y_[1] = p0; // Pv (Valve Position) // Algebraic Variables - y_[2] = R_ * pref_; // Pmech + y_[2] = p0; // Pmech // D.V. Derivative yp_[0] = 0.0; // Ptx From 2dc87dd106bdbaecd2a4935678c6a229d75257b5 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 15:13:15 -0500 Subject: [PATCH 115/139] add: smooth indicator implementation [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 6 ++-- .../Governor/TGOV1/TurbineGov.cpp | 32 ++++++++++++++++++- .../Governor/TGOV1/TurbineGov.hpp | 8 +++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index af6ca62fa..2a85a3ba5 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -228,9 +228,9 @@ int main() error_w = err; // // Optional output - // std::cout << "GridKit: t = " << data.ti - // << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) - // << ", w = " << (1.0 + data.dw) << "\n"; + std::cout << "GridKit: t = " << data.ti + << ", |V| = " << std::sqrt(data.Vr * data.Vr + data.Vi * data.Vi) + << ", w = " << (1.0 + data.dw) << "\n"; // std::cout << "Ref : t = " << ref_sol[0] // << ", |V| = " << ref_sol[2] // << ", w = " << ref_sol[1] diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index b3f384470..9f69ac972 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -103,6 +103,31 @@ namespace GridKit return 0; } + template + ScalarT TurbineGov::sigmoid(ScalarT x) + { + ScalarT a = 200; + return a*x / ( 1 + std::abs(a*x) ) / 2 + 1 / 2 + } + + template + ScalarT TurbineGov::indicator_low(ScalarT x, ScalarT f) + { + return (this->sigmoid(Pvmin_ - x)) * (this->sigmoid(-f)); + } + + template + ScalarT TurbineGov::indicator_high(ScalarT x, ScalarT f) + { + return (this->sigmoid(x - Pvmax_)) * (this->sigmoid(f)); + } + + template + ScalarT TurbineGov::indicator(ScalarT x, ScalarT f) + { + return ( 1 - this->indicator_low(x, f) ) * ( 1 - this->indicator_high(x, f) ); + } + /** * @brief Residuals of system equations * @@ -123,9 +148,14 @@ namespace GridKit ScalarT pv_dot = yp_[0]; ScalarT ptx_dot = yp_[1]; + // The 'pre-limit' derivative of Pv + ScalarT f = (pv - (pref_ - omega) / R_) / T1_; + ScalarT valv_ind = this->indicator(pv, f); + + // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; - f_[1] = pv_dot + (pv - (pref_ - omega) / R_) / T3_; + f_[1] = pv_dot + valv_ind * f; // Internal Algebraic Equations f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index 7bb757edd..be46834c5 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -74,6 +74,14 @@ namespace GridKit // Read Access to Pmech ScalarT Pmech() override; + // Activation function (sigmoid approximation) + ScalarT sigmoid(ScalarT x); + + // Indicator of Valve limit states + ScalarT indicator_low(ScalarT x, ScalarT f); + ScalarT indicator_high(ScalarT x, ScalarT f); + ScalarT indicator(ScalarT x, ScalarT f); + private: // Associated Machine Model machine_type* machine_; From 403c354f08ecedc82f991a4e63109adb1d1c07f8 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 15:49:20 -0500 Subject: [PATCH 116/139] edit: valve sign deriv [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 9f69ac972..6d77834b7 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -68,6 +68,7 @@ namespace GridKit int TurbineGov::initialize() { + // Initial mechanical = initial electric power // TODO obtain from generator value ScalarT p0 = 1; @@ -107,7 +108,7 @@ namespace GridKit ScalarT TurbineGov::sigmoid(ScalarT x) { ScalarT a = 200; - return a*x / ( 1 + std::abs(a*x) ) / 2 + 1 / 2 + return a*x / ( 1 + std::abs(a*x) ) / 2 + 1 / 2; } template @@ -149,13 +150,12 @@ namespace GridKit ScalarT ptx_dot = yp_[1]; // The 'pre-limit' derivative of Pv - ScalarT f = (pv - (pref_ - omega) / R_) / T1_; + ScalarT f = ( -pv + (pref_ - omega) / R_) / T1_; ScalarT valv_ind = this->indicator(pv, f); - // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; - f_[1] = pv_dot + valv_ind * f; + f_[1] = pv_dot - valv_ind * f; // Internal Algebraic Equations f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); From c2c7e39db3385b06706fbd622339c3bb18995dae Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:00:58 -0500 Subject: [PATCH 117/139] edit: parameter tuning [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 6d77834b7..a1a22009e 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -107,7 +107,7 @@ namespace GridKit template ScalarT TurbineGov::sigmoid(ScalarT x) { - ScalarT a = 200; + ScalarT a = 4000; return a*x / ( 1 + std::abs(a*x) ) / 2 + 1 / 2; } @@ -150,12 +150,12 @@ namespace GridKit ScalarT ptx_dot = yp_[1]; // The 'pre-limit' derivative of Pv - ScalarT f = ( -pv + (pref_ - omega) / R_) / T1_; + ScalarT f = ( -pv + (pref_ - omega) / R_); ScalarT valv_ind = this->indicator(pv, f); // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; - f_[1] = pv_dot - valv_ind * f; + f_[1] = pv_dot - valv_ind * f / T1_; // Internal Algebraic Equations f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); From c5da8816d4857d16a01f4c37ecf9a0a424433778 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:15:25 -0500 Subject: [PATCH 118/139] fix: IVP correction [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 4 ++++ src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 7 ++++--- .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp | 6 ++++++ .../PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 2a85a3ba5..4b75f0f35 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -129,6 +129,10 @@ int main() sys.getBus(0), data.genrou[0]); + // Hack, need to gaurentee that gen is + // initialized first so Gov can access torque + gen->initialize(); + // Instatiate TGOV1 & add to system model gov = new TurbineGov( gen, diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index a1a22009e..da16047f9 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -69,9 +69,9 @@ namespace GridKit { - // Initial mechanical = initial electric power - // TODO obtain from generator value - ScalarT p0 = 1; + // Initial mechanical = initial electric torque + // There is definitily a better way to do this! + ScalarT p0 = machine_->get_torque(); // Input Variables (Parameter for now) pref_ = R_ * p0; @@ -86,6 +86,7 @@ namespace GridKit // D.V. Derivative yp_[0] = 0.0; // Ptx yp_[1] = 0.0; // Pv + yp_[2] = 0.0; // Bug?? I shouldn't need to set this return 0; } diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 5c765461c..8a7f92cb2 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -434,6 +434,12 @@ namespace GridKit return y_[1]; } + template + ScalarT Genrou::get_torque() + { + return y_[12]; + } + template void Genrou::setgovenor(gov_type* gov) { diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index c1f637b4a..74f70862a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -98,6 +98,7 @@ namespace GridKit // Read Access to Machine Relative Speed ScalarT speed() override; + ScalarT get_torque() override; // TODO set governor method void setgovenor(gov_type* gov); From f03221b39f58a792c1809b1d3576fe30b4da2307 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:16:33 -0500 Subject: [PATCH 119/139] fix: incorrect override keyword [skip ci] --- src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index 74f70862a..d79d57bee 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -98,7 +98,7 @@ namespace GridKit // Read Access to Machine Relative Speed ScalarT speed() override; - ScalarT get_torque() override; + ScalarT get_torque(); // TODO set governor method void setgovenor(gov_type* gov); From 9b93f528719b81536840261446a9edca430f8b3d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:18:05 -0500 Subject: [PATCH 120/139] add: MachineBase cirtual torque access [skip ci] --- src/Model/PhasorDynamics/MachineBase.hpp | 1 + src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/MachineBase.hpp b/src/Model/PhasorDynamics/MachineBase.hpp index dc75c2877..d1a9c36fc 100644 --- a/src/Model/PhasorDynamics/MachineBase.hpp +++ b/src/Model/PhasorDynamics/MachineBase.hpp @@ -15,6 +15,7 @@ namespace GridKit { public: virtual ScalarT speed() = 0; + virtual ScalarT get_torque() = 0; }; } // namespace PhasorDynamics diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp index d79d57bee..74f70862a 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp @@ -98,7 +98,7 @@ namespace GridKit // Read Access to Machine Relative Speed ScalarT speed() override; - ScalarT get_torque(); + ScalarT get_torque() override; // TODO set governor method void setgovenor(gov_type* gov); From 2611a854b0c415a7ec9363a2ae571c94c57ca56e Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:36:10 -0500 Subject: [PATCH 121/139] edit: fault time to assess IVP stabilize [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 18 ++++++++++-------- .../SynchronousMachine/GENROUwS/Genrou.cpp | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 4b75f0f35..2b96eb419 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -131,7 +131,7 @@ int main() // Hack, need to gaurentee that gen is // initialized first so Gov can access torque - gen->initialize(); + // gen->initialize(); // Instatiate TGOV1 & add to system model gov = new TurbineGov( @@ -193,20 +193,22 @@ int main() real_type start = static_cast(clock()); // Run for 1s + real_type tfault = 6.0; + real_type fault_duration = 0.1; ida.initializeSimulation(0.0, false); - int nout = static_cast(std::round((1.0 - 0.0) / dt)); - ida.runSimulation(1.0, nout, output_cb); + int nout = static_cast(std::round((tfault - 0.0) / dt)); + ida.runSimulation(tfault, nout, output_cb); // Introduce fault and run for the next 0.1s fault->setStatus(true); - ida.initializeSimulation(1.0, false); - nout = static_cast(std::round((1.1 - 1.0) / dt)); - ida.runSimulation(1.1, nout, output_cb); + ida.initializeSimulation(tfault, false); + nout = static_cast(std::round((fault_duration) / dt)); + ida.runSimulation(tfault + fault_duration, nout, output_cb); // Clear the fault and run until t = 10s. fault->setStatus(false); - ida.initializeSimulation(1.1, false); - nout = static_cast(std::round((10.0 - 1.1) / dt)); + ida.initializeSimulation(tfault+fault_duration, false); + nout = static_cast(std::round((10.0 - tfault+fault_duration) / dt)); ida.runSimulation(10.0, nout, output_cb); real_type stop = static_cast(clock()); diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 8a7f92cb2..452dde02b 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -437,7 +437,23 @@ namespace GridKit template ScalarT Genrou::get_torque() { - return y_[12]; + ScalarT vr = Vr(); + ScalarT vi = Vi(); + ScalarT p = p0_; + ScalarT q = q0_; + ScalarT vm2 = vr * vr + vi * vi; + ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; + ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; + ScalarT delta = atan2(Ei, Er); + ScalarT omega = 0; + ScalarT ir = (p * vr + q * vi) / vm2; + ScalarT ii = (p * vi - q * vr) / vm2; + ScalarT id = ir * sin(delta) - ii * cos(delta); + ScalarT iq = ir * cos(delta) + ii * sin(delta); + ScalarT psiqpp = -vd / (1 + omega); + ScalarT psidpp = vq / (1 + omega); + ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; + return Te; } template From feedaa140943b1c194155cf710220ec9b6b57121 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:38:00 -0500 Subject: [PATCH 122/139] edit: modify torque access [skip ci] --- .../SynchronousMachine/GENROUwS/Genrou.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp index 452dde02b..044558f3d 100644 --- a/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp +++ b/src/Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.cpp @@ -313,7 +313,6 @@ namespace GridKit f_[16] = ii + B_ * vr + G_ * vi - ini; /* 2 Genrou control inputs are set to constant for this example */ - // f_[17] = pmech - pmech_set_; f_[17] = efd - efd_set_; /* 2 Genrou current source definitions */ @@ -437,23 +436,7 @@ namespace GridKit template ScalarT Genrou::get_torque() { - ScalarT vr = Vr(); - ScalarT vi = Vi(); - ScalarT p = p0_; - ScalarT q = q0_; - ScalarT vm2 = vr * vr + vi * vi; - ScalarT Er = vr + (Ra_ * p * vr + Ra_ * q * vi - Xq_ * p * vi + Xq_ * q * vr) / vm2; - ScalarT Ei = vi + (Ra_ * p * vi - Ra_ * q * vr + Xq_ * p * vr + Xq_ * q * vi) / vm2; - ScalarT delta = atan2(Ei, Er); - ScalarT omega = 0; - ScalarT ir = (p * vr + q * vi) / vm2; - ScalarT ii = (p * vi - q * vr) / vm2; - ScalarT id = ir * sin(delta) - ii * cos(delta); - ScalarT iq = ir * cos(delta) + ii * sin(delta); - ScalarT psiqpp = -vd / (1 + omega); - ScalarT psidpp = vq / (1 + omega); - ScalarT Te = (psidpp - id * Xdpp_) * iq - (psiqpp - iq * Xdpp_) * id; - return Te; + return y_[12]; } template From d77deb390d545e697bb8515050152a8a95897d74 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:41:28 -0500 Subject: [PATCH 123/139] edit: time of fault change caused segmentation fault [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 2b96eb419..0c237ee89 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -193,7 +193,7 @@ int main() real_type start = static_cast(clock()); // Run for 1s - real_type tfault = 6.0; + real_type tfault = 1.0; real_type fault_duration = 0.1; ida.initializeSimulation(0.0, false); int nout = static_cast(std::round((tfault - 0.0) / dt)); @@ -208,7 +208,7 @@ int main() // Clear the fault and run until t = 10s. fault->setStatus(false); ida.initializeSimulation(tfault+fault_duration, false); - nout = static_cast(std::round((10.0 - tfault+fault_duration) / dt)); + nout = static_cast(std::round((10.0 - tfault + fault_duration) / dt)); ida.runSimulation(10.0, nout, output_cb); real_type stop = static_cast(clock()); From 904c6f64f67fcf0d736a3de6e656dc6910ea742a Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 16:48:59 -0500 Subject: [PATCH 124/139] edit: increase valve upper bound example 4 [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 0c237ee89..83212acb1 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -110,7 +110,7 @@ int main() // Set Gov data (Default PW values) data.gov[0].R = 0.05; data.gov[0].Pvmin = 0; - data.gov[0].Pvmax = 1; + data.gov[0].Pvmax = 1.2; data.gov[0].T1 = 0.5; data.gov[0].T2 = 2.5; data.gov[0].T3 = 7.5; @@ -193,22 +193,20 @@ int main() real_type start = static_cast(clock()); // Run for 1s - real_type tfault = 1.0; - real_type fault_duration = 0.1; ida.initializeSimulation(0.0, false); - int nout = static_cast(std::round((tfault - 0.0) / dt)); - ida.runSimulation(tfault, nout, output_cb); + int nout = static_cast(std::round((1.0 - 0.0) / dt)); + ida.runSimulation(1.0, nout, output_cb); // Introduce fault and run for the next 0.1s fault->setStatus(true); - ida.initializeSimulation(tfault, false); - nout = static_cast(std::round((fault_duration) / dt)); - ida.runSimulation(tfault + fault_duration, nout, output_cb); + ida.initializeSimulation(1.0, false); + nout = static_cast(std::round((1.1 - 1.0) / dt)); + ida.runSimulation(1.1, nout, output_cb); // Clear the fault and run until t = 10s. fault->setStatus(false); - ida.initializeSimulation(tfault+fault_duration, false); - nout = static_cast(std::round((10.0 - tfault + fault_duration) / dt)); + ida.initializeSimulation(1.1, false); + nout = static_cast(std::round((10.0 - 1.1) / dt)); ida.runSimulation(10.0, nout, output_cb); real_type stop = static_cast(clock()); From c7e7d13743e1dd345018ef06b2612e451dce7ea8 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 17:35:22 -0500 Subject: [PATCH 125/139] edit: sign of activation valve limits [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 2 +- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 83212acb1..d87c3fb17 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -110,7 +110,7 @@ int main() // Set Gov data (Default PW values) data.gov[0].R = 0.05; data.gov[0].Pvmin = 0; - data.gov[0].Pvmax = 1.2; + data.gov[0].Pvmax = 1.0; data.gov[0].T1 = 0.5; data.gov[0].T2 = 2.5; data.gov[0].T3 = 7.5; diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index da16047f9..95ea2a0a1 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -78,7 +78,7 @@ namespace GridKit // Differential Variables y_[0] = (T3_ - T2_) * p0; // Ptx (Turbine Power ) - y_[1] = p0; // Pv (Valve Position) + y_[1] = p0; // Pv (Valve Position) // Algebraic Variables y_[2] = p0; // Pmech @@ -109,7 +109,7 @@ namespace GridKit ScalarT TurbineGov::sigmoid(ScalarT x) { ScalarT a = 4000; - return a*x / ( 1 + std::abs(a*x) ) / 2 + 1 / 2; + return a * x / ( 1 + std::abs(a * x) ) / 2 + 1 / 2; } template @@ -156,7 +156,7 @@ namespace GridKit // Internal Differential Equations f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; - f_[1] = pv_dot - valv_ind * f / T1_; + f_[1] = - pv_dot + valv_ind * f / T1_; // Internal Algebraic Equations f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); From 1814570dba7ea94c17250c896e80d54c5fadaf0d Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 18:02:30 -0500 Subject: [PATCH 126/139] edit: pmech sign error [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index 95ea2a0a1..f63f3d2ba 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -155,11 +155,11 @@ namespace GridKit ScalarT valv_ind = this->indicator(pv, f); // Internal Differential Equations - f_[0] = ptx_dot - pv + (ptx + T2_ * pv) / T3_; + f_[0] = - ptx_dot + pv - (ptx + T2_ * pv) / T3_; f_[1] = - pv_dot + valv_ind * f / T1_; // Internal Algebraic Equations - f_[2] = pmech - (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + f_[2] = - pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); return 0; } From 8c5d32f27372dead15358f6b343027fb74a5a54c Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 20:28:38 -0500 Subject: [PATCH 127/139] edit: pass pmech by reference [skip ci] --- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 6 ++++-- src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp | 2 +- src/Model/PhasorDynamics/GovernorBase.hpp | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index f63f3d2ba..d464caceb 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -70,8 +70,8 @@ namespace GridKit // Initial mechanical = initial electric torque - // There is definitily a better way to do this! ScalarT p0 = machine_->get_torque(); + //ScalarT p0 = 1;// still causes issues // Input Variables (Parameter for now) pref_ = R_ * p0; @@ -240,8 +240,10 @@ namespace GridKit * @return ScalarT - Mechanical output power value. */ template - ScalarT TurbineGov::Pmech() + ScalarT& TurbineGov::Pmech() { + // NOTE setting this to 1 gives good answer, + // so it must be configured wrong return y_[2]; } diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index be46834c5..abe1b1a0b 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -72,7 +72,7 @@ namespace GridKit } // Read Access to Pmech - ScalarT Pmech() override; + ScalarT& Pmech() override; // Activation function (sigmoid approximation) ScalarT sigmoid(ScalarT x); diff --git a/src/Model/PhasorDynamics/GovernorBase.hpp b/src/Model/PhasorDynamics/GovernorBase.hpp index b5644c71e..04d85a5f7 100644 --- a/src/Model/PhasorDynamics/GovernorBase.hpp +++ b/src/Model/PhasorDynamics/GovernorBase.hpp @@ -14,7 +14,7 @@ namespace GridKit class GovernorBase { public: - virtual ScalarT Pmech() = 0; + virtual ScalarT& Pmech() = 0; }; } // namespace PhasorDynamics From 3936f66f7bf40222015349b435093d4539fbd1a6 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 21:41:43 -0500 Subject: [PATCH 128/139] edit: state order [skip ci] --- .../Governor/TGOV1/TurbineGov.cpp | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index d464caceb..c765538dc 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -76,12 +76,13 @@ namespace GridKit // Input Variables (Parameter for now) pref_ = R_ * p0; - // Differential Variables + // States + // y0 - Ptx + // y1 - Pv + // y2 - Pmech y_[0] = (T3_ - T2_) * p0; // Ptx (Turbine Power ) y_[1] = p0; // Pv (Valve Position) - - // Algebraic Variables - y_[2] = p0; // Pmech + y_[2] = p0; // Pmech // D.V. Derivative yp_[0] = 0.0; // Ptx @@ -142,24 +143,27 @@ namespace GridKit ScalarT omega = machine_->speed(); // Internal Variables - ScalarT pv = y_[0]; - ScalarT ptx = y_[1]; + // y0 - Ptx + // y1 - Pv + // y2 - Pmech + ScalarT ptx = y_[0]; + ScalarT pv = y_[1]; ScalarT pmech = y_[2]; // Internal Derivatives - ScalarT pv_dot = yp_[0]; - ScalarT ptx_dot = yp_[1]; + ScalarT ptx_dot = yp_[0]; + ScalarT pv_dot = yp_[1]; // The 'pre-limit' derivative of Pv - ScalarT f = ( -pv + (pref_ - omega) / R_); + ScalarT f = ( -pv + (pref_ - omega) / R_) / T1_; ScalarT valv_ind = this->indicator(pv, f); // Internal Differential Equations f_[0] = - ptx_dot + pv - (ptx + T2_ * pv) / T3_; - f_[1] = - pv_dot + valv_ind * f / T1_; + f_[1] = - pv_dot + valv_ind * f; // Internal Algebraic Equations - f_[2] = - pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); + f_[2] = - pmech + (ptx + T2_ * pv) / T3_ - (Dt_ * omega); return 0; } @@ -242,8 +246,6 @@ namespace GridKit template ScalarT& TurbineGov::Pmech() { - // NOTE setting this to 1 gives good answer, - // so it must be configured wrong return y_[2]; } From 87b6df71f55d592fa57bf75d62f6f689892580c2 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sat, 21 Jun 2025 22:03:18 -0500 Subject: [PATCH 129/139] checkpoint: valid simulation minimal error [skip ci] --- .../PhasorDynamics/Governor/TGOV1/TurbineGov.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index c765538dc..ebda62f55 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -71,23 +71,19 @@ namespace GridKit // Initial mechanical = initial electric torque ScalarT p0 = machine_->get_torque(); - //ScalarT p0 = 1;// still causes issues // Input Variables (Parameter for now) pref_ = R_ * p0; - // States - // y0 - Ptx - // y1 - Pv - // y2 - Pmech - y_[0] = (T3_ - T2_) * p0; // Ptx (Turbine Power ) - y_[1] = p0; // Pv (Valve Position) - y_[2] = p0; // Pmech + // Internal States + y_[0] = (T3_ - T2_) * p0; // y0 - Ptx (Turbine Power ) + y_[1] = p0; // y1 - Pv (Valve Position) + y_[2] = p0; // y2 - Pmech // D.V. Derivative yp_[0] = 0.0; // Ptx yp_[1] = 0.0; // Pv - yp_[2] = 0.0; // Bug?? I shouldn't need to set this + yp_[2] = 0.0; return 0; } From b51467d02ff1729eae0eced0bbe33038018685f2 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 15:30:34 -0500 Subject: [PATCH 130/139] add: example 4 PW reference [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 9 +- examples/PhasorDynamics/Example4/example4.hpp | 4807 +++++++++-------- .../Governor/TGOV1/TurbineGov.cpp | 17 +- .../Governor/TGOV1/TurbineGov.hpp | 1 + 4 files changed, 2417 insertions(+), 2417 deletions(-) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index d87c3fb17..2f677024d 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -117,8 +117,7 @@ int main() data.gov[0].Dt = 0; // Manual add gen & gov components - // since SignalBus not implemented - // This is a hack + // This is a hack since SignalBus not implemented // Create Pointers first Genrou* gen; @@ -129,19 +128,17 @@ int main() sys.getBus(0), data.genrou[0]); - // Hack, need to gaurentee that gen is - // initialized first so Gov can access torque - // gen->initialize(); - // Instatiate TGOV1 & add to system model gov = new TurbineGov( gen, data.gov[0]); gen->setgovenor(gov); + // Add Generator and Governor to System sys.addComponent(gen); sys.addComponent(gov); + // Allocate Memory sys.allocate(); // Get access to the fault diff --git a/examples/PhasorDynamics/Example4/example4.hpp b/examples/PhasorDynamics/Example4/example4.hpp index f8ce1a966..c1d0c1c2d 100644 --- a/examples/PhasorDynamics/Example4/example4.hpp +++ b/examples/PhasorDynamics/Example4/example4.hpp @@ -1,5 +1,6 @@ /** * @file example4.hpp + * @author Luke Lowery (lukel@tamu.edu) * @author Adam Birchfield (abirchfield@tamu.edu) * @author Slaven Peles (peless@ornl.gov) * @brief Reference solution for the 2-bus system obtained with Powerworld @@ -12,2405 +13,2409 @@ namespace Example4 { std::vector> reference_solution = - {{0, 1, 0}, // It should be {0,1,1.000000477} but something is wrong in GridKit - {0.004167, 1, 1.000000477}, - {0.008333, 1, 1.000000477}, - {0.0125, 0.99999994, 1.000000477}, - {0.016667, 0.99999994, 1.000000477}, - {0.020833, 0.99999994, 1.000000477}, - {0.025, 0.99999994, 1.000000477}, - {0.029167, 0.99999994, 1.000000477}, - {0.033333, 0.99999994, 1.000000477}, - {0.0375, 0.99999994, 1.000000477}, - {0.041667, 0.99999994, 1.000000477}, - {0.045833, 0.99999994, 1.000000477}, - {0.05, 0.999999881, 1.000000477}, - {0.054167, 0.999999881, 1.000000477}, - {0.058333, 0.999999881, 1.000000477}, - {0.0625, 0.999999881, 1.000000477}, - {0.066667, 0.999999881, 1.000000477}, - {0.070833, 0.999999881, 1.000000477}, - {0.075, 0.999999881, 1.000000477}, - {0.079167, 0.999999881, 1.000000477}, - {0.083333, 0.999999881, 1.000000477}, - {0.0875, 0.999999881, 1.000000477}, - {0.091667, 0.999999881, 1.000000477}, - {0.095833, 0.999999881, 1.000000477}, - {0.1, 0.999999881, 1.000000477}, - {0.104167, 0.999999881, 1.000000477}, - {0.108333, 0.999999881, 1.000000477}, - {0.1125, 0.999999881, 1.000000477}, - {0.116667, 0.999999881, 1.000000477}, - {0.120833, 0.999999881, 1.000000477}, - {0.125, 0.999999881, 1.000000477}, - {0.129167, 0.999999881, 1.000000477}, - {0.133333, 0.999999881, 1.000000477}, - {0.1375, 0.99999994, 1.000000477}, - {0.141667, 0.99999994, 1.000000477}, - {0.145833, 0.99999994, 1.000000477}, - {0.15, 0.99999994, 1.000000477}, - {0.154167, 0.99999994, 1.000000477}, - {0.158333, 0.99999994, 1.000000477}, - {0.1625, 0.99999994, 1.000000477}, - {0.166667, 0.99999994, 1.000000477}, - {0.170833, 0.99999994, 1.000000477}, - {0.175, 0.99999994, 1.000000477}, - {0.179167, 0.99999994, 1.000000477}, - {0.183333, 0.99999994, 1.000000477}, - {0.1875, 0.99999994, 1.000000477}, - {0.191667, 0.99999994, 1.000000477}, - {0.195833, 1, 1.000000477}, - {0.2, 1, 1.000000477}, - {0.204167, 1, 1.000000477}, - {0.208333, 1, 1.000000477}, - {0.2125, 1, 1.000000477}, - {0.216667, 1, 1.000000477}, - {0.220833, 1, 1.000000477}, - {0.225, 1, 1.000000477}, - {0.229167, 1, 1.000000477}, - {0.233333, 1, 1.000000477}, - {0.2375, 1, 1.000000477}, - {0.241667, 1, 1.000000477}, - {0.245833, 1, 1.000000477}, - {0.25, 1, 1.000000477}, - {0.254167, 1, 1.000000477}, - {0.258333, 1, 1.000000477}, - {0.2625, 1, 1.000000477}, - {0.266667, 1, 1.000000477}, - {0.270833, 1, 1.000000477}, - {0.275, 1, 1.000000477}, - {0.279167, 1, 1.000000477}, - {0.283333, 1, 1.000000477}, - {0.2875, 1, 1.000000477}, - {0.291667, 1, 1.000000477}, - {0.295833, 1.000000119, 1.000000477}, - {0.3, 1.000000119, 1.000000477}, - {0.304167, 1.000000119, 1.000000477}, - {0.308333, 1.000000119, 1.000000477}, - {0.3125, 1.000000119, 1.000000477}, - {0.316667, 1.000000119, 1.000000477}, - {0.320833, 1.000000119, 1.000000477}, - {0.325, 1.000000119, 1.000000477}, - {0.329167, 1.000000119, 1.000000477}, - {0.333333, 1.000000119, 1.000000477}, - {0.3375, 1.000000119, 1.000000477}, - {0.341667, 1.000000119, 1.000000477}, - {0.345833, 1.000000119, 1.000000477}, - {0.35, 1.000000119, 1.000000477}, - {0.354167, 1.000000119, 1.000000477}, - {0.358333, 1.000000119, 1.000000477}, - {0.3625, 1, 1.000000477}, - {0.366667, 1, 1.000000477}, - {0.370833, 1, 1.000000477}, - {0.375, 1, 1.000000477}, - {0.379167, 1, 1.000000477}, - {0.383333, 1, 1.000000477}, - {0.3875, 1, 1.000000477}, - {0.391667, 1, 1.000000477}, - {0.395833, 1, 1.000000477}, - {0.4, 1, 1.000000477}, - {0.404167, 1, 1.000000477}, - {0.408333, 1, 1.000000477}, - {0.4125, 1, 1.000000477}, - {0.416667, 1, 1.000000477}, - {0.420833, 1, 1.000000477}, - {0.425, 1, 1.000000477}, - {0.429167, 1, 1.000000477}, - {0.433333, 1, 1.000000477}, - {0.4375, 1, 1.000000477}, - {0.441667, 1, 1.000000477}, - {0.445833, 1, 1.000000477}, - {0.45, 1, 1.000000477}, - {0.454167, 1, 1.000000477}, - {0.458333, 1, 1.000000477}, - {0.4625, 1, 1.000000477}, - {0.466667, 1, 1.000000477}, - {0.470833, 1, 1.000000477}, - {0.475, 1, 1.000000477}, - {0.479167, 1, 1.000000477}, - {0.483333, 1, 1.000000477}, - {0.4875, 1, 1.000000477}, - {0.491667, 1, 1.000000477}, - {0.495833, 1, 1.000000477}, - {0.5, 1, 1.000000477}, - {0.504167, 1, 1.000000477}, - {0.508333, 1, 1.000000477}, - {0.5125, 0.99999994, 1.000000477}, - {0.516667, 0.99999994, 1.000000477}, - {0.520833, 0.99999994, 1.000000477}, - {0.525, 0.99999994, 1.000000477}, - {0.529167, 0.99999994, 1.000000477}, - {0.533333, 0.99999994, 1.000000477}, - {0.5375, 0.99999994, 1.000000477}, - {0.541667, 0.99999994, 1.000000477}, - {0.545833, 0.99999994, 1.000000477}, - {0.55, 0.99999994, 1.000000477}, - {0.554167, 0.99999994, 1.000000477}, - {0.558333, 0.99999994, 1.000000477}, - {0.5625, 0.99999994, 1.000000477}, - {0.566667, 0.99999994, 1.000000477}, - {0.570833, 0.99999994, 1.000000477}, - {0.575, 0.99999994, 1.000000477}, - {0.579167, 0.99999994, 1.000000477}, - {0.583333, 0.99999994, 1.000000477}, - {0.5875, 0.99999994, 1.000000477}, - {0.591667, 0.99999994, 1.000000477}, - {0.595833, 0.99999994, 1.000000477}, - {0.6, 0.99999994, 1.000000477}, - {0.604167, 0.99999994, 1.000000477}, - {0.608333, 0.99999994, 1.000000477}, - {0.6125, 0.99999994, 1.000000477}, - {0.616667, 0.99999994, 1.000000477}, - {0.620833, 1, 1.000000477}, - {0.625, 1, 1.000000477}, - {0.629167, 1, 1.000000477}, - {0.633333, 1, 1.000000477}, - {0.6375, 1, 1.000000477}, - {0.641667, 1, 1.000000477}, - {0.645833, 1, 1.000000477}, - {0.65, 1, 1.000000477}, - {0.654167, 1, 1.000000477}, - {0.658333, 1, 1.000000477}, - {0.6625, 1, 1.000000477}, - {0.666667, 1, 1.000000477}, - {0.670833, 1, 1.000000477}, - {0.675, 1, 1.000000477}, - {0.679167, 1, 1.000000477}, - {0.683333, 1, 1.000000477}, - {0.6875, 1, 1.000000477}, - {0.691667, 1, 1.000000477}, - {0.695833, 1, 1.000000477}, - {0.7, 1, 1.000000477}, - {0.704167, 1, 1.000000477}, - {0.708333, 1, 1.000000477}, - {0.7125, 1, 1.000000477}, - {0.716667, 1, 1.000000477}, - {0.720833, 1, 1.000000477}, - {0.725, 1, 1.000000477}, - {0.729167, 1, 1.000000477}, - {0.733333, 1, 1.000000477}, - {0.7375, 1, 1.000000477}, - {0.741667, 1, 1.000000477}, - {0.745833, 1, 1.000000477}, - {0.75, 1, 1.000000477}, - {0.754167, 1, 1.000000477}, - {0.758333, 1, 1.000000477}, - {0.7625, 1, 1.000000477}, - {0.766667, 1, 1.000000477}, - {0.770833, 1, 1.000000477}, - {0.775, 1, 1.000000477}, - {0.779167, 1, 1.000000477}, - {0.783333, 1, 1.000000477}, - {0.7875, 1, 1.000000477}, - {0.791667, 1, 1.000000477}, - {0.795833, 1, 1.000000477}, - {0.8, 1, 1.000000477}, - {0.804167, 1, 1.000000477}, - {0.808333, 1, 1.000000477}, - {0.8125, 1, 1.000000477}, - {0.816667, 1, 1.000000477}, - {0.820833, 1, 1.000000477}, - {0.825, 1, 1.000000477}, - {0.829167, 1, 1.000000477}, - {0.833333, 1, 1.000000477}, - {0.8375, 1, 1.000000477}, - {0.841667, 1, 1.000000477}, - {0.845833, 1, 1.000000477}, - {0.85, 1, 1.000000477}, - {0.854167, 1, 1.000000477}, - {0.858333, 1, 1.000000477}, - {0.8625, 1, 1.000000477}, - {0.866667, 1, 1.000000477}, - {0.870833, 1, 1.000000477}, - {0.875, 1, 1.000000477}, - {0.879167, 1, 1.000000477}, - {0.883333, 1, 1.000000477}, - {0.8875, 1, 1.000000477}, - {0.891667, 1, 1.000000477}, - {0.895833, 1, 1.000000477}, - {0.9, 1, 1.000000477}, - {0.904167, 1, 1.000000477}, - {0.908333, 1, 1.000000477}, - {0.9125, 1, 1.000000477}, - {0.916667, 1, 1.000000477}, - {0.920833, 1, 1.000000477}, - {0.925, 1, 1.000000477}, - {0.929167, 1, 1.000000477}, - {0.933333, 1, 1.000000477}, - {0.9375, 1, 1.000000477}, - {0.941667, 1, 1.000000477}, - {0.945833, 1, 1.000000477}, - {0.95, 1, 1.000000477}, - {0.954167, 1, 1.000000477}, - {0.958333, 1, 1.000000477}, - {0.9625, 1, 1.000000477}, - {0.966667, 1, 1.000000477}, - {0.970833, 1, 1.000000477}, - {0.975, 1, 1.000000477}, - {0.979167, 1, 1.000000477}, - {0.983333, 1, 1.000000477}, - {0.9875, 1, 1.000000477}, - {0.991667, 1, 1.000000477}, - {0.995833, 1, 1.000000477}, - {1, 1, 1.000000477}, - {1.004167, 1.000682712, 0.015128844}, - {1.008333, 1.001363397, 0.014973078}, - {1.0125, 1.002042532, 0.014841928}, - {1.016667, 1.002720356, 0.014729479}, - {1.020833, 1.00339675, 0.014631276}, - {1.025, 1.004072189, 0.014543867}, - {1.029167, 1.004746675, 0.01446466}, - {1.033333, 1.00541997, 0.014391631}, - {1.0375, 1.006092548, 0.01432314}, - {1.041667, 1.006764412, 0.014257919}, - {1.045833, 1.007435203, 0.014194945}, - {1.05, 1.008105278, 0.014133334}, - {1.054167, 1.008774638, 0.014072391}, - {1.058333, 1.009443045, 0.014011139}, - {1.0625, 1.010110855, 0.01395021}, - {1.066667, 1.010777831, 0.013887996}, - {1.070833, 1.011443853, 0.013824509}, - {1.075, 1.01210916, 0.013759368}, - {1.079167, 1.012773633, 0.013692267}, - {1.083333, 1.013437271, 0.013622929}, - {1.0875, 1.014100075, 0.013551049}, - {1.091667, 1.014762163, 0.013476389}, - {1.095833, 1.015423179, 0.013398723}, - {1.1, 1.016083598, 0.013398723}, - {1.104167, 1.015262365, 0.88047874}, - {1.108333, 1.014493585, 0.89023459}, - {1.1125, 1.013762116, 0.898759723}, - {1.116667, 1.013056278, 0.906125188}, - {1.120833, 1.012367129, 0.912427425}, - {1.125, 1.01168704, 0.917777061}, - {1.129167, 1.011010766, 0.922281682}, - {1.133333, 1.010334253, 0.926045954}, - {1.1375, 1.009654403, 0.929170609}, - {1.141667, 1.008969307, 0.931745946}, - {1.145833, 1.008277893, 0.93385452}, - {1.15, 1.007579207, 0.935571969}, - {1.154167, 1.006873131, 0.936964393}, - {1.158333, 1.006160259, 0.938090801}, - {1.1625, 1.005440712, 0.939003944}, - {1.166667, 1.0047158, 0.9397493}, - {1.170833, 1.003986597, 0.940366805}, - {1.175, 1.003253937, 0.940891325}, - {1.179167, 1.002519608, 0.941352487}, - {1.183333, 1.001785278, 0.94177556}, - {1.1875, 1.001052022, 0.942182004}, - {1.191667, 1.000321627, 0.942589283}, - {1.195833, 0.999596179, 0.943011642}, - {1.2, 0.998876929, 0.943460345}, - {1.204167, 0.998165727, 0.943943799}, - {1.208333, 0.997464538, 0.944467604}, - {1.2125, 0.996774673, 0.945035696}, - {1.216667, 0.996098042, 0.945649385}, - {1.220833, 0.995436549, 0.946308196}, - {1.225, 0.994791448, 0.947010458}, - {1.229167, 0.994164526, 0.947752595}, - {1.233333, 0.993557453, 0.948529899}, - {1.2375, 0.99297154, 0.949337125}, - {1.241667, 0.992408335, 0.950167537}, - {1.245833, 0.99186933, 0.951014042}, - {1.25, 0.991355598, 0.951869369}, - {1.254167, 0.990868449, 0.952725708}, - {1.258333, 0.990409136, 0.953574955}, - {1.2625, 0.989978492, 0.954409778}, - {1.266667, 0.989577591, 0.955215633}, - {1.270833, 0.989207327, 0.956005096}, - {1.275, 0.988868177, 0.956751525}, - {1.279167, 0.988560915, 0.957458079}, - {1.283333, 0.988285899, 0.958120406}, - {1.2875, 0.988043547, 0.958723307}, - {1.291667, 0.987834036, 0.959283113}, - {1.295833, 0.987657607, 0.959768534}, - {1.3, 0.987514019, 0.960213661}, - {1.304167, 0.987403274, 0.96057564}, - {1.308333, 0.987325132, 0.96090132}, - {1.3125, 0.987279058, 0.961140752}, - {1.316667, 0.987264812, 0.961349428}, - {1.320833, 0.987281561, 0.961474001}, - {1.325, 0.987328827, 0.961574197}, - {1.329167, 0.987405658, 0.961597323}, - {1.333333, 0.987511337, 0.961602867}, - {1.3375, 0.987644792, 0.96154201}, - {1.341667, 0.987805247, 0.961470485}, - {1.345833, 0.987991393, 0.961345851}, - {1.35, 0.988202393, 0.961207449}, - {1.354167, 0.988437057, 0.961049318}, - {1.358333, 0.988694072, 0.960876703}, - {1.3625, 0.988972366, 0.960694611}, - {1.366667, 0.989270747, 0.960507751}, - {1.370833, 0.989587843, 0.96032083}, - {1.375, 0.989922643, 0.960137904}, - {1.379167, 0.990273893, 0.959962845}, - {1.383333, 0.990640223, 0.95979917}, - {1.3875, 0.991020679, 0.959649861}, - {1.391667, 0.991413951, 0.959517598}, - {1.395833, 0.991818845, 0.959404588}, - {1.4, 0.992234349, 0.959312677}, - {1.404167, 0.99265933, 0.959243178}, - {1.408333, 0.993092477, 0.959197223}, - {1.4125, 0.993533015, 0.959175408}, - {1.416667, 0.993979812, 0.95917803}, - {1.420833, 0.994431734, 0.959205091}, - {1.425, 0.994888008, 0.959256351}, - {1.429167, 0.995347559, 0.959331334}, - {1.433333, 0.995809376, 0.959429204}, - {1.4375, 0.996272743, 0.959549129}, - {1.441667, 0.996736646, 0.95968461}, - {1.445833, 0.997200072, 0.959850907}, - {1.45, 0.997662604, 0.960024655}, - {1.454167, 0.998123169, 0.960226417}, - {1.458333, 0.998580933, 0.960433066}, - {1.4625, 0.999035299, 0.960664332}, - {1.466667, 0.999485552, 0.96089834}, - {1.470833, 0.99993068, 0.961153209}, - {1.475, 1.000370383, 0.961408794}, - {1.479167, 1.000803709, 0.961681604}, - {1.483333, 1.001230001, 0.961953163}, - {1.4875, 1.001648784, 0.962238312}, - {1.491667, 1.00205946, 0.962520778}, - {1.495833, 1.002461076, 0.962813199}, - {1.5, 1.002853513, 0.963101745}, - {1.504167, 1.003236055, 0.963396966}, - {1.508333, 1.003607988, 0.96368736}, - {1.5125, 1.003968954, 0.963981271}, - {1.516667, 1.004318357, 0.964269757}, - {1.520833, 1.004655838, 0.964558721}, - {1.525, 1.004980803, 0.964841962}, - {1.529167, 1.005292892, 0.965122938}, - {1.533333, 1.005591631, 0.965397894}, - {1.5375, 1.00587666, 0.965667963}, - {1.541667, 1.006147623, 0.96593219}, - {1.545833, 1.006403923, 0.966188729}, - {1.55, 1.006645441, 0.966439664}, - {1.554167, 1.00687182, 0.966680348}, - {1.558333, 1.007082582, 0.966915607}, - {1.5625, 1.007277608, 0.967138052}, - {1.566667, 1.00745666, 0.967355549}, - {1.570833, 1.007619381, 0.96755743}, - {1.575, 1.007765532, 0.967754841}, - {1.579167, 1.007894993, 0.967934012}, - {1.583333, 1.008007526, 0.968109071}, - {1.5875, 1.008103132, 0.968263447}, - {1.591667, 1.008181453, 0.968414128}, - {1.595833, 1.008242607, 0.968541622}, - {1.6, 1.008286357, 0.968665838}, - {1.604167, 1.008312702, 0.968764782}, - {1.608333, 1.008321762, 0.968860805}, - {1.6125, 1.008313417, 0.968929827}, - {1.616667, 1.008287787, 0.968996286}, - {1.620833, 1.008244872, 0.969034612}, - {1.625, 1.00818491, 0.969070733}, - {1.629167, 1.00810802, 0.969078183}, - {1.633333, 1.008014202, 0.969083905}, - {1.6375, 1.007904053, 0.969061136}, - {1.641667, 1.007777452, 0.969037175}, - {1.645833, 1.007634878, 0.968985915}, - {1.65, 1.007476687, 0.96893394}, - {1.654167, 1.007303119, 0.968856812}, - {1.658333, 1.007114768, 0.968779624}, - {1.6625, 1.006911874, 0.968680382}, - {1.666667, 1.006694913, 0.968581617}, - {1.670833, 1.00646472, 0.968464911}, - {1.675, 1.006221414, 0.968349338}, - {1.679167, 1.005965829, 0.968220592}, - {1.683333, 1.005698442, 0.968093693}, - {1.6875, 1.005420089, 0.967959166}, - {1.691667, 1.005131125, 0.967827022}, - {1.695833, 1.004832625, 0.967693269}, - {1.7, 1.004525065, 0.967562377}, - {1.704167, 1.00420928, 0.967436075}, - {1.708333, 1.003885984, 0.967313051}, - {1.7125, 1.003556132, 0.967200637}, - {1.716667, 1.003220201, 0.967091799}, - {1.720833, 1.0028795, 0.966999233}, - {1.725, 1.00253439, 0.966910303}, - {1.729167, 1.00218606, 0.966842711}, - {1.733333, 1.001835227, 0.966778576}, - {1.7375, 1.001482844, 0.966739953}, - {1.741667, 1.001129627, 0.966711283}, - {1.745833, 1.000776529, 0.966690898}, - {1.75, 1.000424623, 0.966700375}, - {1.754167, 1.000074387, 0.96671176}, - {1.758333, 0.999727011, 0.966754198}, - {1.7625, 0.999383092, 0.966797709}, - {1.766667, 0.999043643, 0.966872096}, - {1.770833, 0.998709381, 0.966946483}, - {1.775, 0.998381138, 0.967050433}, - {1.779167, 0.99805963, 0.967153192}, - {1.783333, 0.997745872, 0.96728301}, - {1.7875, 0.997440159, 0.967410386}, - {1.791667, 0.997143567, 0.967561364}, - {1.795833, 0.99685663, 0.967714787}, - {1.8, 0.996579885, 0.967869997}, - {1.804167, 0.996314168, 0.968042195}, - {1.808333, 0.996059835, 0.968208969}, - {1.8125, 0.995817542, 0.968387842}, - {1.816667, 0.995587707, 0.968560398}, - {1.820833, 0.995370924, 0.968739927}, - {1.825, 0.995167375, 0.968912601}, - {1.829167, 0.994977593, 0.969087243}, - {1.833333, 0.994801879, 0.969254494}, - {1.8375, 0.99464041, 0.96941936}, - {1.841667, 0.994493544, 0.969576657}, - {1.845833, 0.994361401, 0.969727576}, - {1.85, 0.994244099, 0.969871104}, - {1.854167, 0.994141817, 0.970005214}, - {1.858333, 0.994054556, 0.970132172}, - {1.8625, 0.993982315, 0.970247447}, - {1.866667, 0.993925095, 0.970356286}, - {1.870833, 0.993882775, 0.97045207}, - {1.875, 0.993855238, 0.970542192}, - {1.879167, 0.993842363, 0.970618844}, - {1.883333, 0.993843973, 0.970690787}, - {1.8875, 0.993859708, 0.970749676}, - {1.891667, 0.993889451, 0.97080493}, - {1.895833, 0.993932843, 0.970848203}, - {1.9, 0.993989527, 0.970888972}, - {1.904167, 0.994059205, 0.97091943}, - {1.908333, 0.994141459, 0.970948577}, - {1.9125, 0.994235873, 0.970969498}, - {1.916667, 0.994342029, 0.970990121}, - {1.920833, 0.99445945, 0.971004903}, - {1.925, 0.994587719, 0.971020401}, - {1.929167, 0.9947263, 0.971032619}, - {1.933333, 0.994874775, 0.971046269}, - {1.9375, 0.995032549, 0.971059203}, - {1.941667, 0.995199144, 0.971074224}, - {1.945833, 0.995373964, 0.971090853}, - {1.95, 0.995556593, 0.971110106}, - {1.954167, 0.995746374, 0.971133053}, - {1.958333, 0.995942831, 0.971158922}, - {1.9625, 0.996145368, 0.971190274}, - {1.966667, 0.996353567, 0.971224725}, - {1.970833, 0.996566653, 0.97126615}, - {1.975, 0.996784389, 0.971310556}, - {1.979167, 0.997005939, 0.971363068}, - {1.983333, 0.997230887, 0.971418381}, - {1.9875, 0.997458696, 0.971482456}, - {1.991667, 0.997688949, 0.971549094}, - {1.995833, 0.997920871, 0.971624851}, - {2, 0.998154223, 0.971702695}, - {2.004167, 0.99838829, 0.971789718}, - {2.008333, 0.998622656, 0.971878409}, - {2.0125, 0.998856843, 0.971975863}, - {2.016667, 0.999090433, 0.972074568}, - {2.020833, 0.999322772, 0.972181499}, - {2.025, 0.999553561, 0.972289145}, - {2.029167, 0.999782324, 0.972404182}, - {2.033333, 1.000008583, 0.972519457}, - {2.0375, 1.000231862, 0.97264123}, - {2.041667, 1.000451922, 0.972762704}, - {2.045833, 1.000668168, 0.972889543}, - {2.05, 1.000880361, 0.973015666}, - {2.054167, 1.001088023, 0.973146021}, - {2.058333, 1.001290798, 0.973275185}, - {2.0625, 1.001488328, 0.973407388}, - {2.066667, 1.001680374, 0.973538041}, - {2.070833, 1.00186646, 0.973670363}, - {2.075, 1.002046466, 0.973800957}, - {2.079167, 1.002219915, 0.973931909}, - {2.083333, 1.002386689, 0.974060893}, - {2.0875, 1.00254631, 0.974188983}, - {2.091667, 1.002698779, 0.974314928}, - {2.095833, 1.002843618, 0.974438667}, - {2.1, 1.002980828, 0.974560261}, - {2.104167, 1.003109932, 0.974678457}, - {2.108333, 1.003231049, 0.974794388}, - {2.1125, 1.003343701, 0.974905789}, - {2.116667, 1.003448009, 0.975015044}, - {2.120833, 1.003543615, 0.975118697}, - {2.125, 1.003630638, 0.975220263}, - {2.129167, 1.00370872, 0.975315332}, - {2.133333, 1.003777862, 0.975408375}, - {2.1375, 1.003837943, 0.975494087}, - {2.141667, 1.003889084, 0.97557801}, - {2.145833, 1.003931046, 0.975653946}, - {2.15, 1.003963828, 0.975728214}, - {2.154167, 1.003987551, 0.975794077}, - {2.158333, 1.004002213, 0.97585845}, - {2.1625, 1.004007816, 0.975914061}, - {2.166667, 1.00400424, 0.97596848}, - {2.170833, 1.003991842, 0.976014078}, - {2.175, 1.003970623, 0.976058662}, - {2.179167, 1.003940463, 0.976094544}, - {2.183333, 1.003901839, 0.976129651}, - {2.1875, 1.003854632, 0.976156354}, - {2.191667, 1.003799081, 0.97618264}, - {2.195833, 1.003735423, 0.976201057}, - {2.2, 1.003663778, 0.976219237}, - {2.204167, 1.003584385, 0.976230323}, - {2.208333, 1.003497481, 0.97624141}, - {2.2125, 1.003403306, 0.976246357}, - {2.216667, 1.003302097, 0.976251602}, - {2.220833, 1.003194094, 0.976251721}, - {2.225, 1.003079653, 0.976252377}, - {2.229167, 1.002959013, 0.976249218}, - {2.233333, 1.002832532, 0.976246715}, - {2.2375, 1.002700567, 0.976241708}, - {2.241667, 1.002563357, 0.976237595}, - {2.245833, 1.002421498, 0.97623235}, - {2.25, 1.00227499, 0.976228058}, - {2.254167, 1.002124429, 0.976224005}, - {2.258333, 1.001970172, 0.976221025}, - {2.2625, 1.001812577, 0.976219654}, - {2.266667, 1.001652002, 0.976219356}, - {2.270833, 1.001489043, 0.976221859}, - {2.275, 1.001323819, 0.976225436}, - {2.279167, 1.001156807, 0.976232946}, - {2.283333, 1.000988603, 0.976241529}, - {2.2875, 1.000819445, 0.97625488}, - {2.291667, 1.000649691, 0.976269126}, - {2.295833, 1.000480056, 0.976288915}, - {2.3, 1.00031054, 0.976309478}, - {2.304167, 1.00014174, 0.976336062}, - {2.308333, 0.999974132, 0.976363182}, - {2.3125, 0.999808013, 0.97639662}, - {2.316667, 0.999643743, 0.976430357}, - {2.320833, 0.999481857, 0.976470292}, - {2.325, 0.999322474, 0.976510406}, - {2.329167, 0.999166131, 0.97655654}, - {2.333333, 0.999013186, 0.976602495}, - {2.3375, 0.998863876, 0.976654112}, - {2.341667, 0.998718619, 0.976705313}, - {2.345833, 0.998577714, 0.97676152}, - {2.35, 0.998441339, 0.976817131}, - {2.354167, 0.99830997, 0.976876974}, - {2.358333, 0.998183727, 0.976935983}, - {2.3625, 0.998062968, 0.976998508}, - {2.366667, 0.997947812, 0.97706002}, - {2.370833, 0.997838557, 0.977124095}, - {2.375, 0.997735381, 0.977187037}, - {2.379167, 0.997638524, 0.977251768}, - {2.383333, 0.997548044, 0.977315128}, - {2.3875, 0.99746418, 0.97737956}, - {2.391667, 0.997386992, 0.977442563}, - {2.395833, 0.997316659, 0.977505863}, - {2.4, 0.99725318, 0.977567792}, - {2.404167, 0.997196674, 0.977629304}, - {2.408333, 0.997147202, 0.977689505}, - {2.4125, 0.997104764, 0.977748811}, - {2.416667, 0.997069418, 0.977806926}, - {2.420833, 0.997041106, 0.977863729}, - {2.425, 0.997019887, 0.977919519}, - {2.429167, 0.997005641, 0.977973759}, - {2.433333, 0.99699831, 0.978027105}, - {2.4375, 0.996997893, 0.978078902}, - {2.441667, 0.997004211, 0.978129923}, - {2.445833, 0.997017264, 0.978179455}, - {2.45, 0.997036815, 0.97822845}, - {2.454167, 0.997062802, 0.978276134}, - {2.458333, 0.997095108, 0.97832346}, - {2.4625, 0.997133493, 0.978369713}, - {2.466667, 0.997177839, 0.978415847}, - {2.470833, 0.997227907, 0.978461266}, - {2.475, 0.997283578, 0.978506744}, - {2.479167, 0.997344553, 0.978551865}, - {2.483333, 0.997410715, 0.978597224}, - {2.4875, 0.997481763, 0.978642642}, - {2.491667, 0.99755758, 0.978688478}, - {2.495833, 0.997637749, 0.978734732}, - {2.5, 0.997722149, 0.978781521}, - {2.504167, 0.997810483, 0.978829205}, - {2.508333, 0.997902572, 0.978877366}, - {2.5125, 0.997998059, 0.978926837}, - {2.516667, 0.998096764, 0.978976846}, - {2.520833, 0.99819833, 0.979028463}, - {2.525, 0.998302639, 0.979080617}, - {2.529167, 0.998409212, 0.97913456}, - {2.533333, 0.998517931, 0.979189098}, - {2.5375, 0.998628497, 0.979245543}, - {2.541667, 0.998740673, 0.979302526}, - {2.545833, 0.998854041, 0.979361534}, - {2.55, 0.998968482, 0.97942096}, - {2.554167, 0.999083698, 0.979482412}, - {2.558333, 0.99919939, 0.979544222}, - {2.5625, 0.999315321, 0.97960794}, - {2.566667, 0.999431312, 0.979671896}, - {2.570833, 0.999546885, 0.979737639}, - {2.575, 0.999662042, 0.979803562}, - {2.579167, 0.999776363, 0.979871035}, - {2.583333, 0.999889672, 0.979938447}, - {2.5875, 1.000001788, 0.980007231}, - {2.591667, 1.000112414, 0.980075896}, - {2.595833, 1.000221252, 0.980145454}, - {2.6, 1.000328302, 0.980214894}, - {2.604167, 1.000433087, 0.98028487}, - {2.608333, 1.000535607, 0.980354488}, - {2.6125, 1.000635624, 0.980424404}, - {2.616667, 1.000732899, 0.980493844}, - {2.620833, 1.000827312, 0.980563104}, - {2.625, 1.000918627, 0.980631888}, - {2.629167, 1.001006722, 0.980700076}, - {2.633333, 1.001091361, 0.980767667}, - {2.6375, 1.001172543, 0.980834305}, - {2.641667, 1.001250029, 0.980900288}, - {2.645833, 1.001323581, 0.980964839}, - {2.65, 1.001393318, 0.981028795}, - {2.654167, 1.001459002, 0.981091022}, - {2.658333, 1.001520634, 0.981152534}, - {2.6625, 1.001577854, 0.98121196}, - {2.666667, 1.001630902, 0.98127073}, - {2.670833, 1.00167942, 0.981327116}, - {2.675, 1.001723647, 0.981382847}, - {2.679167, 1.001763225, 0.981435895}, - {2.683333, 1.001798391, 0.981488407}, - {2.6875, 1.001828909, 0.981538057}, - {2.691667, 1.001854777, 0.981587112}, - {2.695833, 1.001875997, 0.981633246}, - {2.7, 1.001892686, 0.981678843}, - {2.704167, 1.001904726, 0.981721342}, - {2.708333, 1.001912117, 0.981763482}, - {2.7125, 1.001914978, 0.981802464}, - {2.716667, 1.001913309, 0.981841147}, - {2.720833, 1.00190711, 0.981876731}, - {2.725, 1.001896501, 0.981912136}, - {2.729167, 1.00188148, 0.981944501}, - {2.733333, 1.001862168, 0.981976748}, - {2.7375, 1.001838684, 0.982006192}, - {2.741667, 1.001811028, 0.982035518}, - {2.745833, 1.001779318, 0.98206234}, - {2.75, 1.001743793, 0.982089102}, - {2.754167, 1.001704335, 0.98211354}, - {2.758333, 1.001661181, 0.982138097}, - {2.7625, 1.001614571, 0.982160687}, - {2.766667, 1.001564503, 0.982183337}, - {2.770833, 1.001511216, 0.982204437}, - {2.775, 1.001454711, 0.982225657}, - {2.779167, 1.001395345, 0.982245624}, - {2.783333, 1.001333117, 0.98226589}, - {2.7875, 1.001268268, 0.982285261}, - {2.791667, 1.001200914, 0.982304871}, - {2.795833, 1.001131415, 0.982324004}, - {2.8, 1.001059771, 0.982343495}, - {2.804167, 1.000986099, 0.982362807}, - {2.808333, 1.000910878, 0.982382476}, - {2.8125, 1.000833988, 0.982402384}, - {2.816667, 1.000755906, 0.98242265}, - {2.820833, 1.000676632, 0.982443452}, - {2.825, 1.000596285, 0.982464552}, - {2.829167, 1.000515342, 0.982486546}, - {2.833333, 1.000433803, 0.982508838}, - {2.8375, 1.000351906, 0.982532263}, - {2.841667, 1.000269771, 0.982555926}, - {2.845833, 1.000187874, 0.9825809}, - {2.85, 1.000106096, 0.982606173}, - {2.854167, 1.000024676, 0.982632816}, - {2.858333, 0.999943972, 0.982659698}, - {2.8625, 0.999864042, 0.982688129}, - {2.866667, 0.999785066, 0.98271668}, - {2.870833, 0.999707282, 0.98274678}, - {2.875, 0.999630749, 0.982777059}, - {2.879167, 0.999555767, 0.982808828}, - {2.883333, 0.999482453, 0.982840717}, - {2.8875, 0.999410987, 0.982874095}, - {2.891667, 0.999341428, 0.982907474}, - {2.895833, 0.999274015, 0.982942283}, - {2.9, 0.999208868, 0.982977033}, - {2.904167, 0.999146104, 0.983013093}, - {2.908333, 0.999085844, 0.983049035}, - {2.9125, 0.999028206, 0.983086228}, - {2.916667, 0.99897325, 0.983123243}, - {2.920833, 0.998921216, 0.98316133}, - {2.925, 0.998872042, 0.983199179}, - {2.929167, 0.998825967, 0.983237982}, - {2.933333, 0.998782873, 0.983276546}, - {2.9375, 0.998742998, 0.983315885}, - {2.941667, 0.998706341, 0.983354986}, - {2.945833, 0.998672962, 0.983394682}, - {2.95, 0.998642862, 0.9834342}, - {2.954167, 0.998616099, 0.983474135}, - {2.958333, 0.998592734, 0.983513892}, - {2.9625, 0.998572767, 0.983554006}, - {2.966667, 0.998556137, 0.983593881}, - {2.970833, 0.998542905, 0.983634114}, - {2.975, 0.99853307, 0.983674109}, - {2.979167, 0.998526633, 0.983714342}, - {2.983333, 0.998523533, 0.983754396}, - {2.9875, 0.998523712, 0.98379463}, - {2.991667, 0.998527169, 0.983834684}, - {2.995833, 0.998533845, 0.983874977}, - {3, 0.998543739, 0.983915091}, - {3.004167, 0.998556674, 0.983955443}, - {3.008333, 0.998572707, 0.983995676}, - {3.0125, 0.998591661, 0.984036088}, - {3.016667, 0.998613536, 0.98407644}, - {3.020833, 0.998638153, 0.984117031}, - {3.025, 0.998665512, 0.984157622}, - {3.029167, 0.998695493, 0.984198391}, - {3.033333, 0.998727977, 0.984239221}, - {3.0375, 0.998762906, 0.984280348}, - {3.041667, 0.998800099, 0.984321475}, - {3.045833, 0.998839438, 0.9843629}, - {3.05, 0.998880863, 0.984404445}, - {3.054167, 0.998924255, 0.984446287}, - {3.058333, 0.998969436, 0.984488249}, - {3.0625, 0.999016345, 0.984530509}, - {3.066667, 0.999064803, 0.984572887}, - {3.070833, 0.999114692, 0.984615624}, - {3.075, 0.999165893, 0.98465848}, - {3.079167, 0.999218225, 0.984701633}, - {3.083333, 0.999271631, 0.984744906}, - {3.0875, 0.999325931, 0.984788537}, - {3.091667, 0.999381006, 0.984832227}, - {3.095833, 0.999436736, 0.984876215}, - {3.1, 0.999492943, 0.984920263}, - {3.104167, 0.999549508, 0.984964609}, - {3.108333, 0.999606311, 0.985008955}, - {3.1125, 0.999663234, 0.98505348}, - {3.116667, 0.999720097, 0.985098004}, - {3.120833, 0.99977684, 0.985142648}, - {3.125, 0.999833286, 0.985187292}, - {3.129167, 0.999889314, 0.985231936}, - {3.133333, 0.999944806, 0.98527652}, - {3.1375, 0.999999642, 0.985321045}, - {3.141667, 1.000053763, 0.98536545}, - {3.145833, 1.000106931, 0.985409677}, - {3.15, 1.000159144, 0.985453784}, - {3.154167, 1.000210285, 0.985497534}, - {3.158333, 1.000260115, 0.985541224}, - {3.1625, 1.000308752, 0.985584378}, - {3.166667, 1.000355959, 0.985627472}, - {3.170833, 1.000401735, 0.985669911}, - {3.175, 1.000445843, 0.98571223}, - {3.179167, 1.0004884, 0.985753834}, - {3.183333, 1.00052917, 0.985795259}, - {3.1875, 1.000568032, 0.98583585}, - {3.191667, 1.000605226, 0.985876262}, - {3.195833, 1.000640273, 0.98591572}, - {3.2, 1.000673413, 0.985955}, - {3.204167, 1.000704527, 0.985993266}, - {3.208333, 1.000733614, 0.986031294}, - {3.2125, 1.000760436, 0.986068249}, - {3.216667, 1.000785112, 0.986105025}, - {3.220833, 1.000807524, 0.986140609}, - {3.225, 1.000827789, 0.986176014}, - {3.229167, 1.00084579, 0.986210167}, - {3.233333, 1.000861406, 0.986244142}, - {3.2375, 1.000874758, 0.986276925}, - {3.241667, 1.000885844, 0.986309528}, - {3.245833, 1.000894666, 0.986340821}, - {3.25, 1.000901222, 0.986372054}, - {3.254167, 1.000905395, 0.986401975}, - {3.258333, 1.000907302, 0.986431777}, - {3.2625, 1.000906944, 0.986460388}, - {3.266667, 1.000904441, 0.986488879}, - {3.270833, 1.000899673, 0.986516178}, - {3.275, 1.000892639, 0.986543477}, - {3.279167, 1.000883579, 0.986569583}, - {3.283333, 1.000872493, 0.98659569}, - {3.2875, 1.000859261, 0.986620784}, - {3.291667, 1.000844121, 0.986645818}, - {3.295833, 1.000826955, 0.986669898}, - {3.3, 1.000807881, 0.986694038}, - {3.304167, 1.000787139, 0.986717284}, - {3.308333, 1.000764608, 0.986740589}, - {3.3125, 1.00074029, 0.986763179}, - {3.316667, 1.000714421, 0.986785829}, - {3.320833, 1.000687122, 0.986807883}, - {3.325, 1.000658274, 0.986829996}, - {3.329167, 1.000628114, 0.986851633}, - {3.333333, 1.000596523, 0.986873388}, - {3.3375, 1.00056386, 0.986894786}, - {3.341667, 1.000530124, 0.986916244}, - {3.345833, 1.000495315, 0.986937523}, - {3.35, 1.000459552, 0.986958921}, - {3.354167, 1.000423074, 0.986980259}, - {3.358333, 1.000385761, 0.987001657}, - {3.3625, 1.000347853, 0.987023056}, - {3.366667, 1.000309348, 0.987044632}, - {3.370833, 1.000270367, 0.987066269}, - {3.375, 1.000231028, 0.987088084}, - {3.379167, 1.000191569, 0.987110138}, - {3.383333, 1.000151753, 0.987132251}, - {3.3875, 1.000112057, 0.987154663}, - {3.391667, 1.000072241, 0.987177193}, - {3.395833, 1.000032663, 0.987200141}, - {3.4, 0.999993145, 0.987223148}, - {3.404167, 0.999954045, 0.987246573}, - {3.408333, 0.999915302, 0.987270117}, - {3.4125, 0.999877036, 0.987294137}, - {3.416667, 0.999839365, 0.987318218}, - {3.420833, 0.999802351, 0.987342775}, - {3.425, 0.999765992, 0.987367451}, - {3.429167, 0.999730527, 0.987392604}, - {3.433333, 0.999695897, 0.987417817}, - {3.4375, 0.99966222, 0.987443566}, - {3.441667, 0.999629617, 0.987469375}, - {3.445833, 0.999598086, 0.98749572}, - {3.45, 0.999567688, 0.987522006}, - {3.454167, 0.999538481, 0.987548888}, - {3.458333, 0.999510586, 0.98757571}, - {3.4625, 0.999484062, 0.987603068}, - {3.466667, 0.999458849, 0.987630427}, - {3.470833, 0.999435067, 0.987658262}, - {3.475, 0.999412715, 0.987686098}, - {3.479167, 0.999391854, 0.98771435}, - {3.483333, 0.999372542, 0.987742543}, - {3.4875, 0.999354839, 0.987771213}, - {3.491667, 0.999338627, 0.987799883}, - {3.495833, 0.999324083, 0.987828851}, - {3.5, 0.999311149, 0.987857878}, - {3.504167, 0.999299824, 0.987887204}, - {3.508333, 0.999290168, 0.987916529}, - {3.5125, 0.999282122, 0.987946153}, - {3.516667, 0.999275744, 0.987975776}, - {3.520833, 0.999270976, 0.988005638}, - {3.525, 0.999267876, 0.9880355}, - {3.529167, 0.999266386, 0.98806566}, - {3.533333, 0.999266505, 0.98809576}, - {3.5375, 0.999268234, 0.988126099}, - {3.541667, 0.999271512, 0.988156438}, - {3.545833, 0.99927634, 0.988187015}, - {3.55, 0.999282718, 0.988217533}, - {3.554167, 0.999290526, 0.988248229}, - {3.558333, 0.999299765, 0.988278985}, - {3.5625, 0.999310493, 0.98830986}, - {3.566667, 0.999322534, 0.988340735}, - {3.570833, 0.999335885, 0.988371789}, - {3.575, 0.999350548, 0.988402784}, - {3.579167, 0.999366403, 0.988433957}, - {3.583333, 0.99938345, 0.98846513}, - {3.5875, 0.999401629, 0.988496423}, - {3.591667, 0.999420881, 0.988527715}, - {3.595833, 0.999441147, 0.988559127}, - {3.6, 0.999462366, 0.988590479}, - {3.604167, 0.999484479, 0.98862195}, - {3.608333, 0.999507427, 0.988653421}, - {3.6125, 0.99953115, 0.988684893}, - {3.616667, 0.999555588, 0.988716424}, - {3.620833, 0.999580622, 0.988747954}, - {3.625, 0.999606252, 0.988779485}, - {3.629167, 0.999632418, 0.988810956}, - {3.633333, 0.999659002, 0.988842487}, - {3.6375, 0.999685943, 0.988873959}, - {3.641667, 0.999713242, 0.98890543}, - {3.645833, 0.99974072, 0.988936782}, - {3.65, 0.999768436, 0.988968134}, - {3.654167, 0.999796212, 0.988999367}, - {3.658333, 0.999824107, 0.9890306}, - {3.6625, 0.999851942, 0.989061654}, - {3.666667, 0.999879658, 0.989092648}, - {3.670833, 0.999907255, 0.989123464}, - {3.675, 0.999934673, 0.989154279}, - {3.679167, 0.999961793, 0.989184797}, - {3.683333, 0.999988556, 0.989215255}, - {3.6875, 1.00001502, 0.989245474}, - {3.691667, 1.000041008, 0.989275634}, - {3.695833, 1.0000664, 0.989305437}, - {3.7, 1.000091314, 0.989335179}, - {3.704167, 1.000115633, 0.989364564}, - {3.708333, 1.000139356, 0.98939383}, - {3.7125, 1.000162244, 0.989422739}, - {3.716667, 1.000184536, 0.989451587}, - {3.720833, 1.000205874, 0.989479899}, - {3.725, 1.000226498, 0.989508212}, - {3.729167, 1.000246286, 0.989535987}, - {3.733333, 1.000265121, 0.989563704}, - {3.7375, 1.000283003, 0.989590943}, - {3.741667, 1.000299931, 0.989618063}, - {3.745833, 1.000315905, 0.989644587}, - {3.75, 1.000330806, 0.989671111}, - {3.754167, 1.000344634, 0.989697039}, - {3.758333, 1.000357509, 0.989722848}, - {3.7625, 1.000369191, 0.98974812}, - {3.766667, 1.000379801, 0.989773333}, - {3.770833, 1.000389338, 0.98979789}, - {3.775, 1.000397801, 0.989822447}, - {3.779167, 1.000405073, 0.989846408}, - {3.783333, 1.000411153, 0.98987025}, - {3.7875, 1.00041616, 0.989893556}, - {3.791667, 1.000419974, 0.989916801}, - {3.795833, 1.000422716, 0.989939451}, - {3.8, 1.000424385, 0.989962041}, - {3.804167, 1.000424862, 0.989984095}, - {3.808333, 1.000424266, 0.990006089}, - {3.8125, 1.000422597, 0.990027547}, - {3.816667, 1.000419736, 0.990049005}, - {3.820833, 1.000415921, 0.990069926}, - {3.825, 1.000411034, 0.990090847}, - {3.829167, 1.000405192, 0.990111291}, - {3.833333, 1.000398278, 0.990131736}, - {3.8375, 1.00039053, 0.990151703}, - {3.841667, 1.000381708, 0.990171731}, - {3.845833, 1.000372052, 0.99019134}, - {3.85, 1.000361443, 0.99021095}, - {3.854167, 1.000350118, 0.990230203}, - {3.858333, 1.000337839, 0.990249455}, - {3.8625, 1.000324965, 0.990268469}, - {3.866667, 1.000311255, 0.990287483}, - {3.870833, 1.000296831, 0.990306258}, - {3.875, 1.000281811, 0.990325034}, - {3.879167, 1.000266194, 0.99034363}, - {3.883333, 1.000249982, 0.990362227}, - {3.8875, 1.000233293, 0.990380764}, - {3.891667, 1.000216126, 0.990399241}, - {3.895833, 1.000198603, 0.990417659}, - {3.9, 1.000180602, 0.990436137}, - {3.904167, 1.000162244, 0.990454555}, - {3.908333, 1.000143766, 0.990473032}, - {3.9125, 1.000124931, 0.990491509}, - {3.916667, 1.000105858, 0.990509987}, - {3.920833, 1.000086665, 0.990528524}, - {3.925, 1.000067472, 0.990547061}, - {3.929167, 1.000048161, 0.990565717}, - {3.933333, 1.000028849, 0.990584433}, - {3.9375, 1.000009537, 0.990603209}, - {3.941667, 0.999990344, 0.990622103}, - {3.945833, 0.999971271, 0.990641057}, - {3.95, 0.999952376, 0.990660071}, - {3.954167, 0.99993372, 0.990679264}, - {3.958333, 0.999915302, 0.990698457}, - {3.9625, 0.999897242, 0.990717828}, - {3.966667, 0.999879479, 0.990737259}, - {3.970833, 0.999862075, 0.990756929}, - {3.975, 0.999845088, 0.990776539}, - {3.979167, 0.999828577, 0.990796447}, - {3.983333, 0.999812543, 0.990816295}, - {3.9875, 0.999797046, 0.990836442}, - {3.991667, 0.999782085, 0.990856528}, - {3.995833, 0.999767721, 0.990876913}, - {4, 0.999753952, 0.990897238}, - {4.004167, 0.999740779, 0.990917861}, - {4.008333, 0.999728322, 0.990938425}, - {4.0125, 0.99971652, 0.990959287}, - {4.016667, 0.999705434, 0.990980089}, - {4.020833, 0.999695063, 0.991001189}, - {4.025, 0.999685407, 0.991022229}, - {4.029167, 0.999676526, 0.991043508}, - {4.033333, 0.999668419, 0.991064787}, - {4.0375, 0.999661088, 0.991086245}, - {4.041667, 0.999654531, 0.991107702}, - {4.045833, 0.99964875, 0.991129398}, - {4.05, 0.999643803, 0.991151035}, - {4.054167, 0.99963963, 0.99117291}, - {4.058333, 0.999636233, 0.991194725}, - {4.0625, 0.99963367, 0.991216719}, - {4.066667, 0.999631941, 0.991238713}, - {4.070833, 0.999630928, 0.991260886}, - {4.075, 0.999630749, 0.991283059}, - {4.079167, 0.999631345, 0.991305292}, - {4.083333, 0.999632716, 0.991327584}, - {4.0875, 0.999634802, 0.991349995}, - {4.091667, 0.999637663, 0.991372347}, - {4.095833, 0.999641299, 0.991394877}, - {4.1, 0.999645591, 0.991417348}, - {4.104167, 0.999650598, 0.991439939}, - {4.108333, 0.99965626, 0.991462469}, - {4.1125, 0.999662578, 0.991485119}, - {4.116667, 0.999669552, 0.991507709}, - {4.120833, 0.999677122, 0.991530359}, - {4.125, 0.999685287, 0.991553009}, - {4.129167, 0.99969399, 0.991575718}, - {4.133333, 0.999703228, 0.991598368}, - {4.1375, 0.999713004, 0.991621077}, - {4.141667, 0.999723196, 0.991643786}, - {4.145833, 0.999733865, 0.991666436}, - {4.15, 0.999745011, 0.991689086}, - {4.154167, 0.999756455, 0.991711676}, - {4.158333, 0.999768317, 0.991734326}, - {4.1625, 0.999780476, 0.991756856}, - {4.166667, 0.999792933, 0.991779447}, - {4.170833, 0.999805629, 0.991801858}, - {4.175, 0.999818563, 0.991824329}, - {4.179167, 0.999831676, 0.991846681}, - {4.183333, 0.999844968, 0.991869032}, - {4.1875, 0.999858439, 0.991891265}, - {4.191667, 0.999871969, 0.991913497}, - {4.195833, 0.999885499, 0.991935551}, - {4.2, 0.999899149, 0.991957605}, - {4.204167, 0.999912739, 0.99197948}, - {4.208333, 0.999926329, 0.992001355}, - {4.2125, 0.999939859, 0.992023051}, - {4.216667, 0.99995327, 0.992044747}, - {4.220833, 0.999966562, 0.992066205}, - {4.225, 0.999979734, 0.992087603}, - {4.229167, 0.999992669, 0.992108822}, - {4.233333, 1.000005484, 0.992130041}, - {4.2375, 1.000018001, 0.992150962}, - {4.241667, 1.00003016, 0.992171884}, - {4.245833, 1.0000422, 0.992192566}, - {4.25, 1.000053763, 0.99221319}, - {4.254167, 1.000065088, 0.992233574}, - {4.258333, 1.000076056, 0.9922539}, - {4.2625, 1.000086665, 0.992273927}, - {4.266667, 1.000096798, 0.992293954}, - {4.270833, 1.000106454, 0.992313683}, - {4.275, 1.000115752, 0.992333353}, - {4.279167, 1.000124574, 0.992352784}, - {4.283333, 1.000133038, 0.992372096}, - {4.2875, 1.000140905, 0.992391169}, - {4.291667, 1.000148177, 0.992410183}, - {4.295833, 1.000155091, 0.992428839}, - {4.3, 1.000161409, 0.992447555}, - {4.304167, 1.000167251, 0.992465854}, - {4.308333, 1.000172496, 0.992484212}, - {4.3125, 1.000177264, 0.992502213}, - {4.316667, 1.000181437, 0.992520213}, - {4.320833, 1.000185013, 0.992537856}, - {4.325, 1.000188112, 0.992555499}, - {4.329167, 1.000190616, 0.992572844}, - {4.333333, 1.000192642, 0.992590189}, - {4.3375, 1.000193954, 0.992607176}, - {4.341667, 1.000194788, 0.992624164}, - {4.345833, 1.000195146, 0.992640913}, - {4.35, 1.000194907, 0.992657602}, - {4.354167, 1.000194073, 0.992673993}, - {4.358333, 1.000192881, 0.992690444}, - {4.3625, 1.000190973, 0.992706597}, - {4.366667, 1.000188708, 0.99272275}, - {4.370833, 1.000185847, 0.992738664}, - {4.375, 1.000182509, 0.992754579}, - {4.379167, 1.000178695, 0.992770255}, - {4.383333, 1.000174522, 0.992785931}, - {4.3875, 1.000169754, 0.992801368}, - {4.391667, 1.000164747, 0.992816865}, - {4.395833, 1.000159144, 0.992832184}, - {4.4, 1.000153303, 0.992847502}, - {4.404167, 1.000146985, 0.992862642}, - {4.408333, 1.000140309, 0.992877781}, - {4.4125, 1.000133276, 0.992892802}, - {4.416667, 1.000126004, 0.992907822}, - {4.420833, 1.000118494, 0.992922723}, - {4.425, 1.000110626, 0.992937624}, - {4.429167, 1.00010252, 0.992952466}, - {4.433333, 1.000094175, 0.992967308}, - {4.4375, 1.000085592, 0.99298209}, - {4.441667, 1.00007689, 0.992996871}, - {4.445833, 1.000067949, 0.993011653}, - {4.45, 1.000058889, 0.993026376}, - {4.454167, 1.00004971, 0.993041158}, - {4.458333, 1.000040531, 0.99305588}, - {4.4625, 1.000031233, 0.993070602}, - {4.466667, 1.000021815, 0.993085384}, - {4.470833, 1.000012517, 0.993100107}, - {4.475, 1.000003099, 0.993114889}, - {4.479167, 0.999993742, 0.99312973}, - {4.483333, 0.999984443, 0.993144512}, - {4.4875, 0.999975204, 0.993159413}, - {4.491667, 0.999966025, 0.993174255}, - {4.495833, 0.999956965, 0.993189216}, - {4.5, 0.999948025, 0.993204176}, - {4.504167, 0.999939263, 0.993219137}, - {4.508333, 0.99993062, 0.993234158}, - {4.5125, 0.999922216, 0.993249297}, - {4.516667, 0.999913991, 0.993264377}, - {4.520833, 0.999906003, 0.993279576}, - {4.525, 0.999898255, 0.993294775}, - {4.529167, 0.999890745, 0.993310034}, - {4.533333, 0.999883533, 0.993325353}, - {4.5375, 0.999876559, 0.993340731}, - {4.541667, 0.999869883, 0.993356109}, - {4.545833, 0.999863565, 0.993371606}, - {4.55, 0.999857545, 0.993387103}, - {4.554167, 0.999851882, 0.993402719}, - {4.558333, 0.999846518, 0.993418276}, - {4.5625, 0.999841511, 0.993434012}, - {4.566667, 0.999836922, 0.993449688}, - {4.570833, 0.99983263, 0.993465483}, - {4.575, 0.999828756, 0.993481219}, - {4.579167, 0.999825239, 0.993497133}, - {4.583333, 0.99982208, 0.993512988}, - {4.5875, 0.999819338, 0.993528962}, - {4.591667, 0.999817014, 0.993544877}, - {4.595833, 0.999815047, 0.99356091}, - {4.6, 0.999813497, 0.993576944}, - {4.604167, 0.999812305, 0.993593037}, - {4.608333, 0.99981153, 0.99360913}, - {4.6125, 0.999811113, 0.993625283}, - {4.616667, 0.999811053, 0.993641496}, - {4.620833, 0.999811411, 0.993657649}, - {4.625, 0.999812186, 0.993673861}, - {4.629167, 0.999813259, 0.993690133}, - {4.633333, 0.999814749, 0.993706405}, - {4.6375, 0.999816537, 0.993722677}, - {4.641667, 0.999818742, 0.993738949}, - {4.645833, 0.999821246, 0.993755221}, - {4.65, 0.999824047, 0.993771493}, - {4.654167, 0.999827206, 0.993787825}, - {4.658333, 0.999830663, 0.993804097}, - {4.6625, 0.999834418, 0.993820429}, - {4.666667, 0.999838471, 0.993836701}, - {4.670833, 0.999842763, 0.993852973}, - {4.675, 0.999847353, 0.993869245}, - {4.679167, 0.999852121, 0.993885517}, - {4.683333, 0.999857187, 0.99390173}, - {4.6875, 0.999862432, 0.993917942}, - {4.691667, 0.999867916, 0.993934095}, - {4.695833, 0.999873579, 0.993950248}, - {4.7, 0.99987936, 0.993966401}, - {4.704167, 0.99988538, 0.993982494}, - {4.708333, 0.99989146, 0.993998528}, - {4.7125, 0.999897718, 0.994014502}, - {4.716667, 0.999904037, 0.994030535}, - {4.720833, 0.999910533, 0.99404639}, - {4.725, 0.99991703, 0.994062304}, - {4.729167, 0.999923587, 0.9940781}, - {4.733333, 0.999930203, 0.994093835}, - {4.7375, 0.999936879, 0.994109511}, - {4.741667, 0.999943554, 0.994125187}, - {4.745833, 0.999950171, 0.994140744}, - {4.75, 0.999956846, 0.994156241}, - {4.754167, 0.999963462, 0.994171679}, - {4.758333, 0.999970019, 0.994187057}, - {4.7625, 0.999976516, 0.994202256}, - {4.766667, 0.999982893, 0.994217515}, - {4.770833, 0.999989212, 0.994232595}, - {4.775, 0.99999547, 0.994247675}, - {4.779167, 1.00000155, 0.994262576}, - {4.783333, 1.00000751, 0.994277477}, - {4.7875, 1.000013351, 0.994292259}, - {4.791667, 1.000018954, 0.994306982}, - {4.795833, 1.000024438, 0.994321525}, - {4.8, 1.000029802, 0.994336069}, - {4.804167, 1.000034928, 0.994350433}, - {4.808333, 1.000039816, 0.994364798}, - {4.8125, 1.000044584, 0.994378984}, - {4.816667, 1.000048995, 0.99439317}, - {4.820833, 1.000053287, 0.994407177}, - {4.825, 1.00005734, 0.994421124}, - {4.829167, 1.000061154, 0.994434953}, - {4.833333, 1.000064611, 0.994448721}, - {4.8375, 1.000067949, 0.994462311}, - {4.841667, 1.000071049, 0.994475901}, - {4.845833, 1.000073791, 0.994489312}, - {4.85, 1.000076294, 0.994502723}, - {4.854167, 1.000078559, 0.994515955}, - {4.858333, 1.000080466, 0.994529188}, - {4.8625, 1.000082254, 0.994542241}, - {4.866667, 1.000083685, 0.994555235}, - {4.870833, 1.000084758, 0.99456811}, - {4.875, 1.000085711, 0.994580984}, - {4.879167, 1.000086308, 0.99459368}, - {4.883333, 1.000086665, 0.994606376}, - {4.8875, 1.000086784, 0.994618893}, - {4.891667, 1.000086546, 0.99463141}, - {4.895833, 1.000086069, 0.994643748}, - {4.9, 1.000085354, 0.994656146}, - {4.904167, 1.0000844, 0.994668365}, - {4.908333, 1.000083208, 0.994680583}, - {4.9125, 1.000081778, 0.994692683}, - {4.916667, 1.000080109, 0.994704783}, - {4.920833, 1.000078201, 0.994716704}, - {4.925, 1.000076056, 0.994728684}, - {4.929167, 1.000073791, 0.994740546}, - {4.933333, 1.000071168, 0.994752407}, - {4.9375, 1.000068426, 0.994764149}, - {4.941667, 1.000065565, 0.994775891}, - {4.945833, 1.000062346, 0.994787514}, - {4.95, 1.000059128, 0.994799197}, - {4.954167, 1.000055671, 0.99481076}, - {4.958333, 1.000052094, 0.994822323}, - {4.9625, 1.000048399, 0.994833887}, - {4.966667, 1.000044465, 0.99484539}, - {4.970833, 1.000040531, 0.994856834}, - {4.975, 1.000036478, 0.994868279}, - {4.979167, 1.000032187, 0.994879723}, - {4.983333, 1.000028014, 0.994891107}, - {4.9875, 1.000023603, 0.994902492}, - {4.991667, 1.000019193, 0.994913876}, - {4.995833, 1.000014782, 0.994925261}, - {5, 1.000010252, 0.994936585}, - {5.004167, 1.000005722, 0.99494797}, - {5.008333, 1.000001192, 0.994959295}, - {5.0125, 0.999996662, 0.99497062}, - {5.016667, 0.999992073, 0.994981945}, - {5.020833, 0.999987543, 0.994993329}, - {5.025, 0.999983072, 0.995004654}, - {5.029167, 0.999978602, 0.995015979}, - {5.033333, 0.999974132, 0.995027363}, - {5.0375, 0.99996978, 0.995038688}, - {5.041667, 0.999965489, 0.995050073}, - {5.045833, 0.999961257, 0.995061457}, - {5.05, 0.999957144, 0.995072842}, - {5.054167, 0.999953091, 0.995084286}, - {5.058333, 0.999949157, 0.99509567}, - {5.0625, 0.999945343, 0.995107114}, - {5.066667, 0.999941587, 0.995118558}, - {5.070833, 0.999938011, 0.995130002}, - {5.075, 0.999934614, 0.995141506}, - {5.079167, 0.999931276, 0.99515301}, - {5.083333, 0.999928117, 0.995164514}, - {5.0875, 0.999925137, 0.995176017}, - {5.091667, 0.999922276, 0.995187581}, - {5.095833, 0.999919593, 0.995199144}, - {5.1, 0.99991709, 0.995210707}, - {5.104167, 0.999914765, 0.99522233}, - {5.108333, 0.99991262, 0.995233953}, - {5.1125, 0.999910653, 0.995245576}, - {5.116667, 0.999908865, 0.995257199}, - {5.120833, 0.999907255, 0.995268881}, - {5.125, 0.999905825, 0.995280504}, - {5.129167, 0.999904573, 0.995292187}, - {5.133333, 0.99990356, 0.995303869}, - {5.1375, 0.999902725, 0.995315611}, - {5.141667, 0.99990201, 0.995327294}, - {5.145833, 0.999901593, 0.995339036}, - {5.15, 0.999901295, 0.995350778}, - {5.154167, 0.999901176, 0.99536252}, - {5.158333, 0.999901295, 0.995374262}, - {5.1625, 0.999901593, 0.995386004}, - {5.166667, 0.99990201, 0.995397747}, - {5.170833, 0.999902666, 0.995409489}, - {5.175, 0.9999035, 0.995421231}, - {5.179167, 0.999904454, 0.995432973}, - {5.183333, 0.999905646, 0.995444715}, - {5.1875, 0.999906957, 0.995456457}, - {5.191667, 0.999908388, 0.995468199}, - {5.195833, 0.999910057, 0.995479882}, - {5.2, 0.999911845, 0.995491624}, - {5.204167, 0.999913752, 0.995503306}, - {5.208333, 0.999915779, 0.995514989}, - {5.2125, 0.999917984, 0.995526671}, - {5.216667, 0.999920249, 0.995538294}, - {5.220833, 0.999922693, 0.995549917}, - {5.225, 0.999925196, 0.99556154}, - {5.229167, 0.999927878, 0.995573103}, - {5.233333, 0.999930561, 0.995584726}, - {5.2375, 0.999933362, 0.99559623}, - {5.241667, 0.999936283, 0.995607734}, - {5.245833, 0.999939263, 0.995619237}, - {5.25, 0.999942303, 0.995630682}, - {5.254167, 0.999945343, 0.995642126}, - {5.258333, 0.999948502, 0.99565351}, - {5.2625, 0.999951661, 0.995664835}, - {5.266667, 0.999954879, 0.99567616}, - {5.270833, 0.999958098, 0.995687425}, - {5.275, 0.999961376, 0.99569869}, - {5.279167, 0.999964654, 0.995709896}, - {5.283333, 0.999967933, 0.995721042}, - {5.2875, 0.999971151, 0.995732129}, - {5.291667, 0.99997443, 0.995743215}, - {5.295833, 0.999977648, 0.995754182}, - {5.3, 0.999980807, 0.995765209}, - {5.304167, 0.999983966, 0.995776117}, - {5.308333, 0.999987125, 0.995787024}, - {5.3125, 0.999990165, 0.995797813}, - {5.316667, 0.999993205, 0.995808601}, - {5.320833, 0.999996126, 0.995819271}, - {5.325, 0.999999046, 0.995829999}, - {5.329167, 1.000001788, 0.995840549}, - {5.333333, 1.00000453, 0.995851159}, - {5.3375, 1.000007153, 0.99586159}, - {5.341667, 1.000009775, 0.99587208}, - {5.345833, 1.000012159, 0.995882452}, - {5.35, 1.000014544, 0.995892823}, - {5.354167, 1.000016809, 0.995903075}, - {5.358333, 1.000018954, 0.995913327}, - {5.3625, 1.000020981, 0.99592346}, - {5.366667, 1.000022888, 0.995933592}, - {5.370833, 1.000024676, 0.995943606}, - {5.375, 1.000026345, 0.995953619}, - {5.379167, 1.000027895, 0.995963573}, - {5.383333, 1.000029325, 0.995973468}, - {5.3875, 1.000030637, 0.995983303}, - {5.391667, 1.000031829, 0.995993078}, - {5.395833, 1.000032783, 0.996002793}, - {5.4, 1.000033736, 0.996012509}, - {5.404167, 1.000034451, 0.996022105}, - {5.408333, 1.000035167, 0.996031642}, - {5.4125, 1.000035644, 0.996041179}, - {5.416667, 1.000036001, 0.996050656}, - {5.420833, 1.00003624, 0.996060073}, - {5.425, 1.000036359, 0.996069431}, - {5.429167, 1.00003624, 0.99607873}, - {5.433333, 1.00003612, 0.996088028}, - {5.4375, 1.000035882, 0.996097267}, - {5.441667, 1.000035405, 0.996106446}, - {5.445833, 1.000034928, 0.996115625}, - {5.45, 1.000034213, 0.996124744}, - {5.454167, 1.000033498, 0.996133745}, - {5.458333, 1.000032663, 0.996142805}, - {5.4625, 1.00003159, 0.996151805}, - {5.466667, 1.000030518, 0.996160746}, - {5.470833, 1.000029325, 0.996169686}, - {5.475, 1.000028014, 0.996178567}, - {5.479167, 1.000026703, 0.996187449}, - {5.483333, 1.000025153, 0.99619627}, - {5.4875, 1.000023603, 0.996205091}, - {5.491667, 1.000022054, 0.996213853}, - {5.495833, 1.000020266, 0.996222615}, - {5.5, 1.000018477, 0.996231318}, - {5.504167, 1.000016689, 0.99624002}, - {5.508333, 1.000014782, 0.996248722}, - {5.5125, 1.000012755, 0.996257365}, - {5.516667, 1.000010729, 0.996266007}, - {5.520833, 1.000008702, 0.99627465}, - {5.525, 1.000006676, 0.996283293}, - {5.529167, 1.00000453, 0.996291876}, - {5.533333, 1.000002384, 0.996300459}, - {5.5375, 1.000000238, 0.996309042}, - {5.541667, 0.999998033, 0.996317625}, - {5.545833, 0.999995828, 0.996326149}, - {5.55, 0.999993622, 0.996334672}, - {5.554167, 0.999991417, 0.996343195}, - {5.558333, 0.999989212, 0.996351779}, - {5.5625, 0.999987006, 0.996360302}, - {5.566667, 0.99998486, 0.996368825}, - {5.570833, 0.999982715, 0.996377289}, - {5.575, 0.999980569, 0.996385813}, - {5.579167, 0.999978483, 0.996394336}, - {5.583333, 0.999976397, 0.99640286}, - {5.5875, 0.99997443, 0.996411324}, - {5.591667, 0.999972463, 0.996419847}, - {5.595833, 0.999970496, 0.99642837}, - {5.6, 0.999968648, 0.996436894}, - {5.604167, 0.99996686, 0.996445358}, - {5.608333, 0.999965072, 0.996453881}, - {5.6125, 0.999963403, 0.996462405}, - {5.616667, 0.999961793, 0.996470869}, - {5.620833, 0.999960244, 0.996479392}, - {5.625, 0.999958754, 0.996487916}, - {5.629167, 0.999957383, 0.996496439}, - {5.633333, 0.999956071, 0.996504962}, - {5.6375, 0.99995482, 0.996513486}, - {5.641667, 0.999953687, 0.996522009}, - {5.645833, 0.999952614, 0.996530533}, - {5.65, 0.999951661, 0.996539056}, - {5.654167, 0.999950767, 0.99654758}, - {5.658333, 0.999949932, 0.996556044}, - {5.6625, 0.999949276, 0.996564627}, - {5.666667, 0.999948621, 0.99657315}, - {5.670833, 0.999948144, 0.996581614}, - {5.675, 0.999947667, 0.996590137}, - {5.679167, 0.999947369, 0.996598661}, - {5.683333, 0.999947131, 0.996607184}, - {5.6875, 0.999946952, 0.996615708}, - {5.691667, 0.999946892, 0.996624231}, - {5.695833, 0.999946952, 0.996632755}, - {5.7, 0.999947071, 0.996641219}, - {5.704167, 0.999947309, 0.996649742}, - {5.708333, 0.999947608, 0.996658266}, - {5.7125, 0.999947965, 0.996666729}, - {5.716667, 0.999948442, 0.996675193}, - {5.720833, 0.999948978, 0.996683657}, - {5.725, 0.999949634, 0.996692121}, - {5.729167, 0.999950349, 0.996700585}, - {5.733333, 0.999951124, 0.996709049}, - {5.7375, 0.999952018, 0.996717453}, - {5.741667, 0.999952912, 0.996725857}, - {5.745833, 0.999953926, 0.996734262}, - {5.75, 0.999954998, 0.996742666}, - {5.754167, 0.999956131, 0.99675101}, - {5.758333, 0.999957263, 0.996759415}, - {5.7625, 0.999958515, 0.9967677}, - {5.766667, 0.999959826, 0.996776044}, - {5.770833, 0.999961138, 0.996784329}, - {5.775, 0.999962509, 0.996792674}, - {5.779167, 0.999963939, 0.9968009}, - {5.783333, 0.99996537, 0.996809185}, - {5.7875, 0.99996686, 0.99681735}, - {5.791667, 0.99996835, 0.996825576}, - {5.795833, 0.9999699, 0.996833742}, - {5.8, 0.999971449, 0.996841908}, - {5.804167, 0.999972999, 0.996850014}, - {5.808333, 0.999974608, 0.99685812}, - {5.8125, 0.999976218, 0.996866167}, - {5.816667, 0.999977827, 0.996874273}, - {5.820833, 0.999979436, 0.99688226}, - {5.825, 0.999980986, 0.996890247}, - {5.829167, 0.999982595, 0.996898234}, - {5.833333, 0.999984205, 0.996906161}, - {5.8375, 0.999985754, 0.996914029}, - {5.841667, 0.999987304, 0.996921897}, - {5.845833, 0.999988854, 0.996929765}, - {5.85, 0.999990344, 0.996937573}, - {5.854167, 0.999991834, 0.996945322}, - {5.858333, 0.999993324, 0.99695307}, - {5.8625, 0.999994755, 0.996960759}, - {5.866667, 0.999996126, 0.996968508}, - {5.870833, 0.999997497, 0.996976137}, - {5.875, 0.999998748, 0.996983767}, - {5.879167, 1, 0.996991277}, - {5.883333, 1.000001311, 0.996998847}, - {5.8875, 1.000002384, 0.997006357}, - {5.891667, 1.000003576, 0.997013867}, - {5.895833, 1.000004649, 0.997021258}, - {5.9, 1.000005603, 0.997028708}, - {5.904167, 1.000006557, 0.99703604}, - {5.908333, 1.00000751, 0.997043431}, - {5.9125, 1.000008345, 0.997050703}, - {5.916667, 1.00000906, 0.997057974}, - {5.920833, 1.000009775, 0.997065246}, - {5.925, 1.00001049, 0.997072458}, - {5.929167, 1.000011086, 0.997079611}, - {5.933333, 1.000011563, 0.997086763}, - {5.9375, 1.00001204, 0.997093856}, - {5.941667, 1.000012398, 0.997100949}, - {5.945833, 1.000012755, 0.997107983}, - {5.95, 1.000012994, 0.997115016}, - {5.954167, 1.000013232, 0.99712199}, - {5.958333, 1.000013351, 0.997128963}, - {5.9625, 1.000013351, 0.997135878}, - {5.966667, 1.000013471, 0.997142792}, - {5.970833, 1.000013351, 0.997149646}, - {5.975, 1.000013232, 0.997156501}, - {5.979167, 1.000013113, 0.997163296}, - {5.983333, 1.000012875, 0.99717015}, - {5.9875, 1.000012517, 0.997176886}, - {5.991667, 1.000012159, 0.997183621}, - {5.995833, 1.000011802, 0.997190356}, - {6, 1.000011325, 0.997197032}, - {6.004167, 1.000010729, 0.997203708}, - {6.008333, 1.000010252, 0.997210383}, - {6.0125, 1.000009656, 0.997217}, - {6.016667, 1.000008941, 0.997223616}, - {6.020833, 1.000008225, 0.997230172}, - {6.025, 1.00000751, 0.997236729}, - {6.029167, 1.000006676, 0.997243285}, - {6.033333, 1.00000596, 0.997249842}, - {6.0375, 1.000005007, 0.997256339}, - {6.041667, 1.000004172, 0.997262836}, - {6.045833, 1.000003219, 0.997269332}, - {6.05, 1.000002265, 0.99727577}, - {6.054167, 1.000001311, 0.997282207}, - {6.058333, 1.000000358, 0.997288644}, - {6.0625, 0.999999344, 0.997295082}, - {6.066667, 0.999998331, 0.997301519}, - {6.070833, 0.999997258, 0.997307897}, - {6.075, 0.999996245, 0.997314274}, - {6.079167, 0.999995172, 0.997320652}, - {6.083333, 0.999994099, 0.99732703}, - {6.0875, 0.999993026, 0.997333407}, - {6.091667, 0.999992013, 0.997339785}, - {6.095833, 0.99999094, 0.997346103}, - {6.1, 0.999989867, 0.997352421}, - {6.104167, 0.999988794, 0.997358739}, - {6.108333, 0.999987781, 0.997365057}, - {6.1125, 0.999986768, 0.997371376}, - {6.116667, 0.999985754, 0.997377694}, - {6.120833, 0.999984741, 0.997384012}, - {6.125, 0.999983788, 0.99739027}, - {6.129167, 0.999982834, 0.997396588}, - {6.133333, 0.99998188, 0.997402847}, - {6.1375, 0.999980986, 0.997409165}, - {6.141667, 0.999980092, 0.997415423}, - {6.145833, 0.999979258, 0.997421682}, - {6.15, 0.999978423, 0.99742794}, - {6.154167, 0.999977648, 0.997434199}, - {6.158333, 0.999976933, 0.997440457}, - {6.1625, 0.999976218, 0.997446716}, - {6.166667, 0.999975562, 0.997452974}, - {6.170833, 0.999974906, 0.997459233}, - {6.175, 0.99997431, 0.997465432}, - {6.179167, 0.999973774, 0.99747169}, - {6.183333, 0.999973238, 0.997477889}, - {6.1875, 0.999972761, 0.997484148}, - {6.191667, 0.999972343, 0.997490346}, - {6.195833, 0.999971986, 0.997496605}, - {6.2, 0.999971628, 0.997502804}, - {6.204167, 0.99997133, 0.997509003}, - {6.208333, 0.999971092, 0.997515202}, - {6.2125, 0.999970913, 0.9975214}, - {6.216667, 0.999970734, 0.997527599}, - {6.220833, 0.999970615, 0.997533798}, - {6.225, 0.999970555, 0.997539937}, - {6.229167, 0.999970555, 0.997546136}, - {6.233333, 0.999970555, 0.997552276}, - {6.2375, 0.999970615, 0.997558475}, - {6.241667, 0.999970734, 0.997564614}, - {6.245833, 0.999970853, 0.997570753}, - {6.25, 0.999971092, 0.997576892}, - {6.254167, 0.99997133, 0.997583032}, - {6.258333, 0.999971569, 0.997589111}, - {6.2625, 0.999971926, 0.997595251}, - {6.266667, 0.999972284, 0.99760133}, - {6.270833, 0.999972641, 0.99760741}, - {6.275, 0.999973059, 0.99761349}, - {6.279167, 0.999973536, 0.997619569}, - {6.283333, 0.999974012, 0.997625649}, - {6.2875, 0.999974549, 0.997631669}, - {6.291667, 0.999975085, 0.997637689}, - {6.295833, 0.999975681, 0.997643709}, - {6.3, 0.999976277, 0.997649729}, - {6.304167, 0.999976933, 0.997655749}, - {6.308333, 0.999977589, 0.99766171}, - {6.3125, 0.999978244, 0.99766767}, - {6.316667, 0.99997896, 0.997673631}, - {6.320833, 0.999979675, 0.997679532}, - {6.325, 0.99998039, 0.997685492}, - {6.329167, 0.999981165, 0.997691393}, - {6.333333, 0.99998188, 0.997697234}, - {6.3375, 0.999982655, 0.997703135}, - {6.341667, 0.99998343, 0.997708976}, - {6.345833, 0.999984205, 0.997714818}, - {6.35, 0.999985039, 0.997720659}, - {6.354167, 0.999985814, 0.99772644}, - {6.358333, 0.999986589, 0.997732222}, - {6.3625, 0.999987364, 0.997737944}, - {6.366667, 0.999988139, 0.997743726}, - {6.370833, 0.999988973, 0.997749448}, - {6.375, 0.999989748, 0.99775517}, - {6.379167, 0.999990463, 0.997760832}, - {6.383333, 0.999991238, 0.997766495}, - {6.3875, 0.999992013, 0.997772098}, - {6.391667, 0.999992728, 0.99777776}, - {6.395833, 0.999993443, 0.997783363}, - {6.4, 0.999994159, 0.997788966}, - {6.404167, 0.999994814, 0.997794509}, - {6.408333, 0.99999547, 0.997800052}, - {6.4125, 0.999996126, 0.997805536}, - {6.416667, 0.999996781, 0.997811079}, - {6.420833, 0.999997377, 0.997816503}, - {6.425, 0.999997973, 0.997821987}, - {6.429167, 0.99999851, 0.997827411}, - {6.433333, 0.999999046, 0.997832835}, - {6.4375, 0.999999523, 0.997838199}, - {6.441667, 1, 0.997843623}, - {6.445833, 1.000000477, 0.997848928}, - {6.45, 1.000000834, 0.997854292}, - {6.454167, 1.000001192, 0.997859597}, - {6.458333, 1.00000155, 0.997864902}, - {6.4625, 1.000001907, 0.997870147}, - {6.466667, 1.000002265, 0.997875392}, - {6.470833, 1.000002503, 0.997880638}, - {6.475, 1.000002742, 0.997885823}, - {6.479167, 1.000002861, 0.997891009}, - {6.483333, 1.000003099, 0.997896194}, - {6.4875, 1.000003219, 0.99790132}, - {6.491667, 1.000003338, 0.997906446}, - {6.495833, 1.000003457, 0.997911572}, - {6.5, 1.000003457, 0.997916639}, - {6.504167, 1.000003457, 0.997921705}, - {6.508333, 1.000003457, 0.997926772}, - {6.5125, 1.000003338, 0.997931838}, - {6.516667, 1.000003338, 0.997936845}, - {6.520833, 1.000003219, 0.997941852}, - {6.525, 1.000003099, 0.997946858}, - {6.529167, 1.000002861, 0.997951806}, - {6.533333, 1.000002742, 0.997956753}, - {6.5375, 1.000002503, 0.9979617}, - {6.541667, 1.000002265, 0.997966647}, - {6.545833, 1.000002027, 0.997971535}, - {6.55, 1.000001669, 0.997976422}, - {6.554167, 1.000001311, 0.99798131}, - {6.558333, 1.000001073, 0.997986197}, - {6.5625, 1.000000715, 0.997991025}, - {6.566667, 1.000000238, 0.997995913}, - {6.570833, 0.999999881, 0.998000741}, - {6.575, 0.999999523, 0.998005509}, - {6.579167, 0.999999046, 0.998010337}, - {6.583333, 0.999998629, 0.998015106}, - {6.5875, 0.999998152, 0.998019934}, - {6.591667, 0.999997735, 0.998024702}, - {6.595833, 0.999997258, 0.998029411}, - {6.6, 0.999996781, 0.998034179}, - {6.604167, 0.999996245, 0.998038948}, - {6.608333, 0.999995768, 0.998043656}, - {6.6125, 0.999995232, 0.998048365}, - {6.616667, 0.999994755, 0.998053074}, - {6.620833, 0.999994218, 0.998057783}, - {6.625, 0.999993742, 0.998062491}, - {6.629167, 0.999993205, 0.998067141}, - {6.633333, 0.999992728, 0.998071849}, - {6.6375, 0.999992192, 0.998076499}, - {6.641667, 0.999991715, 0.998081207}, - {6.645833, 0.999991179, 0.998085856}, - {6.65, 0.999990702, 0.998090506}, - {6.654167, 0.999990225, 0.998095095}, - {6.658333, 0.999989748, 0.998099744}, - {6.6625, 0.999989271, 0.998104393}, - {6.666667, 0.999988794, 0.998108983}, - {6.670833, 0.999988377, 0.998113632}, - {6.675, 0.99998796, 0.998118222}, - {6.679167, 0.999987543, 0.998122811}, - {6.683333, 0.999987125, 0.998127401}, - {6.6875, 0.999986708, 0.99813199}, - {6.691667, 0.999986351, 0.99813658}, - {6.695833, 0.999985993, 0.99814117}, - {6.7, 0.999985635, 0.998145759}, - {6.704167, 0.999985337, 0.998150289}, - {6.708333, 0.999985039, 0.998154879}, - {6.7125, 0.999984741, 0.998159409}, - {6.716667, 0.999984503, 0.998163998}, - {6.720833, 0.999984264, 0.998168528}, - {6.725, 0.999984026, 0.998173058}, - {6.729167, 0.999983847, 0.998177588}, - {6.733333, 0.999983668, 0.998182118}, - {6.7375, 0.99998349, 0.998186648}, - {6.741667, 0.99998337, 0.998191178}, - {6.745833, 0.999983251, 0.998195648}, - {6.75, 0.999983132, 0.998200178}, - {6.754167, 0.999983072, 0.998204648}, - {6.758333, 0.999983072, 0.998209178}, - {6.7625, 0.999983013, 0.998213649}, - {6.766667, 0.999983013, 0.998218119}, - {6.770833, 0.999983013, 0.998222589}, - {6.775, 0.999983072, 0.99822706}, - {6.779167, 0.999983132, 0.99823153}, - {6.783333, 0.999983251, 0.998235941}, - {6.7875, 0.999983311, 0.998240411}, - {6.791667, 0.99998343, 0.998244822}, - {6.795833, 0.999983609, 0.998249233}, - {6.8, 0.999983728, 0.998253644}, - {6.804167, 0.999983907, 0.998258054}, - {6.808333, 0.999984145, 0.998262465}, - {6.8125, 0.999984324, 0.998266876}, - {6.816667, 0.999984562, 0.998271227}, - {6.820833, 0.999984801, 0.998275638}, - {6.825, 0.999985099, 0.998279989}, - {6.829167, 0.999985337, 0.99828434}, - {6.833333, 0.999985635, 0.998288691}, - {6.8375, 0.999985933, 0.998292983}, - {6.841667, 0.999986291, 0.998297334}, - {6.845833, 0.999986589, 0.998301625}, - {6.85, 0.999986947, 0.998305976}, - {6.854167, 0.999987304, 0.998310208}, - {6.858333, 0.999987662, 0.9983145}, - {6.8625, 0.999988019, 0.998318791}, - {6.866667, 0.999988377, 0.998323023}, - {6.870833, 0.999988735, 0.998327315}, - {6.875, 0.999989152, 0.998331547}, - {6.879167, 0.99998951, 0.998335719}, - {6.883333, 0.999989927, 0.998339951}, - {6.8875, 0.999990284, 0.998344183}, - {6.891667, 0.999990702, 0.998348355}, - {6.895833, 0.999991059, 0.998352528}, - {6.9, 0.999991477, 0.9983567}, - {6.904167, 0.999991834, 0.998360813}, - {6.908333, 0.999992251, 0.998364985}, - {6.9125, 0.999992609, 0.998369098}, - {6.916667, 0.999993026, 0.99837321}, - {6.920833, 0.999993384, 0.998377264}, - {6.925, 0.999993742, 0.998381376}, - {6.929167, 0.999994099, 0.998385429}, - {6.933333, 0.999994457, 0.998389482}, - {6.9375, 0.999994814, 0.998393536}, - {6.941667, 0.999995172, 0.998397589}, - {6.945833, 0.99999547, 0.998401582}, - {6.95, 0.999995768, 0.998405576}, - {6.954167, 0.999996126, 0.998409569}, - {6.958333, 0.999996424, 0.998413563}, - {6.9625, 0.999996662, 0.998417497}, - {6.966667, 0.99999696, 0.99842149}, - {6.970833, 0.999997199, 0.998425424}, - {6.975, 0.999997497, 0.998429298}, - {6.979167, 0.999997735, 0.998433232}, - {6.983333, 0.999997914, 0.998437107}, - {6.9875, 0.999998152, 0.998440981}, - {6.991667, 0.999998331, 0.998444855}, - {6.995833, 0.99999851, 0.99844873}, - {7, 0.999998689, 0.998452544}, - {7.004167, 0.999998808, 0.998456359}, - {7.008333, 0.999998927, 0.998460233}, - {7.0125, 0.999999046, 0.998463988}, - {7.016667, 0.999999166, 0.998467803}, - {7.020833, 0.999999225, 0.998471558}, - {7.025, 0.999999344, 0.998475313}, - {7.029167, 0.999999404, 0.998479068}, - {7.033333, 0.999999404, 0.998482823}, - {7.0375, 0.999999464, 0.998486519}, - {7.041667, 0.999999464, 0.998490274}, - {7.045833, 0.999999464, 0.998493969}, - {7.05, 0.999999404, 0.998497665}, - {7.054167, 0.999999404, 0.99850136}, - {7.058333, 0.999999344, 0.998504996}, - {7.0625, 0.999999285, 0.998508692}, - {7.066667, 0.999999225, 0.998512328}, - {7.070833, 0.999999106, 0.998515964}, - {7.075, 0.999998987, 0.998519599}, - {7.079167, 0.999998868, 0.998523176}, - {7.083333, 0.999998748, 0.998526812}, - {7.0875, 0.999998629, 0.998530388}, - {7.091667, 0.99999845, 0.998533964}, - {7.095833, 0.999998331, 0.99853754}, - {7.1, 0.999998152, 0.998541117}, - {7.104167, 0.999997973, 0.998544693}, - {7.108333, 0.999997795, 0.99854821}, - {7.1125, 0.999997616, 0.998551726}, - {7.116667, 0.999997377, 0.998555303}, - {7.120833, 0.999997199, 0.998558819}, - {7.125, 0.99999696, 0.998562336}, - {7.129167, 0.999996722, 0.998565793}, - {7.133333, 0.999996483, 0.99856931}, - {7.1375, 0.999996305, 0.998572826}, - {7.141667, 0.999996066, 0.998576283}, - {7.145833, 0.999995828, 0.998579741}, - {7.15, 0.999995589, 0.998583198}, - {7.154167, 0.999995351, 0.998586655}, - {7.158333, 0.999995053, 0.998590112}, - {7.1625, 0.999994814, 0.998593569}, - {7.166667, 0.999994576, 0.998597026}, - {7.170833, 0.999994338, 0.998600423}, - {7.175, 0.999994099, 0.99860388}, - {7.179167, 0.999993861, 0.998607278}, - {7.183333, 0.999993622, 0.998610675}, - {7.1875, 0.999993384, 0.998614073}, - {7.191667, 0.999993145, 0.99861753}, - {7.195833, 0.999992907, 0.998620868}, - {7.2, 0.999992728, 0.998624265}, - {7.204167, 0.99999249, 0.998627663}, - {7.208333, 0.999992311, 0.99863106}, - {7.2125, 0.999992073, 0.998634398}, - {7.216667, 0.999991894, 0.998637795}, - {7.220833, 0.999991715, 0.998641133}, - {7.225, 0.999991536, 0.998644471}, - {7.229167, 0.999991357, 0.998647809}, - {7.233333, 0.999991179, 0.998651147}, - {7.2375, 0.999991, 0.998654485}, - {7.241667, 0.99999088, 0.998657823}, - {7.245833, 0.999990702, 0.99866116}, - {7.25, 0.999990582, 0.998664498}, - {7.254167, 0.999990463, 0.998667777}, - {7.258333, 0.999990344, 0.998671114}, - {7.2625, 0.999990225, 0.998674393}, - {7.266667, 0.999990165, 0.998677671}, - {7.270833, 0.999990106, 0.998681009}, - {7.275, 0.999989986, 0.998684287}, - {7.279167, 0.999989927, 0.998687565}, - {7.283333, 0.999989927, 0.998690844}, - {7.2875, 0.999989867, 0.998694062}, - {7.291667, 0.999989867, 0.99869734}, - {7.295833, 0.999989808, 0.998700619}, - {7.3, 0.999989808, 0.998703837}, - {7.304167, 0.999989808, 0.998707116}, - {7.308333, 0.999989867, 0.998710334}, - {7.3125, 0.999989867, 0.998713553}, - {7.316667, 0.999989927, 0.998716831}, - {7.320833, 0.999989927, 0.99872005}, - {7.325, 0.999989986, 0.998723269}, - {7.329167, 0.999990046, 0.998726428}, - {7.333333, 0.999990165, 0.998729646}, - {7.3375, 0.999990225, 0.998732865}, - {7.341667, 0.999990344, 0.998736024}, - {7.345833, 0.999990404, 0.998739183}, - {7.35, 0.999990523, 0.998742402}, - {7.354167, 0.999990642, 0.998745561}, - {7.358333, 0.999990761, 0.99874872}, - {7.3625, 0.99999094, 0.998751879}, - {7.366667, 0.999991059, 0.998755038}, - {7.370833, 0.999991238, 0.998758137}, - {7.375, 0.999991357, 0.998761296}, - {7.379167, 0.999991536, 0.998764396}, - {7.383333, 0.999991715, 0.998767495}, - {7.3875, 0.999991834, 0.998770654}, - {7.391667, 0.999992013, 0.998773754}, - {7.395833, 0.999992192, 0.998776793}, - {7.4, 0.999992371, 0.998779893}, - {7.404167, 0.999992549, 0.998782992}, - {7.408333, 0.999992788, 0.998786032}, - {7.4125, 0.999992967, 0.998789132}, - {7.416667, 0.999993145, 0.998792171}, - {7.420833, 0.999993324, 0.998795211}, - {7.425, 0.999993563, 0.998798251}, - {7.429167, 0.999993742, 0.998801291}, - {7.433333, 0.99999392, 0.998804271}, - {7.4375, 0.999994099, 0.998807311}, - {7.441667, 0.999994338, 0.998810291}, - {7.445833, 0.999994516, 0.998813272}, - {7.45, 0.999994695, 0.998816252}, - {7.454167, 0.999994874, 0.998819232}, - {7.458333, 0.999995053, 0.998822212}, - {7.4625, 0.999995232, 0.998825133}, - {7.466667, 0.99999541, 0.998828113}, - {7.470833, 0.999995589, 0.998831034}, - {7.475, 0.999995768, 0.998833954}, - {7.479167, 0.999995947, 0.998836875}, - {7.483333, 0.999996126, 0.998839796}, - {7.4875, 0.999996305, 0.998842716}, - {7.491667, 0.999996424, 0.998845577}, - {7.495833, 0.999996603, 0.998848498}, - {7.5, 0.999996722, 0.998851359}, - {7.504167, 0.999996841, 0.99885422}, - {7.508333, 0.99999696, 0.998857081}, - {7.5125, 0.999997139, 0.998859942}, - {7.516667, 0.999997258, 0.998862803}, - {7.520833, 0.999997318, 0.998865604}, - {7.525, 0.999997437, 0.998868406}, - {7.529167, 0.999997556, 0.998871207}, - {7.533333, 0.999997616, 0.998874068}, - {7.5375, 0.999997735, 0.99887681}, - {7.541667, 0.999997795, 0.998879611}, - {7.545833, 0.999997854, 0.998882413}, - {7.55, 0.999997914, 0.998885155}, - {7.554167, 0.999997973, 0.998887956}, - {7.558333, 0.999998033, 0.998890698}, - {7.5625, 0.999998033, 0.99889344}, - {7.566667, 0.999998093, 0.998896182}, - {7.570833, 0.999998093, 0.998898864}, - {7.575, 0.999998093, 0.998901606}, - {7.579167, 0.999998093, 0.998904347}, - {7.583333, 0.999998093, 0.99890703}, - {7.5875, 0.999998093, 0.998909712}, - {7.591667, 0.999998093, 0.998912394}, - {7.595833, 0.999998093, 0.998915076}, - {7.6, 0.999998033, 0.998917758}, - {7.604167, 0.999998033, 0.998920441}, - {7.608333, 0.999997973, 0.998923063}, - {7.6125, 0.999997914, 0.998925745}, - {7.616667, 0.999997854, 0.998928368}, - {7.620833, 0.999997795, 0.998930991}, - {7.625, 0.999997735, 0.998933613}, - {7.629167, 0.999997675, 0.998936236}, - {7.633333, 0.999997616, 0.998938859}, - {7.6375, 0.999997497, 0.998941481}, - {7.641667, 0.999997437, 0.998944104}, - {7.645833, 0.999997318, 0.998946667}, - {7.65, 0.999997258, 0.998949289}, - {7.654167, 0.999997139, 0.998951852}, - {7.658333, 0.999997079, 0.998954415}, - {7.6625, 0.99999696, 0.998956978}, - {7.666667, 0.999996841, 0.998959541}, - {7.670833, 0.999996722, 0.998962104}, - {7.675, 0.999996662, 0.998964667}, - {7.679167, 0.999996543, 0.99896723}, - {7.683333, 0.999996424, 0.998969734}, - {7.6875, 0.999996305, 0.998972297}, - {7.691667, 0.999996185, 0.9989748}, - {7.695833, 0.999996066, 0.998977304}, - {7.7, 0.999995947, 0.998979867}, - {7.704167, 0.999995828, 0.99898237}, - {7.708333, 0.999995708, 0.998984873}, - {7.7125, 0.999995589, 0.998987377}, - {7.716667, 0.99999547, 0.99898988}, - {7.720833, 0.99999541, 0.998992324}, - {7.725, 0.999995291, 0.998994827}, - {7.729167, 0.999995172, 0.998997331}, - {7.733333, 0.999995053, 0.998999774}, - {7.7375, 0.999994934, 0.999002278}, - {7.741667, 0.999994874, 0.999004722}, - {7.745833, 0.999994755, 0.999007165}, - {7.75, 0.999994636, 0.999009669}, - {7.754167, 0.999994576, 0.999012113}, - {7.758333, 0.999994457, 0.999014556}, - {7.7625, 0.999994397, 0.999017}, - {7.766667, 0.999994338, 0.999019444}, - {7.770833, 0.999994218, 0.999021828}, - {7.775, 0.999994159, 0.999024272}, - {7.779167, 0.999994099, 0.999026716}, - {7.783333, 0.99999404, 0.9990291}, - {7.7875, 0.99999398, 0.999031544}, - {7.791667, 0.99999392, 0.999033928}, - {7.795833, 0.999993861, 0.999036372}, - {7.8, 0.999993801, 0.999038756}, - {7.804167, 0.999993801, 0.99904114}, - {7.808333, 0.999993742, 0.999043524}, - {7.8125, 0.999993742, 0.999045908}, - {7.816667, 0.999993682, 0.999048293}, - {7.820833, 0.999993682, 0.999050677}, - {7.825, 0.999993682, 0.999053061}, - {7.829167, 0.999993682, 0.999055445}, - {7.833333, 0.999993682, 0.99905777}, - {7.8375, 0.999993682, 0.999060154}, - {7.841667, 0.999993682, 0.999062479}, - {7.845833, 0.999993682, 0.999064863}, - {7.85, 0.999993682, 0.999067187}, - {7.854167, 0.999993742, 0.999069512}, - {7.858333, 0.999993742, 0.999071836}, - {7.8625, 0.999993801, 0.999074161}, - {7.866667, 0.999993801, 0.999076486}, - {7.870833, 0.999993861, 0.99907881}, - {7.875, 0.99999392, 0.999081135}, - {7.879167, 0.99999398, 0.999083459}, - {7.883333, 0.99999398, 0.999085724}, - {7.8875, 0.99999404, 0.999088049}, - {7.891667, 0.999994099, 0.999090314}, - {7.895833, 0.999994218, 0.999092638}, - {7.9, 0.999994278, 0.999094903}, - {7.904167, 0.999994338, 0.999097168}, - {7.908333, 0.999994397, 0.999099433}, - {7.9125, 0.999994516, 0.999101698}, - {7.916667, 0.999994576, 0.999103963}, - {7.920833, 0.999994636, 0.999106228}, - {7.925, 0.999994755, 0.999108434}, - {7.929167, 0.999994814, 0.999110699}, - {7.933333, 0.999994934, 0.999112964}, - {7.9375, 0.999994993, 0.999115169}, - {7.941667, 0.999995112, 0.999117374}, - {7.945833, 0.999995232, 0.999119639}, - {7.95, 0.999995291, 0.999121845}, - {7.954167, 0.99999541, 0.99912405}, - {7.958333, 0.99999547, 0.999126256}, - {7.9625, 0.999995589, 0.999128401}, - {7.966667, 0.999995708, 0.999130607}, - {7.970833, 0.999995768, 0.999132812}, - {7.975, 0.999995887, 0.999134958}, - {7.979167, 0.999996006, 0.999137163}, - {7.983333, 0.999996066, 0.999139309}, - {7.9875, 0.999996185, 0.999141455}, - {7.991667, 0.999996245, 0.99914366}, - {7.995833, 0.999996364, 0.999145746}, - {8, 0.999996483, 0.999147892}, - {8.004167, 0.999996543, 0.999150038}, - {8.008333, 0.999996662, 0.999152184}, - {8.0125, 0.999996722, 0.999154329}, - {8.016667, 0.999996781, 0.999156415}, - {8.020833, 0.999996901, 0.999158502}, - {8.025, 0.99999696, 0.999160647}, - {8.029167, 0.99999702, 0.999162734}, - {8.033333, 0.999997139, 0.99916482}, - {8.0375, 0.999997199, 0.999166906}, - {8.041667, 0.999997258, 0.999168992}, - {8.045833, 0.999997318, 0.999171078}, - {8.05, 0.999997377, 0.999173105}, - {8.054167, 0.999997437, 0.999175191}, - {8.058333, 0.999997497, 0.999177277}, - {8.0625, 0.999997556, 0.999179304}, - {8.066667, 0.999997616, 0.99918133}, - {8.070833, 0.999997675, 0.999183357}, - {8.075, 0.999997675, 0.999185443}, - {8.079167, 0.999997735, 0.99918741}, - {8.083333, 0.999997795, 0.999189436}, - {8.0875, 0.999997795, 0.999191463}, - {8.091667, 0.999997854, 0.99919349}, - {8.095833, 0.999997854, 0.999195457}, - {8.1, 0.999997854, 0.999197483}, - {8.104167, 0.999997914, 0.99919945}, - {8.108333, 0.999997914, 0.999201477}, - {8.1125, 0.999997914, 0.999203444}, - {8.116667, 0.999997914, 0.99920541}, - {8.120833, 0.999997914, 0.999207377}, - {8.125, 0.999997914, 0.999209344}, - {8.129167, 0.999997914, 0.999211311}, - {8.133333, 0.999997914, 0.999213278}, - {8.1375, 0.999997914, 0.999215186}, - {8.141667, 0.999997854, 0.999217153}, - {8.145833, 0.999997854, 0.99921906}, - {8.15, 0.999997854, 0.999221027}, - {8.154167, 0.999997795, 0.999222934}, - {8.158333, 0.999997795, 0.999224842}, - {8.1625, 0.999997735, 0.999226749}, - {8.166667, 0.999997735, 0.999228716}, - {8.170833, 0.999997675, 0.999230564}, - {8.175, 0.999997675, 0.999232471}, - {8.179167, 0.999997616, 0.999234378}, - {8.183333, 0.999997556, 0.999236286}, - {8.1875, 0.999997556, 0.999238193}, - {8.191667, 0.999997497, 0.999240041}, - {8.195833, 0.999997437, 0.999241948}, - {8.2, 0.999997377, 0.999243796}, - {8.204167, 0.999997318, 0.999245644}, - {8.208333, 0.999997318, 0.999247551}, - {8.2125, 0.999997258, 0.999249399}, - {8.216667, 0.999997199, 0.999251246}, - {8.220833, 0.999997139, 0.999253094}, - {8.225, 0.999997079, 0.999254942}, - {8.229167, 0.99999702, 0.99925679}, - {8.233333, 0.99999696, 0.999258637}, - {8.2375, 0.999996901, 0.999260485}, - {8.241667, 0.999996901, 0.999262273}, - {8.245833, 0.999996841, 0.999264121}, - {8.25, 0.999996781, 0.999265969}, - {8.254167, 0.999996722, 0.999267757}, - {8.258333, 0.999996662, 0.999269605}, - {8.2625, 0.999996603, 0.999271393}, - {8.266667, 0.999996543, 0.999273181}, - {8.270833, 0.999996483, 0.999274969}, - {8.275, 0.999996483, 0.999276817}, - {8.279167, 0.999996424, 0.999278605}, - {8.283333, 0.999996364, 0.999280393}, - {8.2875, 0.999996305, 0.999282181}, - {8.291667, 0.999996305, 0.999283969}, - {8.295833, 0.999996245, 0.999285758}, - {8.3, 0.999996185, 0.999287486}, - {8.304167, 0.999996185, 0.999289274}, - {8.308333, 0.999996126, 0.999291062}, - {8.3125, 0.999996126, 0.999292791}, - {8.316667, 0.999996066, 0.999294579}, - {8.320833, 0.999996066, 0.999296308}, - {8.325, 0.999996006, 0.999298096}, - {8.329167, 0.999996006, 0.999299824}, - {8.333333, 0.999996006, 0.999301553}, - {8.3375, 0.999995947, 0.999303341}, - {8.341667, 0.999995947, 0.999305069}, - {8.345833, 0.999995947, 0.999306798}, - {8.35, 0.999995947, 0.999308527}, - {8.354167, 0.999995887, 0.999310255}, - {8.358333, 0.999995887, 0.999311984}, - {8.3625, 0.999995887, 0.999313712}, - {8.366667, 0.999995887, 0.999315381}, - {8.370833, 0.999995887, 0.99931711}, - {8.375, 0.999995887, 0.999318838}, - {8.379167, 0.999995887, 0.999320507}, - {8.383333, 0.999995947, 0.999322236}, - {8.3875, 0.999995947, 0.999323905}, - {8.391667, 0.999995947, 0.999325633}, - {8.395833, 0.999995947, 0.999327302}, - {8.4, 0.999996006, 0.999329031}, - {8.404167, 0.999996006, 0.999330699}, - {8.408333, 0.999996006, 0.999332368}, - {8.4125, 0.999996066, 0.999334037}, - {8.416667, 0.999996066, 0.999335706}, - {8.420833, 0.999996126, 0.999337375}, - {8.425, 0.999996126, 0.999339044}, - {8.429167, 0.999996185, 0.999340713}, - {8.433333, 0.999996185, 0.999342322}, - {8.4375, 0.999996245, 0.999343991}, - {8.441667, 0.999996305, 0.99934566}, - {8.445833, 0.999996305, 0.99934727}, - {8.45, 0.999996364, 0.999348938}, - {8.454167, 0.999996424, 0.999350548}, - {8.458333, 0.999996483, 0.999352217}, - {8.4625, 0.999996483, 0.999353826}, - {8.466667, 0.999996543, 0.999355435}, - {8.470833, 0.999996603, 0.999357045}, - {8.475, 0.999996662, 0.999358654}, - {8.479167, 0.999996662, 0.999360263}, - {8.483333, 0.999996722, 0.999361873}, - {8.4875, 0.999996781, 0.999363482}, - {8.491667, 0.999996841, 0.999365091}, - {8.495833, 0.999996901, 0.999366701}, - {8.5, 0.99999696, 0.99936825}, - {8.504167, 0.99999696, 0.99936986}, - {8.508333, 0.99999702, 0.999371409}, - {8.5125, 0.999997079, 0.999373019}, - {8.516667, 0.999997139, 0.999374568}, - {8.520833, 0.999997199, 0.999376178}, - {8.525, 0.999997258, 0.999377728}, - {8.529167, 0.999997258, 0.999379277}, - {8.533333, 0.999997318, 0.999380827}, - {8.5375, 0.999997377, 0.999382377}, - {8.541667, 0.999997437, 0.999383926}, - {8.545833, 0.999997497, 0.999385476}, - {8.55, 0.999997497, 0.999387026}, - {8.554167, 0.999997556, 0.999388516}, - {8.558333, 0.999997616, 0.999390066}, - {8.5625, 0.999997616, 0.999391615}, - {8.566667, 0.999997675, 0.999393106}, - {8.570833, 0.999997735, 0.999394655}, - {8.575, 0.999997735, 0.999396145}, - {8.579167, 0.999997795, 0.999397635}, - {8.583333, 0.999997795, 0.999399185}, - {8.5875, 0.999997854, 0.999400675}, - {8.591667, 0.999997914, 0.999402165}, - {8.595833, 0.999997914, 0.999403656}, - {8.6, 0.999997914, 0.999405146}, - {8.604167, 0.999997973, 0.999406636}, - {8.608333, 0.999997973, 0.999408126}, - {8.6125, 0.999998033, 0.999409556}, - {8.616667, 0.999998033, 0.999411047}, - {8.620833, 0.999998033, 0.999412537}, - {8.625, 0.999998093, 0.999413967}, - {8.629167, 0.999998093, 0.999415457}, - {8.633333, 0.999998093, 0.999416888}, - {8.6375, 0.999998093, 0.999418318}, - {8.641667, 0.999998093, 0.999419808}, - {8.645833, 0.999998152, 0.999421239}, - {8.65, 0.999998152, 0.999422669}, - {8.654167, 0.999998152, 0.9994241}, - {8.658333, 0.999998152, 0.99942553}, - {8.6625, 0.999998152, 0.999426961}, - {8.666667, 0.999998152, 0.999428391}, - {8.670833, 0.999998152, 0.999429822}, - {8.675, 0.999998152, 0.999431252}, - {8.679167, 0.999998152, 0.999432623}, - {8.683333, 0.999998093, 0.999434054}, - {8.6875, 0.999998093, 0.999435425}, - {8.691667, 0.999998093, 0.999436855}, - {8.695833, 0.999998093, 0.999438226}, - {8.7, 0.999998093, 0.999439657}, - {8.704167, 0.999998033, 0.999441028}, - {8.708333, 0.999998033, 0.999442399}, - {8.7125, 0.999998033, 0.999443829}, - {8.716667, 0.999998033, 0.9994452}, - {8.720833, 0.999997973, 0.999446571}, - {8.725, 0.999997973, 0.999447942}, - {8.729167, 0.999997973, 0.999449313}, - {8.733333, 0.999997914, 0.999450684}, - {8.7375, 0.999997914, 0.999452055}, - {8.741667, 0.999997914, 0.999453425}, - {8.745833, 0.999997854, 0.999454737}, - {8.75, 0.999997854, 0.999456108}, - {8.754167, 0.999997795, 0.999457479}, - {8.758333, 0.999997795, 0.99945879}, - {8.7625, 0.999997795, 0.999460161}, - {8.766667, 0.999997735, 0.999461472}, - {8.770833, 0.999997735, 0.999462843}, - {8.775, 0.999997675, 0.999464154}, - {8.779167, 0.999997675, 0.999465525}, - {8.783333, 0.999997675, 0.999466836}, - {8.7875, 0.999997616, 0.999468148}, - {8.791667, 0.999997616, 0.999469459}, - {8.795833, 0.999997616, 0.99947077}, - {8.8, 0.999997556, 0.999472082}, - {8.804167, 0.999997556, 0.999473393}, - {8.808333, 0.999997497, 0.999474704}, - {8.8125, 0.999997497, 0.999476016}, - {8.816667, 0.999997497, 0.999477327}, - {8.820833, 0.999997437, 0.999478638}, - {8.825, 0.999997437, 0.999479949}, - {8.829167, 0.999997437, 0.999481261}, - {8.833333, 0.999997377, 0.999482512}, - {8.8375, 0.999997377, 0.999483824}, - {8.841667, 0.999997377, 0.999485135}, - {8.845833, 0.999997377, 0.999486387}, - {8.85, 0.999997318, 0.999487698}, - {8.854167, 0.999997318, 0.99948895}, - {8.858333, 0.999997318, 0.999490201}, - {8.8625, 0.999997318, 0.999491513}, - {8.866667, 0.999997318, 0.999492764}, - {8.870833, 0.999997318, 0.999494016}, - {8.875, 0.999997258, 0.999495268}, - {8.879167, 0.999997258, 0.999496579}, - {8.883333, 0.999997258, 0.999497831}, - {8.8875, 0.999997258, 0.999499083}, - {8.891667, 0.999997258, 0.999500334}, - {8.895833, 0.999997258, 0.999501586}, - {8.9, 0.999997258, 0.999502838}, - {8.904167, 0.999997258, 0.999504089}, - {8.908333, 0.999997258, 0.999505281}, - {8.9125, 0.999997258, 0.999506533}, - {8.916667, 0.999997258, 0.999507785}, - {8.920833, 0.999997318, 0.999509037}, - {8.925, 0.999997318, 0.999510229}, - {8.929167, 0.999997318, 0.99951148}, - {8.933333, 0.999997318, 0.999512672}, - {8.9375, 0.999997318, 0.999513924}, - {8.941667, 0.999997318, 0.999515116}, - {8.945833, 0.999997377, 0.999516368}, - {8.95, 0.999997377, 0.99951756}, - {8.954167, 0.999997377, 0.999518752}, - {8.958333, 0.999997377, 0.999520004}, - {8.9625, 0.999997437, 0.999521196}, - {8.966667, 0.999997437, 0.999522388}, - {8.970833, 0.999997437, 0.99952358}, - {8.975, 0.999997497, 0.999524772}, - {8.979167, 0.999997497, 0.999525964}, - {8.983333, 0.999997497, 0.999527156}, - {8.9875, 0.999997556, 0.999528348}, - {8.991667, 0.999997556, 0.999529541}, - {8.995833, 0.999997616, 0.999530733}, - {9, 0.999997616, 0.999531865}, - {9.004167, 0.999997616, 0.999533057}, - {9.008333, 0.999997675, 0.999534249}, - {9.0125, 0.999997675, 0.999535382}, - {9.016667, 0.999997735, 0.999536574}, - {9.020833, 0.999997735, 0.999537706}, - {9.025, 0.999997735, 0.999538898}, - {9.029167, 0.999997795, 0.999540031}, - {9.033333, 0.999997795, 0.999541223}, - {9.0375, 0.999997854, 0.999542356}, - {9.041667, 0.999997854, 0.999543488}, - {9.045833, 0.999997914, 0.999544621}, - {9.05, 0.999997914, 0.999545753}, - {9.054167, 0.999997973, 0.999546945}, - {9.058333, 0.999997973, 0.999548078}, - {9.0625, 0.999997973, 0.99954921}, - {9.066667, 0.999998033, 0.999550343}, - {9.070833, 0.999998033, 0.999551415}, - {9.075, 0.999998093, 0.999552548}, - {9.079167, 0.999998093, 0.99955368}, - {9.083333, 0.999998093, 0.999554813}, - {9.0875, 0.999998152, 0.999555945}, - {9.091667, 0.999998152, 0.999557018}, - {9.095833, 0.999998212, 0.999558151}, - {9.1, 0.999998212, 0.999559224}, - {9.104167, 0.999998212, 0.999560356}, - {9.108333, 0.999998271, 0.999561429}, - {9.1125, 0.999998271, 0.999562562}, - {9.116667, 0.999998271, 0.999563634}, - {9.120833, 0.999998331, 0.999564707}, - {9.125, 0.999998331, 0.99956584}, - {9.129167, 0.999998331, 0.999566913}, - {9.133333, 0.999998331, 0.999567986}, - {9.1375, 0.999998391, 0.999569058}, - {9.141667, 0.999998391, 0.999570131}, - {9.145833, 0.999998391, 0.999571204}, - {9.15, 0.999998391, 0.999572277}, - {9.154167, 0.999998391, 0.99957335}, - {9.158333, 0.99999845, 0.999574423}, - {9.1625, 0.99999845, 0.999575496}, - {9.166667, 0.99999845, 0.999576569}, - {9.170833, 0.99999845, 0.999577582}, - {9.175, 0.99999845, 0.999578655}, - {9.179167, 0.99999845, 0.999579728}, - {9.183333, 0.99999845, 0.999580741}, - {9.1875, 0.99999845, 0.999581814}, - {9.191667, 0.99999845, 0.999582827}, - {9.195833, 0.99999851, 0.9995839}, - {9.2, 0.99999851, 0.999584913}, - {9.204167, 0.99999851, 0.999585927}, - {9.208333, 0.99999851, 0.999586999}, - {9.2125, 0.99999851, 0.999588013}, - {9.216667, 0.99999851, 0.999589026}, - {9.220833, 0.99999845, 0.999590039}, - {9.225, 0.99999845, 0.999591053}, - {9.229167, 0.99999845, 0.999592125}, - {9.233333, 0.99999845, 0.999593139}, - {9.2375, 0.99999845, 0.999594152}, - {9.241667, 0.99999845, 0.999595165}, - {9.245833, 0.99999845, 0.999596119}, - {9.25, 0.99999845, 0.999597132}, - {9.254167, 0.99999845, 0.999598145}, - {9.258333, 0.99999845, 0.999599159}, - {9.2625, 0.99999845, 0.999600172}, - {9.266667, 0.999998391, 0.999601126}, - {9.270833, 0.999998391, 0.999602139}, - {9.275, 0.999998391, 0.999603152}, - {9.279167, 0.999998391, 0.999604106}, - {9.283333, 0.999998391, 0.999605119}, - {9.2875, 0.999998391, 0.999606073}, - {9.291667, 0.999998331, 0.999607086}, - {9.295833, 0.999998331, 0.99960804}, - {9.3, 0.999998331, 0.999609053}, - {9.304167, 0.999998331, 0.999610007}, - {9.308333, 0.999998331, 0.99961096}, - {9.3125, 0.999998331, 0.999611914}, - {9.316667, 0.999998271, 0.999612927}, - {9.320833, 0.999998271, 0.999613881}, - {9.325, 0.999998271, 0.999614835}, - {9.329167, 0.999998271, 0.999615788}, - {9.333333, 0.999998271, 0.999616742}, - {9.3375, 0.999998271, 0.999617696}, - {9.341667, 0.999998212, 0.999618649}, - {9.345833, 0.999998212, 0.999619603}, - {9.35, 0.999998212, 0.999620557}, - {9.354167, 0.999998212, 0.999621511}, - {9.358333, 0.999998212, 0.999622464}, - {9.3625, 0.999998212, 0.999623418}, - {9.366667, 0.999998212, 0.999624312}, - {9.370833, 0.999998152, 0.999625266}, - {9.375, 0.999998152, 0.999626219}, - {9.379167, 0.999998152, 0.999627173}, - {9.383333, 0.999998152, 0.999628067}, - {9.3875, 0.999998152, 0.999629021}, - {9.391667, 0.999998152, 0.999629915}, - {9.395833, 0.999998152, 0.999630868}, - {9.4, 0.999998152, 0.999631763}, - {9.404167, 0.999998152, 0.999632716}, - {9.408333, 0.999998152, 0.99963361}, - {9.4125, 0.999998152, 0.999634564}, - {9.416667, 0.999998152, 0.999635458}, - {9.420833, 0.999998152, 0.999636352}, - {9.425, 0.999998152, 0.999637246}, - {9.429167, 0.999998152, 0.9996382}, - {9.433333, 0.999998152, 0.999639094}, - {9.4375, 0.999998152, 0.999639988}, - {9.441667, 0.999998152, 0.999640882}, - {9.445833, 0.999998152, 0.999641776}, - {9.45, 0.999998152, 0.99964267}, - {9.454167, 0.999998152, 0.999643564}, - {9.458333, 0.999998152, 0.999644458}, - {9.4625, 0.999998152, 0.999645352}, - {9.466667, 0.999998152, 0.999646246}, - {9.470833, 0.999998152, 0.999647141}, - {9.475, 0.999998212, 0.999648035}, - {9.479167, 0.999998212, 0.999648929}, - {9.483333, 0.999998212, 0.999649763}, - {9.4875, 0.999998212, 0.999650657}, - {9.491667, 0.999998212, 0.999651551}, - {9.495833, 0.999998212, 0.999652445}, - {9.5, 0.999998212, 0.99965328}, - {9.504167, 0.999998271, 0.999654174}, - {9.508333, 0.999998271, 0.999655008}, - {9.5125, 0.999998271, 0.999655902}, - {9.516667, 0.999998271, 0.999656737}, - {9.520833, 0.999998271, 0.999657631}, - {9.525, 0.999998331, 0.999658465}, - {9.529167, 0.999998331, 0.999659359}, - {9.533333, 0.999998331, 0.999660194}, - {9.5375, 0.999998331, 0.999661028}, - {9.541667, 0.999998331, 0.999661863}, - {9.545833, 0.999998391, 0.999662757}, - {9.55, 0.999998391, 0.999663591}, - {9.554167, 0.999998391, 0.999664426}, - {9.558333, 0.999998391, 0.99966526}, - {9.5625, 0.99999845, 0.999666095}, - {9.566667, 0.99999845, 0.999666929}, - {9.570833, 0.99999845, 0.999667764}, - {9.575, 0.99999845, 0.999668598}, - {9.579167, 0.99999845, 0.999669433}, - {9.583333, 0.99999851, 0.999670267}, - {9.5875, 0.99999851, 0.999671102}, - {9.591667, 0.99999851, 0.999671936}, - {9.595833, 0.99999851, 0.999672771}, - {9.6, 0.999998569, 0.999673545}, - {9.604167, 0.999998569, 0.99967438}, - {9.608333, 0.999998569, 0.999675214}, - {9.6125, 0.999998569, 0.999676049}, - {9.616667, 0.999998629, 0.999676824}, - {9.620833, 0.999998629, 0.999677658}, - {9.625, 0.999998629, 0.999678433}, - {9.629167, 0.999998629, 0.999679267}, - {9.633333, 0.999998629, 0.999680042}, - {9.6375, 0.999998689, 0.999680877}, - {9.641667, 0.999998689, 0.999681652}, - {9.645833, 0.999998689, 0.999682486}, - {9.65, 0.999998689, 0.999683261}, - {9.654167, 0.999998689, 0.999684036}, - {9.658333, 0.999998689, 0.999684811}, - {9.6625, 0.999998748, 0.999685645}, - {9.666667, 0.999998748, 0.99968642}, - {9.670833, 0.999998748, 0.999687195}, - {9.675, 0.999998748, 0.99968797}, - {9.679167, 0.999998748, 0.999688745}, - {9.683333, 0.999998748, 0.999689519}, - {9.6875, 0.999998748, 0.999690294}, - {9.691667, 0.999998748, 0.999691069}, - {9.695833, 0.999998808, 0.999691844}, - {9.7, 0.999998808, 0.999692619}, - {9.704167, 0.999998808, 0.999693394}, - {9.708333, 0.999998808, 0.999694169}, - {9.7125, 0.999998808, 0.999694943}, - {9.716667, 0.999998808, 0.999695718}, - {9.720833, 0.999998808, 0.999696434}, - {9.725, 0.999998808, 0.999697208}, - {9.729167, 0.999998808, 0.999697983}, - {9.733333, 0.999998808, 0.999698699}, - {9.7375, 0.999998808, 0.999699473}, - {9.741667, 0.999998808, 0.999700248}, - {9.745833, 0.999998808, 0.999700963}, - {9.75, 0.999998808, 0.999701738}, - {9.754167, 0.999998808, 0.999702454}, - {9.758333, 0.999998808, 0.999703228}, - {9.7625, 0.999998808, 0.999703944}, - {9.766667, 0.999998808, 0.999704719}, - {9.770833, 0.999998808, 0.999705434}, - {9.775, 0.999998808, 0.999706149}, - {9.779167, 0.999998808, 0.999706924}, - {9.783333, 0.999998808, 0.999707639}, - {9.7875, 0.999998808, 0.999708354}, - {9.791667, 0.999998808, 0.99970907}, - {9.795833, 0.999998808, 0.999709845}, - {9.8, 0.999998808, 0.99971056}, - {9.804167, 0.999998808, 0.999711275}, - {9.808333, 0.999998808, 0.99971199}, - {9.8125, 0.999998808, 0.999712706}, - {9.816667, 0.999998808, 0.999713421}, - {9.820833, 0.999998808, 0.999714136}, - {9.825, 0.999998808, 0.999714851}, - {9.829167, 0.999998808, 0.999715567}, - {9.833333, 0.999998748, 0.999716282}, - {9.8375, 0.999998748, 0.999716997}, - {9.841667, 0.999998748, 0.999717712}, - {9.845833, 0.999998748, 0.999718368}, - {9.85, 0.999998748, 0.999719083}, - {9.854167, 0.999998748, 0.999719799}, - {9.858333, 0.999998748, 0.999720514}, - {9.8625, 0.999998748, 0.999721169}, - {9.866667, 0.999998748, 0.999721885}, - {9.870833, 0.999998748, 0.9997226}, - {9.875, 0.999998748, 0.999723256}, - {9.879167, 0.999998748, 0.999723971}, - {9.883333, 0.999998748, 0.999724686}, - {9.8875, 0.999998748, 0.999725342}, - {9.891667, 0.999998748, 0.999726057}, - {9.895833, 0.999998748, 0.999726713}, - {9.9, 0.999998689, 0.999727428}, - {9.904167, 0.999998689, 0.999728084}, - {9.908333, 0.999998689, 0.999728799}, - {9.9125, 0.999998689, 0.999729455}, - {9.916667, 0.999998689, 0.99973011}, - {9.920833, 0.999998689, 0.999730825}, - {9.925, 0.999998689, 0.999731481}, - {9.929167, 0.999998689, 0.999732137}, - {9.933333, 0.999998689, 0.999732792}, - {9.9375, 0.999998689, 0.999733508}, - {9.941667, 0.999998689, 0.999734163}, - {9.945833, 0.999998689, 0.999734819}, - {9.95, 0.999998689, 0.999735475}, - {9.954167, 0.999998689, 0.99973613}, - {9.958333, 0.999998689, 0.999736786}, - {9.9625, 0.999998689, 0.999737501}, - {9.966667, 0.999998689, 0.999738157}, - {9.970833, 0.999998689, 0.999738812}, - {9.975, 0.999998689, 0.999739468}, - {9.979167, 0.999998689, 0.999740124}, - {9.983333, 0.999998689, 0.99974072}, - {9.9875, 0.999998689, 0.999741375}, - {9.991667, 0.999998748, 0.999742031}, - {9.995833, 0.999998748, 0.999742687}, - {10, 0.999998748, 0.999743342}}; + { + {0,1,1.000000477}, + {0.004167,1,1.000000477}, + {0.008333,1,1.000000477}, + {0.0125,0.99999994,1.000000477}, + {0.016667,0.99999994,1.000000477}, + {0.020833,0.99999994,1.000000477}, + {0.025,0.99999994,1.000000477}, + {0.029167,0.99999994,1.000000477}, + {0.033333,0.99999994,1.000000477}, + {0.0375,0.99999994,1.000000477}, + {0.041667,0.99999994,1.000000477}, + {0.045833,0.99999994,1.000000477}, + {0.05,0.999999881,1.000000477}, + {0.054167,0.999999881,1.000000477}, + {0.058333,0.999999881,1.000000477}, + {0.0625,0.999999881,1.000000477}, + {0.066667,0.999999881,1.000000477}, + {0.070833,0.999999881,1.000000477}, + {0.075,0.999999881,1.000000477}, + {0.079167,0.999999881,1.000000477}, + {0.083333,0.999999881,1.000000477}, + {0.0875,0.999999881,1.000000477}, + {0.091667,0.999999881,1.000000477}, + {0.095833,0.999999881,1.000000477}, + {0.1,0.999999881,1.000000477}, + {0.104167,0.999999881,1.000000477}, + {0.108333,0.999999881,1.000000477}, + {0.1125,0.999999881,1.000000477}, + {0.116667,0.999999881,1.000000477}, + {0.120833,0.999999881,1.000000477}, + {0.125,0.999999881,1.000000477}, + {0.129167,0.999999881,1.000000477}, + {0.133333,0.999999881,1.000000477}, + {0.1375,0.99999994,1.000000477}, + {0.141667,0.99999994,1.000000477}, + {0.145833,0.99999994,1.000000477}, + {0.15,0.99999994,1.000000477}, + {0.154167,0.99999994,1.000000477}, + {0.158333,0.99999994,1.000000477}, + {0.1625,0.99999994,1.000000477}, + {0.166667,0.99999994,1.000000477}, + {0.170833,0.99999994,1.000000477}, + {0.175,0.99999994,1.000000477}, + {0.179167,0.99999994,1.000000477}, + {0.183333,0.99999994,1.000000477}, + {0.1875,0.99999994,1.000000477}, + {0.191667,0.99999994,1.000000477}, + {0.195833,1,1.000000477}, + {0.2,1,1.000000477}, + {0.204167,1,1.000000477}, + {0.208333,1,1.000000477}, + {0.2125,1,1.000000477}, + {0.216667,1,1.000000477}, + {0.220833,1,1.000000477}, + {0.225,1,1.000000477}, + {0.229167,1,1.000000477}, + {0.233333,1,1.000000477}, + {0.2375,1,1.000000477}, + {0.241667,1,1.000000477}, + {0.245833,1,1.000000477}, + {0.25,1,1.000000477}, + {0.254167,1,1.000000477}, + {0.258333,1,1.000000477}, + {0.2625,1,1.000000477}, + {0.266667,1,1.000000477}, + {0.270833,1,1.000000477}, + {0.275,1,1.000000477}, + {0.279167,1,1.000000477}, + {0.283333,1,1.000000477}, + {0.2875,1,1.000000477}, + {0.291667,1,1.000000477}, + {0.295833,1.000000119,1.000000477}, + {0.3,1.000000119,1.000000477}, + {0.304167,1.000000119,1.000000477}, + {0.308333,1.000000119,1.000000477}, + {0.3125,1.000000119,1.000000477}, + {0.316667,1.000000119,1.000000477}, + {0.320833,1.000000119,1.000000477}, + {0.325,1.000000119,1.000000477}, + {0.329167,1.000000119,1.000000477}, + {0.333333,1.000000119,1.000000477}, + {0.3375,1.000000119,1.000000477}, + {0.341667,1.000000119,1.000000477}, + {0.345833,1.000000119,1.000000477}, + {0.35,1.000000119,1.000000477}, + {0.354167,1.000000119,1.000000477}, + {0.358333,1.000000119,1.000000477}, + {0.3625,1,1.000000477}, + {0.366667,1,1.000000477}, + {0.370833,1,1.000000477}, + {0.375,1,1.000000477}, + {0.379167,1,1.000000477}, + {0.383333,1,1.000000477}, + {0.3875,1,1.000000477}, + {0.391667,1,1.000000477}, + {0.395833,1,1.000000477}, + {0.4,1,1.000000477}, + {0.404167,1,1.000000477}, + {0.408333,1,1.000000477}, + {0.4125,1,1.000000477}, + {0.416667,1,1.000000477}, + {0.420833,1,1.000000477}, + {0.425,1,1.000000477}, + {0.429167,1,1.000000477}, + {0.433333,1,1.000000477}, + {0.4375,1,1.000000477}, + {0.441667,1,1.000000477}, + {0.445833,1,1.000000477}, + {0.45,1,1.000000477}, + {0.454167,1,1.000000477}, + {0.458333,1,1.000000477}, + {0.4625,1,1.000000477}, + {0.466667,1,1.000000477}, + {0.470833,1,1.000000477}, + {0.475,1,1.000000477}, + {0.479167,1,1.000000477}, + {0.483333,1,1.000000477}, + {0.4875,1,1.000000477}, + {0.491667,1,1.000000477}, + {0.495833,1,1.000000477}, + {0.5,1,1.000000477}, + {0.504167,1,1.000000477}, + {0.508333,1,1.000000477}, + {0.5125,0.99999994,1.000000477}, + {0.516667,0.99999994,1.000000477}, + {0.520833,0.99999994,1.000000477}, + {0.525,0.99999994,1.000000477}, + {0.529167,0.99999994,1.000000477}, + {0.533333,0.99999994,1.000000477}, + {0.5375,0.99999994,1.000000477}, + {0.541667,0.99999994,1.000000477}, + {0.545833,0.99999994,1.000000477}, + {0.55,0.99999994,1.000000477}, + {0.554167,0.99999994,1.000000477}, + {0.558333,0.99999994,1.000000477}, + {0.5625,0.99999994,1.000000477}, + {0.566667,0.99999994,1.000000477}, + {0.570833,0.99999994,1.000000477}, + {0.575,0.99999994,1.000000477}, + {0.579167,0.99999994,1.000000477}, + {0.583333,0.99999994,1.000000477}, + {0.5875,0.99999994,1.000000477}, + {0.591667,0.99999994,1.000000477}, + {0.595833,0.99999994,1.000000477}, + {0.6,0.99999994,1.000000477}, + {0.604167,0.99999994,1.000000477}, + {0.608333,0.99999994,1.000000477}, + {0.6125,0.99999994,1.000000477}, + {0.616667,0.99999994,1.000000477}, + {0.620833,1,1.000000477}, + {0.625,1,1.000000477}, + {0.629167,1,1.000000477}, + {0.633333,1,1.000000477}, + {0.6375,1,1.000000477}, + {0.641667,1,1.000000477}, + {0.645833,1,1.000000477}, + {0.65,1,1.000000477}, + {0.654167,1,1.000000477}, + {0.658333,1,1.000000477}, + {0.6625,1,1.000000477}, + {0.666667,1,1.000000477}, + {0.670833,1,1.000000477}, + {0.675,1,1.000000477}, + {0.679167,1,1.000000477}, + {0.683333,1,1.000000477}, + {0.6875,1,1.000000477}, + {0.691667,1,1.000000477}, + {0.695833,1,1.000000477}, + {0.7,1,1.000000477}, + {0.704167,1,1.000000477}, + {0.708333,1,1.000000477}, + {0.7125,1,1.000000477}, + {0.716667,1,1.000000477}, + {0.720833,1,1.000000477}, + {0.725,1,1.000000477}, + {0.729167,1,1.000000477}, + {0.733333,1,1.000000477}, + {0.7375,1,1.000000477}, + {0.741667,1,1.000000477}, + {0.745833,1,1.000000477}, + {0.75,1,1.000000477}, + {0.754167,1,1.000000477}, + {0.758333,1,1.000000477}, + {0.7625,1,1.000000477}, + {0.766667,1,1.000000477}, + {0.770833,1,1.000000477}, + {0.775,1,1.000000477}, + {0.779167,1,1.000000477}, + {0.783333,1,1.000000477}, + {0.7875,1,1.000000477}, + {0.791667,1,1.000000477}, + {0.795833,1,1.000000477}, + {0.8,1,1.000000477}, + {0.804167,1,1.000000477}, + {0.808333,1,1.000000477}, + {0.8125,1,1.000000477}, + {0.816667,1,1.000000477}, + {0.820833,1,1.000000477}, + {0.825,1,1.000000477}, + {0.829167,1,1.000000477}, + {0.833333,1,1.000000477}, + {0.8375,1,1.000000477}, + {0.841667,1,1.000000477}, + {0.845833,1,1.000000477}, + {0.85,1,1.000000477}, + {0.854167,1,1.000000477}, + {0.858333,1,1.000000477}, + {0.8625,1,1.000000477}, + {0.866667,1,1.000000477}, + {0.870833,1,1.000000477}, + {0.875,1,1.000000477}, + {0.879167,1,1.000000477}, + {0.883333,1,1.000000477}, + {0.8875,1,1.000000477}, + {0.891667,1,1.000000477}, + {0.895833,1,1.000000477}, + {0.9,1,1.000000477}, + {0.904167,1,1.000000477}, + {0.908333,1,1.000000477}, + {0.9125,1,1.000000477}, + {0.916667,1,1.000000477}, + {0.920833,1,1.000000477}, + {0.925,1,1.000000477}, + {0.929167,1,1.000000477}, + {0.933333,1,1.000000477}, + {0.9375,1,1.000000477}, + {0.941667,1,1.000000477}, + {0.945833,1,1.000000477}, + {0.95,1,1.000000477}, + {0.954167,1,1.000000477}, + {0.958333,1,1.000000477}, + {0.9625,1,1.000000477}, + {0.966667,1,1.000000477}, + {0.970833,1,1.000000477}, + {0.975,1,1.000000477}, + {0.979167,1,1.000000477}, + {0.983333,1,1.000000477}, + {0.9875,1,1.000000477}, + {0.991667,1,1.000000477}, + {0.995833,1,1.000000477}, + {1,1,1.000000477}, + {1,1,0.015317298}, + {1.004167,1.000682712,0.015128844}, + {1.008333,1.001363277,0.014973078}, + {1.0125,1.002042413,0.014841928}, + {1.016667,1.002720118,0.014729479}, + {1.020833,1.003396153,0.014631275}, + {1.025,1.004071236,0.014543866}, + {1.029167,1.004745126,0.014464659}, + {1.033333,1.005417824,0.014391633}, + {1.0375,1.006089568,0.014323144}, + {1.041667,1.00676012,0.01425793}, + {1.045833,1.0074296,0.014194966}, + {1.05,1.008098006,0.014133369}, + {1.054167,1.008765459,0.014072445}, + {1.058333,1.009431601,0.014011215}, + {1.0625,1.010096669,0.013950324}, + {1.066667,1.010760665,0.013888153}, + {1.070833,1.011423349,0.013824724}, + {1.075,1.012084961,0.013759653}, + {1.079167,1.012745261,0.013692639}, + {1.083333,1.01340425,0.013623408}, + {1.0875,1.014061928,0.013551658}, + {1.091667,1.014718413,0.013477152}, + {1.095833,1.015373349,0.013399672}, + {1.1,1.016027093,0.013318955}, + {1.1,1.016027093,0.869537532}, + {1.104167,1.015199423,0.88055712}, + {1.108333,1.014423966,0.890316248}, + {1.1125,1.013685346,0.89884609}, + {1.116667,1.012972116,0.906217813}, + {1.120833,1.012275338,0.912527978}, + {1.125,1.011587501,0.917887449}, + {1.129167,1.010903358,0.922403812}, + {1.133333,1.010218978,0.926181793}, + {1.1375,1.00953126,0.929322243}, + {1.141667,1.008838177,0.931915462}, + {1.145833,1.008139014,0.934043825}, + {1.15,1.00743258,0.935783029}, + {1.154167,1.006719112,0.937199056}, + {1.158333,1.005998969,0.938350797}, + {1.1625,1.005272508,0.939290762}, + {1.166667,1.00454092,0.94006443}, + {1.170833,1.003805399,0.940711319}, + {1.175,1.003067017,0.941266179}, + {1.179167,1.002327323,0.941758335}, + {1.183333,1.001587987,0.942212701}, + {1.1875,1.00085032,0.942650497}, + {1.191667,1.000116229,0.94308883}, + {1.195833,0.999387562,0.943541586}, + {1.2,0.99866575,0.944019675}, + {1.204167,0.9979527,0.944531143}, + {1.208333,0.997250319,0.945081294}, + {1.2125,0.996560097,0.945673704}, + {1.216667,0.995883822,0.946309268}, + {1.220833,0.995223463,0.946987331}, + {1.225,0.994580328,0.947705865}, + {1.229167,0.993956208,0.948461175}, + {1.233333,0.99335283,0.949248135}, + {1.2375,0.992771327,0.95006144}, + {1.241667,0.992213488,0.950894356}, + {1.245833,0.991680622,0.95173949}, + {1.25,0.991173863,0.95258975}, + {1.254167,0.990694582,0.953437209}, + {1.258333,0.990243912,0.954273999}, + {1.2625,0.989822745,0.955092847}, + {1.266667,0.989432037,0.95588088}, + {1.270833,0.98907274,0.956646562}, + {1.275,0.988745153,0.957369268}, + {1.279167,0.98845017,0.958047032}, + {1.283333,0.988188148,0.958680987}, + {1.2875,0.987959206,0.959251702}, + {1.291667,0.987763703,0.959780037}, + {1.295833,0.987601697,0.960231662}, + {1.3,0.987473011,0.960644007}, + {1.304167,0.987377465,0.96097219}, + {1.308333,0.987314761,0.961265564}, + {1.3125,0.987284482,0.961473107}, + {1.316667,0.98728615,0.961651504}, + {1.320833,0.987318933,0.961747587}, + {1.325,0.987382054,0.961821079}, + {1.329167,0.987474263,0.961820066}, + {1.333333,0.987594843,0.961803436}, + {1.3375,0.987742662,0.961723864}, + {1.341667,0.987916887,0.96163547}, + {1.345833,0.988116205,0.961497962}, + {1.35,0.988339782,0.96134901}, + {1.354167,0.988586307,0.96118331}, + {1.358333,0.988854527,0.961005926}, + {1.3625,0.989143431,0.960821688}, + {1.366667,0.989451706,0.960635245}, + {1.370833,0.989778101,0.960451126}, + {1.375,0.990121484,0.960273087}, + {1.379167,0.990480661,0.960104883}, + {1.383333,0.990854323,0.959949791}, + {1.3875,0.991241395,0.959810555}, + {1.391667,0.991640687,0.959689558}, + {1.395833,0.992050946,0.959588885}, + {1.4,0.992471278,0.959509969}, + {1.404167,0.992900372,0.95945406}, + {1.408333,0.993337214,0.959422052}, + {1.4125,0.993780792,0.959414244}, + {1.416667,0.994230092,0.959430933}, + {1.420833,0.994683981,0.959471881}, + {1.425,0.995141745,0.959536672}, + {1.429167,0.99560225,0.959624708}, + {1.433333,0.996064484,0.959735155}, + {1.4375,0.996527851,0.959861517}, + {1.441667,0.996991217,0.96001929}, + {1.445833,0.997453868,0.960184932}, + {1.45,0.99791497,0.960379183}, + {1.454167,0.998373806,0.960578918}, + {1.458333,0.998829305,0.960803926}, + {1.4625,0.999281228,0.961032093}, + {1.466667,0.999728382,0.961282015}, + {1.470833,1.000170231,0.961532891}, + {1.475,1.000606179,0.961801827}, + {1.479167,1.001035452,0.962069929}, + {1.483333,1.001457334,0.962352216}, + {1.4875,1.001871347,0.962632179}, + {1.491667,1.002276659,0.962922812}, + {1.495833,1.002672791,0.96321249}, + {1.5,1.003059149,0.963501334}, + {1.504167,1.003435135,0.963795781}, + {1.508333,1.003800273,0.964085221}, + {1.5125,1.004153967,0.964377224}, + {1.516667,1.004495859,0.964663684}, + {1.520833,1.004825115,0.964949727}, + {1.525,1.005141735,0.965230048}, + {1.529167,1.005444884,0.965507209}, + {1.533333,1.005734444,0.96577847}, + {1.5375,1.006009698,0.966043949}, + {1.541667,1.006270647,0.966303706}, + {1.545833,1.006516576,0.966554999}, + {1.55,1.006747246,0.966800869}, + {1.554167,1.006962419,0.96703577}, + {1.558333,1.007161736,0.967265427}, + {1.5625,1.007344961,0.967481613}, + {1.566667,1.007511854,0.967693031}, + {1.570833,1.007662058,0.967888296}, + {1.575,1.007795572,0.968079269}, + {1.579167,1.00791204,0.968251586}, + {1.583333,1.008011341,0.968420029}, + {1.5875,1.008093476,0.968567371}, + {1.591667,1.008158088,0.968711317}, + {1.595833,1.008205414,0.968831897}, + {1.6,1.008235216,0.968949437}, + {1.604167,1.008247495,0.969041824}, + {1.608333,1.008242249,0.969131529}, + {1.6125,1.008219719,0.969194531}, + {1.616667,1.008179784,0.969255328}, + {1.620833,1.008122683,0.969288468}, + {1.625,1.008048415,0.96931982}, + {1.629167,1.007957339,0.969323397}, + {1.633333,1.007849574,0.969325662}, + {1.6375,1.007725477,0.969300687}, + {1.641667,1.007585287,0.969274879}, + {1.645833,1.007429361,0.96922344}, + {1.65,1.007257938,0.969171762}, + {1.654167,1.007071495,0.96909678}, + {1.658333,1.006870627,0.969022214}, + {1.6625,1.006655693,0.968927801}, + {1.666667,1.006427169,0.968834341}, + {1.670833,1.00618577,0.968725383}, + {1.675,1.005931735,0.968617976}, + {1.679167,1.005666018,0.968500018}, + {1.683333,1.005389214,0.968384206}, + {1.6875,1.005101919,0.968263447}, + {1.691667,1.00480473,0.96814537}, + {1.695833,1.00449872,0.968028188}, + {1.7,1.004184365,0.967914164}, + {1.704167,1.0038625,0.967806876}, + {1.708333,1.003533959,0.967703104}, + {1.7125,1.003199577,0.96761179}, + {1.716667,1.002860069,0.967524052}, + {1.720833,1.002516627,0.967454076}, + {1.725,1.002169609,0.967387557}, + {1.729167,1.001820326,0.967343271}, + {1.733333,1.001469374,0.967302144}, + {1.7375,1.001117706,0.967286766}, + {1.741667,1.000766158,0.96727407}, + {1.745833,1.000415921,0.967289448}, + {1.75,1.000067353,0.967306793}, + {1.754167,0.999721646,0.967353404}, + {1.758333,0.999379635,0.967401028}, + {1.7625,0.999042094,0.967477858}, + {1.766667,0.998709738,0.967554629}, + {1.770833,0.998383641,0.967659175}, + {1.775,0.99806428,0.967762589}, + {1.779167,0.997752666,0.967891395}, + {1.783333,0.997449398,0.968017757}, + {1.7875,0.997155249,0.968166113}, + {1.791667,0.996870756,0.968310893}, + {1.795833,0.996596813,0.968473554}, + {1.8,0.996333718,0.968631506}, + {1.804167,0.996082246,0.968802691}, + {1.808333,0.995842874,0.968968153}, + {1.8125,0.995616078,0.969142139}, + {1.816667,0.995402277,0.969309628}, + {1.820833,0.995202065,0.969480753}, + {1.825,0.995015502,0.969644964}, + {1.829167,0.994843125,0.96980828}, + {1.833333,0.994685113,0.969964325}, + {1.8375,0.994541705,0.970115602}, + {1.841667,0.994413078,0.970259666}, + {1.845833,0.994299471,0.970395565}, + {1.85,0.994200766,0.970524549}, + {1.854167,0.9941172,0.970642924}, + {1.858333,0.994048655,0.970754802}, + {1.8625,0.99399513,0.97085458}, + {1.866667,0.993956566,0.970948637}, + {1.870833,0.993932784,0.971029758}, + {1.875,0.993923664,0.971106052}, + {1.879167,0.993928909,0.971169591}, + {1.883333,0.9939484,0.971229315}, + {1.8875,0.993981779,0.971277118}, + {1.891667,0.994028807,0.971322179}, + {1.895833,0.994089007,0.971356809}, + {1.9,0.994162202,0.97138983}, + {1.904167,0.994247913,0.971414328}, + {1.908333,0.994345665,0.971438289}, + {1.9125,0.994455099,0.971455932}, + {1.916667,0.994575739,0.971474051}, + {1.920833,0.994707048,0.971488357}, + {1.925,0.994848609,0.971503913}, + {1.929167,0.994999886,0.971518099}, + {1.933333,0.995160341,0.971534252}, + {1.9375,0.995329499,0.971551418}, + {1.941667,0.995506823,0.971571028}, + {1.945833,0.995691657,0.971593738}, + {1.95,0.995883584,0.971619308}, + {1.954167,0.996081889,0.971649826}, + {1.958333,0.996285975,0.971683323}, + {1.9625,0.996495247,0.971723258}, + {1.966667,0.996709347,0.971766174}, + {1.970833,0.99692744,0.971816719}, + {1.975,0.997149348,0.971870184}, + {1.979167,0.997374237,0.971931994}, + {1.983333,0.997601748,0.971996486}, + {1.9875,0.997831225,0.97206974}, + {1.991667,0.998062372,0.972145319}, + {1.995833,0.998294413,0.972229719}, + {2,0.99852705,0.972316027}, + {2.004167,0.998759747,0.972410977}, + {2.008333,0.998991907,0.972507179}, + {2.0125,0.999223232,0.972611666}, + {2.016667,0.999453187,0.972716928}, + {2.020833,0.999681175,0.9728297}, + {2.025,0.999907076,0.97294271}, + {2.029167,1.000130177,0.973062336}, + {2.033333,1.000350118,0.973181725}, + {2.0375,1.000566602,0.973306715}, + {2.041667,1.000779152,0.973430991}, + {2.045833,1.000987291,0.973559618}, + {2.05,1.001190782,0.973687232}, + {2.054167,1.001389265,0.973818004}, + {2.058333,1.001582265,0.973947287}, + {2.0625,1.001769423,0.974078536}, + {2.066667,1.001950622,0.974208057}, + {2.070833,1.002125382,0.974338174}, + {2.075,1.002293587,0.974466383}, + {2.079167,1.002454758,0.974593878}, + {2.083333,1.002608657,0.974719346}, + {2.0875,1.002755165,0.974842906}, + {2.091667,1.002894044,0.974964261}, + {2.095833,1.003024936,0.975082517}, + {2.1,1.00314784,0.975198627}, + {2.104167,1.003262401,0.975310445}, + {2.108333,1.003368497,0.975420117}, + {2.1125,1.00346601,0.975524545}, + {2.116667,1.003554821,0.975626826}, + {2.120833,1.00363481,0.975722969}, + {2.125,1.003705859,0.975817144}, + {2.129167,1.003767848,0.975904286}, + {2.133333,1.003820777,0.97598958}, + {2.1375,1.003864646,0.976067305}, + {2.141667,1.003899455,0.97614336}, + {2.145833,1.003924966,0.97621125}, + {2.15,1.003941417,0.976277709}, + {2.154167,1.003948808,0.976335764}, + {2.158333,1.003947139,0.976392627}, + {2.1625,1.003936529,0.976440907}, + {2.166667,1.003916979,0.976488233}, + {2.170833,1.003888607,0.976527095}, + {2.175,1.003851652,0.976565242}, + {2.179167,1.003806114,0.976595283}, + {2.183333,1.003752351,0.976624846}, + {2.1875,1.003690243,0.976646721}, + {2.191667,1.003620148,0.976668477}, + {2.195833,1.003542423,0.976683259}, + {2.2,1.00345695,0.976698101}, + {2.204167,1.003364325,0.976706862}, + {2.208333,1.003264546,0.976715982}, + {2.2125,1.003158092,0.976720095}, + {2.216667,1.003045082,0.976724744}, + {2.220833,1.002925992,0.976725578}, + {2.225,1.002800941,0.976727068}, + {2.229167,1.002670407,0.976726115}, + {2.233333,1.002534628,0.976725936}, + {2.2375,1.00239408,0.976724625}, + {2.241667,1.002249002,0.976724267}, + {2.245833,1.002099991,0.976724029}, + {2.25,1.001947045,0.976724863}, + {2.254167,1.001790881,0.976727128}, + {2.258333,1.001631737,0.976730466}, + {2.2625,1.001470208,0.976736367}, + {2.266667,1.001306415,0.9767434}, + {2.270833,1.001140952,0.97675401}, + {2.275,1.000974059,0.976765633}, + {2.279167,1.000806451,0.976781845}, + {2.283333,1.000638247,0.976798892}, + {2.2875,1.000470042,0.976821184}, + {2.291667,1.000302076,0.976844132}, + {2.295833,1.000134945,0.976872802}, + {2.3,0.999968946,0.976902008}, + {2.304167,0.999804497,0.976937115}, + {2.308333,0.999641895,0.97697252}, + {2.3125,0.999481678,0.977013826}, + {2.316667,0.999324024,0.977055192}, + {2.320833,0.999169528,0.97710228}, + {2.325,0.999018312,0.977149189}, + {2.329167,0.998870909,0.977201343}, + {2.333333,0.9987275,0.977253079}, + {2.3375,0.998588502,0.977309525}, + {2.341667,0.998454094,0.977365315}, + {2.345833,0.998324692,0.977425158}, + {2.35,0.998200476,0.977484107}, + {2.354167,0.998081684,0.977546275}, + {2.358333,0.997968674,0.977607429}, + {2.3625,0.997861505,0.977671027}, + {2.366667,0.997760475,0.977733433}, + {2.370833,0.997665703,0.977797449}, + {2.375,0.997577429,0.977860212}, + {2.379167,0.997495711,0.97792381}, + {2.383333,0.997420728,0.977986097}, + {2.3875,0.99735254,0.978048563}, + {2.391667,0.997291267,0.978109717}, + {2.395833,0.997237027,0.978170395}, + {2.4,0.997189701,0.97822988}, + {2.404167,0.997149527,0.978288412}, + {2.408333,0.997116327,0.978345752}, + {2.4125,0.99709022,0.978401959}, + {2.416667,0.997071147,0.978457093}, + {2.420833,0.997059047,0.978510797}, + {2.425,0.997053862,0.978563666}, + {2.429167,0.997055471,0.978615046}, + {2.433333,0.997063875,0.978665709}, + {2.4375,0.997078896,0.978715003}, + {2.441667,0.997100413,0.978763878}, + {2.445833,0.997128308,0.978811443}, + {2.45,0.997162461,0.978858829}, + {2.454167,0.997202635,0.978905201}, + {2.458333,0.997248709,0.978951514}, + {2.4625,0.997300446,0.978997231}, + {2.466667,0.997357666,0.979043007}, + {2.470833,0.997420132,0.979088545}, + {2.475,0.997487724,0.979134381}, + {2.479167,0.997560143,0.979180396}, + {2.483333,0.997637093,0.979226708}, + {2.4875,0.997718453,0.979273677}, + {2.491667,0.997803867,0.979321122}, + {2.495833,0.997893035,0.979369462}, + {2.5,0.99798584,0.979418278}, + {2.504167,0.998081803,0.979468405}, + {2.508333,0.998180747,0.979519129}, + {2.5125,0.998282433,0.979571342}, + {2.516667,0.998386621,0.979624152}, + {2.520833,0.998492956,0.97967869}, + {2.525,0.998601258,0.979733765}, + {2.529167,0.998711169,0.979790747}, + {2.533333,0.99882251,0.979848206}, + {2.5375,0.998934984,0.979907632}, + {2.541667,0.999048352,0.979967415}, + {2.545833,0.999162257,0.980029166}, + {2.55,0.999276519,0.980091214}, + {2.554167,0.9993909,0.98015511}, + {2.558333,0.999505103,0.980219126}, + {2.5625,0.999618888,0.98028487}, + {2.566667,0.999732018,0.980350733}, + {2.570833,0.999844193,0.980417967}, + {2.575,0.999955356,0.980485141}, + {2.579167,1.000065088,0.980553508}, + {2.583333,1.000173211,0.980621696}, + {2.5875,1.000279546,0.980690718}, + {2.591667,1.000383854,0.980759501}, + {2.595833,1.000485897,0.980828702}, + {2.6,1.000585556,0.980897605}, + {2.604167,1.000682592,0.980966508}, + {2.608333,1.000776887,0.981034994}, + {2.6125,1.000868082,0.981103122}, + {2.616667,1.000956178,0.981170774}, + {2.620833,1.001040816,0.98123765}, + {2.625,1.001122117,0.98130399}, + {2.629167,1.001199841,0.981369197}, + {2.633333,1.001273751,0.981433809}, + {2.6375,1.001343846,0.98149693}, + {2.641667,1.001409888,0.981559396}, + {2.645833,1.001471877,0.981620014}, + {2.65,1.001529694,0.981679976}, + {2.654167,1.001583219,0.981737852}, + {2.658333,1.001632333,0.981795013}, + {2.6625,1.001677036,0.981849849}, + {2.666667,1.001717329,0.98190403}, + {2.670833,1.001753092,0.981955528}, + {2.675,1.001784325,0.98200649}, + {2.679167,1.001810908,0.982054651}, + {2.683333,1.001832962,0.982102275}, + {2.6875,1.001850367,0.982147038}, + {2.691667,1.001863241,0.982191265}, + {2.695833,1.001871467,0.982232571}, + {2.7,1.001875162,0.982273459}, + {2.704167,1.001874328,0.982311428}, + {2.708333,1.001869082,0.982349038}, + {2.7125,1.001859307,0.982383788}, + {2.716667,1.001845121,0.982418299}, + {2.720833,1.001826763,0.982450008}, + {2.725,1.001804113,0.982481599}, + {2.729167,1.001777411,0.982510626}, + {2.733333,1.001746655,0.982539594}, + {2.7375,1.001711965,0.982566178}, + {2.741667,1.001673579,0.982592821}, + {2.745833,1.001631379,0.982617378}, + {2.75,1.001585722,0.982641995}, + {2.754167,1.001536608,0.982664883}, + {2.758333,1.001484275,0.982687891}, + {2.7625,1.001428843,0.982709527}, + {2.766667,1.00137043,0.982731402}, + {2.770833,1.001309276,0.982752204}, + {2.775,1.001245379,0.982773244}, + {2.779167,1.001179099,0.982793629}, + {2.783333,1.001110673,0.982814312}, + {2.7875,1.001039982,0.982834637}, + {2.791667,1.000967503,0.98285532}, + {2.795833,1.000893354,0.982876003}, + {2.8,1.000817537,0.982897043}, + {2.804167,1.000740528,0.982918441}, + {2.808333,1.000662327,0.982940197}, + {2.8125,1.000583172,0.982962608}, + {2.816667,1.000503302,0.982985318}, + {2.820833,1.000422955,0.983008921}, + {2.825,1.00034225,0.983032882}, + {2.829167,1.000261426,0.983057916}, + {2.833333,1.000180602,0.983083248}, + {2.8375,1.000100017,0.983109832}, + {2.841667,1.000019908,0.983136654}, + {2.845833,0.999940455,0.983164907}, + {2.85,0.999861777,0.983193338}, + {2.854167,0.999784052,0.9832232}, + {2.858333,0.99970758,0.983253241}, + {2.8625,0.999632418,0.983284712}, + {2.866667,0.999558687,0.983316302}, + {2.870833,0.999486744,0.983349323}, + {2.875,0.99941659,0.983382344}, + {2.879167,0.999348402,0.983416796}, + {2.883333,0.99928236,0.983451188}, + {2.8875,0.999218524,0.983486891}, + {2.891667,0.999157131,0.983522534}, + {2.895833,0.999098241,0.98355937}, + {2.9,0.999041975,0.983596027}, + {2.904167,0.998988509,0.983633757}, + {2.908333,0.998937786,0.983671367}, + {2.9125,0.998890042,0.983709812}, + {2.916667,0.998845279,0.983748138}, + {2.920833,0.998803675,0.983787179}, + {2.925,0.998765171,0.983826041}, + {2.929167,0.998729825,0.983865559}, + {2.933333,0.998697817,0.983904779}, + {2.9375,0.998669088,0.983944595}, + {2.941667,0.998643637,0.983984172}, + {2.945833,0.998621583,0.984024107}, + {2.95,0.998602867,0.984063864}, + {2.954167,0.998587549,0.984103918}, + {2.958333,0.998575628,0.984143734}, + {2.9625,0.998566985,0.984183848}, + {2.966667,0.99856174,0.984223783}, + {2.970833,0.998559773,0.984263897}, + {2.975,0.998561144,0.984303892}, + {2.979167,0.998565674,0.984344006}, + {2.983333,0.998573422,0.98438406}, + {2.9875,0.99858433,0.984424233}, + {2.991667,0.998598278,0.984464347}, + {2.995833,0.998615146,0.98450458}, + {3,0.998635054,0.984544814}, + {3.004167,0.998657703,0.984585166}, + {3.008333,0.998683155,0.984625578}, + {3.0125,0.998711228,0.984666169}, + {3.016667,0.998741865,0.984706759}, + {3.020833,0.998774946,0.984747589}, + {3.025,0.99881041,0.984788477}, + {3.029167,0.998848021,0.984829605}, + {3.033333,0.998887777,0.984870791}, + {3.0375,0.998929441,0.984912276}, + {3.041667,0.998973012,0.984953821}, + {3.045833,0.999018192,0.984995663}, + {3.05,0.999065042,0.985037625}, + {3.054167,0.999113321,0.985079944}, + {3.058333,0.999162912,0.985122263}, + {3.0625,0.999213696,0.985165}, + {3.066667,0.999265611,0.985207796}, + {3.070833,0.999318421,0.98525089}, + {3.075,0.999372065,0.985294044}, + {3.079167,0.999426365,0.985337496}, + {3.083333,0.999481201,0.985381007}, + {3.0875,0.999536455,0.985424757}, + {3.091667,0.999592006,0.985468566}, + {3.095833,0.999647677,0.985512555}, + {3.1,0.999703407,0.985556543}, + {3.104167,0.999759018,0.98560065}, + {3.108333,0.999814391,0.985644758}, + {3.1125,0.999869406,0.985688806}, + {3.116667,0.999924004,0.985732913}, + {3.120833,0.999977946,0.985776842}, + {3.125,1.000031233,0.98582077}, + {3.129167,1.000083685,0.98586446}, + {3.133333,1.000135183,0.985908031}, + {3.1375,1.000185728,0.985951364}, + {3.141667,1.000234962,0.985994518}, + {3.145833,1.000283122,0.986037254}, + {3.15,1.000329852,0.986079812}, + {3.154167,1.000375152,0.986121893}, + {3.158333,1.000419021,0.986163735}, + {3.1625,1.000461221,0.986204922}, + {3.166667,1.000501752,0.98624593}, + {3.170833,1.000540495,0.986286163}, + {3.175,1.000577331,0.986326218}, + {3.179167,1.000612378,0.986365378}, + {3.183333,1.000645518,0.9864043}, + {3.1875,1.000676513,0.986442268}, + {3.191667,1.0007056,0.986480117}, + {3.195833,1.000732422,0.986516774}, + {3.2,1.000757217,0.986553311}, + {3.204167,1.000779867,0.986588717}, + {3.208333,1.000800252,0.986623943}, + {3.2125,1.000818372,0.986657977}, + {3.216667,1.000834227,0.986691892}, + {3.220833,1.000847936,0.986724555}, + {3.225,1.000859261,0.98675704}, + {3.229167,1.00086832,0.986788332}, + {3.233333,1.000875115,0.986819506}, + {3.2375,1.000879765,0.986849487}, + {3.241667,1.00088203,0.986879349}, + {3.245833,1.000882149,0.986907959}, + {3.25,1.000880003,0.986936569}, + {3.254167,1.000875711,0.986963987}, + {3.258333,1.000869274,0.986991346}, + {3.2625,1.000860691,0.987017632}, + {3.266667,1.000850081,0.987043858}, + {3.270833,1.000837326,0.98706913}, + {3.275,1.000822783,0.987094343}, + {3.279167,1.000806212,0.987118661}, + {3.283333,1.000787735,0.98714298}, + {3.2875,1.000767589,0.987166524}, + {3.291667,1.000745654,0.987190068}, + {3.295833,1.000722051,0.987212896}, + {3.3,1.000696778,0.987235844}, + {3.304167,1.000670075,0.987258136}, + {3.308333,1.000641942,0.987280548}, + {3.3125,1.000612497,0.987302482}, + {3.316667,1.000581741,0.987324536}, + {3.320833,1.000549793,0.987346232}, + {3.325,1.000516772,0.987368047}, + {3.329167,1.000482678,0.987389624}, + {3.333333,1.00044775,0.98741132}, + {3.3375,1.000411868,0.987432897}, + {3.341667,1.00037539,0.987454593}, + {3.345833,1.000338197,0.987476349}, + {3.35,1.000300527,0.987498164}, + {3.354167,1.00026238,0.987520099}, + {3.358333,1.000223994,0.987542152}, + {3.3625,1.000185251,0.987564445}, + {3.366667,1.000146389,0.987586856}, + {3.370833,1.000107408,0.987609506}, + {3.375,1.000068426,0.987632275}, + {3.379167,1.000029683,0.987655401}, + {3.383333,0.999991119,0.987678587}, + {3.3875,0.999952853,0.98770225}, + {3.391667,0.999915004,0.987725973}, + {3.395833,0.999877632,0.987750113}, + {3.4,0.999840796,0.987774372}, + {3.404167,0.999804676,0.987799108}, + {3.408333,0.99976927,0.987823844}, + {3.4125,0.99973464,0.987849116}, + {3.416667,0.999700904,0.987874448}, + {3.420833,0.999668121,0.987900257}, + {3.425,0.999636352,0.987926066}, + {3.429167,0.999605715,0.987952471}, + {3.433333,0.999576211,0.987978816}, + {3.4375,0.999547899,0.988005698}, + {3.441667,0.999520838,0.98803252}, + {3.445833,0.999495149,0.988059878}, + {3.45,0.99947077,0.988087177}, + {3.454167,0.999447823,0.988114953}, + {3.458333,0.999426365,0.988142729}, + {3.4625,0.999406338,0.988170922}, + {3.466667,0.999387801,0.988199055}, + {3.470833,0.999370873,0.988227606}, + {3.475,0.999355495,0.988256156}, + {3.479167,0.999341667,0.988285065}, + {3.483333,0.999329507,0.988313913}, + {3.4875,0.999318898,0.98834312}, + {3.491667,0.999309897,0.988372266}, + {3.495833,0.999302566,0.988401771}, + {3.5,0.999296844,0.988431156}, + {3.504167,0.999292791,0.988460898}, + {3.508333,0.999290287,0.988490582}, + {3.5125,0.999289393,0.988520503}, + {3.516667,0.999290049,0.988550425}, + {3.520833,0.999292314,0.988580525}, + {3.525,0.999296129,0.988610685}, + {3.529167,0.999301434,0.988640964}, + {3.533333,0.999308228,0.988671243}, + {3.5375,0.999316454,0.988701701}, + {3.541667,0.99932611,0.988732159}, + {3.545833,0.999337137,0.988762796}, + {3.55,0.999349475,0.988793373}, + {3.554167,0.999363124,0.988824129}, + {3.558333,0.999377966,0.988854885}, + {3.5625,0.999394059,0.988885701}, + {3.566667,0.999411225,0.988916576}, + {3.570833,0.999429464,0.988947451}, + {3.575,0.999448717,0.988978386}, + {3.579167,0.999468923,0.98900938}, + {3.583333,0.999490023,0.989040375}, + {3.5875,0.999511957,0.989071429}, + {3.591667,0.999534667,0.989102483}, + {3.595833,0.999558032,0.989133596}, + {3.6,0.999582112,0.98916465}, + {3.604167,0.999606788,0.989195764}, + {3.608333,0.999631941,0.989226818}, + {3.6125,0.999657571,0.989257872}, + {3.616667,0.999683619,0.989288926}, + {3.620833,0.999709964,0.989319921}, + {3.625,0.999736607,0.989350855}, + {3.629167,0.999763429,0.989381731}, + {3.633333,0.99979037,0.989412606}, + {3.6375,0.999817371,0.989443302}, + {3.641667,0.999844432,0.989473999}, + {3.645833,0.999871373,0.989504516}, + {3.65,0.999898255,0.989535034}, + {3.654167,0.999924958,0.989565313}, + {3.658333,0.999951422,0.989595532}, + {3.6625,0.999977589,0.989625514}, + {3.666667,1.000003338,0.989655435}, + {3.670833,1.000028729,0.989685059}, + {3.675,1.000053763,0.989714622}, + {3.679167,1.000078082,0.989743888}, + {3.683333,1.000102043,0.989773035}, + {3.6875,1.000125289,0.989801824}, + {3.691667,1.00014782,0.989830554}, + {3.695833,1.000169635,0.989858806}, + {3.7,1.000190735,0.989887059}, + {3.704167,1.00021112,0.989914834}, + {3.708333,1.000230551,0.989942491}, + {3.7125,1.000249267,0.989969671}, + {3.716667,1.00026691,0.98999685}, + {3.720833,1.000283718,0.990023434}, + {3.725,1.000299573,0.990049958}, + {3.729167,1.000314355,0.990075946}, + {3.733333,1.000328183,0.990101874}, + {3.7375,1.000340939,0.990127265}, + {3.741667,1.000352621,0.990152538}, + {3.745833,1.000363231,0.990177214}, + {3.75,1.000372887,0.99020189}, + {3.754167,1.000381351,0.990225971}, + {3.758333,1.000388622,0.990249991}, + {3.7625,1.00039494,0.990273416}, + {3.766667,1.000400066,0.990296841}, + {3.770833,1.000404119,0.990319669}, + {3.775,1.0004071,0.990342438}, + {3.779167,1.000408888,0.990364671}, + {3.783333,1.000409603,0.990386844}, + {3.7875,1.000409245,0.99040848}, + {3.791667,1.000407815,0.990430117}, + {3.795833,1.000405312,0.990451217}, + {3.8,1.000401855,0.990472317}, + {3.804167,1.000397325,0.99049294}, + {3.808333,1.000391722,0.990513504}, + {3.8125,1.000385165,0.99053371}, + {3.816667,1.000377774,0.990553856}, + {3.820833,1.00036943,0.990573585}, + {3.825,1.000360131,0.990593374}, + {3.829167,1.000349998,0.990612805}, + {3.833333,1.000339031,0.990632176}, + {3.8375,1.000327229,0.990651309}, + {3.841667,1.000314713,0.990670443}, + {3.845833,1.0003016,0.990689278}, + {3.85,1.000287652,0.990708172}, + {3.854167,1.000273108,0.990726829}, + {3.858333,1.000257969,0.990745544}, + {3.8625,1.000242352,0.990764081}, + {3.866667,1.00022614,0.990782619}, + {3.870833,1.00020957,0.990801096}, + {3.875,1.000192404,0.990819573}, + {3.879167,1.000174999,0.990837991}, + {3.883333,1.000157237,0.990856469}, + {3.8875,1.000139236,0.990874887}, + {3.891667,1.000120997,0.990893304}, + {3.895833,1.00010252,0.990911782}, + {3.9,1.000083923,0.990930319}, + {3.904167,1.000065207,0.990948915}, + {3.908333,1.000046372,0.990967512}, + {3.9125,1.000027657,0.990986228}, + {3.916667,1.000008941,0.991004944}, + {3.920833,0.999990344,0.991023779}, + {3.925,0.999971867,0.991042674}, + {3.929167,0.999953508,0.991061687}, + {3.933333,0.999935448,0.991080761}, + {3.9375,0.999917567,0.991100013}, + {3.941667,0.999900043,0.991119266}, + {3.945833,0.999882817,0.991138697}, + {3.95,0.999866009,0.991158128}, + {3.954167,0.999849558,0.991177797}, + {3.958333,0.999833584,0.991197467}, + {3.9625,0.999818146,0.991217375}, + {3.966667,0.999803126,0.991237283}, + {3.970833,0.999788702,0.99125737}, + {3.975,0.999774814,0.991277516}, + {3.979167,0.999761581,0.991297841}, + {3.983333,0.999748945,0.991318226}, + {3.9875,0.999736965,0.991338789}, + {3.991667,0.99972564,0.991359353}, + {3.995833,0.999714971,0.991380095}, + {4,0.999705076,0.991400898}, + {4.004167,0.999695897,0.991421878}, + {4.008333,0.999687433,0.991442859}, + {4.0125,0.999679685,0.991464078}, + {4.016667,0.999672771,0.991485238}, + {4.020833,0.999666572,0.991506577}, + {4.025,0.999661207,0.991527975}, + {4.029167,0.999656618,0.991549492}, + {4.033333,0.999652743,0.991571009}, + {4.0375,0.999649704,0.991592705}, + {4.041667,0.999647439,0.991614401}, + {4.045833,0.999645948,0.991636217}, + {4.05,0.999645233,0.991658032}, + {4.054167,0.999645293,0.991679966}, + {4.058333,0.999646127,0.991701961}, + {4.0625,0.999647737,0.991724014}, + {4.066667,0.999650002,0.991746068}, + {4.070833,0.999653041,0.991768181}, + {4.075,0.999656796,0.991790354}, + {4.079167,0.999661207,0.991812527}, + {4.083333,0.999666333,0.99183476}, + {4.0875,0.999672055,0.991856992}, + {4.091667,0.999678433,0.991879284}, + {4.095833,0.999685407,0.991901577}, + {4.1,0.999692976,0.991923869}, + {4.104167,0.999701023,0.991946161}, + {4.108333,0.999709666,0.991968453}, + {4.1125,0.999718785,0.991990805}, + {4.116667,0.999728382,0.992013097}, + {4.120833,0.999738395,0.992035389}, + {4.125,0.999748886,0.992057681}, + {4.129167,0.999759734,0.992079914}, + {4.133333,0.999770939,0.992102146}, + {4.1375,0.999782443,0.992124319}, + {4.141667,0.999794304,0.992146492}, + {4.145833,0.999806345,0.992168605}, + {4.15,0.999818683,0.992190719}, + {4.154167,0.999831259,0.992212713}, + {4.158333,0.999843955,0.992234707}, + {4.1625,0.99985677,0.992256582}, + {4.166667,0.999869764,0.992278397}, + {4.170833,0.999882758,0.992300153}, + {4.175,0.999895871,0.992321849}, + {4.179167,0.999908924,0.992343366}, + {4.183333,0.999922037,0.992364943}, + {4.1875,0.999935031,0.992386281}, + {4.191667,0.999948025,0.99240762}, + {4.195833,0.99996084,0.99242872}, + {4.2,0.999973595,0.99244988}, + {4.204167,0.999986112,0.992470801}, + {4.208333,0.99999851,0.992491663}, + {4.2125,1.00001061,0.992512286}, + {4.216667,1.000022531,0.992532909}, + {4.220833,1.000034213,0.992553294}, + {4.225,1.000045538,0.992573678}, + {4.229167,1.000056624,0.992593765}, + {4.233333,1.000067234,0.992613792}, + {4.2375,1.000077605,0.992633581}, + {4.241667,1.000087619,0.99265337}, + {4.245833,1.000097156,0.992672801}, + {4.25,1.000106215,0.992692232}, + {4.254167,1.000114918,0.992711365}, + {4.258333,1.000123262,0.992730498}, + {4.2625,1.000131011,0.992749333}, + {4.266667,1.000138283,0.992768109}, + {4.270833,1.000145078,0.992786586}, + {4.275,1.000151396,0.992805064}, + {4.279167,1.000157237,0.992823184}, + {4.283333,1.000162482,0.992841303}, + {4.2875,1.000167251,0.992859125}, + {4.291667,1.000171542,0.992876887}, + {4.295833,1.000175238,0.992894351}, + {4.3,1.000178337,0.992911816}, + {4.304167,1.00018096,0.992928982}, + {4.308333,1.000183105,0.992946148}, + {4.3125,1.000184655,0.992963016}, + {4.316667,1.000185609,0.992979825}, + {4.320833,1.000186086,0.992996395}, + {4.325,1.000185966,0.993012965}, + {4.329167,1.00018549,0.993029237}, + {4.333333,1.000184298,0.993045509}, + {4.3375,1.000182748,0.993061543}, + {4.341667,1.000180602,0.993077576}, + {4.345833,1.000178099,0.993093312}, + {4.35,1.000174999,0.993109107}, + {4.354167,1.000171542,0.993124664}, + {4.358333,1.000167608,0.993140221}, + {4.3625,1.000163198,0.993155599}, + {4.366667,1.00015831,0.993170977}, + {4.370833,1.000153184,0.993186116}, + {4.375,1.000147581,0.993201315}, + {4.379167,1.000141621,0.993216395}, + {4.383333,1.000135303,0.993231416}, + {4.3875,1.000128627,0.993246317}, + {4.391667,1.000121593,0.993261218}, + {4.395833,1.000114441,0.99327606}, + {4.4,1.000106931,0.993290842}, + {4.404167,1.000099182,0.993305564}, + {4.408333,1.000091195,0.993320346}, + {4.4125,1.00008297,0.993335009}, + {4.416667,1.000074625,0.993349671}, + {4.420833,1.000066042,0.993364275}, + {4.425,1.000057459,0.993378937}, + {4.429167,1.000048637,0.9933936}, + {4.433333,1.000039816,0.993408203}, + {4.4375,1.000030875,0.993422806}, + {4.441667,1.000021815,0.993437469}, + {4.445833,1.000012875,0.993452072}, + {4.45,1.000003815,0.993466735}, + {4.454167,0.999994814,0.993481457}, + {4.458333,0.999985874,0.99349612}, + {4.4625,0.999976933,0.993510842}, + {4.466667,0.999968171,0.993525624}, + {4.470833,0.999959469,0.993540406}, + {4.475,0.999950886,0.993555188}, + {4.479167,0.999942422,0.99357003}, + {4.483333,0.999934137,0.993584931}, + {4.4875,0.999926031,0.993599832}, + {4.491667,0.999918163,0.993614793}, + {4.495833,0.999910474,0.993629813}, + {4.5,0.999903023,0.993644893}, + {4.504167,0.999895811,0.993659973}, + {4.508333,0.999888897,0.993675113}, + {4.5125,0.999882221,0.993690312}, + {4.516667,0.999875844,0.993705511}, + {4.520833,0.999869764,0.993720829}, + {4.525,0.999863982,0.993736088}, + {4.529167,0.999858558,0.993751526}, + {4.533333,0.999853432,0.993766904}, + {4.5375,0.999848664,0.993782401}, + {4.541667,0.999844253,0.993797839}, + {4.545833,0.9998402,0.993813396}, + {4.55,0.999836504,0.993828952}, + {4.554167,0.999833167,0.993844628}, + {4.558333,0.999830246,0.993860245}, + {4.5625,0.999827623,0.99387598}, + {4.566667,0.999825418,0.993891716}, + {4.570833,0.99982363,0.993907511}, + {4.575,0.999822199,0.993923247}, + {4.579167,0.999821126,0.993939102}, + {4.583333,0.999820411,0.993954957}, + {4.5875,0.999820113,0.993970871}, + {4.591667,0.999820173,0.993986726}, + {4.595833,0.99982059,0.9940027}, + {4.6,0.999821365,0.994018614}, + {4.604167,0.999822497,0.994034588}, + {4.608333,0.999823987,0.994050562}, + {4.6125,0.999825776,0.994066536}, + {4.616667,0.999827921,0.99408251}, + {4.620833,0.999830425,0.994098485}, + {4.625,0.999833167,0.994114459}, + {4.629167,0.999836266,0.994130492}, + {4.633333,0.999839664,0.994146466}, + {4.6375,0.999843299,0.99416244}, + {4.641667,0.999847174,0.994178414}, + {4.645833,0.999851346,0.994194329}, + {4.65,0.999855757,0.994210303}, + {4.654167,0.999860406,0.994226217}, + {4.658333,0.999865234,0.994242132}, + {4.6625,0.9998703,0.994257987}, + {4.666667,0.999875546,0.994273841}, + {4.670833,0.99988097,0.994289637}, + {4.675,0.999886513,0.994305491}, + {4.679167,0.999892235,0.994321227}, + {4.683333,0.999898136,0.994336963}, + {4.6875,0.999904096,0.994352579}, + {4.691667,0.999910116,0.994368255}, + {4.695833,0.999916255,0.994383812}, + {4.7,0.999922514,0.994399369}, + {4.704167,0.999928772,0.994414806}, + {4.708333,0.999935031,0.994430244}, + {4.7125,0.999941349,0.994445562}, + {4.716667,0.999947727,0.994460881}, + {4.720833,0.999954045,0.99447614}, + {4.725,0.999960363,0.994491339}, + {4.729167,0.999966621,0.994506359}, + {4.733333,0.99997282,0.994521439}, + {4.7375,0.99997896,0.99453634}, + {4.741667,0.999985039,0.994551241}, + {4.745833,0.999991,0.994566023}, + {4.75,0.999996901,0.994580805}, + {4.754167,1.000002623,0.994595349}, + {4.758333,1.000008225,0.994609952}, + {4.7625,1.000013709,0.994624376}, + {4.766667,1.000019073,0.994638801}, + {4.770833,1.000024319,0.994653046}, + {4.775,1.000029206,0.994667292}, + {4.779167,1.000034094,0.994681358}, + {4.783333,1.000038743,0.994695425}, + {4.7875,1.000043154,0.994709313}, + {4.791667,1.000047326,0.994723201}, + {4.795833,1.00005126,0.99473685}, + {4.8,1.000055075,0.994750559}, + {4.804167,1.000058532,0.99476409}, + {4.808333,1.00006187,0.99477756}, + {4.8125,1.00006485,0.994790912}, + {4.816667,1.000067711,0.994804204}, + {4.820833,1.000070214,0.994817376}, + {4.825,1.000072598,0.994830489}, + {4.829167,1.000074625,0.994843483}, + {4.833333,1.000076413,0.994856417}, + {4.8375,1.000077844,0.994869232}, + {4.841667,1.000079155,0.994881988}, + {4.845833,1.000080109,0.994894624}, + {4.85,1.000080824,0.9949072}, + {4.854167,1.000081301,0.994919658}, + {4.858333,1.000081539,0.994932115}, + {4.8625,1.000081539,0.994944394}, + {4.866667,1.000081182,0.994956732}, + {4.870833,1.000080705,0.994968832}, + {4.875,1.00007987,0.994980991}, + {4.879167,1.000078917,0.994993031}, + {4.883333,1.000077605,0.995005012}, + {4.8875,1.000076175,0.995016932}, + {4.891667,1.000074506,0.995028794}, + {4.895833,1.000072479,0.995040536}, + {4.9,1.000070453,0.995052338}, + {4.904167,1.000068069,0.995063961}, + {4.908333,1.000065565,0.995075643}, + {4.9125,1.000062823,0.995087206}, + {4.916667,1.000059962,0.99509877}, + {4.920833,1.000056982,0.995110273}, + {4.925,1.000053763,0.995121717}, + {4.929167,1.000050426,0.995133162}, + {4.933333,1.000046849,0.995144546}, + {4.9375,1.000043273,0.995155871}, + {4.941667,1.000039577,0.995167255}, + {4.945833,1.000035644,0.995178521}, + {4.95,1.00003171,0.995189846}, + {4.954167,1.000027776,0.995201111}, + {4.958333,1.000023603,0.995212317}, + {4.9625,1.000019431,0.995223582}, + {4.966667,1.000015259,0.995234787}, + {4.970833,1.000010967,0.995245993}, + {4.975,1.000006676,0.995257199}, + {4.979167,1.000002384,0.995268345}, + {4.983333,0.999998033,0.995279551}, + {4.9875,0.999993742,0.995290756}, + {4.991667,0.99998945,0.995301902}, + {4.995833,0.999985158,0.995313108}, + {5,0.999980867,0.995324314}, + {5.004167,0.999976695,0.99533546}, + {5.008333,0.999972522,0.995346665}, + {5.0125,0.99996841,0.995357871}, + {5.016667,0.999964356,0.995369077}, + {5.020833,0.999960423,0.995380342}, + {5.025,0.999956548,0.995391548}, + {5.029167,0.999952793,0.995402813}, + {5.033333,0.999949157,0.995414019}, + {5.0375,0.999945641,0.995425284}, + {5.041667,0.999942183,0.995436549}, + {5.045833,0.999938905,0.995447874}, + {5.05,0.999935746,0.995459199}, + {5.054167,0.999932706,0.995470524}, + {5.058333,0.999929845,0.995481849}, + {5.0625,0.999927104,0.995493174}, + {5.066667,0.999924541,0.995504498}, + {5.070833,0.999922156,0.995515883}, + {5.075,0.999919891,0.995527267}, + {5.079167,0.999917865,0.995538712}, + {5.083333,0.999915957,0.995550096}, + {5.0875,0.999914229,0.99556154}, + {5.091667,0.999912679,0.995572984}, + {5.095833,0.999911308,0.995584428}, + {5.1,0.999910116,0.995595872}, + {5.104167,0.999909163,0.995607316}, + {5.108333,0.999908328,0.99561882}, + {5.1125,0.999907672,0.995630264}, + {5.116667,0.999907255,0.995641768}, + {5.120833,0.999906957,0.995653272}, + {5.125,0.999906838,0.995664775}, + {5.129167,0.999906957,0.995676279}, + {5.133333,0.999907196,0.995687723}, + {5.1375,0.999907613,0.995699227}, + {5.141667,0.999908209,0.995710731}, + {5.145833,0.999908984,0.995722234}, + {5.15,0.999909878,0.995733738}, + {5.154167,0.999910951,0.995745182}, + {5.158333,0.999912202,0.995756686}, + {5.1625,0.999913573,0.99576813}, + {5.166667,0.999915063,0.995779634}, + {5.170833,0.999916732,0.995791078}, + {5.175,0.99991852,0.995802522}, + {5.179167,0.999920428,0.995813906}, + {5.183333,0.999922514,0.99582535}, + {5.1875,0.99992466,0.995836735}, + {5.191667,0.999926925,0.99584806}, + {5.195833,0.999929249,0.995859444}, + {5.2,0.999931753,0.995870769}, + {5.204167,0.999934316,0.995882034}, + {5.208333,0.999936938,0.995893359}, + {5.2125,0.99993962,0.995904565}, + {5.216667,0.999942422,0.99591583}, + {5.220833,0.999945283,0.995926976}, + {5.225,0.999948144,0.995938182}, + {5.229167,0.999951065,0.995949268}, + {5.233333,0.999954045,0.995960414}, + {5.2375,0.999957085,0.995971441}, + {5.241667,0.999960124,0.995982468}, + {5.245833,0.999963164,0.995993435}, + {5.25,0.999966204,0.996004403}, + {5.254167,0.999969304,0.996015251}, + {5.258333,0.999972343,0.996026158}, + {5.2625,0.999975383,0.996036947}, + {5.266667,0.999978423,0.996047735}, + {5.270833,0.999981403,0.996058404}, + {5.275,0.999984384,0.996069133}, + {5.279167,0.999987304,0.996079743}, + {5.283333,0.999990225,0.996090353}, + {5.2875,0.999993026,0.996100843}, + {5.291667,0.999995828,0.996111333}, + {5.295833,0.99999851,0.996121764}, + {5.3,1.000001192,0.996132135}, + {5.304167,1.000003695,0.996142447}, + {5.308333,1.000006199,0.996152759}, + {5.3125,1.000008583,0.996162951}, + {5.316667,1.000010848,0.996173143}, + {5.320833,1.000013113,0.996183217}, + {5.325,1.000015259,0.99619329}, + {5.329167,1.000017285,0.996203244}, + {5.333333,1.000019193,0.996213257}, + {5.3375,1.000020981,0.996223092}, + {5.341667,1.00002265,0.996232986}, + {5.345833,1.000024199,0.996242702}, + {5.35,1.00002563,0.996252477}, + {5.354167,1.000026941,0.996262133}, + {5.358333,1.000028253,0.996271789}, + {5.3625,1.000029325,0.996281326}, + {5.366667,1.000030279,0.996290922}, + {5.370833,1.000031114,0.99630034}, + {5.375,1.000031829,0.996309817}, + {5.379167,1.000032425,0.996319115}, + {5.383333,1.000032902,0.996328473}, + {5.3875,1.00003314,0.996337712}, + {5.391667,1.000033379,0.99634701}, + {5.395833,1.000033498,0.99635613}, + {5.4,1.000033498,0.996365309}, + {5.404167,1.000033259,0.996374369}, + {5.408333,1.000033021,0.996383429}, + {5.4125,1.000032663,0.996392429}, + {5.416667,1.000032187,0.996401429}, + {5.420833,1.000031471,0.99641037}, + {5.425,1.000030756,0.996419251}, + {5.429167,1.000029922,0.996428072}, + {5.433333,1.000028968,0.996436954}, + {5.4375,1.000028014,0.996445715}, + {5.441667,1.000026822,0.996454477}, + {5.445833,1.00002563,0.99646318}, + {5.45,1.000024319,0.996471882}, + {5.454167,1.000022888,0.996480525}, + {5.458333,1.000021458,0.996489227}, + {5.4625,1.000019908,0.99649781}, + {5.466667,1.000018239,0.996506393}, + {5.470833,1.00001657,0.996514976}, + {5.475,1.000014901,0.996523499}, + {5.479167,1.000013113,0.996532023}, + {5.483333,1.000011206,0.996540546}, + {5.4875,1.000009298,0.99654901}, + {5.491667,1.000007391,0.996557474}, + {5.495833,1.000005484,0.996565938}, + {5.5,1.000003457,0.996574342}, + {5.504167,1.000001431,0.996582806}, + {5.508333,0.999999404,0.99659121}, + {5.5125,0.999997318,0.996599615}, + {5.516667,0.999995291,0.996608019}, + {5.520833,0.999993205,0.996616364}, + {5.525,0.999991119,0.996624768}, + {5.529167,0.999989092,0.996633112}, + {5.533333,0.999987066,0.996641457}, + {5.5375,0.999985039,0.996649802}, + {5.541667,0.999983013,0.996658206}, + {5.545833,0.999981046,0.996666551}, + {5.55,0.999979079,0.996674895}, + {5.554167,0.999977171,0.99668318}, + {5.558333,0.999975324,0.996691525}, + {5.5625,0.999973476,0.99669987}, + {5.566667,0.999971688,0.996708214}, + {5.570833,0.999969959,0.996716559}, + {5.575,0.99996829,0.996724904}, + {5.579167,0.999966681,0.996733189}, + {5.583333,0.999965131,0.996741533}, + {5.5875,0.999963641,0.996749878}, + {5.591667,0.999962211,0.996758223}, + {5.595833,0.999960899,0.996766508}, + {5.6,0.999959588,0.996774852}, + {5.604167,0.999958396,0.996783197}, + {5.608333,0.999957323,0.996791542}, + {5.6125,0.99995625,0.996799827}, + {5.616667,0.999955297,0.996808171}, + {5.620833,0.999954462,0.996816516}, + {5.625,0.999953687,0.996824861}, + {5.629167,0.999952972,0.996833146}, + {5.633333,0.999952376,0.99684149}, + {5.6375,0.999951839,0.996849835}, + {5.641667,0.999951363,0.99685812}, + {5.645833,0.999951005,0.996866465}, + {5.65,0.999950767,0.99687475}, + {5.654167,0.999950588,0.996883094}, + {5.658333,0.999950469,0.996891379}, + {5.6625,0.999950469,0.996899664}, + {5.666667,0.999950528,0.996907949}, + {5.670833,0.999950647,0.996916234}, + {5.675,0.999950886,0.99692452}, + {5.679167,0.999951184,0.996932805}, + {5.683333,0.999951601,0.99694109}, + {5.6875,0.999952078,0.996949315}, + {5.691667,0.999952614,0.9969576}, + {5.695833,0.99995321,0.996965826}, + {5.7,0.999953926,0.996974051}, + {5.704167,0.9999547,0.996982276}, + {5.708333,0.999955535,0.996990502}, + {5.7125,0.999956369,0.996998668}, + {5.716667,0.999957323,0.997006834}, + {5.720833,0.999958336,0.997014999}, + {5.725,0.999959409,0.997023165}, + {5.729167,0.999960542,0.997031271}, + {5.733333,0.999961674,0.997039437}, + {5.7375,0.999962866,0.997047484}, + {5.741667,0.999964118,0.99705559}, + {5.745833,0.999965429,0.997063637}, + {5.75,0.999966741,0.997071683}, + {5.754167,0.999968112,0.99707967}, + {5.758333,0.999969482,0.997087717}, + {5.7625,0.999970913,0.997095644}, + {5.766667,0.999972343,0.997103631}, + {5.770833,0.999973774,0.997111499}, + {5.775,0.999975264,0.997119427}, + {5.779167,0.999976695,0.997127295}, + {5.783333,0.999978185,0.997135162}, + {5.7875,0.999979675,0.997142971}, + {5.791667,0.999981165,0.997150779}, + {5.795833,0.999982655,0.997158527}, + {5.8,0.999984145,0.997166276}, + {5.804167,0.999985576,0.997173965}, + {5.808333,0.999987066,0.997181654}, + {5.8125,0.999988496,0.997189283}, + {5.816667,0.999989867,0.997196972}, + {5.820833,0.999991298,0.997204542}, + {5.825,0.999992669,0.997212112}, + {5.829167,0.99999398,0.997219622}, + {5.833333,0.999995291,0.997227132}, + {5.8375,0.999996543,0.997234583}, + {5.841667,0.999997795,0.997242033}, + {5.845833,0.999998987,0.997249424}, + {5.85,1.000000119,0.997256756}, + {5.854167,1.000001311,0.997264087}, + {5.858333,1.000002265,0.997271419}, + {5.8625,1.000003338,0.99727869}, + {5.866667,1.000004292,0.997285903}, + {5.870833,1.000005245,0.997293115}, + {5.875,1.00000608,0.997300327}, + {5.879167,1.000006914,0.99730742}, + {5.883333,1.000007629,0.997314572}, + {5.8875,1.000008345,0.997321606}, + {5.891667,1.000008941,0.997328699}, + {5.895833,1.000009537,0.997335672}, + {5.9,1.000010014,0.997342646}, + {5.904167,1.00001049,0.99734962}, + {5.908333,1.000010967,0.997356534}, + {5.9125,1.000011206,0.997363389}, + {5.916667,1.000011563,0.997370303}, + {5.920833,1.000011802,0.997377098}, + {5.925,1.000011921,0.997383893}, + {5.929167,1.00001204,0.997390687}, + {5.933333,1.00001204,0.997397423}, + {5.9375,1.00001204,0.997404158}, + {5.941667,1.000011921,0.997410834}, + {5.945833,1.000011802,0.99741751}, + {5.95,1.000011563,0.997424126}, + {5.954167,1.000011325,0.997430742}, + {5.958333,1.000011086,0.997437358}, + {5.9625,1.000010729,0.997443914}, + {5.966667,1.000010252,0.997450471}, + {5.970833,1.000009894,0.997456968}, + {5.975,1.000009298,0.997463465}, + {5.979167,1.000008821,0.997469962}, + {5.983333,1.000008225,0.997476399}, + {5.9875,1.000007629,0.997482836}, + {5.991667,1.000006914,0.997489274}, + {5.995833,1.000006199,0.997495651}, + {6,1.000005484,0.997502029}, + {6.004167,1.000004649,0.997508407}, + {6.008333,1.000003934,0.997514784}, + {6.0125,1.000003099,0.997521102}, + {6.016667,1.000002146,0.997527421}, + {6.020833,1.000001311,0.997533739}, + {6.025,1.000000358,0.997539997}, + {6.029167,0.999999464,0.997546256}, + {6.033333,0.99999851,0.997552574}, + {6.0375,0.999997556,0.997558773}, + {6.041667,0.999996603,0.997565031}, + {6.045833,0.999995649,0.99757123}, + {6.05,0.999994695,0.997577488}, + {6.054167,0.999993682,0.997583687}, + {6.058333,0.999992728,0.997589886}, + {6.0625,0.999991715,0.997596085}, + {6.066667,0.999990761,0.997602224}, + {6.070833,0.999989748,0.997608423}, + {6.075,0.999988794,0.997614563}, + {6.079167,0.999987841,0.997620761}, + {6.083333,0.999986947,0.997626901}, + {6.0875,0.999985993,0.99763304}, + {6.091667,0.999985099,0.997639179}, + {6.095833,0.999984205,0.997645319}, + {6.1,0.99998337,0.997651398}, + {6.104167,0.999982536,0.997657537}, + {6.108333,0.999981701,0.997663677}, + {6.1125,0.999980927,0.997669756}, + {6.116667,0.999980152,0.997675836}, + {6.120833,0.999979436,0.997681975}, + {6.125,0.999978781,0.997688055}, + {6.129167,0.999978065,0.997694135}, + {6.133333,0.999977469,0.997700214}, + {6.1375,0.999976873,0.997706294}, + {6.141667,0.999976337,0.997712374}, + {6.145833,0.999975801,0.997718394}, + {6.15,0.999975324,0.997724473}, + {6.154167,0.999974847,0.997730494}, + {6.158333,0.999974489,0.997736573}, + {6.1625,0.999974132,0.997742593}, + {6.166667,0.999973774,0.997748673}, + {6.170833,0.999973536,0.997754693}, + {6.175,0.999973297,0.997760713}, + {6.179167,0.999973059,0.997766733}, + {6.183333,0.999972939,0.997772753}, + {6.1875,0.99997282,0.997778773}, + {6.191667,0.999972701,0.997784734}, + {6.195833,0.999972701,0.997790754}, + {6.2,0.999972701,0.997796714}, + {6.204167,0.999972761,0.997802734}, + {6.208333,0.99997282,0.997808695}, + {6.2125,0.999972999,0.997814655}, + {6.216667,0.999973118,0.997820616}, + {6.220833,0.999973357,0.997826517}, + {6.225,0.999973595,0.997832477}, + {6.229167,0.999973834,0.997838438}, + {6.233333,0.999974191,0.997844338}, + {6.2375,0.999974549,0.997850239}, + {6.241667,0.999974906,0.99785614}, + {6.245833,0.999975324,0.997862041}, + {6.25,0.999975741,0.997867882}, + {6.254167,0.999976218,0.997873724}, + {6.258333,0.999976754,0.997879624}, + {6.2625,0.999977231,0.997885466}, + {6.266667,0.999977827,0.997891247}, + {6.270833,0.999978364,0.997897089}, + {6.275,0.99997896,0.99790287}, + {6.279167,0.999979615,0.997908652}, + {6.283333,0.999980211,0.997914433}, + {6.2875,0.999980867,0.997920156}, + {6.291667,0.999981523,0.997925937}, + {6.295833,0.999982238,0.997931659}, + {6.3,0.999982893,0.997937381}, + {6.304167,0.999983609,0.997943044}, + {6.308333,0.999984324,0.997948706}, + {6.3125,0.999985039,0.997954369}, + {6.316667,0.999985754,0.997960031}, + {6.320833,0.99998647,0.997965634}, + {6.325,0.999987185,0.997971237}, + {6.329167,0.9999879,0.99797684}, + {6.333333,0.999988616,0.997982383}, + {6.3375,0.99998939,0.997987926}, + {6.341667,0.999990106,0.997993469}, + {6.345833,0.999990761,0.997999012}, + {6.35,0.999991477,0.998004496}, + {6.354167,0.999992192,0.99800998}, + {6.358333,0.999992847,0.998015404}, + {6.3625,0.999993503,0.998020828}, + {6.366667,0.999994159,0.998026252}, + {6.370833,0.999994814,0.998031616}, + {6.375,0.99999541,0.99803704}, + {6.379167,0.999996006,0.998042345}, + {6.383333,0.999996603,0.998047709}, + {6.3875,0.999997139,0.998053014}, + {6.391667,0.999997675,0.998058319}, + {6.395833,0.999998212,0.998063564}, + {6.4,0.999998689,0.998068869}, + {6.404167,0.999999166,0.998074055}, + {6.408333,0.999999583,0.9980793}, + {6.4125,1,0.998084486}, + {6.416667,1.000000477,0.998089671}, + {6.420833,1.000000834,0.998094797}, + {6.425,1.000001073,0.998099923}, + {6.429167,1.000001431,0.998105049}, + {6.433333,1.000001669,0.998110116}, + {6.4375,1.000001907,0.998115182}, + {6.441667,1.000002146,0.998120248}, + {6.445833,1.000002384,0.998125315}, + {6.45,1.000002503,0.998130322}, + {6.454167,1.000002623,0.998135328}, + {6.458333,1.000002742,0.998140275}, + {6.4625,1.000002861,0.998145223}, + {6.466667,1.000002861,0.99815017}, + {6.470833,1.00000298,0.998155117}, + {6.475,1.00000298,0.998160005}, + {6.479167,1.000002861,0.998164892}, + {6.483333,1.000002861,0.99816978}, + {6.4875,1.000002742,0.998174608}, + {6.491667,1.000002623,0.998179495}, + {6.495833,1.000002503,0.998184323}, + {6.5,1.000002265,0.998189092}, + {6.504167,1.000002146,0.99819392}, + {6.508333,1.000001907,0.998198688}, + {6.5125,1.000001669,0.998203456}, + {6.516667,1.000001431,0.998208225}, + {6.520833,1.000001073,0.998212934}, + {6.525,1.000000834,0.998217642}, + {6.529167,1.000000477,0.998222351}, + {6.533333,1.000000119,0.99822706}, + {6.5375,0.999999821,0.998231709}, + {6.541667,0.999999464,0.998236418}, + {6.545833,0.999999046,0.998241067}, + {6.55,0.999998689,0.998245716}, + {6.554167,0.999998271,0.998250365}, + {6.558333,0.999997854,0.998254955}, + {6.5625,0.999997377,0.998259604}, + {6.566667,0.99999696,0.998264194}, + {6.570833,0.999996543,0.998268783}, + {6.575,0.999996066,0.998273373}, + {6.579167,0.999995589,0.998277962}, + {6.583333,0.999995172,0.998282492}, + {6.5875,0.999994695,0.998287082}, + {6.591667,0.999994218,0.998291612}, + {6.595833,0.999993742,0.998296142}, + {6.6,0.999993265,0.998300672}, + {6.604167,0.999992847,0.998305202}, + {6.608333,0.999992371,0.998309731}, + {6.6125,0.999991894,0.998314202}, + {6.616667,0.999991477,0.998318732}, + {6.620833,0.999991,0.998323202}, + {6.625,0.999990582,0.998327732}, + {6.629167,0.999990165,0.998332202}, + {6.633333,0.999989748,0.998336673}, + {6.6375,0.999989331,0.998341084}, + {6.641667,0.999988914,0.998345554}, + {6.645833,0.999988556,0.998350024}, + {6.65,0.999988198,0.998354495}, + {6.654167,0.999987841,0.998358905}, + {6.658333,0.999987483,0.998363316}, + {6.6625,0.999987125,0.998367786}, + {6.666667,0.999986827,0.998372197}, + {6.670833,0.999986529,0.998376608}, + {6.675,0.999986231,0.998381019}, + {6.679167,0.999985993,0.998385429}, + {6.683333,0.999985754,0.998389781}, + {6.6875,0.999985516,0.998394191}, + {6.691667,0.999985337,0.998398602}, + {6.695833,0.999985158,0.998402953}, + {6.7,0.99998498,0.998407304}, + {6.704167,0.999984801,0.998411715}, + {6.708333,0.999984682,0.998416066}, + {6.7125,0.999984562,0.998420417}, + {6.716667,0.999984503,0.998424768}, + {6.720833,0.999984443,0.99842906}, + {6.725,0.999984384,0.998433411}, + {6.729167,0.999984384,0.998437762}, + {6.733333,0.999984324,0.998442054}, + {6.7375,0.999984384,0.998446345}, + {6.741667,0.999984384,0.998450696}, + {6.745833,0.999984443,0.998454988}, + {6.75,0.999984503,0.99845928}, + {6.754167,0.999984622,0.998463511}, + {6.758333,0.999984741,0.998467803}, + {6.7625,0.99998486,0.998472095}, + {6.766667,0.99998498,0.998476326}, + {6.770833,0.999985158,0.998480558}, + {6.775,0.999985337,0.99848485}, + {6.779167,0.999985516,0.998489082}, + {6.783333,0.999985754,0.998493254}, + {6.7875,0.999985933,0.998497486}, + {6.791667,0.999986172,0.998501718}, + {6.795833,0.99998641,0.99850589}, + {6.8,0.999986708,0.998510063}, + {6.804167,0.999986947,0.998514235}, + {6.808333,0.999987245,0.998518407}, + {6.8125,0.999987543,0.99852258}, + {6.816667,0.999987841,0.998526752}, + {6.820833,0.999988198,0.998530865}, + {6.825,0.999988496,0.998534977}, + {6.829167,0.999988854,0.99853909}, + {6.833333,0.999989152,0.998543203}, + {6.8375,0.99998951,0.998547256}, + {6.841667,0.999989867,0.998551369}, + {6.845833,0.999990225,0.998555422}, + {6.85,0.999990582,0.998559475}, + {6.854167,0.99999094,0.998563528}, + {6.858333,0.999991298,0.998567581}, + {6.8625,0.999991655,0.998571575}, + {6.866667,0.999992013,0.998575568}, + {6.870833,0.999992371,0.998579562}, + {6.875,0.999992728,0.998583555}, + {6.879167,0.999993026,0.998587549}, + {6.883333,0.999993384,0.998591483}, + {6.8875,0.999993742,0.998595417}, + {6.891667,0.999994099,0.99859935}, + {6.895833,0.999994397,0.998603284}, + {6.9,0.999994755,0.998607218}, + {6.904167,0.999995053,0.998611093}, + {6.908333,0.999995351,0.998614967}, + {6.9125,0.999995708,0.998618841}, + {6.916667,0.999996006,0.998622715}, + {6.920833,0.999996245,0.99862653}, + {6.925,0.999996543,0.998630345}, + {6.929167,0.999996781,0.99863416}, + {6.933333,0.999997079,0.998637974}, + {6.9375,0.999997318,0.998641729}, + {6.941667,0.999997556,0.998645544}, + {6.945833,0.999997735,0.998649299}, + {6.95,0.999997973,0.998653054}, + {6.954167,0.999998152,0.99865675}, + {6.958333,0.999998331,0.998660505}, + {6.9625,0.99999851,0.9986642}, + {6.966667,0.999998629,0.998667896}, + {6.970833,0.999998808,0.998671591}, + {6.975,0.999998927,0.998675287}, + {6.979167,0.999999046,0.998678923}, + {6.983333,0.999999106,0.998682559}, + {6.9875,0.999999225,0.998686194}, + {6.991667,0.999999285,0.99868983}, + {6.995833,0.999999344,0.998693466}, + {7,0.999999404,0.998697042}, + {7.004167,0.999999404,0.998700619}, + {7.008333,0.999999404,0.998704195}, + {7.0125,0.999999404,0.998707771}, + {7.016667,0.999999404,0.998711348}, + {7.020833,0.999999344,0.998714864}, + {7.025,0.999999344,0.998718381}, + {7.029167,0.999999285,0.998721898}, + {7.033333,0.999999225,0.998725414}, + {7.0375,0.999999166,0.998728931}, + {7.041667,0.999999046,0.998732388}, + {7.045833,0.999998927,0.998735905}, + {7.05,0.999998808,0.998739362}, + {7.054167,0.999998689,0.998742819}, + {7.058333,0.999998569,0.998746276}, + {7.0625,0.99999845,0.998749673}, + {7.066667,0.999998271,0.99875313}, + {7.070833,0.999998152,0.998756528}, + {7.075,0.999997973,0.998759985}, + {7.079167,0.999997795,0.998763382}, + {7.083333,0.999997616,0.99876678}, + {7.0875,0.999997437,0.998770118}, + {7.091667,0.999997199,0.998773515}, + {7.095833,0.99999702,0.998776853}, + {7.1,0.999996841,0.998780251}, + {7.104167,0.999996603,0.998783588}, + {7.108333,0.999996424,0.998786926}, + {7.1125,0.999996185,0.998790264}, + {7.116667,0.999995947,0.998793602}, + {7.120833,0.999995768,0.99879694}, + {7.125,0.99999553,0.998800218}, + {7.129167,0.999995291,0.998803556}, + {7.133333,0.999995053,0.998806834}, + {7.1375,0.999994874,0.998810112}, + {7.141667,0.999994636,0.99881345}, + {7.145833,0.999994397,0.998816729}, + {7.15,0.999994218,0.998820007}, + {7.154167,0.99999398,0.998823225}, + {7.158333,0.999993801,0.998826504}, + {7.1625,0.999993563,0.998829782}, + {7.166667,0.999993384,0.998833001}, + {7.170833,0.999993145,0.998836279}, + {7.175,0.999992967,0.998839498}, + {7.179167,0.999992788,0.998842716}, + {7.183333,0.999992609,0.998845935}, + {7.1875,0.99999243,0.998849154}, + {7.191667,0.999992251,0.998852372}, + {7.195833,0.999992132,0.998855591}, + {7.2,0.999991953,0.998858809}, + {7.204167,0.999991775,0.998861969}, + {7.208333,0.999991655,0.998865187}, + {7.2125,0.999991536,0.998868346}, + {7.216667,0.999991417,0.998871565}, + {7.220833,0.999991298,0.998874724}, + {7.225,0.999991179,0.998877883}, + {7.229167,0.999991119,0.998881042}, + {7.233333,0.999991,0.998884201}, + {7.2375,0.99999094,0.99888736}, + {7.241667,0.99999088,0.998890519}, + {7.245833,0.999990821,0.998893678}, + {7.25,0.999990761,0.998896778}, + {7.254167,0.999990761,0.998899937}, + {7.258333,0.999990702,0.998903036}, + {7.2625,0.999990702,0.998906136}, + {7.266667,0.999990702,0.998909295}, + {7.270833,0.999990702,0.998912394}, + {7.275,0.999990702,0.998915493}, + {7.279167,0.999990761,0.998918593}, + {7.283333,0.999990761,0.998921633}, + {7.2875,0.999990821,0.998924732}, + {7.291667,0.99999088,0.998927832}, + {7.295833,0.99999094,0.998930871}, + {7.3,0.999991,0.998933971}, + {7.304167,0.999991059,0.998937011}, + {7.308333,0.999991119,0.998940051}, + {7.3125,0.999991238,0.99894309}, + {7.316667,0.999991357,0.99894613}, + {7.320833,0.999991417,0.99894917}, + {7.325,0.999991536,0.99895215}, + {7.329167,0.999991655,0.99895519}, + {7.333333,0.999991834,0.99895817}, + {7.3375,0.999991953,0.99896121}, + {7.341667,0.999992073,0.99896419}, + {7.345833,0.999992251,0.998967171}, + {7.35,0.999992371,0.998970151}, + {7.354167,0.999992549,0.998973131}, + {7.358333,0.999992669,0.998976052}, + {7.3625,0.999992847,0.998979032}, + {7.366667,0.999993026,0.998981953}, + {7.370833,0.999993205,0.998984933}, + {7.375,0.999993384,0.998987854}, + {7.379167,0.999993503,0.998990774}, + {7.383333,0.999993682,0.998993695}, + {7.3875,0.999993861,0.998996556}, + {7.391667,0.99999404,0.998999476}, + {7.395833,0.999994218,0.999002397}, + {7.4,0.999994397,0.999005258}, + {7.404167,0.999994576,0.999008119}, + {7.408333,0.999994755,0.99901098}, + {7.4125,0.999994934,0.999013841}, + {7.416667,0.999995112,0.999016702}, + {7.420833,0.999995291,0.999019504}, + {7.425,0.99999547,0.999022365}, + {7.429167,0.999995649,0.999025166}, + {7.433333,0.999995828,0.999027967}, + {7.4375,0.999995947,0.999030769}, + {7.441667,0.999996126,0.99903357}, + {7.445833,0.999996305,0.999036372}, + {7.45,0.999996424,0.999039173}, + {7.454167,0.999996603,0.999041915}, + {7.458333,0.999996722,0.999044716}, + {7.4625,0.999996841,0.999047458}, + {7.466667,0.99999702,0.9990502}, + {7.470833,0.999997139,0.999052942}, + {7.475,0.999997258,0.999055624}, + {7.479167,0.999997377,0.999058366}, + {7.483333,0.999997437,0.999061048}, + {7.4875,0.999997556,0.99906379}, + {7.491667,0.999997675,0.999066472}, + {7.495833,0.999997735,0.999069154}, + {7.5,0.999997854,0.999071836}, + {7.504167,0.999997914,0.999074459}, + {7.508333,0.999997973,0.999077141}, + {7.5125,0.999998033,0.999079764}, + {7.516667,0.999998093,0.999082446}, + {7.520833,0.999998152,0.999085069}, + {7.525,0.999998212,0.999087691}, + {7.529167,0.999998212,0.999090314}, + {7.533333,0.999998271,0.999092937}, + {7.5375,0.999998271,0.9990955}, + {7.541667,0.999998331,0.999098122}, + {7.545833,0.999998331,0.999100685}, + {7.55,0.999998331,0.999103248}, + {7.554167,0.999998331,0.999105811}, + {7.558333,0.999998271,0.999108374}, + {7.5625,0.999998271,0.999110937}, + {7.566667,0.999998271,0.9991135}, + {7.570833,0.999998212,0.999116004}, + {7.575,0.999998212,0.999118567}, + {7.579167,0.999998152,0.99912107}, + {7.583333,0.999998093,0.999123573}, + {7.5875,0.999998033,0.999126077}, + {7.591667,0.999997973,0.99912858}, + {7.595833,0.999997914,0.999131083}, + {7.6,0.999997854,0.999133587}, + {7.604167,0.999997795,0.99913609}, + {7.608333,0.999997735,0.999138534}, + {7.6125,0.999997675,0.999141037}, + {7.616667,0.999997556,0.999143481}, + {7.620833,0.999997497,0.999145925}, + {7.625,0.999997377,0.999148369}, + {7.629167,0.999997318,0.999150813}, + {7.633333,0.999997199,0.999153256}, + {7.6375,0.999997079,0.9991557}, + {7.641667,0.99999702,0.999158144}, + {7.645833,0.999996901,0.999160528}, + {7.65,0.999996781,0.999162972}, + {7.654167,0.999996722,0.999165356}, + {7.658333,0.999996603,0.9991678}, + {7.6625,0.999996483,0.999170184}, + {7.666667,0.999996364,0.999172568}, + {7.670833,0.999996305,0.999174953}, + {7.675,0.999996185,0.999177337}, + {7.679167,0.999996066,0.999179721}, + {7.683333,0.999995947,0.999182105}, + {7.6875,0.999995887,0.99918443}, + {7.691667,0.999995768,0.999186814}, + {7.695833,0.999995649,0.999189138}, + {7.7,0.999995589,0.999191523}, + {7.704167,0.99999547,0.999193847}, + {7.708333,0.99999541,0.999196231}, + {7.7125,0.999995291,0.999198556}, + {7.716667,0.999995232,0.999200881}, + {7.720833,0.999995112,0.999203205}, + {7.725,0.999995053,0.99920553}, + {7.729167,0.999994993,0.999207854}, + {7.733333,0.999994874,0.999210179}, + {7.7375,0.999994814,0.999212444}, + {7.741667,0.999994755,0.999214768}, + {7.745833,0.999994695,0.999217033}, + {7.75,0.999994636,0.999219358}, + {7.754167,0.999994576,0.999221623}, + {7.758333,0.999994516,0.999223948}, + {7.7625,0.999994516,0.999226213}, + {7.766667,0.999994457,0.999228477}, + {7.770833,0.999994397,0.999230742}, + {7.775,0.999994397,0.999233007}, + {7.779167,0.999994338,0.999235272}, + {7.783333,0.999994338,0.999237537}, + {7.7875,0.999994338,0.999239802}, + {7.791667,0.999994278,0.999242008}, + {7.795833,0.999994278,0.999244273}, + {7.8,0.999994278,0.999246478}, + {7.804167,0.999994278,0.999248743}, + {7.808333,0.999994278,0.999250948}, + {7.8125,0.999994278,0.999253213}, + {7.816667,0.999994338,0.999255419}, + {7.820833,0.999994338,0.999257624}, + {7.825,0.999994338,0.99925983}, + {7.829167,0.999994397,0.999262035}, + {7.833333,0.999994397,0.99926424}, + {7.8375,0.999994457,0.999266446}, + {7.841667,0.999994516,0.999268591}, + {7.845833,0.999994576,0.999270797}, + {7.85,0.999994576,0.999272943}, + {7.854167,0.999994636,0.999275148}, + {7.858333,0.999994695,0.999277294}, + {7.8625,0.999994755,0.999279499}, + {7.866667,0.999994814,0.999281645}, + {7.870833,0.999994874,0.999283791}, + {7.875,0.999994993,0.999285936}, + {7.879167,0.999995053,0.999288082}, + {7.883333,0.999995112,0.999290228}, + {7.8875,0.999995172,0.999292314}, + {7.891667,0.999995291,0.99929446}, + {7.895833,0.999995351,0.999296546}, + {7.9,0.99999541,0.999298692}, + {7.904167,0.99999553,0.999300778}, + {7.908333,0.999995589,0.999302924}, + {7.9125,0.999995708,0.99930501}, + {7.916667,0.999995768,0.999307096}, + {7.920833,0.999995887,0.999309182}, + {7.925,0.999995947,0.999311268}, + {7.929167,0.999996066,0.999313295}, + {7.933333,0.999996126,0.999315381}, + {7.9375,0.999996245,0.999317467}, + {7.941667,0.999996305,0.999319494}, + {7.945833,0.999996424,0.99932158}, + {7.95,0.999996483,0.999323606}, + {7.954167,0.999996603,0.999325633}, + {7.958333,0.999996662,0.99932766}, + {7.9625,0.999996781,0.999329686}, + {7.966667,0.999996841,0.999331713}, + {7.970833,0.999996901,0.999333739}, + {7.975,0.99999702,0.999335766}, + {7.979167,0.999997079,0.999337733}, + {7.983333,0.999997139,0.999339759}, + {7.9875,0.999997258,0.999341726}, + {7.991667,0.999997318,0.999343693}, + {7.995833,0.999997377,0.99934572}, + {8,0.999997437,0.999347687}, + {8.004167,0.999997497,0.999349654}, + {8.008333,0.999997616,0.999351621}, + {8.0125,0.999997675,0.999353528}, + {8.016667,0.999997735,0.999355495}, + {8.020833,0.999997735,0.999357462}, + {8.025,0.999997795,0.999359369}, + {8.029167,0.999997854,0.999361336}, + {8.033333,0.999997914,0.999363244}, + {8.0375,0.999997973,0.999365151}, + {8.041667,0.999997973,0.999367058}, + {8.045833,0.999998033,0.999368966}, + {8.05,0.999998033,0.999370873}, + {8.054167,0.999998093,0.99937278}, + {8.058333,0.999998093,0.999374688}, + {8.0625,0.999998152,0.999376535}, + {8.066667,0.999998152,0.999378443}, + {8.070833,0.999998152,0.999380291}, + {8.075,0.999998212,0.999382198}, + {8.079167,0.999998212,0.999384046}, + {8.083333,0.999998212,0.999385893}, + {8.0875,0.999998212,0.999387741}, + {8.091667,0.999998212,0.999389589}, + {8.095833,0.999998212,0.999391437}, + {8.1,0.999998212,0.999393284}, + {8.104167,0.999998212,0.999395132}, + {8.108333,0.999998152,0.99939698}, + {8.1125,0.999998152,0.999398768}, + {8.116667,0.999998152,0.999400616}, + {8.120833,0.999998093,0.999402404}, + {8.125,0.999998093,0.999404192}, + {8.129167,0.999998093,0.99940604}, + {8.133333,0.999998033,0.999407828}, + {8.1375,0.999998033,0.999409616}, + {8.141667,0.999997973,0.999411404}, + {8.145833,0.999997973,0.999413192}, + {8.15,0.999997914,0.99941498}, + {8.154167,0.999997854,0.999416709}, + {8.158333,0.999997854,0.999418497}, + {8.1625,0.999997795,0.999420285}, + {8.166667,0.999997735,0.999422014}, + {8.170833,0.999997675,0.999423742}, + {8.175,0.999997675,0.99942553}, + {8.179167,0.999997616,0.999427259}, + {8.183333,0.999997556,0.999428988}, + {8.1875,0.999997497,0.999430776}, + {8.191667,0.999997497,0.999432504}, + {8.195833,0.999997437,0.999434233}, + {8.2,0.999997377,0.999435961}, + {8.204167,0.999997318,0.99943769}, + {8.208333,0.999997258,0.999439359}, + {8.2125,0.999997258,0.999441087}, + {8.216667,0.999997199,0.999442816}, + {8.220833,0.999997139,0.999444485}, + {8.225,0.999997079,0.999446213}, + {8.229167,0.99999702,0.999447882}, + {8.233333,0.99999702,0.999449611}, + {8.2375,0.99999696,0.99945128}, + {8.241667,0.999996901,0.999452949}, + {8.245833,0.999996841,0.999454677}, + {8.25,0.999996841,0.999456346}, + {8.254167,0.999996781,0.999458015}, + {8.258333,0.999996722,0.999459684}, + {8.2625,0.999996722,0.999461353}, + {8.266667,0.999996662,0.999463022}, + {8.270833,0.999996662,0.999464691}, + {8.275,0.999996603,0.9994663}, + {8.279167,0.999996603,0.999467969}, + {8.283333,0.999996543,0.999469638}, + {8.2875,0.999996543,0.999471247}, + {8.291667,0.999996483,0.999472916}, + {8.295833,0.999996483,0.999474525}, + {8.3,0.999996483,0.999476194}, + {8.304167,0.999996424,0.999477804}, + {8.308333,0.999996424,0.999479413}, + {8.3125,0.999996424,0.999481082}, + {8.316667,0.999996424,0.999482691}, + {8.320833,0.999996424,0.999484301}, + {8.325,0.999996424,0.99948591}, + {8.329167,0.999996424,0.999487519}, + {8.333333,0.999996424,0.999489129}, + {8.3375,0.999996424,0.999490738}, + {8.341667,0.999996424,0.999492288}, + {8.345833,0.999996424,0.999493897}, + {8.35,0.999996424,0.999495506}, + {8.354167,0.999996424,0.999497056}, + {8.358333,0.999996424,0.999498665}, + {8.3625,0.999996483,0.999500215}, + {8.366667,0.999996483,0.999501824}, + {8.370833,0.999996483,0.999503374}, + {8.375,0.999996483,0.999504924}, + {8.379167,0.999996543,0.999506533}, + {8.383333,0.999996543,0.999508083}, + {8.3875,0.999996603,0.999509633}, + {8.391667,0.999996603,0.999511182}, + {8.395833,0.999996662,0.999512732}, + {8.4,0.999996662,0.999514282}, + {8.404167,0.999996722,0.999515831}, + {8.408333,0.999996722,0.999517322}, + {8.4125,0.999996781,0.999518871}, + {8.416667,0.999996841,0.999520421}, + {8.420833,0.999996841,0.999521911}, + {8.425,0.999996901,0.999523461}, + {8.429167,0.99999696,0.999524951}, + {8.433333,0.99999696,0.999526501}, + {8.4375,0.99999702,0.999527991}, + {8.441667,0.999997079,0.999529481}, + {8.445833,0.999997139,0.999530971}, + {8.45,0.999997139,0.999532461}, + {8.454167,0.999997199,0.999533951}, + {8.458333,0.999997258,0.999535441}, + {8.4625,0.999997318,0.999536932}, + {8.466667,0.999997318,0.999538422}, + {8.470833,0.999997377,0.999539912}, + {8.475,0.999997437,0.999541402}, + {8.479167,0.999997497,0.999542832}, + {8.483333,0.999997497,0.999544322}, + {8.4875,0.999997556,0.999545753}, + {8.491667,0.999997616,0.999547243}, + {8.495833,0.999997675,0.999548674}, + {8.5,0.999997675,0.999550104}, + {8.504167,0.999997735,0.999551535}, + {8.508333,0.999997795,0.999553025}, + {8.5125,0.999997854,0.999554455}, + {8.516667,0.999997854,0.999555886}, + {8.520833,0.999997914,0.999557316}, + {8.525,0.999997973,0.999558687}, + {8.529167,0.999997973,0.999560118}, + {8.533333,0.999998033,0.999561548}, + {8.5375,0.999998033,0.999562979}, + {8.541667,0.999998093,0.99956435}, + {8.545833,0.999998152,0.99956578}, + {8.55,0.999998152,0.999567151}, + {8.554167,0.999998212,0.999568582}, + {8.558333,0.999998212,0.999569952}, + {8.5625,0.999998271,0.999571323}, + {8.566667,0.999998271,0.999572694}, + {8.570833,0.999998271,0.999574065}, + {8.575,0.999998331,0.999575436}, + {8.579167,0.999998331,0.999576807}, + {8.583333,0.999998331,0.999578178}, + {8.5875,0.999998391,0.999579549}, + {8.591667,0.999998391,0.99958092}, + {8.595833,0.999998391,0.999582291}, + {8.6,0.999998391,0.999583602}, + {8.604167,0.99999845,0.999584973}, + {8.608333,0.99999845,0.999586284}, + {8.6125,0.99999845,0.999587655}, + {8.616667,0.99999845,0.999588966}, + {8.620833,0.99999845,0.999590337}, + {8.625,0.99999845,0.999591649}, + {8.629167,0.99999845,0.99959296}, + {8.633333,0.99999845,0.999594271}, + {8.6375,0.99999845,0.999595582}, + {8.641667,0.99999845,0.999596894}, + {8.645833,0.99999845,0.999598205}, + {8.65,0.99999845,0.999599516}, + {8.654167,0.99999845,0.999600828}, + {8.658333,0.99999845,0.999602139}, + {8.6625,0.999998391,0.999603391}, + {8.666667,0.999998391,0.999604702}, + {8.670833,0.999998391,0.999606013}, + {8.675,0.999998391,0.999607265}, + {8.679167,0.999998391,0.999608576}, + {8.683333,0.999998331,0.999609828}, + {8.6875,0.999998331,0.99961108}, + {8.691667,0.999998331,0.999612391}, + {8.695833,0.999998331,0.999613643}, + {8.7,0.999998271,0.999614894}, + {8.704167,0.999998271,0.999616146}, + {8.708333,0.999998271,0.999617398}, + {8.7125,0.999998212,0.999618649}, + {8.716667,0.999998212,0.999619901}, + {8.720833,0.999998212,0.999621153}, + {8.725,0.999998152,0.999622405}, + {8.729167,0.999998152,0.999623656}, + {8.733333,0.999998093,0.999624908}, + {8.7375,0.999998093,0.99962616}, + {8.741667,0.999998093,0.999627352}, + {8.745833,0.999998033,0.999628603}, + {8.75,0.999998033,0.999629796}, + {8.754167,0.999998033,0.999631047}, + {8.758333,0.999997973,0.999632239}, + {8.7625,0.999997973,0.999633491}, + {8.766667,0.999997973,0.999634683}, + {8.770833,0.999997914,0.999635935}, + {8.775,0.999997914,0.999637127}, + {8.779167,0.999997914,0.999638319}, + {8.783333,0.999997854,0.999639511}, + {8.7875,0.999997854,0.999640703}, + {8.791667,0.999997854,0.999641895}, + {8.795833,0.999997795,0.999643087}, + {8.8,0.999997795,0.999644279}, + {8.804167,0.999997795,0.999645472}, + {8.808333,0.999997795,0.999646664}, + {8.8125,0.999997735,0.999647856}, + {8.816667,0.999997735,0.999649048}, + {8.820833,0.999997735,0.99965024}, + {8.825,0.999997735,0.999651372}, + {8.829167,0.999997735,0.999652565}, + {8.833333,0.999997735,0.999653697}, + {8.8375,0.999997675,0.999654889}, + {8.841667,0.999997675,0.999656081}, + {8.845833,0.999997675,0.999657214}, + {8.85,0.999997675,0.999658346}, + {8.854167,0.999997675,0.999659538}, + {8.858333,0.999997675,0.999660671}, + {8.8625,0.999997675,0.999661803}, + {8.866667,0.999997675,0.999662995}, + {8.870833,0.999997675,0.999664128}, + {8.875,0.999997675,0.99966526}, + {8.879167,0.999997675,0.999666393}, + {8.883333,0.999997675,0.999667525}, + {8.8875,0.999997675,0.999668658}, + {8.891667,0.999997735,0.99966979}, + {8.895833,0.999997735,0.999670923}, + {8.9,0.999997735,0.999672055}, + {8.904167,0.999997735,0.999673128}, + {8.908333,0.999997735,0.999674261}, + {8.9125,0.999997735,0.999675393}, + {8.916667,0.999997795,0.999676526}, + {8.920833,0.999997795,0.999677598}, + {8.925,0.999997795,0.999678731}, + {8.929167,0.999997795,0.999679804}, + {8.933333,0.999997854,0.999680936}, + {8.9375,0.999997854,0.999682009}, + {8.941667,0.999997854,0.999683142}, + {8.945833,0.999997914,0.999684215}, + {8.95,0.999997914,0.999685287}, + {8.954167,0.999997914,0.99968636}, + {8.958333,0.999997973,0.999687493}, + {8.9625,0.999997973,0.999688566}, + {8.966667,0.999997973,0.999689639}, + {8.970833,0.999998033,0.999690711}, + {8.975,0.999998033,0.999691784}, + {8.979167,0.999998033,0.999692857}, + {8.983333,0.999998093,0.99969393}, + {8.9875,0.999998093,0.999695003}, + {8.991667,0.999998152,0.999696016}, + {8.995833,0.999998152,0.999697089}, + {9,0.999998152,0.999698162}, + {9.004167,0.999998212,0.999699175}, + {9.008333,0.999998212,0.999700248}, + {9.0125,0.999998271,0.999701321}, + {9.016667,0.999998271,0.999702334}, + {9.020833,0.999998271,0.999703407}, + {9.025,0.999998331,0.999704421}, + {9.029167,0.999998331,0.999705434}, + {9.033333,0.999998391,0.999706507}, + {9.0375,0.999998391,0.99970752}, + {9.041667,0.999998391,0.999708533}, + {9.045833,0.99999845,0.999709547}, + {9.05,0.99999845,0.99971056}, + {9.054167,0.99999851,0.999711633}, + {9.058333,0.99999851,0.999712646}, + {9.0625,0.99999851,0.999713659}, + {9.066667,0.999998569,0.999714613}, + {9.070833,0.999998569,0.999715626}, + {9.075,0.999998569,0.99971664}, + {9.079167,0.999998569,0.999717653}, + {9.083333,0.999998629,0.999718666}, + {9.0875,0.999998629,0.99971962}, + {9.091667,0.999998629,0.999720633}, + {9.095833,0.999998689,0.999721646}, + {9.1,0.999998689,0.9997226}, + {9.104167,0.999998689,0.999723613}, + {9.108333,0.999998689,0.999724567}, + {9.1125,0.999998689,0.999725521}, + {9.116667,0.999998748,0.999726534}, + {9.120833,0.999998748,0.999727488}, + {9.125,0.999998748,0.999728441}, + {9.129167,0.999998748,0.999729455}, + {9.133333,0.999998748,0.999730408}, + {9.1375,0.999998748,0.999731362}, + {9.141667,0.999998808,0.999732316}, + {9.145833,0.999998808,0.999733269}, + {9.15,0.999998808,0.999734223}, + {9.154167,0.999998808,0.999735177}, + {9.158333,0.999998808,0.99973613}, + {9.1625,0.999998808,0.999737084}, + {9.166667,0.999998808,0.999737978}, + {9.170833,0.999998808,0.999738932}, + {9.175,0.999998808,0.999739885}, + {9.179167,0.999998808,0.999740839}, + {9.183333,0.999998808,0.999741733}, + {9.1875,0.999998808,0.999742687}, + {9.191667,0.999998808,0.999743581}, + {9.195833,0.999998808,0.999744534}, + {9.2,0.999998808,0.999745429}, + {9.204167,0.999998808,0.999746382}, + {9.208333,0.999998808,0.999747276}, + {9.2125,0.999998748,0.99974817}, + {9.216667,0.999998748,0.999749124}, + {9.220833,0.999998748,0.999750018}, + {9.225,0.999998748,0.999750912}, + {9.229167,0.999998748,0.999751806}, + {9.233333,0.999998748,0.99975276}, + {9.2375,0.999998748,0.999753654}, + {9.241667,0.999998748,0.999754548}, + {9.245833,0.999998748,0.999755442}, + {9.25,0.999998689,0.999756336}, + {9.254167,0.999998689,0.99975723}, + {9.258333,0.999998689,0.999758124}, + {9.2625,0.999998689,0.999758959}, + {9.266667,0.999998689,0.999759853}, + {9.270833,0.999998689,0.999760747}, + {9.275,0.999998629,0.999761641}, + {9.279167,0.999998629,0.999762475}, + {9.283333,0.999998629,0.99976337}, + {9.2875,0.999998629,0.999764264}, + {9.291667,0.999998629,0.999765098}, + {9.295833,0.999998629,0.999765992}, + {9.3,0.999998629,0.999766827}, + {9.304167,0.999998569,0.999767721}, + {9.308333,0.999998569,0.999768555}, + {9.3125,0.999998569,0.999769449}, + {9.316667,0.999998569,0.999770284}, + {9.320833,0.999998569,0.999771118}, + {9.325,0.999998569,0.999772012}, + {9.329167,0.999998569,0.999772847}, + {9.333333,0.999998569,0.999773681}, + {9.3375,0.99999851,0.999774516}, + {9.341667,0.99999851,0.99977541}, + {9.345833,0.99999851,0.999776244}, + {9.35,0.99999851,0.999777079}, + {9.354167,0.99999851,0.999777913}, + {9.358333,0.99999851,0.999778748}, + {9.3625,0.99999851,0.999779582}, + {9.366667,0.99999851,0.999780416}, + {9.370833,0.99999851,0.999781251}, + {9.375,0.99999851,0.999782085}, + {9.379167,0.99999851,0.99978286}, + {9.383333,0.99999851,0.999783695}, + {9.3875,0.99999851,0.999784529}, + {9.391667,0.99999851,0.999785364}, + {9.395833,0.99999851,0.999786139}, + {9.4,0.99999851,0.999786973}, + {9.404167,0.99999851,0.999787807}, + {9.408333,0.99999851,0.999788582}, + {9.4125,0.99999851,0.999789417}, + {9.416667,0.99999851,0.999790192}, + {9.420833,0.99999851,0.999791026}, + {9.425,0.99999851,0.999791801}, + {9.429167,0.99999851,0.999792635}, + {9.433333,0.99999851,0.99979341}, + {9.4375,0.99999851,0.999794185}, + {9.441667,0.99999851,0.99979502}, + {9.445833,0.999998569,0.999795794}, + {9.45,0.999998569,0.999796569}, + {9.454167,0.999998569,0.999797404}, + {9.458333,0.999998569,0.999798179}, + {9.4625,0.999998569,0.999798954}, + {9.466667,0.999998569,0.999799728}, + {9.470833,0.999998569,0.999800503}, + {9.475,0.999998629,0.999801278}, + {9.479167,0.999998629,0.999802053}, + {9.483333,0.999998629,0.999802828}, + {9.4875,0.999998629,0.999803603}, + {9.491667,0.999998629,0.999804378}, + {9.495833,0.999998689,0.999805152}, + {9.5,0.999998689,0.999805927}, + {9.504167,0.999998689,0.999806643}, + {9.508333,0.999998689,0.999807417}, + {9.5125,0.999998689,0.999808192}, + {9.516667,0.999998748,0.999808967}, + {9.520833,0.999998748,0.999809682}, + {9.525,0.999998748,0.999810457}, + {9.529167,0.999998748,0.999811172}, + {9.533333,0.999998748,0.999811947}, + {9.5375,0.999998808,0.999812722}, + {9.541667,0.999998808,0.999813437}, + {9.545833,0.999998808,0.999814153}, + {9.55,0.999998808,0.999814928}, + {9.554167,0.999998808,0.999815643}, + {9.558333,0.999998868,0.999816418}, + {9.5625,0.999998868,0.999817133}, + {9.566667,0.999998868,0.999817848}, + {9.570833,0.999998868,0.999818563}, + {9.575,0.999998868,0.999819338}, + {9.579167,0.999998927,0.999820054}, + {9.583333,0.999998927,0.999820769}, + {9.5875,0.999998927,0.999821484}, + {9.591667,0.999998927,0.999822199}, + {9.595833,0.999998927,0.999822915}, + {9.6,0.999998987,0.99982363}, + {9.604167,0.999998987,0.999824345}, + {9.608333,0.999998987,0.99982506}, + {9.6125,0.999998987,0.999825776}, + {9.616667,0.999998987,0.999826491}, + {9.620833,0.999998987,0.999827206}, + {9.625,0.999999046,0.999827921}, + {9.629167,0.999999046,0.999828577}, + {9.633333,0.999999046,0.999829292}, + {9.6375,0.999999046,0.999830008}, + {9.641667,0.999999046,0.999830663}, + {9.645833,0.999999046,0.999831378}, + {9.65,0.999999046,0.999832094}, + {9.654167,0.999999106,0.999832749}, + {9.658333,0.999999106,0.999833465}, + {9.6625,0.999999106,0.99983412}, + {9.666667,0.999999106,0.999834836}, + {9.670833,0.999999106,0.999835491}, + {9.675,0.999999106,0.999836206}, + {9.679167,0.999999106,0.999836862}, + {9.683333,0.999999106,0.999837518}, + {9.6875,0.999999106,0.999838233}, + {9.691667,0.999999106,0.999838889}, + {9.695833,0.999999106,0.999839544}, + {9.7,0.999999106,0.9998402}, + {9.704167,0.999999106,0.999840856}, + {9.708333,0.999999106,0.999841571}, + {9.7125,0.999999106,0.999842227}, + {9.716667,0.999999106,0.999842882}, + {9.720833,0.999999106,0.999843538}, + {9.725,0.999999106,0.999844193}, + {9.729167,0.999999106,0.999844849}, + {9.733333,0.999999106,0.999845505}, + {9.7375,0.999999106,0.99984616}, + {9.741667,0.999999106,0.999846816}, + {9.745833,0.999999106,0.999847472}, + {9.75,0.999999106,0.999848068}, + {9.754167,0.999999106,0.999848723}, + {9.758333,0.999999106,0.999849379}, + {9.7625,0.999999106,0.999850035}, + {9.766667,0.999999106,0.99985069}, + {9.770833,0.999999106,0.999851286}, + {9.775,0.999999106,0.999851942}, + {9.779167,0.999999106,0.999852598}, + {9.783333,0.999999106,0.999853194}, + {9.7875,0.999999106,0.999853849}, + {9.791667,0.999999106,0.999854445}, + {9.795833,0.999999106,0.999855101}, + {9.8,0.999999106,0.999855697}, + {9.804167,0.999999106,0.999856353}, + {9.808333,0.999999106,0.999856949}, + {9.8125,0.999999046,0.999857605}, + {9.816667,0.999999046,0.999858201}, + {9.820833,0.999999046,0.999858797}, + {9.825,0.999999046,0.999859452}, + {9.829167,0.999999046,0.999860048}, + {9.833333,0.999999046,0.999860644}, + {9.8375,0.999999046,0.9998613}, + {9.841667,0.999999046,0.999861896}, + {9.845833,0.999999046,0.999862492}, + {9.85,0.999999046,0.999863088}, + {9.854167,0.999999046,0.999863684}, + {9.858333,0.999999046,0.99986428}, + {9.8625,0.999999046,0.999864876}, + {9.866667,0.999999046,0.999865532}, + {9.870833,0.999999046,0.999866128}, + {9.875,0.999999046,0.999866724}, + {9.879167,0.999999046,0.99986732}, + {9.883333,0.999999046,0.999867857}, + {9.8875,0.999999046,0.999868453}, + {9.891667,0.999999046,0.999869049}, + {9.895833,0.999999046,0.999869645}, + {9.9,0.999999046,0.999870241}, + {9.904167,0.999999046,0.999870837}, + {9.908333,0.999999046,0.999871433}, + {9.9125,0.999999046,0.999871969}, + {9.916667,0.999999046,0.999872565}, + {9.920833,0.999999046,0.999873161}, + {9.925,0.999999046,0.999873757}, + {9.929167,0.999999046,0.999874294}, + {9.933333,0.999999046,0.99987489}, + {9.9375,0.999999046,0.999875486}, + {9.941667,0.999999046,0.999876022}, + {9.945833,0.999999046,0.999876618}, + {9.95,0.999999046,0.999877155}, + {9.954167,0.999999046,0.999877751}, + {9.958333,0.999999046,0.999878287}, + {9.9625,0.999999046,0.999878883}, + {9.966667,0.999999046,0.99987942}, + {9.970833,0.999999046,0.999880016}, + {9.975,0.999999046,0.999880552}, + {9.979167,0.999999046,0.999881089}, + {9.983333,0.999999046,0.999881685}, + {9.9875,0.999999046,0.999882221}, + {9.991667,0.999999046,0.999882758}, + {9.995833,0.999999046,0.999883354}, + {10,0.999999106,0.99988389} + }; } // namespace Example4 diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp index ebda62f55..910e1fc05 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp @@ -78,12 +78,12 @@ namespace GridKit // Internal States y_[0] = (T3_ - T2_) * p0; // y0 - Ptx (Turbine Power ) y_[1] = p0; // y1 - Pv (Valve Position) - y_[2] = p0; // y2 - Pmech + y_[2] = p0; // y2 - Pm (Mech Power) // D.V. Derivative yp_[0] = 0.0; // Ptx yp_[1] = 0.0; // Pv - yp_[2] = 0.0; + yp_[2] = 0.0; // Do I need to set algebraic to zero? return 0; } @@ -138,15 +138,12 @@ namespace GridKit // Input Variables ScalarT omega = machine_->speed(); - // Internal Variables - // y0 - Ptx - // y1 - Pv - // y2 - Pmech - ScalarT ptx = y_[0]; - ScalarT pv = y_[1]; - ScalarT pmech = y_[2]; + // Read Internal Variables + ScalarT ptx = y_[0]; // y0 - Ptx + ScalarT pv = y_[1]; // y1 - Pv + ScalarT pmech = y_[2]; // y2 - Pmech - // Internal Derivatives + // Read Internal Derivatives ScalarT ptx_dot = yp_[0]; ScalarT pv_dot = yp_[1]; diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp index abe1b1a0b..726784357 100644 --- a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp @@ -83,6 +83,7 @@ namespace GridKit ScalarT indicator(ScalarT x, ScalarT f); private: + // Associated Machine Model machine_type* machine_; From 4bcd0a60a4d67fc5b724eba55b42f70dac76e982 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 15:38:47 -0500 Subject: [PATCH 131/139] edit: camel case governor [skip ci] --- examples/PhasorDynamics/Example4/example4.cpp | 6 +++--- src/Model/PhasorDynamics/Governor/CMakeLists.txt | 2 +- .../Governor/{TGOV1 => GovernorTgov1}/CMakeLists.txt | 0 .../Governor/{TGOV1 => GovernorTgov1}/README.md | 0 .../Governor/{TGOV1 => GovernorTgov1}/TurbineGov.cpp | 0 .../Governor/{TGOV1 => GovernorTgov1}/TurbineGov.hpp | 0 .../Governor/{TGOV1 => GovernorTgov1}/TurbineGovData.hpp | 0 7 files changed, 4 insertions(+), 4 deletions(-) rename src/Model/PhasorDynamics/Governor/{TGOV1 => GovernorTgov1}/CMakeLists.txt (100%) rename src/Model/PhasorDynamics/Governor/{TGOV1 => GovernorTgov1}/README.md (100%) rename src/Model/PhasorDynamics/Governor/{TGOV1 => GovernorTgov1}/TurbineGov.cpp (100%) rename src/Model/PhasorDynamics/Governor/{TGOV1 => GovernorTgov1}/TurbineGov.hpp (100%) rename src/Model/PhasorDynamics/Governor/{TGOV1 => GovernorTgov1}/TurbineGovData.hpp (100%) diff --git a/examples/PhasorDynamics/Example4/example4.cpp b/examples/PhasorDynamics/Example4/example4.cpp index 2f677024d..268918ff9 100644 --- a/examples/PhasorDynamics/Example4/example4.cpp +++ b/examples/PhasorDynamics/Example4/example4.cpp @@ -20,8 +20,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -128,7 +128,7 @@ int main() sys.getBus(0), data.genrou[0]); - // Instatiate TGOV1 & add to system model + // Instatiate GovernorTgov1 & add to system model gov = new TurbineGov( gen, data.gov[0]); diff --git a/src/Model/PhasorDynamics/Governor/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/CMakeLists.txt index dc138e5b3..fe923ae65 100644 --- a/src/Model/PhasorDynamics/Governor/CMakeLists.txt +++ b/src/Model/PhasorDynamics/Governor/CMakeLists.txt @@ -5,4 +5,4 @@ # - Adam Birchfield # ]] -add_subdirectory(TGOV1) +add_subdirectory(GovernorTgov1) diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt b/src/Model/PhasorDynamics/Governor/GovernorTgov1/CMakeLists.txt similarity index 100% rename from src/Model/PhasorDynamics/Governor/TGOV1/CMakeLists.txt rename to src/Model/PhasorDynamics/Governor/GovernorTgov1/CMakeLists.txt diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/README.md b/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md similarity index 100% rename from src/Model/PhasorDynamics/Governor/TGOV1/README.md rename to src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp similarity index 100% rename from src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.cpp rename to src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp similarity index 100% rename from src/Model/PhasorDynamics/Governor/TGOV1/TurbineGov.hpp rename to src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp diff --git a/src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGovData.hpp similarity index 100% rename from src/Model/PhasorDynamics/Governor/TGOV1/TurbineGovData.hpp rename to src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGovData.hpp From 2bf460a192ce9b4f342d73ec23aed6af4f477bc0 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 15:41:05 -0500 Subject: [PATCH 132/139] edit: file path correction [skip ci] --- src/Model/PhasorDynamics/SystemModelData.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/SystemModelData.hpp b/src/Model/PhasorDynamics/SystemModelData.hpp index 6899aa529..593459432 100644 --- a/src/Model/PhasorDynamics/SystemModelData.hpp +++ b/src/Model/PhasorDynamics/SystemModelData.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include From 038780202ca7e5e9e2f1c6b0136d02c5018a4107 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 15:42:13 -0500 Subject: [PATCH 133/139] edit: more file path correction [skip ci] --- src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp index 910e1fc05..311d0daa5 100644 --- a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp @@ -12,7 +12,7 @@ #include #include -#include +#include #define _USE_MATH_DEFINES From c2ea15756339e8f6eafff0a3684797a8a8f47b03 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 15:49:17 -0500 Subject: [PATCH 134/139] edit: misc documentation formatting [skip ci] --- .../Governor/GovernorTgov1/README.md | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md b/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md index 852b7ecd0..761409fee 100644 --- a/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/README.md @@ -23,6 +23,8 @@ $P_{vmax}$ | [p.u.] | Stator leakage reactance | 1 | $P_{vmin}$ | [p.u.] | Max Valve Position | 0 | $D_t$ | [p.u.] | Turbine Damping Coefficient | 0 | +## Model Variables + ### Internal Variables #### Differential @@ -51,15 +53,6 @@ $P_{ref}$ | [p.u.] | Reference Power | ## Model Equations - -### Algebraic Equations -The algebraic equation dictating the mechnical power output. -```math -\begin{aligned} - P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \Delta\omega \\ -\end{aligned} -``` - ### Differential Equations The TGOV1 differential equations, as derived from the model diagram. ```math @@ -75,6 +68,15 @@ The TGOV1 differential equations, as derived from the model diagram. \end{cases} \end{aligned} ``` + +### Algebraic Equations +The algebraic equation dictating the mechnical power output. +```math +\begin{aligned} + P_{mech} &= \dfrac{1}{T_3}(P_{tx}+T_2P_v) - D_t \Delta\omega \\ +\end{aligned} +``` + The domain of the state variable $P_{v}\in(P_{vmin}, P_{vmax})$ is enforced through the piece-wise definition above. This may need to be expressed as a smooth approximation (smooth indicator $\phi$) expressed generically as follows. @@ -90,7 +92,7 @@ smooth approximation (smooth indicator $\phi$) expressed generically as follows. ``` ## Initialization -Assuming no limits are reached, initialized reveals: +Assuming no limits are reached, the initial conditions are a function of $P_{mech}$ which is equal to the electric torque. ```math \begin{aligned} P_{tx} &= (T_3-T_2) P_{mech}\\ From 0e8c631ce7ab0a383985f1abdd4c9de4c9bd1e92 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 16:19:45 -0500 Subject: [PATCH 135/139] add: unit test environment [skip ci] --- .../Governor/GovernorTgov1/TurbineGov.cpp | 16 +++ .../Governor/GovernorTgov1/TurbineGov.hpp | 1 + tests/UnitTests/PhasorDynamics/CMakeLists.txt | 9 +- .../PhasorDynamics/GovernorTgov1Tests.hpp | 124 ++++++++++++++++++ .../PhasorDynamics/runGovernorTgov1Tests.cpp | 14 ++ 5 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp create mode 100644 tests/UnitTests/PhasorDynamics/runGovernorTgov1Tests.cpp diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp index 311d0daa5..b8ff34e20 100644 --- a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.cpp @@ -43,6 +43,22 @@ namespace GridKit size_ = 3; } + template + TurbineGov::TurbineGov(machine_type* machine) + : machine_(machine), + R_(0.05), + Pvmin_(0), + Pvmax_(1), + T1_(0.5), + T2_(2.5), + T3_(7.5), + Dt_(0) + { + + // 3 Internal Variables + size_ = 3; + } + /*! * @brief Allocate memory for model * diff --git a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp index 726784357..f3f59b210 100644 --- a/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp +++ b/src/Model/PhasorDynamics/Governor/GovernorTgov1/TurbineGov.hpp @@ -53,6 +53,7 @@ namespace GridKit public: TurbineGov(machine_type* machine, const model_data_type& data); + TurbineGov(machine_type* machine); ~TurbineGov() = default; int allocate() override; diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index f461ce686..3df1fea5f 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -19,7 +19,12 @@ target_link_libraries(test_phasor_load GRIDKIT::phasor_dynamics_load add_executable(test_phasor_genrou runGenrouTests.cpp) target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_genrou GRIDKIT::phasor_dynamics_bus) - + +add_executable(test_phasor_governortgov1 runGovernorTgov1Tests.cpp) +target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_turbinegov + GRIDKIT::phasor_dynamics_genrou + GRIDKIT::phasor_dynamics_bus) + add_executable(test_phasor_gen_classical runGenClassicalTests.cpp) target_link_libraries(test_phasor_gen_classical GRIDKIT::phasor_dynamics_gen_classical GRIDKIT::phasor_dynamics_bus) @@ -35,6 +40,7 @@ target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load add_test(NAME PhasorDynamicsBusTest COMMAND $) add_test(NAME PhasorDynamicsBranchTest COMMAND $) add_test(NAME PhasorDynamicsGenrouTest COMMAND $) +add_test(NAME PhasorDynamicsGovernorTgov1Test COMMAND $) add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) add_test(NAME PhasorDynamicsLoadTest COMMAND $) add_test(NAME PhasorDynamicsSystemTest COMMAND $) @@ -43,5 +49,6 @@ install(TARGETS test_phasor_bus test_phasor_branch test_phasor_load test_phasor_genrou + test_phasor_governortgov1 test_phasor_gen_classical test_phasor_system RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp new file mode 100644 index 000000000..0380e9611 --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -0,0 +1,124 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace GridKit +{ + namespace Testing + { + + template + class GovernorTgov1Tests + { + private: + using real_type = typename PhasorDynamics::Component::real_type; + + public: + GovernorTgov1Tests() = default; + ~GovernorTgov1Tests() = default; + + TestOutcome constructor() + { + TestStatus success = true; + + auto* bus = new PhasorDynamics::Bus(1.0, 0.0); + + PhasorDynamics::Component* machine = + new PhasorDynamics::Genrou(bus, 1); + + PhasorDynamics::Component* gov = + new PhasorDynamics::TurbineGov(machine); + + success *= (gov != nullptr); + + if (gov) + { + delete gov; + } + if (machine) + { + delete machine; + } + delete bus; + + return success.report(__func__); + } + + /** + * @brief Checks residual evaluation. + * + * The test instantiates and initializes Genrou model. Properly + * initialized model should have residual equal to zero within machine + * precision. + * + * @return TestOutcome - wheter test was successful + */ + TestOutcome residual() + { + TestStatus success = true; + + PhasorDynamics::Bus bus(1.0, 0.0); + PhasorDynamics::Genrou gen(&bus, + 1, + 1, + 0.05013, + 3, + 0, + 0, + 7, + 0.04, + 0.05, + 0.75, + 2.1, + 0.2, + 0.18, + 0.5, + 0.5, + 0.18, + 0.15, + 0, + 0); + PhasorDynamics::TurbineGov gov(&gen); + + bus.allocate(); + bus.initialize(); + bus.evaluateResidual(); + + gen.allocate(); + gen.initialize(); + gen.evaluateResidual(); + + gov.allocate(); + gov.initialize(); + gov.evaluateResidual(); + + // Require results to be within machine precision + auto tol = 10 * std::numeric_limits::epsilon(); + + const std::vector& f = gov.getResidual(); + for (const auto& f_val : f) + { + if (!isEqual(f_val, 0.0, tol)) + success = false; + } + + return success.report(__func__); + } + + TestOutcome accessors() + { + TestStatus success = true; + success.skipTest(); + + return success.report(__func__); + } + }; // class GenrouTest + + } // namespace Testing +} // namespace GridKit diff --git a/tests/UnitTests/PhasorDynamics/runGovernorTgov1Tests.cpp b/tests/UnitTests/PhasorDynamics/runGovernorTgov1Tests.cpp new file mode 100644 index 000000000..ced215e1d --- /dev/null +++ b/tests/UnitTests/PhasorDynamics/runGovernorTgov1Tests.cpp @@ -0,0 +1,14 @@ +#include "GovernorTgov1Tests.hpp" + +int main() +{ + GridKit::Testing::TestingResults result; + + GridKit::Testing::GovernorTgov1Tests test; + + result += test.constructor(); + result += test.accessors(); + result += test.residual(); + + return result.summary(); +} From f00a61ab6020b4da3396515bbe2ffd72aefae394 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 16:24:02 -0500 Subject: [PATCH 136/139] edit: polymorph correction [skip ci] --- tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index 0380e9611..a0de716e2 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -29,7 +30,7 @@ namespace GridKit auto* bus = new PhasorDynamics::Bus(1.0, 0.0); - PhasorDynamics::Component* machine = + PhasorDynamics::MachineBase* machine = new PhasorDynamics::Genrou(bus, 1); PhasorDynamics::Component* gov = From d4601388c4e7a49bd2935ba8d2ed4febe9151063 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 16:25:44 -0500 Subject: [PATCH 137/139] edit: descructor of Machine [skip ci] --- tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index a0de716e2..400b17c21 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -30,7 +30,7 @@ namespace GridKit auto* bus = new PhasorDynamics::Bus(1.0, 0.0); - PhasorDynamics::MachineBase* machine = + PhasorDynamics::Genrou* machine = new PhasorDynamics::Genrou(bus, 1); PhasorDynamics::Component* gov = From 81fff37e47ad755e946965d5ce60bf3662751dd5 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 17:16:14 -0500 Subject: [PATCH 138/139] edit: unit test cmake error --- tests/UnitTests/PhasorDynamics/CMakeLists.txt | 12 ++++++------ .../UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index 3df1fea5f..036086496 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -20,10 +20,10 @@ add_executable(test_phasor_genrou runGenrouTests.cpp) target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_genrou GRIDKIT::phasor_dynamics_bus) -add_executable(test_phasor_governortgov1 runGovernorTgov1Tests.cpp) -target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_turbinegov - GRIDKIT::phasor_dynamics_genrou - GRIDKIT::phasor_dynamics_bus) +#add_executable(test_phasor_governortgov1 runGovernorTgov1Tests.cpp) +#target_link_libraries(test_phasor_genrou GRIDKIT::phasor_dynamics_turbinegov +# GRIDKIT::phasor_dynamics_genrou +# GRIDKIT::phasor_dynamics_bus) add_executable(test_phasor_gen_classical runGenClassicalTests.cpp) target_link_libraries(test_phasor_gen_classical GRIDKIT::phasor_dynamics_gen_classical @@ -41,7 +41,7 @@ add_test(NAME PhasorDynamicsBusTest COMMAND $) add_test(NAME PhasorDynamicsBranchTest COMMAND $) add_test(NAME PhasorDynamicsGenrouTest COMMAND $) add_test(NAME PhasorDynamicsGovernorTgov1Test COMMAND $) -add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) +#add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) add_test(NAME PhasorDynamicsLoadTest COMMAND $) add_test(NAME PhasorDynamicsSystemTest COMMAND $) @@ -49,6 +49,6 @@ install(TARGETS test_phasor_bus test_phasor_branch test_phasor_load test_phasor_genrou - test_phasor_governortgov1 + ##test_phasor_governortgov1 test_phasor_gen_classical test_phasor_system RUNTIME DESTINATION bin) diff --git a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp index 400b17c21..16b6bf710 100644 --- a/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp +++ b/tests/UnitTests/PhasorDynamics/GovernorTgov1Tests.hpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include @@ -33,7 +32,7 @@ namespace GridKit PhasorDynamics::Genrou* machine = new PhasorDynamics::Genrou(bus, 1); - PhasorDynamics::Component* gov = + PhasorDynamics::TurbineGov* gov = new PhasorDynamics::TurbineGov(machine); success *= (gov != nullptr); From 0e495d580104215a52a48776cedc5110365e6c19 Mon Sep 17 00:00:00 2001 From: Wyatt Lowery Date: Sun, 22 Jun 2025 17:18:25 -0500 Subject: [PATCH 139/139] edit: unit test cmake --- tests/UnitTests/PhasorDynamics/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/UnitTests/PhasorDynamics/CMakeLists.txt b/tests/UnitTests/PhasorDynamics/CMakeLists.txt index 036086496..c057d1fe7 100644 --- a/tests/UnitTests/PhasorDynamics/CMakeLists.txt +++ b/tests/UnitTests/PhasorDynamics/CMakeLists.txt @@ -40,8 +40,8 @@ target_link_libraries(test_phasor_system GRIDKIT::phasor_dynamics_load add_test(NAME PhasorDynamicsBusTest COMMAND $) add_test(NAME PhasorDynamicsBranchTest COMMAND $) add_test(NAME PhasorDynamicsGenrouTest COMMAND $) -add_test(NAME PhasorDynamicsGovernorTgov1Test COMMAND $) -#add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) +#add_test(NAME PhasorDynamicsGovernorTgov1Test COMMAND $) +add_test(NAME PhasorDynamicsGenClassicalTest COMMAND $) add_test(NAME PhasorDynamicsLoadTest COMMAND $) add_test(NAME PhasorDynamicsSystemTest COMMAND $)