diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 53128af7c..b4d8990ed 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -49,7 +49,13 @@ jobs: version: ${{ matrix.version }} arch: ${{ matrix.arch }} - uses: julia-actions/cache@v3 - - uses: julia-actions/julia-buildpkg@v1 + - name: Build package + run: | + julia --project=. -e ' + using Pkg + Pkg.add(name="BaseModelica", rev="main") + Pkg.instantiate() + ' - uses: julia-actions/julia-runtest@v1 sanity: @@ -82,7 +88,13 @@ jobs: version: '1.12' arch: x64 - uses: julia-actions/cache@v3 - - uses: julia-actions/julia-buildpkg@v1 + - name: Build package + run: | + julia --project=. -e ' + using Pkg + Pkg.add(name="BaseModelica", rev="main") + Pkg.instantiate() + ' - name: Sanity check ChuaCircuit run: | diff --git a/Project.toml b/Project.toml index 75a73180f..21560b138 100644 --- a/Project.toml +++ b/Project.toml @@ -7,6 +7,7 @@ authors = ["AnHeuermann"] BaseModelica = "a17d5099-185d-4ff5-b5d3-51aa4569e56d" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" DifferentialEquations = "0c46a032-eb83-5123-abaf-570d42b7fbaa" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Logging = "56ddb016-857b-54e1-b83d-db4d58db5568" ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78" OMJulia = "0f4fe800-344e-11e9-2949-fb537ad918e1" diff --git a/src/BaseModelicaLibraryTesting.jl b/src/BaseModelicaLibraryTesting.jl index 7610640fa..5921161b6 100644 --- a/src/BaseModelicaLibraryTesting.jl +++ b/src/BaseModelicaLibraryTesting.jl @@ -4,7 +4,7 @@ import Pkg import OMJulia import OMJulia: sendExpression import BaseModelica -import DifferentialEquations: solve, Rodas5P, ReturnCode +import DifferentialEquations import ModelingToolkit import Dates: now import Printf: @sprintf @@ -21,11 +21,12 @@ include("pipeline.jl") # ── Public API ───────────────────────────────────────────────────────────────── # Shared types and constants -export ModelResult, CompareSettings, RunInfo +export ModelResult, CompareSettings, SimulateSettings, RunInfo export LIBRARY, LIBRARY_VERSION, CMP_REL_TOL, CMP_ABS_TOL # Comparison configuration export configure_comparison!, compare_settings +export configure_simulate!, simulate_settings # Pipeline phases export run_export # Phase 1: Base Modelica export via OMC diff --git a/src/pipeline.jl b/src/pipeline.jl index 4a1815b58..9b06667a3 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -57,8 +57,12 @@ end Run the four-phase pipeline for a single model and return its result. """ -function test_model(omc::OMJulia.OMCSession, model::String, results_root::String, - ref_root::String; csv_max_size_mb::Int = CSV_MAX_SIZE_MB)::ModelResult +function test_model(omc::OMJulia.OMCSession, + model::String, + results_root::String, + ref_root::String; + sim_settings ::SimulateSettings = _SIM_SETTINGS, + csv_max_size_mb::Int = CSV_MAX_SIZE_MB)::ModelResult model_dir = joinpath(results_root, "files", model) mkpath(model_dir) @@ -93,6 +97,7 @@ function test_model(omc::OMJulia.OMCSession, model::String, results_root::String # Phase 3 ────────────────────────────────────────────────────────────────── sim_ok, sim_t, sim_err, sol = run_simulate(ode_prob, model_dir, model; + settings = sim_settings, csv_max_size_mb, cmp_signals) # Phase 4 (optional) ─────────────────────────────────────────────────────── @@ -132,6 +137,7 @@ function main(; results_root :: String = "", ref_root :: String = get(ENV, "MAPLIB_REF", ""), bm_options :: String = get(ENV, "BM_OPTIONS", "scalarize,moveBindings,inlineFunctions"), + sim_settings :: SimulateSettings = _SIM_SETTINGS, csv_max_size_mb :: Int = CSV_MAX_SIZE_MB, ) t0 = time() @@ -200,7 +206,7 @@ function main(; for (i, model) in enumerate(models) @info "[$i/$(length(models))] $model" - result = test_model(omc, model, results_root, ref_root; csv_max_size_mb) + result = test_model(omc, model, results_root, ref_root; sim_settings, csv_max_size_mb) push!(results, result) phase = if result.sim_success && result.cmp_total > 0 diff --git a/src/simulate.jl b/src/simulate.jl index fe6723aa4..8e6b0fb95 100644 --- a/src/simulate.jl +++ b/src/simulate.jl @@ -1,14 +1,49 @@ # ── Phase 3: ODE simulation with DifferentialEquations / MTK ────────────────── -import DifferentialEquations: solve, Rodas5P, ReturnCode +import DifferentialEquations import Logging import ModelingToolkit import Printf: @sprintf +"""Module-level default simulation settings. Modify via `configure_simulate!`.""" +const _SIM_SETTINGS = SimulateSettings(solver = DifferentialEquations.Rodas5Pr()) + +""" + configure_simulate!(; solver, saveat_n) → SimulateSettings + +Update the module-level simulation settings in-place and return them. + +# Keyword arguments +- `solver` — any SciML ODE/DAE algorithm instance (e.g. `Rodas5Pr`, `FBDF()`). +- `saveat_n` — number of uniform time points for purely algebraic systems. + +# Example + +```julia +using OrdinaryDiffEqBDF +configure_simulate!(solver = FBDF()) +``` +""" +function configure_simulate!(; + solver :: Union{Any,Nothing} = nothing, + saveat_n :: Union{Int,Nothing} = nothing, +) + isnothing(solver) || (_SIM_SETTINGS.solver = solver) + isnothing(saveat_n) || (_SIM_SETTINGS.saveat_n = saveat_n) + return _SIM_SETTINGS +end + +""" + simulate_settings() → SimulateSettings + +Return the current module-level simulation settings. """ - run_simulate(ode_prob, model_dir, model; cmp_signals, csv_max_size_mb) → (success, time, error, sol) +simulate_settings() = _SIM_SETTINGS -Solve `ode_prob` with Rodas5P (stiff solver). On success, also writes the +""" + run_simulate(ode_prob, model_dir, model; settings, cmp_signals, csv_max_size_mb) → (success, time, error, sol) + +Solve `ode_prob` using the algorithm in `settings.solver`. On success, also writes the solution as a CSV file `_sim.csv` in `model_dir`. Writes a `_sim.log` file in `model_dir`. Returns `nothing` as the fourth element on failure. @@ -20,21 +55,26 @@ of signals will be compared. CSV files larger than `csv_max_size_mb` MiB are replaced with a `_sim.csv.toobig` marker so that the report can note the omission. """ -function run_simulate(ode_prob, model_dir::String, +function run_simulate(ode_prob, + model_dir::String, model::String; - cmp_signals ::Vector{String} = String[], - csv_max_size_mb::Int = CSV_MAX_SIZE_MB)::Tuple{Bool,Float64,String,Any} - sim_success = false - sim_time = 0.0 - sim_error = "" - sol = nothing + settings ::SimulateSettings = _SIM_SETTINGS, + cmp_signals ::Vector{String} = String[], + csv_max_size_mb::Int = CSV_MAX_SIZE_MB)::Tuple{Bool,Float64,String,Any} + + sim_success = false + sim_time = 0.0 + sim_error = "" + sol = nothing + solver_settings_string = "" log_file = open(joinpath(model_dir, "$(model)_sim.log"), "w") println(log_file, "Model: $model") logger = Logging.SimpleLogger(log_file, Logging.Debug) t0 = time() + + solver = settings.solver try - # Rodas5P handles stiff DAE-like systems well. # Redirect all library log output (including Symbolics/MTK warnings) # to the log file so they don't clutter stdout. sol = Logging.with_logger(logger) do @@ -42,14 +82,47 @@ function run_simulate(ode_prob, model_dir::String, # For stateless models (no unknowns) the adaptive solver takes no # internal steps and sol.t would be empty with saveat=[]. # Supply explicit time points so observed variables can be evaluated. - sys = ode_prob.f.sys - saveat = isempty(ModelingToolkit.unknowns(sys)) ? - collect(range(ode_prob.tspan[1], ode_prob.tspan[end]; length = 500)) : - Float64[] - solve(ode_prob, Rodas5P(); saveat = saveat, dense = true) + sys = ode_prob.f.sys + n_unknowns = length(ModelingToolkit.unknowns(sys)) + + kwargs = if n_unknowns == 0 + # No unknowns at all (e.g. BusUsage): + # Supply explicit time points so observed variables can be evaluated. + saveat_s = collect(range(ode_prob.tspan[1], ode_prob.tspan[end]; length = settings.saveat_n)) + (saveat = saveat_s, dense = true) + else + (saveat = Float64[], dense = true) + end + + # Log solver settings — init returns NullODEIntegrator (no .opts) + # when the problem has no unknowns (u::Nothing), so only inspect + # opts when a real integrator is returned. + # Use our own `saveat` vector for the log: integ.opts.saveat is a + # BinaryHeap which does not support iterate/minimum/maximum. + integ = DifferentialEquations.init(ode_prob, solver; kwargs...) + saveat_s = kwargs.saveat + solver_settings_string = if hasproperty(integ, :opts) + sv_str = isempty(saveat_s) ? "[]" : "$(length(saveat_s)) points in [$(first(saveat_s)), $(last(saveat_s))]" + """ + Solver $(parentmodule(typeof(solver))).$(nameof(typeof(solver))) + saveat: $sv_str + abstol: $(@sprintf("%.2e", integ.opts.abstol)) + reltol: $(@sprintf("%.2e", integ.opts.reltol)) + adaptive: $(integ.opts.adaptive) + dense: $(integ.opts.dense) + """ + else + sv_str = isempty(saveat_s) ? "[]" : "$(length(saveat_s)) points in [$(first(saveat_s)), $(last(saveat_s))]" + "Solver (NullODEIntegrator — no unknowns) + saveat: $sv_str + dense: true" + end + + # Solve + DifferentialEquations.solve(ode_prob, solver; kwargs...) end sim_time = time() - t0 - if sol.retcode == ReturnCode.Success + if sol.retcode == DifferentialEquations.ReturnCode.Success sys = sol.prob.f.sys n_vars = length(ModelingToolkit.unknowns(sys)) n_obs = length(ModelingToolkit.observed(sys)) @@ -67,7 +140,8 @@ function run_simulate(ode_prob, model_dir::String, sim_time = time() - t0 sim_error = sprint(showerror, e, catch_backtrace()) end - println(log_file, "Time: $(round(sim_time; digits=3)) s") + println(log_file, solver_settings_string) + println(log_file, "Time: $(round(sim_time; digits=3)) s") println(log_file, "Success: $sim_success") isempty(sim_error) || println(log_file, "\n--- Error ---\n$sim_error") close(log_file) diff --git a/src/types.jl b/src/types.jl index b073c7843..cf18912d7 100644 --- a/src/types.jl +++ b/src/types.jl @@ -37,6 +37,25 @@ Base.@kwdef mutable struct CompareSettings error_fn :: Symbol = :mixed end +# ── Simulation settings ──────────────────────────────────────────────────────── + +""" + SimulateSettings + +Mutable configuration struct for ODE simulation. + +# Fields +- `solver` — any SciML ODE/DAE algorithm instance. Default: `nothing`, + resolved to `Rodas5Pr()` when the module-level singleton is + constructed in `simulate.jl`. +- `saveat_n` — number of evenly-spaced time points used for purely algebraic + systems (all mass-matrix rows zero). Default: `500`. +""" +Base.@kwdef mutable struct SimulateSettings + solver :: Any = nothing + saveat_n :: Int = 500 +end + # ── Run metadata ─────────────────────────────────────────────────────────────── """ diff --git a/test/chua_circuit.jl b/test/chua_circuit.jl new file mode 100644 index 000000000..1f3ffcbcb --- /dev/null +++ b/test/chua_circuit.jl @@ -0,0 +1,31 @@ +@testset "ChuaCircuit pipeline" begin + tmpdir = mktempdir() + model_dir = joinpath(tmpdir, "files", TEST_MODEL_CHUA) + mkpath(model_dir) + bm_path = replace(abspath(joinpath(model_dir, "$TEST_MODEL_CHUA.bmo")), "\\" => "/") + + omc = OMJulia.OMCSession(TEST_OMC) + try + OMJulia.sendExpression(omc, """setCommandLineOptions("--baseModelica --baseModelicaOptions=scalarize,moveBindings -d=evaluateAllParameters")""") + ok = OMJulia.sendExpression(omc, """loadModel(Modelica, {"4.1.0"})""") + @test ok == true + + exp_ok, _, exp_err = run_export(omc, TEST_MODEL_CHUA, model_dir, bm_path) + @test exp_ok + exp_ok || @warn "Export error: $exp_err" + + if exp_ok + par_ok, _, par_err, ode_prob = run_parse(bm_path, model_dir, TEST_MODEL_CHUA) + @test par_ok + par_ok || @warn "Parse error: $par_err" + + if par_ok + sim_ok, _, sim_err, _ = run_simulate(ode_prob, model_dir, TEST_MODEL_CHUA) + @test sim_ok + sim_ok || @warn "Simulation error: $sim_err" + end + end + finally + OMJulia.quit(omc) + end +end diff --git a/test/fixtures/Modelica.Electrical.Analog.Examples.OpAmps.Subtracter.bmo b/test/fixtures/Modelica.Electrical.Analog.Examples.OpAmps.Subtracter.bmo new file mode 100644 index 000000000..07a0d38e4 --- /dev/null +++ b/test/fixtures/Modelica.Electrical.Analog.Examples.OpAmps.Subtracter.bmo @@ -0,0 +1,229 @@ +//! base 0.1.0 +package 'Subtracter' + type 'Modelica.Blocks.Types.LimiterHomotopy' = enumeration('NoHomotopy', 'Linear', 'UpperLimit', 'LowerLimit'); + + model 'Subtracter' "Inverting subtracter" + parameter Real 'Vin'(unit = "V", quantity = "ElectricPotential") = 5.0 "Amplitude of input voltage"; + parameter Real 'f'(unit = "Hz", quantity = "Frequency") = 10.0 "Frequency of input voltage"; + Real 'ground.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'ground.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + parameter Real 'vIn1.V'(start = 1.0, unit = "V", quantity = "ElectricPotential") = 5.0 "Amplitude of sine wave"; + parameter Real 'vIn1.phase'(displayUnit = "deg", unit = "rad", quantity = "Angle") = 0.0 "Phase of sine wave"; + parameter Real 'vIn1.f'(start = 1.0, unit = "Hz", quantity = "Frequency") = 10.0 "Frequency of sine wave"; + Real 'vIn1.v'(unit = "V", quantity = "ElectricPotential") "Voltage drop of the two pins (= p.v - n.v)"; + Real 'vIn1.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'vIn1.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'vIn1.n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'vIn1.n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'vIn1.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pin p to pin n"; + parameter Real 'vIn1.signalSource.amplitude' = 5.0 "Amplitude of sine wave"; + parameter Real 'vIn1.signalSource.f'(start = 1.0, unit = "Hz", quantity = "Frequency") = 10.0 "Frequency of sine wave"; + parameter Real 'vIn1.signalSource.phase'(displayUnit = "deg", unit = "rad", quantity = "Angle") = 0.0 "Phase of sine wave"; + parameter Boolean 'vIn1.signalSource.continuous' = false "Make output continuous by starting at offset + amplitude*sin(phase)" annotation(Evaluate = true); + Real 'vIn1.signalSource.y' "Connector of Real output signal"; + parameter Real 'vIn1.signalSource.offset' = 0.0 "Offset of output signal y"; + parameter Real 'vIn1.signalSource.startTime'(unit = "s", quantity = "Time") = 0.0 "Output y = offset for time < startTime"; + parameter Real 'vIn1.offset'(unit = "V", quantity = "ElectricPotential") = 0.0 "Voltage offset"; + parameter Real 'vIn1.startTime'(unit = "s", quantity = "Time") = 0.0 "Time offset"; + parameter Real 'vIn2.V'(start = 1.0, unit = "V", quantity = "ElectricPotential") = 5.0 "Value of constant voltage"; + Real 'vIn2.v'(unit = "V", quantity = "ElectricPotential") "Voltage drop of the two pins (= p.v - n.v)"; + Real 'vIn2.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'vIn2.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'vIn2.n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'vIn2.n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'vIn2.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pin p to pin n"; + Real 'vOut.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'vOut.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'vOut.n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'vOut.n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'vOut.v'(unit = "V") "Voltage between pin p and n (= p.v - n.v) as output signal"; + Real 'feedback.v1'(unit = "V", quantity = "ElectricPotential") "Voltage drop of port 1 (= p1.v - n1.v)"; + Real 'feedback.v2'(unit = "V", quantity = "ElectricPotential") "Voltage drop of port 2 (= p2.v - n2.v)"; + Real 'feedback.i1'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pos. to neg. pin of port 1"; + Real 'feedback.i2'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pos. to neg. pin of port 2"; + Real 'feedback.p1.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.p1.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.n1.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.n1.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.p2.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.p2.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.n2.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.n2.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + parameter Real 'feedback.Vps'(unit = "V", quantity = "ElectricPotential") = 15.0 "Positive supply"; + parameter Real 'feedback.Vns'(unit = "V", quantity = "ElectricPotential") = -15.0 "Negative supply"; + parameter Real 'feedback.V0' = 15000.0 "No-load amplification"; + parameter Real 'feedback.opAmp.V0' = 15000.0 "No-load amplification"; + parameter Boolean 'feedback.opAmp.useSupply' = false "Use supply pins (otherwise constant supply)" annotation(Evaluate = true); + parameter Real 'feedback.opAmp.Vps'(unit = "V", quantity = "ElectricPotential") = 15.0 "Positive supply voltage"; + parameter Real 'feedback.opAmp.Vns'(unit = "V", quantity = "ElectricPotential") = -15.0 "Negative supply voltage"; + parameter Boolean 'feedback.opAmp.strict' = true "= true, if strict limits with noEvent(..)" annotation(Evaluate = true); + parameter 'Modelica.Blocks.Types.LimiterHomotopy' 'feedback.opAmp.homotopyType' = 'Modelica.Blocks.Types.LimiterHomotopy'.'NoHomotopy' "Simplified model for homotopy-based initialization" annotation(Evaluate = true); + Real 'feedback.opAmp.vps'(unit = "V", quantity = "ElectricPotential") "Positive supply voltage"; + Real 'feedback.opAmp.vns'(unit = "V", quantity = "ElectricPotential") "Negative supply voltage"; + Real 'feedback.opAmp.v_in'(unit = "V", quantity = "ElectricPotential") "Input voltage difference"; + Real 'feedback.opAmp.v_out'(unit = "V", quantity = "ElectricPotential") "Output voltage to ground"; + Real 'feedback.opAmp.p_in'(unit = "W", quantity = "Power") "Input power"; + Real 'feedback.opAmp.p_out'(unit = "W", quantity = "Power") "Output power"; + Real 'feedback.opAmp.p_s'(unit = "W", quantity = "Power") "Supply power"; + Real 'feedback.opAmp.i_s'(unit = "A", quantity = "ElectricCurrent") "Supply current"; + Real 'feedback.opAmp.in_p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.opAmp.in_p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.opAmp.in_n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.opAmp.in_n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.opAmp.out.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.opAmp.out.i'(fixed = false, start = 0.0, unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.opAmp.simplifiedExpr'(unit = "V", quantity = "ElectricPotential") "Simplified expression for homotopy-based initialization"; + Real 'feedback.v1_2'(unit = "V", quantity = "ElectricPotential") "Voltage drop of port 1_2 (= p1_2.v - n1.v)"; + Real 'feedback.i1_2'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pos. to neg. pin of port 1_2"; + parameter Real 'feedback.k'(min = 0.0) = 1.0 "Desired amplification"; + parameter Real 'feedback.R1'(unit = "Ohm", quantity = "Resistance") = 1000.0 "Resistance at inputs of OpAmp"; + parameter Real 'feedback.R3'(unit = "Ohm", quantity = "Resistance") = 1000.0 "Calculated resistance to reach desired amplification k"; + parameter Real 'feedback.r1.R'(start = 1.0, unit = "Ohm", quantity = "Resistance") = 1000.0 "Resistance at temperature T_ref"; + parameter Real 'feedback.r1.T_ref'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Reference temperature"; + parameter Real 'feedback.r1.alpha'(unit = "1/K", quantity = "LinearTemperatureCoefficient") = 0.0 "Temperature coefficient of resistance (R_actual = R*(1 + alpha*(T_heatPort - T_ref))"; + Real 'feedback.r1.v'(unit = "V", quantity = "ElectricPotential") "Voltage drop of the two pins (= p.v - n.v)"; + Real 'feedback.r1.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r1.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r1.n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r1.n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r1.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pin p to pin n"; + parameter Boolean 'feedback.r1.useHeatPort' = false "= true, if heatPort is enabled" annotation(Evaluate = true); + parameter Real 'feedback.r1.T'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Fixed device temperature if useHeatPort = false"; + Real 'feedback.r1.LossPower'(unit = "W", quantity = "Power") "Loss power leaving component via heatPort"; + Real 'feedback.r1.T_heatPort'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") "Temperature of heatPort"; + Real 'feedback.r1.R_actual'(unit = "Ohm", quantity = "Resistance") "Actual resistance = R*(1 + alpha*(T_heatPort - T_ref))"; + parameter Real 'feedback.r2.R'(start = 1.0, unit = "Ohm", quantity = "Resistance") = 1000.0 "Resistance at temperature T_ref"; + parameter Real 'feedback.r2.T_ref'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Reference temperature"; + parameter Real 'feedback.r2.alpha'(unit = "1/K", quantity = "LinearTemperatureCoefficient") = 0.0 "Temperature coefficient of resistance (R_actual = R*(1 + alpha*(T_heatPort - T_ref))"; + Real 'feedback.r2.v'(unit = "V", quantity = "ElectricPotential") "Voltage drop of the two pins (= p.v - n.v)"; + Real 'feedback.r2.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r2.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r2.n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r2.n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r2.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pin p to pin n"; + parameter Boolean 'feedback.r2.useHeatPort' = false "= true, if heatPort is enabled" annotation(Evaluate = true); + parameter Real 'feedback.r2.T'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Fixed device temperature if useHeatPort = false"; + Real 'feedback.r2.LossPower'(unit = "W", quantity = "Power") "Loss power leaving component via heatPort"; + Real 'feedback.r2.T_heatPort'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") "Temperature of heatPort"; + Real 'feedback.r2.R_actual'(unit = "Ohm", quantity = "Resistance") "Actual resistance = R*(1 + alpha*(T_heatPort - T_ref))"; + Real 'feedback.p1_2.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.p1_2.i'(start = 0.0, unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + parameter Real 'feedback.r3.R'(start = 1.0, unit = "Ohm", quantity = "Resistance") = 1000.0 "Resistance at temperature T_ref"; + parameter Real 'feedback.r3.T_ref'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Reference temperature"; + parameter Real 'feedback.r3.alpha'(unit = "1/K", quantity = "LinearTemperatureCoefficient") = 0.0 "Temperature coefficient of resistance (R_actual = R*(1 + alpha*(T_heatPort - T_ref))"; + Real 'feedback.r3.v'(unit = "V", quantity = "ElectricPotential") "Voltage drop of the two pins (= p.v - n.v)"; + Real 'feedback.r3.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r3.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r3.n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r3.n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r3.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pin p to pin n"; + parameter Boolean 'feedback.r3.useHeatPort' = false "= true, if heatPort is enabled" annotation(Evaluate = true); + parameter Real 'feedback.r3.T'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Fixed device temperature if useHeatPort = false"; + Real 'feedback.r3.LossPower'(unit = "W", quantity = "Power") "Loss power leaving component via heatPort"; + Real 'feedback.r3.T_heatPort'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") "Temperature of heatPort"; + Real 'feedback.r3.R_actual'(unit = "Ohm", quantity = "Resistance") "Actual resistance = R*(1 + alpha*(T_heatPort - T_ref))"; + parameter Real 'feedback.r4.R'(start = 1.0, unit = "Ohm", quantity = "Resistance") = 1000.0 "Resistance at temperature T_ref"; + parameter Real 'feedback.r4.T_ref'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Reference temperature"; + parameter Real 'feedback.r4.alpha'(unit = "1/K", quantity = "LinearTemperatureCoefficient") = 0.0 "Temperature coefficient of resistance (R_actual = R*(1 + alpha*(T_heatPort - T_ref))"; + Real 'feedback.r4.v'(unit = "V", quantity = "ElectricPotential") "Voltage drop of the two pins (= p.v - n.v)"; + Real 'feedback.r4.p.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r4.p.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r4.n.v'(unit = "V", quantity = "ElectricPotential") "Potential at the pin"; + Real 'feedback.r4.n.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing into the pin"; + Real 'feedback.r4.i'(unit = "A", quantity = "ElectricCurrent") "Current flowing from pin p to pin n"; + parameter Boolean 'feedback.r4.useHeatPort' = false "= true, if heatPort is enabled" annotation(Evaluate = true); + parameter Real 'feedback.r4.T'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") = 300.15 "Fixed device temperature if useHeatPort = false"; + Real 'feedback.r4.LossPower'(unit = "W", quantity = "Power") "Loss power leaving component via heatPort"; + Real 'feedback.r4.T_heatPort'(nominal = 300.0, start = 288.15, min = 0.0, displayUnit = "degC", unit = "K", quantity = "ThermodynamicTemperature") "Temperature of heatPort"; + Real 'feedback.r4.R_actual'(unit = "Ohm", quantity = "Resistance") "Actual resistance = R*(1 + alpha*(T_heatPort - T_ref))"; + equation + 'feedback.opAmp.v_in' = 'feedback.opAmp.in_p.v' - 'feedback.opAmp.in_n.v'; + 'feedback.opAmp.v_out' = 'feedback.opAmp.out.v'; + 'feedback.opAmp.p_in' = 'feedback.opAmp.in_p.v' * 'feedback.opAmp.in_p.i' + 'feedback.opAmp.in_n.v' * 'feedback.opAmp.in_n.i'; + 'feedback.opAmp.p_out' = 'feedback.opAmp.out.v' * 'feedback.opAmp.out.i'; + 'feedback.opAmp.p_s' = -('feedback.opAmp.p_in' + 'feedback.opAmp.p_out'); + 'feedback.opAmp.i_s' = 'feedback.opAmp.p_s' / ('feedback.opAmp.vps' - 'feedback.opAmp.vns'); + 'feedback.v1_2' = 'feedback.p1_2.v' - 'feedback.n1.v'; + 'feedback.i1_2' = 'feedback.p1_2.i'; + 'feedback.n1.v' = 'feedback.r4.n.v'; + 'feedback.n1.v' = 'feedback.n2.v'; + 'feedback.r4.n.i' - 'feedback.n1.i' - 'feedback.n2.i' = 0.0; + 'feedback.p1.v' = 'feedback.r1.p.v'; + 'feedback.r1.p.i' - 'feedback.p1.i' = 0.0; + 'feedback.r1.n.v' = 'feedback.r3.n.v'; + 'feedback.r1.n.v' = 'feedback.opAmp.in_n.v'; + 'feedback.opAmp.out.v' = 'feedback.p2.v'; + 'feedback.opAmp.out.v' = 'feedback.r3.p.v'; + 'feedback.p1_2.v' = 'feedback.r2.p.v'; + 'feedback.r2.p.i' - 'feedback.p1_2.i' = 0.0; + 'feedback.opAmp.in_p.v' = 'feedback.r4.p.v'; + 'feedback.opAmp.in_p.v' = 'feedback.r2.n.v'; + 'ground.p.v' = 'vIn1.n.v'; + 'ground.p.v' = 'vIn2.n.v'; + 'ground.p.v' = 'feedback.n1.v'; + 'vIn1.p.v' = 'feedback.p1.v'; + 'vIn2.p.v' = 'feedback.p1_2.v'; + 'feedback.p2.v' = 'vOut.n.v'; + 'feedback.n2.v' = 'vOut.p.v'; + 'feedback.p1.i' + 'vIn1.p.i' = 0.0; + 'feedback.p1_2.i' + 'vIn2.p.i' = 0.0; + 'feedback.n1.i' + 'vIn2.n.i' + 'vIn1.n.i' + 'ground.p.i' = 0.0; + 'feedback.p2.i' + 'vOut.n.i' = 0.0; + 'feedback.n2.i' + 'vOut.p.i' = 0.0; + 'feedback.r3.n.i' + 'feedback.r1.n.i' + 'feedback.opAmp.in_n.i' = 0.0; + 'feedback.r4.p.i' + 'feedback.r2.n.i' + 'feedback.opAmp.in_p.i' = 0.0; + 'feedback.r3.p.i' + 'feedback.opAmp.out.i' - 'feedback.p2.i' = 0.0; + 'ground.p.v' = 0.0; + 'vIn1.signalSource.y' = if time < 0.0 then 0.0 else 5.0 * sin(62.83185307179586 * time); + 'vIn1.v' = 'vIn1.signalSource.y'; + 0.0 = 'vIn1.p.i' + 'vIn1.n.i'; + 'vIn1.i' = 'vIn1.p.i'; + 'vIn1.v' = 'vIn1.p.v' - 'vIn1.n.v'; + 'vIn2.v' = 5.0; + 0.0 = 'vIn2.p.i' + 'vIn2.n.i'; + 'vIn2.i' = 'vIn2.p.i'; + 'vIn2.v' = 'vIn2.p.v' - 'vIn2.n.v'; + 'vOut.p.i' = 0.0; + 'vOut.n.i' = 0.0; + 'vOut.v' = 'vOut.p.v' - 'vOut.n.v'; + 'feedback.opAmp.vps' = 15.0; + 'feedback.opAmp.vns' = -15.0; + 'feedback.opAmp.in_p.i' = 0.0; + 'feedback.opAmp.in_n.i' = 0.0; + 'feedback.opAmp.simplifiedExpr' = 0.0; + 'feedback.opAmp.v_out' = smooth(0, noEvent(if 15000.0 * 'feedback.opAmp.v_in' > 'feedback.opAmp.vps' then 'feedback.opAmp.vps' else if 15000.0 * 'feedback.opAmp.v_in' < 'feedback.opAmp.vns' then 'feedback.opAmp.vns' else 15000.0 * 'feedback.opAmp.v_in')); + 'feedback.r1.R_actual' = 1000.0; + 'feedback.r1.v' = 'feedback.r1.R_actual' * 'feedback.r1.i'; + 'feedback.r1.LossPower' = 'feedback.r1.v' * 'feedback.r1.i'; + 'feedback.r1.T_heatPort' = 300.15; + 0.0 = 'feedback.r1.p.i' + 'feedback.r1.n.i'; + 'feedback.r1.i' = 'feedback.r1.p.i'; + 'feedback.r1.v' = 'feedback.r1.p.v' - 'feedback.r1.n.v'; + 'feedback.r2.R_actual' = 1000.0; + 'feedback.r2.v' = 'feedback.r2.R_actual' * 'feedback.r2.i'; + 'feedback.r2.LossPower' = 'feedback.r2.v' * 'feedback.r2.i'; + 'feedback.r2.T_heatPort' = 300.15; + 0.0 = 'feedback.r2.p.i' + 'feedback.r2.n.i'; + 'feedback.r2.i' = 'feedback.r2.p.i'; + 'feedback.r2.v' = 'feedback.r2.p.v' - 'feedback.r2.n.v'; + 'feedback.r3.R_actual' = 1000.0; + 'feedback.r3.v' = 'feedback.r3.R_actual' * 'feedback.r3.i'; + 'feedback.r3.LossPower' = 'feedback.r3.v' * 'feedback.r3.i'; + 'feedback.r3.T_heatPort' = 300.15; + 0.0 = 'feedback.r3.p.i' + 'feedback.r3.n.i'; + 'feedback.r3.i' = 'feedback.r3.p.i'; + 'feedback.r3.v' = 'feedback.r3.p.v' - 'feedback.r3.n.v'; + 'feedback.r4.R_actual' = 1000.0; + 'feedback.r4.v' = 'feedback.r4.R_actual' * 'feedback.r4.i'; + 'feedback.r4.LossPower' = 'feedback.r4.v' * 'feedback.r4.i'; + 'feedback.r4.T_heatPort' = 300.15; + 0.0 = 'feedback.r4.p.i' + 'feedback.r4.n.i'; + 'feedback.r4.i' = 'feedback.r4.p.i'; + 'feedback.r4.v' = 'feedback.r4.p.v' - 'feedback.r4.n.v'; + 'feedback.v1' = 'feedback.p1.v' - 'feedback.n1.v'; + 'feedback.v2' = 'feedback.p2.v' - 'feedback.n2.v'; + 'feedback.i1' = 'feedback.p1.i'; + 'feedback.i2' = 'feedback.p2.i'; + annotation(experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-006, Interval = 0.001)); + end 'Subtracter'; +end 'Subtracter'; diff --git a/test/fixtures/Subtracter/Subtracter.csv b/test/fixtures/Subtracter/Subtracter.csv new file mode 100644 index 000000000..1452cbdc3 --- /dev/null +++ b/test/fixtures/Subtracter/Subtracter.csv @@ -0,0 +1,2003 @@ +"time","vOut.v" +0,-4.999333422213148 +0.00050000000000000001,-4.8423005645359396 +0.001,-4.6854226793269227 +0.0015,-4.5288545861232876 +0.002,-4.3727507987401104 +0.0025000000000000001,-4.2172653727456932 +0.0030000000000000001,-4.0625517535031186 +0.0035000000000000001,-3.9087626246647744 +0.0040000000000000001,-3.7560497575395146 +0.0045000000000000005,-3.6045638612858255 +0.0050000000000000001,-3.4544544341974515 +0.0054999999999999997,-3.3058696161547552 +0.0060000000000000001,-3.1589560424349905 +0.0065000000000000006,-3.0138586990013927 +0.0070000000000000001,-2.8707207794043121 +0.0074999999999999997,-2.7296835434942324 +0.0080000000000000002,-2.5908861779999626 +0.0085000000000000006,-2.4544656591585223 +0.0090000000000000011,-2.3205566175565906 +0.0094999999999999998,-2.189291205243471 +0.01,-2.0607989653420589 +0.010500000000000001,-1.9352067041777943 +0.010999999999999999,-1.8126383661387635 +0.0115,-1.6932149113935147 +0.012,-1.5770541964665874 +0.012500000000000001,-1.4642708579515329 +0.013000000000000001,-1.354976199401392 +0.0135,-1.2492780814366 +0.014,-1.1472808153500935 +0.014500000000000001,-1.0490850601163615 +0.014999999999999999,-0.95478772309753879 +0.0155,-0.86448186437992902 +0.016,-0.77825660494079685 +0.016500000000000001,-0.69619703870538174 +0.017000000000000001,-0.61838414856740798 +0.017500000000000002,-0.54489472643304282 +0.018000000000000002,-0.47580129749480449 +0.018499999999999999,-0.41117204864216106 +0.019,-0.35107076112206315 +0.0195,-0.29555674766257312 +0.02,-0.24468479388639608 +0.020500000000000001,-0.1985051042674435 +0.021000000000000001,-0.15706325259046139 +0.021500000000000002,-0.12040013695369112 +0.021999999999999999,-0.088551939434466931 +0.022499999999999999,-0.06155009034447545 +0.023,-0.039421237261194619 +0.0235,-0.022187218688962673 +0.024,-0.009865042522871903 +0.024500000000000001,-0.0024668692555351868 +0.025000000000000001,0 +0.025500000000000002,-0.0024668692555351868 +0.026000000000000002,-0.009865042522871903 +0.026499999999999999,-0.022187218688962673 +0.027,-0.039421237261194619 +0.0275,-0.06155009034447545 +0.028000000000000001,-0.088551939434466931 +0.028500000000000001,-0.12040013695369112 +0.029000000000000001,-0.15706325259046139 +0.029500000000000002,-0.1985051042674435 +0.029999999999999999,-0.24468479388639608 +0.030499999999999999,-0.29555674766257312 +0.031,-0.35107076112206315 +0.0315,-0.41117204864216106 +0.032000000000000001,-0.47580129749480449 +0.032500000000000001,-0.54489472643304282 +0.033000000000000002,-0.61838414856074664 +0.033500000000000002,-0.69619703870538174 +0.034000000000000002,-0.77825660494079685 +0.034500000000000003,-0.86448186437326768 +0.035000000000000003,-0.95478772309753879 +0.035500000000000004,-1.0490850601163615 +0.036000000000000004,-1.1472808153434322 +0.036499999999999998,-1.2492780814366 +0.036999999999999998,-1.354976199401392 +0.037499999999999999,-1.4642708579515329 +0.037999999999999999,-1.5770541964665874 +0.0385,-1.693214911400176 +0.039,-1.8126383661387635 +0.0395,-1.9352067041777943 +0.040000000000000001,-2.0607989653420589 +0.040500000000000001,-2.189291205243471 +0.041000000000000002,-2.3205566175565906 +0.041500000000000002,-2.4544656591585223 +0.042000000000000003,-2.5908861779999626 +0.042500000000000003,-2.7296835434942324 +0.043000000000000003,-2.8707207794043121 +0.043500000000000004,-3.0138586990013927 +0.043999999999999997,-3.1589560424349905 +0.044499999999999998,-3.3058696161547552 +0.044999999999999998,-3.4544544341974515 +0.045499999999999999,-3.6045638612858255 +0.045999999999999999,-3.7560497575395146 +0.0465,-3.9087626246647744 +0.047,-4.0625517535031186 +0.047500000000000001,-4.2172653727523546 +0.048000000000000001,-4.3727507987401104 +0.048500000000000001,-4.528854586129949 +0.049000000000000002,-4.6854226793269227 +0.049500000000000002,-4.8423005645359396 +0.050000000000000003,-4.999333422213148 +0.050500000000000003,-5.1563662798836951 +0.051000000000000004,-5.313244165092712 +0.051500000000000004,-5.4698122582896858 +0.052000000000000005,-5.6259160456795243 +0.052499999999999998,-5.7814014716739415 +0.052999999999999999,-5.9361150909165161 +0.053499999999999999,-6.089904219748199 +0.053999999999999999,-6.2426170868734587 +0.0545,-6.3941029831338092 +0.055,-6.5442124102155219 +0.055500000000000001,-6.6927972282582182 +0.056000000000000001,-6.8397108019779829 +0.056500000000000002,-6.9848081454249034 +0.057000000000000002,-7.1279460650153226 +0.057500000000000002,-7.2689833009254023 +0.058000000000000003,-7.4077806664263335 +0.058500000000000003,-7.544201185254451 +0.059000000000000004,-7.6781102268697055 +0.059500000000000004,-7.8093756391695024 +0.059999999999999998,-7.9378678790842372 +0.060499999999999998,-8.0634601402418404 +0.060999999999999999,-8.1860284782742099 +0.061499999999999999,-8.3054519330261201 +0.062,-8.4216126479597087 +0.0625,-8.5343959864681018 +0.063,-8.6436906450182427 +0.063500000000000001,-8.749388762989696 +0.064000000000000001,-8.8513860290762025 +0.064500000000000002,-8.9495817843099346 +0.065000000000000002,-9.0438791213287573 +0.065500000000000003,-9.1341849800397057 +0.066000000000000003,-9.2204102394788379 +0.066500000000000004,-9.302469805714253 +0.067000000000000004,-9.3802826958588881 +0.067500000000000004,-9.4537721179932532 +0.068000000000000005,-9.5228655469181689 +0.068500000000000005,-9.5874947957774737 +0.069000000000000006,-9.6475960832975716 +0.069500000000000006,-9.7031100967637229 +0.070000000000000007,-9.7539820505332386 +0.070500000000000007,-9.8001617401521912 +0.071000000000000008,-9.8416035918358347 +0.071500000000000008,-9.8782667074726049 +0.072000000000000008,-9.9101149049918291 +0.072499999999999995,-9.9371167540684979 +0.072999999999999995,-9.9592456071517788 +0.073499999999999996,-9.9764796257373334 +0.073999999999999996,-9.9888018018967628 +0.074499999999999997,-9.9961999751707609 +0.074999999999999997,-9.9986668444262961 +0.075499999999999998,-9.9961999751707609 +0.075999999999999998,-9.9888018018967628 +0.076499999999999999,-9.9764796257373334 +0.076999999999999999,-9.9592456071517788 +0.077499999999999999,-9.9371167540684979 +0.078,-9.9101149049918291 +0.0785,-9.8782667074726049 +0.079000000000000001,-9.8416035918358347 +0.079500000000000001,-9.8001617401521912 +0.080000000000000002,-9.7539820505332386 +0.080500000000000002,-9.7031100967637229 +0.081000000000000003,-9.6475960832975716 +0.081500000000000003,-9.5874947957774737 +0.082000000000000003,-9.5228655469181689 +0.082500000000000004,-9.4537721179932532 +0.083000000000000004,-9.3802826958588881 +0.083500000000000005,-9.302469805714253 +0.084000000000000005,-9.2204102394788379 +0.084500000000000006,-9.1341849800397057 +0.085000000000000006,-9.0438791213287573 +0.085500000000000007,-8.9495817843032732 +0.086000000000000007,-8.8513860290762025 +0.086500000000000007,-8.749388762989696 +0.087000000000000008,-8.643690645024904 +0.087500000000000008,-8.5343959864614405 +0.087999999999999995,-8.4216126479530473 +0.088499999999999995,-8.3054519330261201 +0.088999999999999996,-8.1860284782808712 +0.089499999999999996,-8.0634601402485018 +0.089999999999999997,-7.9378678790842372 +0.090499999999999997,-7.8093756391695024 +0.090999999999999998,-7.6781102268697055 +0.091499999999999998,-7.544201185254451 +0.091999999999999998,-7.4077806664196721 +0.092499999999999999,-7.268983300918741 +0.092999999999999999,-7.1279460650219839 +0.0935,-6.984808145418242 +0.094,-6.8397108019846442 +0.094500000000000001,-6.6927972282648795 +0.095000000000000001,-6.5442124102155219 +0.095500000000000002,-6.3941029831338092 +0.096000000000000002,-6.2426170868734587 +0.096500000000000002,-6.089904219748199 +0.097000000000000003,-5.9361150909165161 +0.097500000000000003,-5.7814014716672801 +0.098000000000000004,-5.6259160456795243 +0.098500000000000004,-5.4698122582896858 +0.099000000000000005,-5.313244165092712 +0.099500000000000005,-5.1563662798836951 +0.10000000000000001,-4.999333422213148 +0.10050000000000001,-4.8423005645359396 +0.10100000000000001,-4.6854226793269227 +0.10150000000000001,-4.528854586129949 +0.10200000000000001,-4.3727507987334491 +0.10250000000000001,-4.2172653727523546 +0.10300000000000001,-4.0625517535031186 +0.10350000000000001,-3.9087626246647744 +0.10400000000000001,-3.7560497575395146 +0.1045,-3.6045638612858255 +0.105,-3.4544544341974515 +0.1055,-3.3058696161547552 +0.106,-3.1589560424349905 +0.1065,-3.0138586990013927 +0.107,-2.8707207793976508 +0.1075,-2.7296835434942324 +0.108,-2.5908861779999626 +0.1085,-2.4544656591585223 +0.109,-2.3205566175565906 +0.1095,-2.189291205243471 +0.11,-2.0607989653420589 +0.1105,-1.9352067041777943 +0.111,-1.8126383661387635 +0.1115,-1.693214911400176 +0.112,-1.5770541964599261 +0.1125,-1.4642708579515329 +0.113,-1.354976199401392 +0.1135,-1.2492780814366 +0.114,-1.1472808153434322 +0.1145,-1.0490850601163615 +0.115,-0.95478772309753879 +0.11550000000000001,-0.86448186437992902 +0.11600000000000001,-0.77825660494079685 +0.11650000000000001,-0.69619703870538174 +0.11700000000000001,-0.61838414856740798 +0.11750000000000001,-0.54489472643304282 +0.11800000000000001,-0.47580129749480449 +0.11850000000000001,-0.41117204864216106 +0.11900000000000001,-0.35107076112206315 +0.11950000000000001,-0.29555674766257312 +0.12,-0.24468479388639608 +0.1205,-0.1985051042674435 +0.121,-0.15706325259046139 +0.1215,-0.12040013695369112 +0.122,-0.088551939434466931 +0.1225,-0.06155009034447545 +0.123,-0.039421237261194619 +0.1235,-0.022187218688962673 +0.124,-0.009865042522871903 +0.1245,-0.0024668692555351868 +0.125,0 +0.1255,-0.0024668692555351868 +0.126,-0.009865042522871903 +0.1265,-0.022187218688962673 +0.127,-0.039421237261194619 +0.1275,-0.06155009034447545 +0.128,-0.088551939434466931 +0.1285,-0.12040013695369112 +0.129,-0.15706325259046139 +0.1295,-0.1985051042674435 +0.13,-0.24468479388639608 +0.1305,-0.29555674766257312 +0.13100000000000001,-0.35107076112206315 +0.13150000000000001,-0.41117204864216106 +0.13200000000000001,-0.47580129749480449 +0.13250000000000001,-0.54489472643304282 +0.13300000000000001,-0.61838414856074664 +0.13350000000000001,-0.69619703870538174 +0.13400000000000001,-0.77825660494079685 +0.13450000000000001,-0.86448186437992902 +0.13500000000000001,-0.95478772309753879 +0.13550000000000001,-1.0490850601163615 +0.13600000000000001,-1.1472808153434322 +0.13650000000000001,-1.2492780814366 +0.13700000000000001,-1.354976199401392 +0.13750000000000001,-1.4642708579515329 +0.13800000000000001,-1.5770541964599261 +0.13850000000000001,-1.693214911400176 +0.13900000000000001,-1.8126383661387635 +0.13950000000000001,-1.9352067041777943 +0.14000000000000001,-2.0607989653420589 +0.14050000000000001,-2.189291205243471 +0.14100000000000001,-2.3205566175565906 +0.14150000000000001,-2.4544656591585223 +0.14200000000000002,-2.5908861779999626 +0.14250000000000002,-2.7296835434942324 +0.14300000000000002,-2.8707207794043121 +0.14350000000000002,-3.0138586990013927 +0.14400000000000002,-3.1589560424416518 +0.14449999999999999,-3.3058696161547552 +0.14499999999999999,-3.4544544341974515 +0.14549999999999999,-3.6045638612858255 +0.14599999999999999,-3.7560497575395146 +0.14649999999999999,-3.9087626246647744 +0.14699999999999999,-4.0625517535031186 +0.14749999999999999,-4.2172653727523546 +0.14799999999999999,-4.3727507987401104 +0.14849999999999999,-4.5288545861232876 +0.14899999999999999,-4.6854226793269227 +0.14949999999999999,-4.8423005645359396 +0.14999999999999999,-4.999333422213148 +0.15049999999999999,-5.1563662798836951 +0.151,-5.313244165092712 +0.1515,-5.4698122582896858 +0.152,-5.6259160456795243 +0.1525,-5.7814014716672801 +0.153,-5.9361150909165161 +0.1535,-6.089904219748199 +0.154,-6.2426170868734587 +0.1545,-6.3941029831338092 +0.155,-6.5442124102155219 +0.1555,-6.6927972282648795 +0.156,-6.8397108019846442 +0.1565,-6.984808145418242 +0.157,-7.1279460650153226 +0.1575,-7.268983300918741 +0.158,-7.4077806664263335 +0.1585,-7.544201185254451 +0.159,-7.6781102268697055 +0.1595,-7.8093756391761637 +0.16,-7.9378678790842372 +0.1605,-8.0634601402418404 +0.161,-8.1860284782742099 +0.1615,-8.3054519330261201 +0.16200000000000001,-8.4216126479530473 +0.16250000000000001,-8.5343959864614405 +0.16300000000000001,-8.643690645024904 +0.16350000000000001,-8.7493887629830347 +0.16400000000000001,-8.8513860290762025 +0.16450000000000001,-8.9495817843099346 +0.16500000000000001,-9.0438791213287573 +0.16550000000000001,-9.1341849800397057 +0.16600000000000001,-9.2204102394788379 +0.16650000000000001,-9.302469805714253 +0.16700000000000001,-9.3802826958588881 +0.16750000000000001,-9.4537721179932532 +0.16800000000000001,-9.5228655469181689 +0.16850000000000001,-9.5874947957774737 +0.16900000000000001,-9.6475960832975716 +0.16950000000000001,-9.7031100967637229 +0.17000000000000001,-9.7539820505332386 +0.17050000000000001,-9.8001617401521912 +0.17100000000000001,-9.8416035918358347 +0.17150000000000001,-9.8782667074726049 +0.17200000000000001,-9.9101149049918291 +0.17250000000000001,-9.9371167540684979 +0.17300000000000001,-9.9592456071517788 +0.17350000000000002,-9.9764796257373334 +0.17400000000000002,-9.9888018018967628 +0.17450000000000002,-9.9961999751707609 +0.17500000000000002,-9.9986668444262961 +0.17550000000000002,-9.9961999751707609 +0.17599999999999999,-9.9888018018967628 +0.17649999999999999,-9.9764796257373334 +0.17699999999999999,-9.9592456071517788 +0.17749999999999999,-9.9371167540684979 +0.17799999999999999,-9.9101149049918291 +0.17849999999999999,-9.8782667074726049 +0.17899999999999999,-9.8416035918358347 +0.17949999999999999,-9.8001617401521912 +0.17999999999999999,-9.7539820505332386 +0.18049999999999999,-9.7031100967637229 +0.18099999999999999,-9.6475960832975716 +0.18149999999999999,-9.5874947957774737 +0.182,-9.5228655469181689 +0.1825,-9.4537721179932532 +0.183,-9.3802826958588881 +0.1835,-9.302469805714253 +0.184,-9.2204102394788379 +0.1845,-9.1341849800397057 +0.185,-9.0438791213287573 +0.1855,-8.9495817843099346 +0.186,-8.8513860290762025 +0.1865,-8.7493887629830347 +0.187,-8.643690645024904 +0.1875,-8.5343959864614405 +0.188,-8.4216126479530473 +0.1885,-8.3054519330327814 +0.189,-8.1860284782808712 +0.1895,-8.0634601402485018 +0.19,-7.9378678790775759 +0.1905,-7.8093756391761637 +0.191,-7.6781102268630441 +0.1915,-7.5442011852611124 +0.192,-7.4077806664196721 +0.1925,-7.268983300918741 +0.193,-7.1279460650219839 +0.19350000000000001,-6.984808145418242 +0.19400000000000001,-6.8397108019779829 +0.19450000000000001,-6.6927972282648795 +0.19500000000000001,-6.5442124102221833 +0.19550000000000001,-6.3941029831271479 +0.19600000000000001,-6.2426170868801201 +0.19650000000000001,-6.089904219748199 +0.19700000000000001,-5.9361150909165161 +0.19750000000000001,-5.7814014716739415 +0.19800000000000001,-5.6259160456795243 +0.19850000000000001,-5.4698122582896858 +0.19900000000000001,-5.313244165092712 +0.19950000000000001,-5.1563662798836951 +0.20000000000000001,-4.999333422213148 +0.20050000000000001,-4.8423005645359396 +0.20100000000000001,-4.6854226793269227 +0.20150000000000001,-4.528854586129949 +0.20200000000000001,-4.3727507987401104 +0.20250000000000001,-4.2172653727523546 +0.20300000000000001,-4.0625517535031186 +0.20350000000000001,-3.9087626246647744 +0.20400000000000001,-3.7560497575395146 +0.20450000000000002,-3.6045638612858255 +0.20500000000000002,-3.4544544341974515 +0.20550000000000002,-3.3058696161547552 +0.20600000000000002,-3.1589560424349905 +0.20650000000000002,-3.0138586990013927 +0.20700000000000002,-2.8707207794043121 +0.20750000000000002,-2.7296835434942324 +0.20800000000000002,-2.5908861779999626 +0.20849999999999999,-2.4544656591585223 +0.20899999999999999,-2.3205566175565906 +0.20949999999999999,-2.189291205243471 +0.20999999999999999,-2.0607989653420589 +0.21049999999999999,-1.9352067041777943 +0.21099999999999999,-1.8126383661387635 +0.21149999999999999,-1.6932149113935147 +0.21199999999999999,-1.5770541964599261 +0.21249999999999999,-1.4642708579515329 +0.21299999999999999,-1.354976199401392 +0.2135,-1.2492780814366 +0.214,-1.1472808153434322 +0.2145,-1.0490850601163615 +0.215,-0.95478772309753879 +0.2155,-0.86448186437992902 +0.216,-0.77825660494079685 +0.2165,-0.69619703870538174 +0.217,-0.61838414856740798 +0.2175,-0.54489472643304282 +0.218,-0.47580129749480449 +0.2185,-0.41117204864216106 +0.219,-0.35107076112206315 +0.2195,-0.29555674766257312 +0.22,-0.24468479388639608 +0.2205,-0.1985051042674435 +0.221,-0.15706325259046139 +0.2215,-0.12040013695369112 +0.222,-0.088551939434466931 +0.2225,-0.06155009034447545 +0.223,-0.039421237261194619 +0.2235,-0.022187218688962673 +0.224,-0.009865042522871903 +0.22450000000000001,-0.0024668692555351868 +0.22500000000000001,0 +0.22550000000000001,-0.0024668692555351868 +0.22600000000000001,-0.009865042522871903 +0.22650000000000001,-0.022187218688962673 +0.22700000000000001,-0.039421237261194619 +0.22750000000000001,-0.06155009034447545 +0.22800000000000001,-0.088551939434466931 +0.22850000000000001,-0.12040013695369112 +0.22900000000000001,-0.15706325259046139 +0.22950000000000001,-0.1985051042674435 +0.23000000000000001,-0.24468479388639608 +0.23050000000000001,-0.29555674766257312 +0.23100000000000001,-0.35107076112206315 +0.23150000000000001,-0.41117204864216106 +0.23200000000000001,-0.47580129749480449 +0.23250000000000001,-0.54489472643304282 +0.23300000000000001,-0.61838414856074664 +0.23350000000000001,-0.69619703870538174 +0.23400000000000001,-0.77825660494079685 +0.23450000000000001,-0.86448186437992902 +0.23500000000000001,-0.95478772309753879 +0.23550000000000001,-1.0490850601163615 +0.23600000000000002,-1.1472808153434322 +0.23650000000000002,-1.2492780814366 +0.23700000000000002,-1.354976199401392 +0.23750000000000002,-1.4642708579515329 +0.23800000000000002,-1.5770541964599261 +0.23850000000000002,-1.693214911400176 +0.23900000000000002,-1.8126383661387635 +0.23950000000000002,-1.9352067041777943 +0.23999999999999999,-2.0607989653420589 +0.24049999999999999,-2.189291205243471 +0.24099999999999999,-2.3205566175565906 +0.24149999999999999,-2.4544656591585223 +0.24199999999999999,-2.5908861779999626 +0.24249999999999999,-2.7296835434942324 +0.24299999999999999,-2.8707207794043121 +0.24349999999999999,-3.0138586990013927 +0.24399999999999999,-3.1589560424349905 +0.2445,-3.3058696161547552 +0.245,-3.4544544341974515 +0.2455,-3.6045638612858255 +0.246,-3.7560497575395146 +0.2465,-3.9087626246647744 +0.247,-4.0625517535031186 +0.2475,-4.2172653727523546 +0.248,-4.3727507987401104 +0.2485,-4.528854586129949 +0.249,-4.6854226793269227 +0.2495,-4.8423005645359396 +0.25,-4.999333422213148 +0.2505,-5.1563662798836951 +0.251,-5.313244165092712 +0.2515,-5.4698122582896858 +0.252,-5.6259160456795243 +0.2525,-5.7814014716739415 +0.253,-5.9361150909165161 +0.2535,-6.0899042197548603 +0.254,-6.2426170868801201 +0.2545,-6.3941029831338092 +0.255,-6.5442124102155219 +0.2555,-6.6927972282648795 +0.25600000000000001,-6.8397108019846442 +0.25650000000000001,-6.984808145418242 +0.25700000000000001,-7.1279460650153226 +0.25750000000000001,-7.2689833009254023 +0.25800000000000001,-7.4077806664196721 +0.25850000000000001,-7.544201185254451 +0.25900000000000001,-7.6781102268630441 +0.25950000000000001,-7.8093756391761637 +0.26000000000000001,-7.9378678790775759 +0.26050000000000001,-8.0634601402485018 +0.26100000000000001,-8.1860284782742099 +0.26150000000000001,-8.3054519330327814 +0.26200000000000001,-8.4216126479530473 +0.26250000000000001,-8.5343959864614405 +0.26300000000000001,-8.6436906450182427 +0.26350000000000001,-8.749388762989696 +0.26400000000000001,-8.8513860290762025 +0.26450000000000001,-8.9495817843032732 +0.26500000000000001,-9.0438791213287573 +0.26550000000000001,-9.1341849800397057 +0.26600000000000001,-9.2204102394788379 +0.26650000000000001,-9.302469805714253 +0.26700000000000002,-9.3802826958588881 +0.26750000000000002,-9.4537721179932532 +0.26800000000000002,-9.5228655469181689 +0.26850000000000002,-9.5874947957774737 +0.26900000000000002,-9.6475960832975716 +0.26950000000000002,-9.7031100967637229 +0.27000000000000002,-9.7539820505332386 +0.27050000000000002,-9.8001617401521912 +0.27100000000000002,-9.8416035918358347 +0.27150000000000002,-9.8782667074726049 +0.27200000000000002,-9.9101149049918291 +0.27250000000000002,-9.9371167540684979 +0.27300000000000002,-9.9592456071517788 +0.27350000000000002,-9.9764796257373334 +0.27400000000000002,-9.9888018018967628 +0.27450000000000002,-9.9961999751707609 +0.27500000000000002,-9.9986668444262961 +0.27550000000000002,-9.9961999751707609 +0.27600000000000002,-9.9888018018967628 +0.27650000000000002,-9.9764796257373334 +0.27700000000000002,-9.9592456071517788 +0.27750000000000002,-9.9371167540684979 +0.27800000000000002,-9.9101149049918291 +0.27850000000000003,-9.8782667074726049 +0.27900000000000003,-9.8416035918358347 +0.27950000000000003,-9.8001617401521912 +0.28000000000000003,-9.7539820505332386 +0.28050000000000003,-9.7031100967637229 +0.28100000000000003,-9.6475960832975716 +0.28150000000000003,-9.5874947957774737 +0.28200000000000003,-9.5228655469181689 +0.28250000000000003,-9.4537721179932532 +0.28300000000000003,-9.3802826958588881 +0.28350000000000003,-9.302469805714253 +0.28400000000000003,-9.2204102394788379 +0.28450000000000003,-9.1341849800397057 +0.28500000000000003,-9.0438791213287573 +0.28550000000000003,-8.9495817843099346 +0.28600000000000003,-8.8513860290762025 +0.28650000000000003,-8.749388762989696 +0.28700000000000003,-8.643690645024904 +0.28750000000000003,-8.5343959864614405 +0.28800000000000003,-8.4216126479530473 +0.28849999999999998,-8.3054519330261201 +0.28899999999999998,-8.1860284782742099 +0.28949999999999998,-8.0634601402485018 +0.28999999999999998,-7.9378678790842372 +0.29049999999999998,-7.8093756391695024 +0.29099999999999998,-7.6781102268630441 +0.29149999999999998,-7.544201185254451 +0.29199999999999998,-7.4077806664196721 +0.29249999999999998,-7.268983300918741 +0.29299999999999998,-7.1279460650153226 +0.29349999999999998,-6.9848081454249034 +0.29399999999999998,-6.8397108019846442 +0.29449999999999998,-6.6927972282582182 +0.29499999999999998,-6.5442124102155219 +0.29549999999999998,-6.3941029831338092 +0.29599999999999999,-6.2426170868801201 +0.29649999999999999,-6.0899042197548603 +0.29699999999999999,-5.9361150909165161 +0.29749999999999999,-5.7814014716739415 +0.29799999999999999,-5.6259160456795243 +0.29849999999999999,-5.4698122582896858 +0.29899999999999999,-5.313244165092712 +0.29949999999999999,-5.1563662798836951 +0.29999999999999999,-4.999333422213148 +0.30049999999999999,-4.8423005645359396 +0.30099999999999999,-4.6854226793269227 +0.30149999999999999,-4.528854586129949 +0.30199999999999999,-4.3727507987401104 +0.30249999999999999,-4.2172653727456932 +0.30299999999999999,-4.0625517535031186 +0.30349999999999999,-3.9087626246647744 +0.30399999999999999,-3.7560497575395146 +0.30449999999999999,-3.6045638612858255 +0.30499999999999999,-3.4544544341974515 +0.30549999999999999,-3.3058696161547552 +0.30599999999999999,-3.1589560424349905 +0.30649999999999999,-3.0138586990013927 +0.307,-2.8707207794043121 +0.3075,-2.7296835434942324 +0.308,-2.5908861779999626 +0.3085,-2.4544656591585223 +0.309,-2.3205566175565906 +0.3095,-2.189291205243471 +0.31,-2.0607989653420589 +0.3105,-1.9352067041777943 +0.311,-1.8126383661387635 +0.3115,-1.6932149113935147 +0.312,-1.5770541964665874 +0.3125,-1.4642708579515329 +0.313,-1.354976199401392 +0.3135,-1.2492780814366 +0.314,-1.1472808153434322 +0.3145,-1.0490850601163615 +0.315,-0.95478772309753879 +0.3155,-0.86448186437326768 +0.316,-0.77825660494079685 +0.3165,-0.69619703870538174 +0.317,-0.61838414856074664 +0.3175,-0.54489472643304282 +0.318,-0.47580129749480449 +0.31850000000000001,-0.41117204864216106 +0.31900000000000001,-0.35107076112206315 +0.31950000000000001,-0.29555674766257312 +0.32000000000000001,-0.24468479388639608 +0.32050000000000001,-0.1985051042674435 +0.32100000000000001,-0.15706325259046139 +0.32150000000000001,-0.12040013695369112 +0.32200000000000001,-0.088551939434466931 +0.32250000000000001,-0.06155009034447545 +0.32300000000000001,-0.039421237261194619 +0.32350000000000001,-0.022187218688962673 +0.32400000000000001,-0.009865042522871903 +0.32450000000000001,-0.0024668692555351868 +0.32500000000000001,0 +0.32550000000000001,-0.0024668692555351868 +0.32600000000000001,-0.009865042522871903 +0.32650000000000001,-0.022187218688962673 +0.32700000000000001,-0.039421237261194619 +0.32750000000000001,-0.06155009034447545 +0.32800000000000001,-0.088551939434466931 +0.32850000000000001,-0.12040013695369112 +0.32900000000000001,-0.15706325259046139 +0.32950000000000002,-0.1985051042674435 +0.33000000000000002,-0.24468479388639608 +0.33050000000000002,-0.29555674766257312 +0.33100000000000002,-0.35107076112206315 +0.33150000000000002,-0.41117204864216106 +0.33200000000000002,-0.47580129749480449 +0.33250000000000002,-0.54489472643304282 +0.33300000000000002,-0.61838414856074664 +0.33350000000000002,-0.69619703871204308 +0.33400000000000002,-0.77825660494745819 +0.33450000000000002,-0.86448186437992902 +0.33500000000000002,-0.95478772309753879 +0.33550000000000002,-1.0490850601163615 +0.33600000000000002,-1.1472808153434322 +0.33650000000000002,-1.2492780814366 +0.33700000000000002,-1.354976199401392 +0.33750000000000002,-1.4642708579515329 +0.33800000000000002,-1.5770541964665874 +0.33850000000000002,-1.6932149113935147 +0.33900000000000002,-1.8126383661387635 +0.33950000000000002,-1.9352067041777943 +0.34000000000000002,-2.0607989653420589 +0.34050000000000002,-2.189291205243471 +0.34100000000000003,-2.3205566175565906 +0.34150000000000003,-2.4544656591585223 +0.34200000000000003,-2.5908861779999626 +0.34250000000000003,-2.7296835434942324 +0.34300000000000003,-2.8707207794043121 +0.34350000000000003,-3.0138586990013927 +0.34400000000000003,-3.1589560424349905 +0.34450000000000003,-3.3058696161614165 +0.34500000000000003,-3.4544544341974515 +0.34550000000000003,-3.6045638612858255 +0.34600000000000003,-3.7560497575395146 +0.34650000000000003,-3.9087626246647744 +0.34700000000000003,-4.0625517535031186 +0.34750000000000003,-4.2172653727523546 +0.34800000000000003,-4.3727507987401104 +0.34850000000000003,-4.528854586129949 +0.34900000000000003,-4.685422679333584 +0.34950000000000003,-4.8423005645359396 +0.35000000000000003,-4.999333422213148 +0.35050000000000003,-5.1563662798836951 +0.35100000000000003,-5.313244165092712 +0.35150000000000003,-5.4698122582896858 +0.35199999999999998,-5.6259160456795243 +0.35249999999999998,-5.7814014716739415 +0.35299999999999998,-5.9361150909165161 +0.35349999999999998,-6.0899042197615216 +0.35399999999999998,-6.2426170868801201 +0.35449999999999998,-6.3941029831338092 +0.35499999999999998,-6.5442124102221833 +0.35549999999999998,-6.6927972282648795 +0.35599999999999998,-6.8397108019846442 +0.35649999999999998,-6.9848081454249034 +0.35699999999999998,-7.1279460650219839 +0.35749999999999998,-7.268983300918741 +0.35799999999999998,-7.4077806664196721 +0.35849999999999999,-7.544201185254451 +0.35899999999999999,-7.6781102268697055 +0.35949999999999999,-7.8093756391695024 +0.35999999999999999,-7.9378678790842372 +0.36049999999999999,-8.0634601402418404 +0.36099999999999999,-8.1860284782742099 +0.36149999999999999,-8.3054519330327814 +0.36199999999999999,-8.4216126479597087 +0.36249999999999999,-8.5343959864614405 +0.36299999999999999,-8.643690645024904 +0.36349999999999999,-8.7493887629830347 +0.36399999999999999,-8.8513860290762025 +0.36449999999999999,-8.9495817843099346 +0.36499999999999999,-9.0438791213287573 +0.36549999999999999,-9.1341849800397057 +0.36599999999999999,-9.2204102394788379 +0.36649999999999999,-9.302469805714253 +0.36699999999999999,-9.3802826958588881 +0.36749999999999999,-9.4537721179932532 +0.36799999999999999,-9.5228655469181689 +0.36849999999999999,-9.5874947957774737 +0.36899999999999999,-9.6475960832975716 +0.3695,-9.7031100967637229 +0.37,-9.7539820505332386 +0.3705,-9.8001617401521912 +0.371,-9.8416035918358347 +0.3715,-9.8782667074726049 +0.372,-9.9101149049918291 +0.3725,-9.9371167540684979 +0.373,-9.9592456071517788 +0.3735,-9.9764796257373334 +0.374,-9.9888018018967628 +0.3745,-9.9961999751707609 +0.375,-9.9986668444262961 +0.3755,-9.9961999751707609 +0.376,-9.9888018018967628 +0.3765,-9.9764796257373334 +0.377,-9.9592456071517788 +0.3775,-9.9371167540684979 +0.378,-9.9101149049918291 +0.3785,-9.8782667074726049 +0.379,-9.8416035918358347 +0.3795,-9.8001617401521912 +0.38,-9.7539820505332386 +0.3805,-9.7031100967637229 +0.38100000000000001,-9.6475960832975716 +0.38150000000000001,-9.5874947957774737 +0.38200000000000001,-9.5228655469181689 +0.38250000000000001,-9.4537721179932532 +0.38300000000000001,-9.3802826958588881 +0.38350000000000001,-9.302469805714253 +0.38400000000000001,-9.2204102394788379 +0.38450000000000001,-9.1341849800397057 +0.38500000000000001,-9.0438791213287573 +0.38550000000000001,-8.9495817843099346 +0.38600000000000001,-8.8513860290695412 +0.38650000000000001,-8.7493887629830347 +0.38700000000000001,-8.643690645024904 +0.38750000000000001,-8.5343959864614405 +0.38800000000000001,-8.4216126479530473 +0.38850000000000001,-8.3054519330261201 +0.38900000000000001,-8.1860284782742099 +0.38950000000000001,-8.0634601402418404 +0.39000000000000001,-7.9378678790842372 +0.39050000000000001,-7.8093756391695024 +0.39100000000000001,-7.6781102268697055 +0.39150000000000001,-7.544201185254451 +0.39200000000000002,-7.4077806664263335 +0.39250000000000002,-7.2689833009254023 +0.39300000000000002,-7.1279460650153226 +0.39350000000000002,-6.984808145418242 +0.39400000000000002,-6.8397108019779829 +0.39450000000000002,-6.6927972282648795 +0.39500000000000002,-6.5442124102221833 +0.39550000000000002,-6.3941029831271479 +0.39600000000000002,-6.2426170868801201 +0.39650000000000002,-6.089904219748199 +0.39700000000000002,-5.9361150909165161 +0.39750000000000002,-5.7814014716739415 +0.39800000000000002,-5.6259160456795243 +0.39850000000000002,-5.4698122582896858 +0.39900000000000002,-5.313244165092712 +0.39950000000000002,-5.1563662798836951 +0.40000000000000002,-4.999333422213148 +0.40050000000000002,-4.8423005645359396 +0.40100000000000002,-4.6854226793269227 +0.40150000000000002,-4.528854586129949 +0.40200000000000002,-4.3727507987401104 +0.40250000000000002,-4.2172653727523546 +0.40300000000000002,-4.0625517535031186 +0.40350000000000003,-3.9087626246647744 +0.40400000000000003,-3.7560497575395146 +0.40450000000000003,-3.6045638612858255 +0.40500000000000003,-3.4544544341974515 +0.40550000000000003,-3.3058696161547552 +0.40600000000000003,-3.1589560424349905 +0.40650000000000003,-3.0138586990013927 +0.40700000000000003,-2.8707207794043121 +0.40750000000000003,-2.7296835434942324 +0.40800000000000003,-2.5908861779999626 +0.40850000000000003,-2.4544656591585223 +0.40900000000000003,-2.3205566175565906 +0.40950000000000003,-2.189291205243471 +0.41000000000000003,-2.0607989653420589 +0.41050000000000003,-1.9352067041777943 +0.41100000000000003,-1.8126383661387635 +0.41150000000000003,-1.6932149113935147 +0.41200000000000003,-1.5770541964665874 +0.41250000000000003,-1.4642708579515329 +0.41300000000000003,-1.354976199401392 +0.41350000000000003,-1.2492780814366 +0.41400000000000003,-1.1472808153434322 +0.41450000000000004,-1.0490850601163615 +0.41500000000000004,-0.95478772309753879 +0.41550000000000004,-0.86448186437992902 +0.41600000000000004,-0.77825660494079685 +0.41649999999999998,-0.69619703871204308 +0.41699999999999998,-0.61838414856740798 +0.41749999999999998,-0.54489472642638148 +0.41799999999999998,-0.47580129749480449 +0.41849999999999998,-0.41117204864216106 +0.41899999999999998,-0.35107076112206315 +0.41949999999999998,-0.29555674766257312 +0.41999999999999998,-0.24468479388639608 +0.42049999999999998,-0.1985051042674435 +0.42099999999999999,-0.15706325259046139 +0.42149999999999999,-0.12040013695369112 +0.42199999999999999,-0.088551939434466931 +0.42249999999999999,-0.06155009034447545 +0.42299999999999999,-0.039421237261194619 +0.42349999999999999,-0.022187218688962673 +0.42399999999999999,-0.009865042522871903 +0.42449999999999999,-0.0024668692555351868 +0.42499999999999999,0 +0.42549999999999999,-0.0024668692555351868 +0.42599999999999999,-0.009865042522871903 +0.42649999999999999,-0.022187218688962673 +0.42699999999999999,-0.039421237261194619 +0.42749999999999999,-0.06155009034447545 +0.42799999999999999,-0.088551939434466931 +0.42849999999999999,-0.12040013695369112 +0.42899999999999999,-0.15706325259046139 +0.42949999999999999,-0.1985051042674435 +0.42999999999999999,-0.24468479388639608 +0.43049999999999999,-0.29555674766257312 +0.43099999999999999,-0.35107076112206315 +0.43149999999999999,-0.41117204864216106 +0.432,-0.47580129749480449 +0.4325,-0.54489472643304282 +0.433,-0.61838414856074664 +0.4335,-0.69619703870538174 +0.434,-0.77825660494745819 +0.4345,-0.86448186437326768 +0.435,-0.95478772309753879 +0.4355,-1.0490850601163615 +0.436,-1.1472808153434322 +0.4365,-1.2492780814366 +0.437,-1.354976199401392 +0.4375,-1.4642708579515329 +0.438,-1.5770541964665874 +0.4385,-1.6932149113935147 +0.439,-1.8126383661387635 +0.4395,-1.9352067041777943 +0.44,-2.0607989653420589 +0.4405,-2.189291205243471 +0.441,-2.3205566175565906 +0.4415,-2.4544656591585223 +0.442,-2.5908861779999626 +0.4425,-2.7296835434942324 +0.443,-2.8707207794043121 +0.44350000000000001,-3.0138586990013927 +0.44400000000000001,-3.1589560424349905 +0.44450000000000001,-3.3058696161614165 +0.44500000000000001,-3.4544544341974515 +0.44550000000000001,-3.6045638612858255 +0.44600000000000001,-3.7560497575395146 +0.44650000000000001,-3.9087626246647744 +0.44700000000000001,-4.0625517535031186 +0.44750000000000001,-4.2172653727523546 +0.44800000000000001,-4.3727507987334491 +0.44850000000000001,-4.528854586129949 +0.44900000000000001,-4.6854226793269227 +0.44950000000000001,-4.8423005645359396 +0.45000000000000001,-4.999333422213148 +0.45050000000000001,-5.1563662798836951 +0.45100000000000001,-5.313244165092712 +0.45150000000000001,-5.4698122582896858 +0.45200000000000001,-5.6259160456795243 +0.45250000000000001,-5.7814014716739415 +0.45300000000000001,-5.9361150909165161 +0.45350000000000001,-6.089904219748199 +0.45400000000000001,-6.2426170868801201 +0.45450000000000002,-6.3941029831338092 +0.45500000000000002,-6.5442124102221833 +0.45550000000000002,-6.6927972282648795 +0.45600000000000002,-6.8397108019779829 +0.45650000000000002,-6.984808145418242 +0.45700000000000002,-7.1279460650219839 +0.45750000000000002,-7.268983300918741 +0.45800000000000002,-7.4077806664196721 +0.45850000000000002,-7.544201185254451 +0.45900000000000002,-7.6781102268697055 +0.45950000000000002,-7.8093756391695024 +0.46000000000000002,-7.9378678790842372 +0.46050000000000002,-8.0634601402485018 +0.46100000000000002,-8.1860284782808712 +0.46150000000000002,-8.3054519330261201 +0.46200000000000002,-8.4216126479597087 +0.46250000000000002,-8.5343959864614405 +0.46300000000000002,-8.643690645024904 +0.46350000000000002,-8.749388762989696 +0.46400000000000002,-8.8513860290762025 +0.46450000000000002,-8.9495817843032732 +0.46500000000000002,-9.0438791213287573 +0.46550000000000002,-9.1341849800397057 +0.46600000000000003,-9.2204102394788379 +0.46650000000000003,-9.302469805714253 +0.46700000000000003,-9.3802826958588881 +0.46750000000000003,-9.4537721179932532 +0.46800000000000003,-9.5228655469181689 +0.46850000000000003,-9.5874947957774737 +0.46900000000000003,-9.6475960832975716 +0.46950000000000003,-9.7031100967637229 +0.47000000000000003,-9.7539820505332386 +0.47050000000000003,-9.8001617401521912 +0.47100000000000003,-9.8416035918358347 +0.47150000000000003,-9.8782667074726049 +0.47200000000000003,-9.9101149049918291 +0.47250000000000003,-9.9371167540684979 +0.47300000000000003,-9.9592456071517788 +0.47350000000000003,-9.9764796257373334 +0.47400000000000003,-9.9888018018967628 +0.47450000000000003,-9.9961999751707609 +0.47500000000000003,-9.9986668444262961 +0.47550000000000003,-9.9961999751707609 +0.47600000000000003,-9.9888018018967628 +0.47650000000000003,-9.9764796257373334 +0.47700000000000004,-9.9592456071517788 +0.47750000000000004,-9.9371167540684979 +0.47800000000000004,-9.9101149049918291 +0.47850000000000004,-9.8782667074726049 +0.47900000000000004,-9.8416035918358347 +0.47950000000000004,-9.8001617401521912 +0.47999999999999998,-9.7539820505332386 +0.48049999999999998,-9.7031100967637229 +0.48099999999999998,-9.6475960832975716 +0.48149999999999998,-9.5874947957774737 +0.48199999999999998,-9.5228655469181689 +0.48249999999999998,-9.4537721179932532 +0.48299999999999998,-9.3802826958588881 +0.48349999999999999,-9.302469805714253 +0.48399999999999999,-9.2204102394788379 +0.48449999999999999,-9.1341849800397057 +0.48499999999999999,-9.0438791213287573 +0.48549999999999999,-8.9495817843032732 +0.48599999999999999,-8.8513860290762025 +0.48649999999999999,-8.749388762989696 +0.48699999999999999,-8.6436906450182427 +0.48749999999999999,-8.5343959864614405 +0.48799999999999999,-8.4216126479597087 +0.48849999999999999,-8.3054519330261201 +0.48899999999999999,-8.1860284782742099 +0.48949999999999999,-8.0634601402418404 +0.48999999999999999,-7.9378678790775759 +0.49049999999999999,-7.8093756391695024 +0.49099999999999999,-7.6781102268630441 +0.49149999999999999,-7.5442011852611124 +0.49199999999999999,-7.4077806664196721 +0.49249999999999999,-7.268983300918741 +0.49299999999999999,-7.1279460650219839 +0.49349999999999999,-6.984808145418242 +0.49399999999999999,-6.8397108019779829 +0.4945,-6.6927972282582182 +0.495,-6.5442124102155219 +0.4955,-6.3941029831338092 +0.496,-6.2426170868734587 +0.4965,-6.0899042197548603 +0.497,-5.9361150909165161 +0.4975,-5.7814014716739415 +0.498,-5.6259160456795243 +0.4985,-5.4698122582896858 +0.499,-5.313244165092712 +0.4995,-5.1563662798836951 +0.5,-4.999333422213148 +0.50050000000000006,-4.8423005645359396 +0.501,-4.6854226793269227 +0.50150000000000006,-4.528854586129949 +0.502,-4.3727507987334491 +0.50250000000000006,-4.2172653727523546 +0.503,-4.0625517535031186 +0.50350000000000006,-3.9087626246647744 +0.504,-3.7560497575395146 +0.50450000000000006,-3.6045638612858255 +0.505,-3.4544544341974515 +0.50550000000000006,-3.3058696161547552 +0.50600000000000001,-3.1589560424349905 +0.50650000000000006,-3.0138586990013927 +0.50700000000000001,-2.8707207794043121 +0.50750000000000006,-2.7296835434942324 +0.50800000000000001,-2.5908861779999626 +0.50850000000000006,-2.4544656591585223 +0.50900000000000001,-2.3205566175565906 +0.50950000000000006,-2.189291205243471 +0.51000000000000001,-2.0607989653420589 +0.51050000000000006,-1.9352067041777943 +0.51100000000000001,-1.8126383661387635 +0.51150000000000007,-1.693214911400176 +0.51200000000000001,-1.5770541964665874 +0.51249999999999996,-1.4642708579515329 +0.51300000000000001,-1.354976199401392 +0.51349999999999996,-1.2492780814366 +0.51400000000000001,-1.1472808153434322 +0.51449999999999996,-1.0490850601163615 +0.51500000000000001,-0.95478772309753879 +0.51549999999999996,-0.86448186437992902 +0.51600000000000001,-0.77825660494079685 +0.51649999999999996,-0.69619703870538174 +0.51700000000000002,-0.61838414856074664 +0.51749999999999996,-0.54489472642638148 +0.51800000000000002,-0.47580129749480449 +0.51849999999999996,-0.41117204864216106 +0.51900000000000002,-0.35107076112206315 +0.51949999999999996,-0.29555674766257312 +0.52000000000000002,-0.24468479388639608 +0.52049999999999996,-0.1985051042674435 +0.52100000000000002,-0.15706325259046139 +0.52149999999999996,-0.12040013695369112 +0.52200000000000002,-0.088551939434466931 +0.52249999999999996,-0.06155009034447545 +0.52300000000000002,-0.039421237261194619 +0.52349999999999997,-0.022187218688962673 +0.52400000000000002,-0.009865042522871903 +0.52449999999999997,-0.0024668692555351868 +0.52500000000000002,0 +0.52549999999999997,-0.0024668692555351868 +0.52600000000000002,-0.009865042522871903 +0.52649999999999997,-0.022187218688962673 +0.52700000000000002,-0.039421237261194619 +0.52749999999999997,-0.06155009034447545 +0.52800000000000002,-0.088551939434466931 +0.52849999999999997,-0.12040013695369112 +0.52900000000000003,-0.15706325259046139 +0.52949999999999997,-0.1985051042674435 +0.53000000000000003,-0.24468479388639608 +0.53049999999999997,-0.29555674766257312 +0.53100000000000003,-0.35107076112206315 +0.53149999999999997,-0.41117204864216106 +0.53200000000000003,-0.47580129749480449 +0.53249999999999997,-0.54489472642638148 +0.53300000000000003,-0.61838414856740798 +0.53349999999999997,-0.69619703870538174 +0.53400000000000003,-0.77825660494745819 +0.53449999999999998,-0.86448186437326768 +0.53500000000000003,-0.95478772309753879 +0.53549999999999998,-1.0490850601163615 +0.53600000000000003,-1.1472808153434322 +0.53649999999999998,-1.2492780814366 +0.53700000000000003,-1.354976199401392 +0.53749999999999998,-1.4642708579515329 +0.53800000000000003,-1.5770541964665874 +0.53849999999999998,-1.6932149113935147 +0.53900000000000003,-1.8126383661387635 +0.53949999999999998,-1.9352067041777943 +0.54000000000000004,-2.0607989653420589 +0.54049999999999998,-2.189291205243471 +0.54100000000000004,-2.3205566175565906 +0.54149999999999998,-2.4544656591585223 +0.54200000000000004,-2.5908861779999626 +0.54249999999999998,-2.7296835434942324 +0.54300000000000004,-2.8707207794043121 +0.54349999999999998,-3.0138586990013927 +0.54400000000000004,-3.1589560424349905 +0.54449999999999998,-3.3058696161547552 +0.54500000000000004,-3.4544544341974515 +0.54549999999999998,-3.6045638612858255 +0.54600000000000004,-3.7560497575395146 +0.54649999999999999,-3.9087626246647744 +0.54700000000000004,-4.0625517535031186 +0.54749999999999999,-4.2172653727523546 +0.54800000000000004,-4.3727507987401104 +0.54849999999999999,-4.528854586129949 +0.54900000000000004,-4.6854226793269227 +0.54949999999999999,-4.8423005645359396 +0.55000000000000004,-4.999333422213148 +0.55049999999999999,-5.1563662798836951 +0.55100000000000005,-5.313244165092712 +0.55149999999999999,-5.4698122582896858 +0.55200000000000005,-5.6259160456795243 +0.55249999999999999,-5.7814014716739415 +0.55300000000000005,-5.9361150909165161 +0.55349999999999999,-6.0899042197548603 +0.55400000000000005,-6.2426170868734587 +0.55449999999999999,-6.3941029831271479 +0.55500000000000005,-6.5442124102155219 +0.55549999999999999,-6.6927972282582182 +0.55600000000000005,-6.8397108019846442 +0.55649999999999999,-6.984808145418242 +0.55700000000000005,-7.1279460650219839 +0.5575,-7.268983300918741 +0.55800000000000005,-7.4077806664263335 +0.5585,-7.544201185254451 +0.55900000000000005,-7.6781102268630441 +0.5595,-7.8093756391761637 +0.56000000000000005,-7.9378678790775759 +0.5605,-8.0634601402485018 +0.56100000000000005,-8.1860284782742099 +0.5615,-8.3054519330327814 +0.56200000000000006,-8.4216126479597087 +0.5625,-8.5343959864681018 +0.56300000000000006,-8.643690645024904 +0.5635,-8.7493887629830347 +0.56400000000000006,-8.8513860290762025 +0.5645,-8.9495817843099346 +0.56500000000000006,-9.0438791213287573 +0.5655,-9.1341849800397057 +0.56600000000000006,-9.2204102394788379 +0.5665,-9.302469805714253 +0.56700000000000006,-9.3802826958588881 +0.5675,-9.4537721179932532 +0.56800000000000006,-9.5228655469181689 +0.56850000000000001,-9.5874947957774737 +0.56900000000000006,-9.6475960832975716 +0.56950000000000001,-9.7031100967637229 +0.57000000000000006,-9.7539820505332386 +0.57050000000000001,-9.8001617401521912 +0.57100000000000006,-9.8416035918358347 +0.57150000000000001,-9.8782667074726049 +0.57200000000000006,-9.9101149049918291 +0.57250000000000001,-9.9371167540684979 +0.57300000000000006,-9.9592456071517788 +0.57350000000000001,-9.9764796257373334 +0.57400000000000007,-9.9888018018967628 +0.57450000000000001,-9.9961999751707609 +0.57500000000000007,-9.9986668444262961 +0.57550000000000001,-9.9961999751707609 +0.57600000000000007,-9.9888018018967628 +0.57650000000000001,-9.9764796257373334 +0.57699999999999996,-9.9592456071517788 +0.57750000000000001,-9.9371167540684979 +0.57799999999999996,-9.9101149049918291 +0.57850000000000001,-9.8782667074726049 +0.57899999999999996,-9.8416035918358347 +0.57950000000000002,-9.8001617401521912 +0.57999999999999996,-9.7539820505332386 +0.58050000000000002,-9.7031100967637229 +0.58099999999999996,-9.6475960832975716 +0.58150000000000002,-9.5874947957774737 +0.58199999999999996,-9.5228655469181689 +0.58250000000000002,-9.4537721179932532 +0.58299999999999996,-9.3802826958588881 +0.58350000000000002,-9.302469805714253 +0.58399999999999996,-9.2204102394788379 +0.58450000000000002,-9.1341849800397057 +0.58499999999999996,-9.0438791213287573 +0.58550000000000002,-8.9495817843032732 +0.58599999999999997,-8.8513860290762025 +0.58650000000000002,-8.7493887629830347 +0.58699999999999997,-8.643690645024904 +0.58750000000000002,-8.5343959864614405 +0.58799999999999997,-8.4216126479530473 +0.58850000000000002,-8.3054519330327814 +0.58899999999999997,-8.1860284782742099 +0.58950000000000002,-8.0634601402418404 +0.58999999999999997,-7.9378678790842372 +0.59050000000000002,-7.8093756391695024 +0.59099999999999997,-7.6781102268697055 +0.59150000000000003,-7.544201185254451 +0.59199999999999997,-7.4077806664196721 +0.59250000000000003,-7.2689833009254023 +0.59299999999999997,-7.1279460650219839 +0.59350000000000003,-6.984808145418242 +0.59399999999999997,-6.8397108019846442 +0.59450000000000003,-6.6927972282648795 +0.59499999999999997,-6.5442124102155219 +0.59550000000000003,-6.3941029831338092 +0.59599999999999997,-6.2426170868801201 +0.59650000000000003,-6.0899042197548603 +0.59699999999999998,-5.9361150909165161 +0.59750000000000003,-5.7814014716739415 +0.59799999999999998,-5.6259160456795243 +0.59850000000000003,-5.4698122582896858 +0.59899999999999998,-5.313244165092712 +0.59950000000000003,-5.1563662798836951 +0.59999999999999998,-4.999333422213148 +0.60050000000000003,-4.8423005645359396 +0.60099999999999998,-4.685422679333584 +0.60150000000000003,-4.528854586129949 +0.60199999999999998,-4.3727507987401104 +0.60250000000000004,-4.2172653727523546 +0.60299999999999998,-4.0625517535031186 +0.60350000000000004,-3.9087626246647744 +0.60399999999999998,-3.7560497575395146 +0.60450000000000004,-3.6045638612858255 +0.60499999999999998,-3.4544544341974515 +0.60550000000000004,-3.3058696161547552 +0.60599999999999998,-3.1589560424349905 +0.60650000000000004,-3.0138586990013927 +0.60699999999999998,-2.8707207794043121 +0.60750000000000004,-2.7296835434942324 +0.60799999999999998,-2.5908861779999626 +0.60850000000000004,-2.4544656591585223 +0.60899999999999999,-2.3205566175565906 +0.60950000000000004,-2.189291205243471 +0.60999999999999999,-2.0607989653420589 +0.61050000000000004,-1.9352067041777943 +0.61099999999999999,-1.8126383661387635 +0.61150000000000004,-1.6932149113935147 +0.61199999999999999,-1.5770541964665874 +0.61250000000000004,-1.4642708579515329 +0.61299999999999999,-1.354976199401392 +0.61350000000000005,-1.2492780814366 +0.61399999999999999,-1.1472808153434322 +0.61450000000000005,-1.0490850601163615 +0.61499999999999999,-0.95478772309753879 +0.61550000000000005,-0.86448186437326768 +0.61599999999999999,-0.77825660494079685 +0.61650000000000005,-0.69619703870538174 +0.61699999999999999,-0.61838414856740798 +0.61750000000000005,-0.54489472642638148 +0.61799999999999999,-0.47580129749480449 +0.61850000000000005,-0.41117204864216106 +0.61899999999999999,-0.35107076112206315 +0.61950000000000005,-0.29555674766257312 +0.62,-0.24468479388639608 +0.62050000000000005,-0.1985051042674435 +0.621,-0.15706325259046139 +0.62150000000000005,-0.12040013695369112 +0.622,-0.088551939434466931 +0.62250000000000005,-0.06155009034447545 +0.623,-0.039421237261194619 +0.62350000000000005,-0.022187218688962673 +0.624,-0.009865042522871903 +0.62450000000000006,-0.0024668692555351868 +0.625,0 +0.62550000000000006,-0.0024668692555351868 +0.626,-0.009865042522871903 +0.62650000000000006,-0.022187218688962673 +0.627,-0.039421237261194619 +0.62750000000000006,-0.06155009034447545 +0.628,-0.088551939434466931 +0.62850000000000006,-0.12040013695369112 +0.629,-0.15706325259046139 +0.62950000000000006,-0.1985051042674435 +0.63,-0.24468479388639608 +0.63050000000000006,-0.29555674766257312 +0.63100000000000001,-0.35107076112206315 +0.63150000000000006,-0.41117204864216106 +0.63200000000000001,-0.47580129749480449 +0.63250000000000006,-0.54489472642638148 +0.63300000000000001,-0.61838414856074664 +0.63350000000000006,-0.69619703870538174 +0.63400000000000001,-0.77825660494079685 +0.63450000000000006,-0.86448186437992902 +0.63500000000000001,-0.95478772309753879 +0.63550000000000006,-1.0490850601163615 +0.63600000000000001,-1.1472808153434322 +0.63650000000000007,-1.2492780814366 +0.63700000000000001,-1.354976199401392 +0.63750000000000007,-1.4642708579515329 +0.63800000000000001,-1.5770541964665874 +0.63850000000000007,-1.6932149113935147 +0.63900000000000001,-1.8126383661387635 +0.63950000000000007,-1.9352067041777943 +0.64000000000000001,-2.0607989653420589 +0.64049999999999996,-2.189291205243471 +0.64100000000000001,-2.3205566175565906 +0.64149999999999996,-2.4544656591585223 +0.64200000000000002,-2.5908861779999626 +0.64249999999999996,-2.7296835434942324 +0.64300000000000002,-2.8707207794043121 +0.64349999999999996,-3.0138586990013927 +0.64400000000000002,-3.1589560424349905 +0.64449999999999996,-3.3058696161547552 +0.64500000000000002,-3.4544544341974515 +0.64549999999999996,-3.6045638612858255 +0.64600000000000002,-3.7560497575395146 +0.64649999999999996,-3.9087626246647744 +0.64700000000000002,-4.0625517535097799 +0.64749999999999996,-4.2172653727523546 +0.64800000000000002,-4.3727507987401104 +0.64849999999999997,-4.528854586129949 +0.64900000000000002,-4.6854226793269227 +0.64949999999999997,-4.8423005645359396 +0.65000000000000002,-4.999333422213148 +0.65049999999999997,-5.1563662798836951 +0.65100000000000002,-5.313244165092712 +0.65149999999999997,-5.4698122582896858 +0.65200000000000002,-5.6259160456795243 +0.65249999999999997,-5.7814014716739415 +0.65300000000000002,-5.9361150909165161 +0.65349999999999997,-6.0899042197548603 +0.65400000000000003,-6.2426170868734587 +0.65449999999999997,-6.3941029831271479 +0.65500000000000003,-6.5442124102155219 +0.65549999999999997,-6.6927972282582182 +0.65600000000000003,-6.8397108019846442 +0.65649999999999997,-6.984808145418242 +0.65700000000000003,-7.1279460650153226 +0.65749999999999997,-7.268983300918741 +0.65800000000000003,-7.4077806664263335 +0.65849999999999997,-7.544201185254451 +0.65900000000000003,-7.6781102268697055 +0.65949999999999998,-7.8093756391695024 +0.66000000000000003,-7.9378678790842372 +0.66049999999999998,-8.0634601402485018 +0.66100000000000003,-8.1860284782808712 +0.66149999999999998,-8.3054519330261201 +0.66200000000000003,-8.4216126479597087 +0.66249999999999998,-8.5343959864614405 +0.66300000000000003,-8.643690645024904 +0.66349999999999998,-8.749388762989696 +0.66400000000000003,-8.8513860290695412 +0.66449999999999998,-8.9495817843099346 +0.66500000000000004,-9.0438791213287573 +0.66549999999999998,-9.1341849800397057 +0.66600000000000004,-9.2204102394788379 +0.66649999999999998,-9.302469805714253 +0.66700000000000004,-9.3802826958588881 +0.66749999999999998,-9.4537721179932532 +0.66800000000000004,-9.5228655469181689 +0.66849999999999998,-9.5874947957774737 +0.66900000000000004,-9.6475960832975716 +0.66949999999999998,-9.7031100967637229 +0.67000000000000004,-9.7539820505332386 +0.67049999999999998,-9.8001617401521912 +0.67100000000000004,-9.8416035918358347 +0.67149999999999999,-9.8782667074726049 +0.67200000000000004,-9.9101149049918291 +0.67249999999999999,-9.9371167540684979 +0.67300000000000004,-9.9592456071517788 +0.67349999999999999,-9.9764796257373334 +0.67400000000000004,-9.9888018018967628 +0.67449999999999999,-9.9961999751707609 +0.67500000000000004,-9.9986668444262961 +0.67549999999999999,-9.9961999751707609 +0.67600000000000005,-9.9888018018967628 +0.67649999999999999,-9.9764796257373334 +0.67700000000000005,-9.9592456071517788 +0.67749999999999999,-9.9371167540684979 +0.67800000000000005,-9.9101149049918291 +0.67849999999999999,-9.8782667074726049 +0.67900000000000005,-9.8416035918358347 +0.67949999999999999,-9.8001617401521912 +0.68000000000000005,-9.7539820505332386 +0.68049999999999999,-9.7031100967637229 +0.68100000000000005,-9.6475960832975716 +0.68149999999999999,-9.5874947957774737 +0.68200000000000005,-9.5228655469181689 +0.6825,-9.4537721179932532 +0.68300000000000005,-9.3802826958588881 +0.6835,-9.302469805714253 +0.68400000000000005,-9.2204102394788379 +0.6845,-9.1341849800397057 +0.68500000000000005,-9.0438791213287573 +0.6855,-8.9495817843099346 +0.68600000000000005,-8.8513860290695412 +0.6865,-8.7493887629830347 +0.68700000000000006,-8.643690645024904 +0.6875,-8.5343959864614405 +0.68800000000000006,-8.4216126479530473 +0.6885,-8.3054519330261201 +0.68900000000000006,-8.1860284782742099 +0.6895,-8.0634601402418404 +0.69000000000000006,-7.9378678790842372 +0.6905,-7.8093756391695024 +0.69100000000000006,-7.6781102268697055 +0.6915,-7.5442011852611124 +0.69200000000000006,-7.4077806664196721 +0.6925,-7.268983300918741 +0.69300000000000006,-7.1279460650219839 +0.69350000000000001,-6.9848081454249034 +0.69400000000000006,-6.8397108019846442 +0.69450000000000001,-6.6927972282648795 +0.69500000000000006,-6.5442124102155219 +0.69550000000000001,-6.3941029831338092 +0.69600000000000006,-6.2426170868801201 +0.69650000000000001,-6.089904219748199 +0.69700000000000006,-5.9361150909165161 +0.69750000000000001,-5.7814014716739415 +0.69800000000000006,-5.6259160456795243 +0.69850000000000001,-5.4698122582896858 +0.69900000000000007,-5.313244165092712 +0.69950000000000001,-5.1563662798836951 +0.70000000000000007,-4.999333422213148 +0.70050000000000001,-4.8423005645359396 +0.70100000000000007,-4.6854226793269227 +0.70150000000000001,-4.528854586129949 +0.70200000000000007,-4.3727507987401104 +0.70250000000000001,-4.2172653727523546 +0.70300000000000007,-4.0625517535031186 +0.70350000000000001,-3.9087626246647744 +0.70399999999999996,-3.7560497575395146 +0.70450000000000002,-3.6045638612858255 +0.70499999999999996,-3.4544544341974515 +0.70550000000000002,-3.3058696161547552 +0.70599999999999996,-3.1589560424349905 +0.70650000000000002,-3.0138586990013927 +0.70699999999999996,-2.8707207794043121 +0.70750000000000002,-2.7296835434942324 +0.70799999999999996,-2.5908861779999626 +0.70850000000000002,-2.4544656591585223 +0.70899999999999996,-2.3205566175565906 +0.70950000000000002,-2.189291205243471 +0.70999999999999996,-2.0607989653420589 +0.71050000000000002,-1.9352067041777943 +0.71099999999999997,-1.8126383661387635 +0.71150000000000002,-1.6932149113935147 +0.71199999999999997,-1.5770541964665874 +0.71250000000000002,-1.4642708579515329 +0.71299999999999997,-1.354976199401392 +0.71350000000000002,-1.2492780814366 +0.71399999999999997,-1.1472808153434322 +0.71450000000000002,-1.0490850601163615 +0.71499999999999997,-0.95478772309753879 +0.71550000000000002,-0.86448186437326768 +0.71599999999999997,-0.77825660494745819 +0.71650000000000003,-0.69619703870538174 +0.71699999999999997,-0.61838414856740798 +0.71750000000000003,-0.54489472642638148 +0.71799999999999997,-0.47580129749480449 +0.71850000000000003,-0.41117204864216106 +0.71899999999999997,-0.35107076112206315 +0.71950000000000003,-0.29555674766257312 +0.71999999999999997,-0.24468479388639608 +0.72050000000000003,-0.1985051042674435 +0.72099999999999997,-0.15706325259046139 +0.72150000000000003,-0.12040013695369112 +0.72199999999999998,-0.088551939434466931 +0.72250000000000003,-0.06155009034447545 +0.72299999999999998,-0.039421237261194619 +0.72350000000000003,-0.022187218688962673 +0.72399999999999998,-0.009865042522871903 +0.72450000000000003,-0.0024668692555351868 +0.72499999999999998,0 +0.72550000000000003,-0.0024668692555351868 +0.72599999999999998,-0.009865042522871903 +0.72650000000000003,-0.022187218688962673 +0.72699999999999998,-0.039421237261194619 +0.72750000000000004,-0.06155009034447545 +0.72799999999999998,-0.088551939434466931 +0.72850000000000004,-0.12040013695369112 +0.72899999999999998,-0.15706325259046139 +0.72950000000000004,-0.1985051042674435 +0.72999999999999998,-0.24468479388639608 +0.73050000000000004,-0.29555674766257312 +0.73099999999999998,-0.35107076112206315 +0.73150000000000004,-0.41117204864216106 +0.73199999999999998,-0.47580129749480449 +0.73250000000000004,-0.54489472642638148 +0.73299999999999998,-0.61838414856740798 +0.73350000000000004,-0.69619703870538174 +0.73399999999999999,-0.77825660494079685 +0.73450000000000004,-0.86448186437992902 +0.73499999999999999,-0.95478772309753879 +0.73550000000000004,-1.0490850601163615 +0.73599999999999999,-1.1472808153434322 +0.73650000000000004,-1.2492780814366 +0.73699999999999999,-1.354976199401392 +0.73750000000000004,-1.4642708579515329 +0.73799999999999999,-1.5770541964665874 +0.73850000000000005,-1.6932149113935147 +0.73899999999999999,-1.8126383661387635 +0.73950000000000005,-1.9352067041777943 +0.73999999999999999,-2.0607989653420589 +0.74050000000000005,-2.189291205243471 +0.74099999999999999,-2.3205566175565906 +0.74150000000000005,-2.4544656591585223 +0.74199999999999999,-2.5908861779999626 +0.74250000000000005,-2.7296835434942324 +0.74299999999999999,-2.8707207793976508 +0.74350000000000005,-3.0138586990013927 +0.74399999999999999,-3.1589560424349905 +0.74450000000000005,-3.3058696161547552 +0.745,-3.4544544341974515 +0.74550000000000005,-3.6045638612858255 +0.746,-3.7560497575395146 +0.74650000000000005,-3.9087626246647744 +0.747,-4.0625517535031186 +0.74750000000000005,-4.2172653727523546 +0.748,-4.3727507987401104 +0.74850000000000005,-4.528854586129949 +0.749,-4.6854226793269227 +0.74950000000000006,-4.8423005645359396 +0.75,-4.999333422213148 +0.75050000000000006,-5.1563662798836951 +0.751,-5.313244165092712 +0.75150000000000006,-5.4698122582896858 +0.752,-5.6259160456795243 +0.75250000000000006,-5.7814014716739415 +0.753,-5.9361150909165161 +0.75350000000000006,-6.089904219748199 +0.754,-6.2426170868801201 +0.75450000000000006,-6.3941029831338092 +0.755,-6.5442124102155219 +0.75550000000000006,-6.6927972282582182 +0.75600000000000001,-6.8397108019779829 +0.75650000000000006,-6.9848081454249034 +0.75700000000000001,-7.1279460650219839 +0.75750000000000006,-7.268983300918741 +0.75800000000000001,-7.4077806664196721 +0.75850000000000006,-7.5442011852611124 +0.75900000000000001,-7.6781102268697055 +0.75950000000000006,-7.8093756391695024 +0.76000000000000001,-7.9378678790842372 +0.76050000000000006,-8.0634601402418404 +0.76100000000000001,-8.1860284782742099 +0.76150000000000007,-8.3054519330261201 +0.76200000000000001,-8.4216126479530473 +0.76250000000000007,-8.5343959864614405 +0.76300000000000001,-8.643690645024904 +0.76350000000000007,-8.7493887629830347 +0.76400000000000001,-8.8513860290695412 +0.76450000000000007,-8.9495817843032732 +0.76500000000000001,-9.0438791213287573 +0.76550000000000007,-9.1341849800397057 +0.76600000000000001,-9.2204102394788379 +0.76650000000000007,-9.302469805714253 +0.76700000000000002,-9.3802826958588881 +0.76750000000000007,-9.4537721179932532 +0.76800000000000002,-9.5228655469181689 +0.76849999999999996,-9.5874947957774737 +0.76900000000000002,-9.6475960832975716 +0.76949999999999996,-9.7031100967637229 +0.77000000000000002,-9.7539820505332386 +0.77049999999999996,-9.8001617401521912 +0.77100000000000002,-9.8416035918358347 +0.77149999999999996,-9.8782667074726049 +0.77200000000000002,-9.9101149049918291 +0.77249999999999996,-9.9371167540684979 +0.77300000000000002,-9.9592456071517788 +0.77349999999999997,-9.9764796257373334 +0.77400000000000002,-9.9888018018967628 +0.77449999999999997,-9.9961999751707609 +0.77500000000000002,-9.9986668444262961 +0.77549999999999997,-9.9961999751707609 +0.77600000000000002,-9.9888018018967628 +0.77649999999999997,-9.9764796257373334 +0.77700000000000002,-9.9592456071517788 +0.77749999999999997,-9.9371167540684979 +0.77800000000000002,-9.9101149049918291 +0.77849999999999997,-9.8782667074726049 +0.77900000000000003,-9.8416035918358347 +0.77949999999999997,-9.8001617401521912 +0.78000000000000003,-9.7539820505332386 +0.78049999999999997,-9.7031100967637229 +0.78100000000000003,-9.6475960832975716 +0.78149999999999997,-9.5874947957774737 +0.78200000000000003,-9.5228655469181689 +0.78249999999999997,-9.4537721179932532 +0.78300000000000003,-9.3802826958588881 +0.78349999999999997,-9.302469805714253 +0.78400000000000003,-9.2204102394788379 +0.78449999999999998,-9.1341849800397057 +0.78500000000000003,-9.0438791213287573 +0.78549999999999998,-8.9495817843032732 +0.78600000000000003,-8.8513860290762025 +0.78649999999999998,-8.749388762989696 +0.78700000000000003,-8.643690645024904 +0.78749999999999998,-8.5343959864614405 +0.78800000000000003,-8.4216126479597087 +0.78849999999999998,-8.3054519330261201 +0.78900000000000003,-8.1860284782808712 +0.78949999999999998,-8.0634601402485018 +0.79000000000000004,-7.9378678790842372 +0.79049999999999998,-7.8093756391761637 +0.79100000000000004,-7.6781102268697055 +0.79149999999999998,-7.5442011852611124 +0.79200000000000004,-7.4077806664263335 +0.79249999999999998,-7.2689833009254023 +0.79300000000000004,-7.1279460650153226 +0.79349999999999998,-6.984808145418242 +0.79400000000000004,-6.8397108019846442 +0.79449999999999998,-6.6927972282648795 +0.79500000000000004,-6.5442124102155219 +0.79549999999999998,-6.3941029831338092 +0.79600000000000004,-6.2426170868734587 +0.79649999999999999,-6.089904219748199 +0.79700000000000004,-5.9361150909165161 +0.79749999999999999,-5.7814014716739415 +0.79800000000000004,-5.6259160456795243 +0.79849999999999999,-5.4698122582896858 +0.79900000000000004,-5.313244165092712 +0.79949999999999999,-5.1563662798836951 +0.80000000000000004,-4.999333422213148 +0.80049999999999999,-4.8423005645359396 +0.80100000000000005,-4.6854226793269227 +0.80149999999999999,-4.5288545861232876 +0.80200000000000005,-4.3727507987334491 +0.80249999999999999,-4.2172653727523546 +0.80300000000000005,-4.0625517535031186 +0.80349999999999999,-3.9087626246647744 +0.80400000000000005,-3.7560497575395146 +0.80449999999999999,-3.6045638612858255 +0.80500000000000005,-3.4544544341974515 +0.80549999999999999,-3.3058696161547552 +0.80600000000000005,-3.1589560424349905 +0.80649999999999999,-3.0138586990013927 +0.80700000000000005,-2.8707207794043121 +0.8075,-2.7296835434942324 +0.80800000000000005,-2.5908861779999626 +0.8085,-2.4544656591585223 +0.80900000000000005,-2.3205566175565906 +0.8095,-2.189291205243471 +0.81000000000000005,-2.0607989653420589 +0.8105,-1.9352067041777943 +0.81100000000000005,-1.8126383661387635 +0.8115,-1.6932149113935147 +0.81200000000000006,-1.5770541964665874 +0.8125,-1.4642708579515329 +0.81300000000000006,-1.354976199401392 +0.8135,-1.2492780814366 +0.81400000000000006,-1.1472808153434322 +0.8145,-1.0490850601163615 +0.81500000000000006,-0.95478772309753879 +0.8155,-0.86448186437326768 +0.81600000000000006,-0.77825660494745819 +0.8165,-0.69619703870538174 +0.81700000000000006,-0.61838414856740798 +0.8175,-0.54489472642638148 +0.81800000000000006,-0.47580129749480449 +0.81850000000000001,-0.41117204864216106 +0.81900000000000006,-0.35107076112206315 +0.81950000000000001,-0.29555674766257312 +0.82000000000000006,-0.24468479388639608 +0.82050000000000001,-0.1985051042674435 +0.82100000000000006,-0.15706325259046139 +0.82150000000000001,-0.12040013695369112 +0.82200000000000006,-0.088551939434466931 +0.82250000000000001,-0.06155009034447545 +0.82300000000000006,-0.039421237261194619 +0.82350000000000001,-0.022187218688962673 +0.82400000000000007,-0.009865042522871903 +0.82450000000000001,-0.0024668692555351868 +0.82500000000000007,0 +0.82550000000000001,-0.0024668692555351868 +0.82600000000000007,-0.009865042522871903 +0.82650000000000001,-0.022187218688962673 +0.82700000000000007,-0.039421237261194619 +0.82750000000000001,-0.06155009034447545 +0.82800000000000007,-0.088551939434466931 +0.82850000000000001,-0.12040013695369112 +0.82900000000000007,-0.15706325259046139 +0.82950000000000002,-0.1985051042674435 +0.83000000000000007,-0.24468479388639608 +0.83050000000000002,-0.29555674766257312 +0.83100000000000007,-0.35107076112206315 +0.83150000000000002,-0.41117204864216106 +0.83200000000000007,-0.47580129749480449 +0.83250000000000002,-0.54489472642638148 +0.83299999999999996,-0.61838414856740798 +0.83350000000000002,-0.69619703870538174 +0.83399999999999996,-0.77825660494079685 +0.83450000000000002,-0.86448186437326768 +0.83499999999999996,-0.95478772309753879 +0.83550000000000002,-1.0490850601163615 +0.83599999999999997,-1.1472808153434322 +0.83650000000000002,-1.2492780814366 +0.83699999999999997,-1.354976199401392 +0.83750000000000002,-1.4642708579515329 +0.83799999999999997,-1.5770541964665874 +0.83850000000000002,-1.6932149113935147 +0.83899999999999997,-1.8126383661387635 +0.83950000000000002,-1.9352067041777943 +0.83999999999999997,-2.0607989653420589 +0.84050000000000002,-2.189291205243471 +0.84099999999999997,-2.3205566175565906 +0.84150000000000003,-2.4544656591585223 +0.84199999999999997,-2.5908861779999626 +0.84250000000000003,-2.7296835434942324 +0.84299999999999997,-2.8707207794043121 +0.84350000000000003,-3.0138586990013927 +0.84399999999999997,-3.1589560424416518 +0.84450000000000003,-3.3058696161614165 +0.84499999999999997,-3.4544544341974515 +0.84550000000000003,-3.6045638612858255 +0.84599999999999997,-3.7560497575395146 +0.84650000000000003,-3.9087626246647744 +0.84699999999999998,-4.0625517535097799 +0.84750000000000003,-4.2172653727523546 +0.84799999999999998,-4.3727507987401104 +0.84850000000000003,-4.528854586129949 +0.84899999999999998,-4.6854226793269227 +0.84950000000000003,-4.8423005645359396 +0.84999999999999998,-4.999333422213148 +0.85050000000000003,-5.1563662798836951 +0.85099999999999998,-5.313244165092712 +0.85150000000000003,-5.4698122582896858 +0.85199999999999998,-5.6259160456795243 +0.85250000000000004,-5.7814014716739415 +0.85299999999999998,-5.9361150909165161 +0.85350000000000004,-6.0899042197548603 +0.85399999999999998,-6.2426170868801201 +0.85450000000000004,-6.3941029831338092 +0.85499999999999998,-6.5442124102155219 +0.85550000000000004,-6.6927972282648795 +0.85599999999999998,-6.8397108019846442 +0.85650000000000004,-6.984808145418242 +0.85699999999999998,-7.1279460650219839 +0.85750000000000004,-7.2689833009254023 +0.85799999999999998,-7.4077806664196721 +0.85850000000000004,-7.544201185254451 +0.85899999999999999,-7.6781102268697055 +0.85950000000000004,-7.8093756391695024 +0.85999999999999999,-7.9378678790775759 +0.86050000000000004,-8.0634601402418404 +0.86099999999999999,-8.1860284782742099 +0.86150000000000004,-8.3054519330327814 +0.86199999999999999,-8.4216126479597087 +0.86250000000000004,-8.5343959864614405 +0.86299999999999999,-8.643690645024904 +0.86350000000000005,-8.7493887629830347 +0.86399999999999999,-8.8513860290762025 +0.86450000000000005,-8.9495817843032732 +0.86499999999999999,-9.0438791213287573 +0.86550000000000005,-9.1341849800397057 +0.86599999999999999,-9.2204102394788379 +0.86650000000000005,-9.302469805714253 +0.86699999999999999,-9.3802826958588881 +0.86750000000000005,-9.4537721179932532 +0.86799999999999999,-9.5228655469181689 +0.86850000000000005,-9.5874947957774737 +0.86899999999999999,-9.6475960832975716 +0.86950000000000005,-9.7031100967637229 +0.87,-9.7539820505332386 +0.87050000000000005,-9.8001617401521912 +0.871,-9.8416035918358347 +0.87150000000000005,-9.8782667074726049 +0.872,-9.9101149049918291 +0.87250000000000005,-9.9371167540684979 +0.873,-9.9592456071517788 +0.87350000000000005,-9.9764796257373334 +0.874,-9.9888018018967628 +0.87450000000000006,-9.9961999751707609 +0.875,-9.9986668444262961 +0.87550000000000006,-9.9961999751707609 +0.876,-9.9888018018967628 +0.87650000000000006,-9.9764796257373334 +0.877,-9.9592456071517788 +0.87750000000000006,-9.9371167540684979 +0.878,-9.9101149049918291 +0.87850000000000006,-9.8782667074726049 +0.879,-9.8416035918358347 +0.87950000000000006,-9.8001617401521912 +0.88,-9.7539820505332386 +0.88050000000000006,-9.7031100967637229 +0.88100000000000001,-9.6475960832975716 +0.88150000000000006,-9.5874947957774737 +0.88200000000000001,-9.5228655469181689 +0.88250000000000006,-9.4537721179932532 +0.88300000000000001,-9.3802826958588881 +0.88350000000000006,-9.302469805714253 +0.88400000000000001,-9.2204102394788379 +0.88450000000000006,-9.1341849800397057 +0.88500000000000001,-9.0438791213287573 +0.88550000000000006,-8.9495817843099346 +0.88600000000000001,-8.8513860290762025 +0.88650000000000007,-8.7493887629830347 +0.88700000000000001,-8.643690645024904 +0.88750000000000007,-8.5343959864681018 +0.88800000000000001,-8.4216126479530473 +0.88850000000000007,-8.3054519330327814 +0.88900000000000001,-8.1860284782742099 +0.88950000000000007,-8.0634601402485018 +0.89000000000000001,-7.9378678790775759 +0.89050000000000007,-7.8093756391761637 +0.89100000000000001,-7.6781102268630441 +0.89150000000000007,-7.544201185254451 +0.89200000000000002,-7.4077806664263335 +0.89250000000000007,-7.268983300918741 +0.89300000000000002,-7.1279460650219839 +0.89350000000000007,-6.9848081454249034 +0.89400000000000002,-6.8397108019846442 +0.89450000000000007,-6.6927972282582182 +0.89500000000000002,-6.5442124102155219 +0.89550000000000007,-6.3941029831271479 +0.89600000000000002,-6.2426170868734587 +0.89649999999999996,-6.0899042197548603 +0.89700000000000002,-5.9361150909165161 +0.89749999999999996,-5.7814014716739415 +0.89800000000000002,-5.6259160456795243 +0.89849999999999997,-5.4698122582896858 +0.89900000000000002,-5.313244165092712 +0.89949999999999997,-5.1563662798836951 +0.90000000000000002,-4.999333422213148 +0.90049999999999997,-4.8423005645359396 +0.90100000000000002,-4.6854226793269227 +0.90149999999999997,-4.528854586129949 +0.90200000000000002,-4.3727507987401104 +0.90249999999999997,-4.2172653727523546 +0.90300000000000002,-4.0625517535031186 +0.90349999999999997,-3.9087626246647744 +0.90400000000000003,-3.7560497575395146 +0.90449999999999997,-3.6045638612858255 +0.90500000000000003,-3.4544544341974515 +0.90549999999999997,-3.3058696161614165 +0.90600000000000003,-3.1589560424349905 +0.90649999999999997,-3.0138586990013927 +0.90700000000000003,-2.8707207794043121 +0.90749999999999997,-2.7296835434942324 +0.90800000000000003,-2.5908861779999626 +0.90849999999999997,-2.4544656591585223 +0.90900000000000003,-2.3205566175565906 +0.90949999999999998,-2.189291205243471 +0.91000000000000003,-2.0607989653420589 +0.91049999999999998,-1.9352067041777943 +0.91100000000000003,-1.8126383661387635 +0.91149999999999998,-1.6932149113935147 +0.91200000000000003,-1.5770541964665874 +0.91249999999999998,-1.4642708579515329 +0.91300000000000003,-1.354976199401392 +0.91349999999999998,-1.2492780814366 +0.91400000000000003,-1.1472808153434322 +0.91449999999999998,-1.0490850601163615 +0.91500000000000004,-0.95478772309753879 +0.91549999999999998,-0.86448186437326768 +0.91600000000000004,-0.77825660494745819 +0.91649999999999998,-0.69619703871204308 +0.91700000000000004,-0.61838414856074664 +0.91749999999999998,-0.54489472642638148 +0.91800000000000004,-0.47580129749480449 +0.91849999999999998,-0.41117204864216106 +0.91900000000000004,-0.35107076112206315 +0.91949999999999998,-0.29555674766257312 +0.92000000000000004,-0.24468479388639608 +0.92049999999999998,-0.1985051042674435 +0.92100000000000004,-0.15706325259046139 +0.92149999999999999,-0.12040013695369112 +0.92200000000000004,-0.088551939434466931 +0.92249999999999999,-0.06155009034447545 +0.92300000000000004,-0.039421237261194619 +0.92349999999999999,-0.022187218688962673 +0.92400000000000004,-0.009865042522871903 +0.92449999999999999,-0.0024668692555351868 +0.92500000000000004,0 +0.92549999999999999,-0.0024668692555351868 +0.92600000000000005,-0.009865042522871903 +0.92649999999999999,-0.022187218688962673 +0.92700000000000005,-0.039421237261194619 +0.92749999999999999,-0.06155009034447545 +0.92800000000000005,-0.088551939434466931 +0.92849999999999999,-0.12040013695369112 +0.92900000000000005,-0.15706325259046139 +0.92949999999999999,-0.1985051042674435 +0.93000000000000005,-0.24468479388639608 +0.93049999999999999,-0.29555674766257312 +0.93100000000000005,-0.35107076112206315 +0.93149999999999999,-0.41117204864216106 +0.93200000000000005,-0.47580129749480449 +0.9325,-0.54489472642638148 +0.93300000000000005,-0.61838414856074664 +0.9335,-0.69619703871204308 +0.93400000000000005,-0.77825660494079685 +0.9345,-0.86448186437992902 +0.93500000000000005,-0.95478772309753879 +0.9355,-1.0490850601163615 +0.93600000000000005,-1.1472808153434322 +0.9365,-1.2492780814366 +0.93700000000000006,-1.354976199401392 +0.9375,-1.4642708579515329 +0.93800000000000006,-1.5770541964665874 +0.9385,-1.6932149113935147 +0.93900000000000006,-1.8126383661387635 +0.9395,-1.9352067041777943 +0.94000000000000006,-2.0607989653420589 +0.9405,-2.189291205243471 +0.94100000000000006,-2.3205566175565906 +0.9415,-2.4544656591585223 +0.94200000000000006,-2.5908861779999626 +0.9425,-2.7296835434942324 +0.94300000000000006,-2.8707207794043121 +0.94350000000000001,-3.0138586990013927 +0.94400000000000006,-3.1589560424349905 +0.94450000000000001,-3.3058696161547552 +0.94500000000000006,-3.4544544341974515 +0.94550000000000001,-3.6045638612858255 +0.94600000000000006,-3.7560497575395146 +0.94650000000000001,-3.9087626246647744 +0.94700000000000006,-4.0625517535031186 +0.94750000000000001,-4.2172653727523546 +0.94800000000000006,-4.3727507987334491 +0.94850000000000001,-4.528854586129949 +0.94900000000000007,-4.6854226793269227 +0.94950000000000001,-4.8423005645359396 +0.95000000000000007,-4.999333422213148 +0.95050000000000001,-5.1563662798836951 +0.95100000000000007,-5.313244165092712 +0.95150000000000001,-5.4698122582896858 +0.95200000000000007,-5.6259160456795243 +0.95250000000000001,-5.7814014716739415 +0.95300000000000007,-5.9361150909165161 +0.95350000000000001,-6.0899042197548603 +0.95400000000000007,-6.2426170868734587 +0.95450000000000002,-6.3941029831338092 +0.95500000000000007,-6.5442124102155219 +0.95550000000000002,-6.6927972282582182 +0.95600000000000007,-6.8397108019846442 +0.95650000000000002,-6.984808145418242 +0.95700000000000007,-7.1279460650219839 +0.95750000000000002,-7.268983300918741 +0.95800000000000007,-7.4077806664263335 +0.95850000000000002,-7.5442011852611124 +0.95900000000000007,-7.6781102268697055 +0.95950000000000002,-7.8093756391695024 +0.95999999999999996,-7.9378678790842372 +0.96050000000000002,-8.0634601402485018 +0.96099999999999997,-8.1860284782742099 +0.96150000000000002,-8.3054519330261201 +0.96199999999999997,-8.4216126479597087 +0.96250000000000002,-8.5343959864614405 +0.96299999999999997,-8.643690645024904 +0.96350000000000002,-8.749388762989696 +0.96399999999999997,-8.8513860290695412 +0.96450000000000002,-8.9495817843099346 +0.96499999999999997,-9.0438791213287573 +0.96550000000000002,-9.1341849800397057 +0.96599999999999997,-9.2204102394788379 +0.96650000000000003,-9.302469805714253 +0.96699999999999997,-9.3802826958588881 +0.96750000000000003,-9.4537721179932532 +0.96799999999999997,-9.5228655469181689 +0.96850000000000003,-9.5874947957774737 +0.96899999999999997,-9.6475960832975716 +0.96950000000000003,-9.7031100967637229 +0.96999999999999997,-9.7539820505332386 +0.97050000000000003,-9.8001617401521912 +0.97099999999999997,-9.8416035918358347 +0.97150000000000003,-9.8782667074726049 +0.97199999999999998,-9.9101149049918291 +0.97250000000000003,-9.9371167540684979 +0.97299999999999998,-9.9592456071517788 +0.97350000000000003,-9.9764796257373334 +0.97399999999999998,-9.9888018018967628 +0.97450000000000003,-9.9961999751707609 +0.97499999999999998,-9.9986668444262961 +0.97550000000000003,-9.9961999751707609 +0.97599999999999998,-9.9888018018967628 +0.97650000000000003,-9.9764796257373334 +0.97699999999999998,-9.9592456071517788 +0.97750000000000004,-9.9371167540684979 +0.97799999999999998,-9.9101149049918291 +0.97850000000000004,-9.8782667074726049 +0.97899999999999998,-9.8416035918358347 +0.97950000000000004,-9.8001617401521912 +0.97999999999999998,-9.7539820505332386 +0.98050000000000004,-9.7031100967637229 +0.98099999999999998,-9.6475960832975716 +0.98150000000000004,-9.5874947957774737 +0.98199999999999998,-9.5228655469181689 +0.98250000000000004,-9.4537721179932532 +0.98299999999999998,-9.3802826958588881 +0.98350000000000004,-9.302469805714253 +0.98399999999999999,-9.2204102394788379 +0.98450000000000004,-9.1341849800397057 +0.98499999999999999,-9.0438791213287573 +0.98550000000000004,-8.9495817843032732 +0.98599999999999999,-8.8513860290695412 +0.98650000000000004,-8.749388762989696 +0.98699999999999999,-8.643690645024904 +0.98750000000000004,-8.5343959864614405 +0.98799999999999999,-8.4216126479530473 +0.98850000000000005,-8.3054519330261201 +0.98899999999999999,-8.1860284782742099 +0.98950000000000005,-8.0634601402485018 +0.98999999999999999,-7.9378678790775759 +0.99050000000000005,-7.8093756391695024 +0.99099999999999999,-7.6781102268697055 +0.99150000000000005,-7.544201185254451 +0.99199999999999999,-7.4077806664196721 +0.99250000000000005,-7.2689833009254023 +0.99299999999999999,-7.1279460650219839 +0.99350000000000005,-6.984808145418242 +0.99399999999999999,-6.8397108019779829 +0.99450000000000005,-6.6927972282648795 +0.995,-6.5442124102221833 +0.99550000000000005,-6.3941029831338092 +0.996,-6.2426170868801201 +0.99650000000000005,-6.0899042197615216 +0.997,-5.9361150909165161 +0.99750000000000005,-5.7814014716739415 +0.998,-5.6259160456795243 +0.99850000000000005,-5.4698122582896858 +0.999,-5.313244165092712 +0.99950000000000006,-5.1563662798836951 +1,-4.999333422213148 +1,-4.999333422213148 diff --git a/test/fixtures/Subtracter/comparisonSignals.txt b/test/fixtures/Subtracter/comparisonSignals.txt new file mode 100644 index 000000000..dadd22612 --- /dev/null +++ b/test/fixtures/Subtracter/comparisonSignals.txt @@ -0,0 +1,2 @@ +time +vOut.v diff --git a/test/runtests.jl b/test/runtests.jl index e5b06798f..733e1b9cc 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,11 +1,13 @@ """ Tests for the BaseModelicaLibraryTesting package. -Sections: - 1. Unit tests — pure helper functions, no OMC or simulation needed. - 2. Integration — full pipeline for Modelica.Electrical.Analog.Examples.ChuaCircuit. +Files: + unit_helpers.jl — pure helper functions, no OMC or simulation needed + chua_circuit.jl — full pipeline for ChuaCircuit (requires OMC) + bus_usage.jl — parse+simulate from fixture .bmo (no OMC) + amplifier_with_op_amp.jl — parse+simulate+verify from fixture .bmo (no OMC) -Run from the julia/ directory: +Run from the project directory: julia --project=. test/runtests.jl Or via Pkg: @@ -15,126 +17,17 @@ Environment variables: OMC_EXE Path to the omc binary (default: system PATH) """ -import Test: @test, @testset +import Test: @test, @testset, @test_broken import OMJulia import BaseModelicaLibraryTesting: run_export, run_parse, run_simulate, + compare_with_reference, _clean_var_name, _normalize_var, _ref_csv_path, _read_ref_csv -# ── 1. Unit tests ────────────────────────────────────────────────────────────── +const FIXTURES = joinpath(@__DIR__, "fixtures") +const TEST_OMC = get(ENV, "OMC_EXE", "omc") +const TEST_MODEL_CHUA = "Modelica.Electrical.Analog.Examples.ChuaCircuit" -@testset "Unit tests" begin - - @testset "_clean_var_name" begin - # Standard MTK form: var"name"(t) - @test _clean_var_name("var\"C1.v\"(t)") == "C1.v" - # Without (t) - @test _clean_var_name("var\"C1.v\"") == "C1.v" - # Plain name with (t) suffix - @test _clean_var_name("C1.v(t)") == "C1.v" - # Plain name, no annotation - @test _clean_var_name("x") == "x" - # Leading/trailing whitespace is stripped - @test _clean_var_name(" foo(t) ") == "foo" - # ₊ hierarchy separator is preserved (it is the job of _normalize_var) - @test _clean_var_name("var\"C1₊v\"(t)") == "C1₊v" - end - - @testset "_normalize_var" begin - # Reference-CSV side: plain dot-separated name - @test _normalize_var("C1.v") == "c1.v" - @test _normalize_var("L.i") == "l.i" - # MTK side with ₊ hierarchy separator and (t) annotation - @test _normalize_var("C1₊v(t)") == "c1.v" - # MTK side with var"..." quoting - @test _normalize_var("var\"C1₊v\"(t)") == "c1.v" - # Already normalized input - @test _normalize_var("c1.v") == "c1.v" - # Multi-level hierarchy - @test _normalize_var("a₊b₊c(t)") == "a.b.c" - end - - @testset "_ref_csv_path" begin - mktempdir() do dir - model = "Modelica.Electrical.Analog.Examples.ChuaCircuit" - csv_dir = joinpath(dir, "Modelica", "Electrical", "Analog", - "Examples", "ChuaCircuit") - mkpath(csv_dir) - csv_file = joinpath(csv_dir, "ChuaCircuit.csv") - write(csv_file, "") - @test _ref_csv_path(dir, model) == csv_file - @test _ref_csv_path(dir, "Modelica.NotExisting") === nothing - end - end - - @testset "_read_ref_csv" begin - mktempdir() do dir - csv = joinpath(dir, "test.csv") - - # Quoted headers (MAP-LIB format) - write(csv, "\"time\",\"C1.v\",\"L.i\"\n0,4,0\n0.5,3.5,0.1\n1,3.0,0.2\n") - times, data = _read_ref_csv(csv) - @test times ≈ [0.0, 0.5, 1.0] - @test data["C1.v"] ≈ [4.0, 3.5, 3.0] - @test data["L.i"] ≈ [0.0, 0.1, 0.2] - @test !haskey(data, "\"time\"") # quotes must be stripped from keys - - # Unquoted headers - write(csv, "time,x,y\n0,1,2\n1,3,4\n") - times2, data2 = _read_ref_csv(csv) - @test times2 ≈ [0.0, 1.0] - @test data2["x"] ≈ [1.0, 3.0] - @test data2["y"] ≈ [2.0, 4.0] - - # Empty file → empty collections - write(csv, "") - t0, d0 = _read_ref_csv(csv) - @test isempty(t0) - @test isempty(d0) - - # Blank lines between data rows are ignored - write(csv, "time,v\n0,1\n\n1,2\n\n") - times3, data3 = _read_ref_csv(csv) - @test times3 ≈ [0.0, 1.0] - @test data3["v"] ≈ [1.0, 2.0] - end - end - -end # "Unit tests" - -# ── 2. Integration test ──────────────────────────────────────────────────────── - -const TEST_MODEL = "Modelica.Electrical.Analog.Examples.ChuaCircuit" -const TEST_OMC = get(ENV, "OMC_EXE", "omc") - -@testset "ChuaCircuit pipeline" begin - tmpdir = mktempdir() - model_dir = joinpath(tmpdir, "files", TEST_MODEL) - mkpath(model_dir) - bm_path = replace(abspath(joinpath(model_dir, "$TEST_MODEL.bmo")), "\\" => "/") - - omc = OMJulia.OMCSession(TEST_OMC) - try - OMJulia.sendExpression(omc, """setCommandLineOptions("--baseModelica --baseModelicaOptions=scalarize,moveBindings -d=evaluateAllParameters")""") - ok = OMJulia.sendExpression(omc, """loadModel(Modelica, {"4.1.0"})""") - @test ok == true - - exp_ok, _, exp_err = run_export(omc, TEST_MODEL, model_dir, bm_path) - @test exp_ok - exp_ok || @warn "Export error: $exp_err" - - if exp_ok - par_ok, _, par_err, ode_prob = run_parse(bm_path, model_dir, TEST_MODEL) - @test par_ok - par_ok || @warn "Parse error: $par_err" - - if par_ok - sim_ok, _, sim_err, _ = run_simulate(ode_prob, model_dir, TEST_MODEL) - @test sim_ok - sim_ok || @warn "Simulation error: $sim_err" - end - end - finally - OMJulia.quit(omc) - end -end +include("unit_helpers.jl") +include("chua_circuit.jl") +include("subtracter.jl") diff --git a/test/subtracter.jl b/test/subtracter.jl new file mode 100644 index 000000000..0827f4c06 --- /dev/null +++ b/test/subtracter.jl @@ -0,0 +1,28 @@ +@testset "OpAmps.Subtracter verification" begin + model = "Modelica.Electrical.Analog.Examples.OpAmps.Subtracter" + bmo_path = joinpath(FIXTURES, "$model.bmo") + ref_dir = joinpath(FIXTURES, "Subtracter") + ref_csv = joinpath(ref_dir, "Subtracter.csv") + sig_file = joinpath(ref_dir, "comparisonSignals.txt") + signals = String.(filter(s -> lowercase(s) != "time" && !isempty(s), + strip.(readlines(sig_file)))) + mktempdir() do tmpdir + par_ok, _, par_err, ode_prob = run_parse(bmo_path, tmpdir, model) + @test par_ok + par_ok || @warn "Parse error: $par_err" + + if par_ok + sim_ok, _, sim_err, sol = run_simulate(ode_prob, tmpdir, model; + cmp_signals = signals) + @test sim_ok + sim_ok || @warn "Simulation error: $sim_err" + + if sim_ok + total, pass, skip, _ = compare_with_reference( + sol, ref_csv, tmpdir, model; signals) + @test pass == total + @info "OpAmps.Subtracter: $pass/$total signals pass (skip=$skip)" + end + end + end +end diff --git a/test/unit_helpers.jl b/test/unit_helpers.jl new file mode 100644 index 000000000..2a8e71f94 --- /dev/null +++ b/test/unit_helpers.jl @@ -0,0 +1,78 @@ +@testset "Unit tests" begin + + @testset "_clean_var_name" begin + # Standard MTK form: var"name"(t) + @test _clean_var_name("var\"C1.v\"(t)") == "C1.v" + # Without (t) + @test _clean_var_name("var\"C1.v\"") == "C1.v" + # Plain name with (t) suffix + @test _clean_var_name("C1.v(t)") == "C1.v" + # Plain name, no annotation + @test _clean_var_name("x") == "x" + # Leading/trailing whitespace is stripped + @test _clean_var_name(" foo(t) ") == "foo" + # ₊ hierarchy separator is preserved (it is the job of _normalize_var) + @test _clean_var_name("var\"C1₊v\"(t)") == "C1₊v" + end + + @testset "_normalize_var" begin + # Reference-CSV side: plain dot-separated name + @test _normalize_var("C1.v") == "c1.v" + @test _normalize_var("L.i") == "l.i" + # MTK side with ₊ hierarchy separator and (t) annotation + @test _normalize_var("C1₊v(t)") == "c1.v" + # MTK side with var"..." quoting + @test _normalize_var("var\"C1₊v\"(t)") == "c1.v" + # Already normalized input + @test _normalize_var("c1.v") == "c1.v" + # Multi-level hierarchy + @test _normalize_var("a₊b₊c(t)") == "a.b.c" + end + + @testset "_ref_csv_path" begin + mktempdir() do dir + model = "Modelica.Electrical.Analog.Examples.ChuaCircuit" + csv_dir = joinpath(dir, "Modelica", "Electrical", "Analog", + "Examples", "ChuaCircuit") + mkpath(csv_dir) + csv_file = joinpath(csv_dir, "ChuaCircuit.csv") + write(csv_file, "") + @test _ref_csv_path(dir, model) == csv_file + @test _ref_csv_path(dir, "Modelica.NotExisting") === nothing + end + end + + @testset "_read_ref_csv" begin + mktempdir() do dir + csv = joinpath(dir, "test.csv") + + # Quoted headers (MAP-LIB format) + write(csv, "\"time\",\"C1.v\",\"L.i\"\n0,4,0\n0.5,3.5,0.1\n1,3.0,0.2\n") + times, data = _read_ref_csv(csv) + @test times ≈ [0.0, 0.5, 1.0] + @test data["C1.v"] ≈ [4.0, 3.5, 3.0] + @test data["L.i"] ≈ [0.0, 0.1, 0.2] + @test !haskey(data, "\"time\"") # quotes must be stripped from keys + + # Unquoted headers + write(csv, "time,x,y\n0,1,2\n1,3,4\n") + times2, data2 = _read_ref_csv(csv) + @test times2 ≈ [0.0, 1.0] + @test data2["x"] ≈ [1.0, 3.0] + @test data2["y"] ≈ [2.0, 4.0] + + # Empty file → empty collections + write(csv, "") + t0, d0 = _read_ref_csv(csv) + @test isempty(t0) + @test isempty(d0) + + # Blank lines between data rows are ignored + write(csv, "time,v\n0,1\n\n1,2\n\n") + times3, data3 = _read_ref_csv(csv) + @test times3 ≈ [0.0, 1.0] + @test data3["v"] ≈ [1.0, 2.0] + end + end + +end # "Unit tests"