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/.github/workflows/msl-test.yml b/.github/workflows/msl-test.yml
index 001fb493d..66ad9bc34 100644
--- a/.github/workflows/msl-test.yml
+++ b/.github/workflows/msl-test.yml
@@ -36,6 +36,11 @@ on:
required: false
default: '^(?!Modelica\.Clocked)'
type: string
+ solver:
+ description: 'ODE solver algorithm (any DifferentialEquations.jl algorithm name, e.g. Rodas5P, FBDF)'
+ required: false
+ default: 'Rodas5P'
+ type: string
concurrency:
group: pages-${{ inputs.library || 'Modelica' }}-${{ inputs.lib_version || '4.1.0' }}-${{ inputs.bm_version || 'main' }}
@@ -58,6 +63,7 @@ jobs:
BM_VERSION_INPUT: ${{ inputs.bm_version || 'main' }}
BM_OPTIONS: ${{ inputs.bm_options || 'scalarize,moveBindings,inlineFunctions' }}
FILTER: ${{ inputs.filter || '^(?!Modelica\.Clocked)' }}
+ SOLVER: ${{ inputs.solver || 'Rodas5P' }}
steps:
- name: Checkout source
@@ -123,6 +129,9 @@ jobs:
run: |
julia --project=. -e '
using BaseModelicaLibraryTesting
+ using DifferentialEquations
+ solver_name = get(ENV, "SOLVER", "Rodas5P")
+ configure_simulate!(solver = getproperty(DifferentialEquations, Symbol(solver_name))())
filter_str = get(ENV, "FILTER", "")
main(
library = ENV["LIB_NAME"],
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/README.md b/README.md
index 6468562b1..19de3fd2c 100644
--- a/README.md
+++ b/README.md
@@ -55,10 +55,55 @@ main(
Preview the generated HTML report at `main/Modelica/4.1.0/report.html`.
+### Changing the ODE Solver
+
+By default the simulation uses `Rodas5P()`. To switch to a different solver,
+call `configure_simulate!` before `main`:
+
+```julia
+using BaseModelicaLibraryTesting
+using DifferentialEquations
+
+configure_simulate!(solver = FBDF())
+
+main(
+ library = "Modelica",
+ version = "4.1.0",
+ omc_exe = "omc",
+ ref_root = "MAP-LIB_ReferenceResults"
+)
+```
+
+Any SciML-compatible ODE/DAE algorithm (e.g. `QNDF()`, `Rodas4()`) can be
+passed to `solver`.
+
```bash
python -m http.server -d results/main/Modelica/4.1.0/
```
+## GitHub Actions — Manual MSL Test
+
+The [MSL Test & GitHub Pages][msl-action-url] workflow runs automatically every
+day at 03:00 UTC. It can also be triggered manually from the GitHub Actions UI:
+
+1. Go to **Actions → MSL Test & GitHub Pages**
+2. Click **Run workflow**
+3. Fill in the options and click **Run workflow**
+
+The following inputs are available:
+
+| Input | Default | Description |
+| ----- | ------- | ----------- |
+| `library` | `Modelica` | Modelica library name |
+| `lib_version` | `4.1.0` | Library version to test |
+| `bm_version` | `main` | BaseModelica.jl branch, tag, or version |
+| `bm_options` | `scalarize,moveBindings,inlineFunctions` | Comma-separated `--baseModelicaOptions` passed to OpenModelica during Base Modelica export |
+| `filter` | `^(?!Modelica\.Clocked)` | Julia regex to restrict which models are tested (empty string runs all models) |
+| `solver` | `Rodas5P` | Any `DifferentialEquations.jl` algorithm name (e.g. `Rodas5P`, `Rodas5Pr`, `FBDF`) |
+
+Results are published to [GitHub Pages][msl-pages-url] under
+`results////`.
+
## License
This package is available under the [OSMC-PL License][osmc-license-file] and the
@@ -68,6 +113,7 @@ file for details.
[build-badge-svg]: https://github.com/OpenModelica/BaseModelicaLibraryTesting.jl/actions/workflows/CI.yml/badge.svg?branch=main
[build-action-url]: https://github.com/OpenModelica/BaseModelicaLibraryTesting.jl/actions/workflows/CI.yml?query=branch%3Amain
[msl-badge-svg]: https://github.com/OpenModelica/BaseModelicaLibraryTesting.jl/actions/workflows/msl-test.yml/badge.svg?branch=main
+[msl-action-url]: https://github.com/OpenModelica/BaseModelicaLibraryTesting.jl/actions/workflows/msl-test.yml
[msl-pages-url]: https://openmodelica.github.io/BaseModelicaLibraryTesting.jl/
[openmodelica-url]: https://openmodelica.org/
[basemodelicajl-url]: https://github.com/SciML/BaseModelica.jl
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..b253f61aa 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
@@ -245,6 +251,9 @@ function main(;
length(cpu_info),
Sys.total_memory() / 1024^3,
time() - t0,
+ let s = _SIM_SETTINGS.solver
+ "$(parentmodule(typeof(s))).$(nameof(typeof(s)))"
+ end,
)
generate_report(results, results_root, info; csv_max_size_mb)
diff --git a/src/report.jl b/src/report.jl
index 008ffc4f6..8ce87a243 100644
--- a/src/report.jl
+++ b/src/report.jl
@@ -159,6 +159,7 @@ function generate_report(results::Vector{ModelResult}, results_root::String,
OpenModelica: $(info.omc_version)
OMC options: $(info.omc_options)
BaseModelica.jl: $(basemodelica_jl_version)
+Solver: $(info.solver)
Filter: $(var_filter)
Reference results: $(ref_results)
CPU: $(info.cpu_model) ($(info.cpu_threads) threads)
diff --git a/src/simulate.jl b/src/simulate.jl
index fe6723aa4..c1f80fc79 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.Rodas5P())
+
+"""
+ 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. `Rodas5P`, `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/summary.jl b/src/summary.jl
index 53ba785ef..847a9c8e7 100644
--- a/src/summary.jl
+++ b/src/summary.jl
@@ -33,6 +33,7 @@ function write_summary(
print(io, " \"cpu_threads\": $(info.cpu_threads),\n")
print(io, " \"ram_gb\": $(@sprintf "%.2f" info.ram_gb),\n")
print(io, " \"total_time_s\": $(@sprintf "%.2f" info.total_time_s),\n")
+ print(io, " \"solver\": \"$(_esc_json(info.solver))\",\n")
print(io, " \"models\": [\n")
for (i, r) in enumerate(results)
sep = i < length(results) ? "," : ""
@@ -74,6 +75,7 @@ Parsed contents of a single `summary.json` file.
- `cpu_threads` — number of logical CPU threads
- `ram_gb` — total system RAM in GiB
- `total_time_s` — wall-clock duration of the full test run in seconds
+- `solver` — fully-qualified solver name, e.g. `"DifferentialEquations.Rodas5P"`
- `models` — vector of per-model dicts; each has keys
`"name"`, `"export"`, `"parse"`, `"sim"`, `"cmp_total"`, `"cmp_pass"`
"""
@@ -92,6 +94,7 @@ struct RunSummary
cpu_threads :: Int
ram_gb :: Float64
total_time_s :: Float64
+ solver :: String
models :: Vector{Dict{String,Any}}
end
@@ -150,6 +153,7 @@ function load_summary(results_root::String)::Union{RunSummary,Nothing}
_int("cpu_threads"),
_float("ram_gb"),
_float("total_time_s"),
+ _str("solver"),
models,
)
end
diff --git a/src/types.jl b/src/types.jl
index b073c7843..18704c5ae 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 `Rodas5P()` 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 ───────────────────────────────────────────────────────────────
"""
@@ -60,6 +79,7 @@ Metadata about a single test run, collected by `main()` and written into both
- `cpu_threads` — number of logical CPU threads
- `ram_gb` — total system RAM in GiB
- `total_time_s` — wall-clock duration of the full test run in seconds
+- `solver` — fully-qualified solver name, e.g. `"DifferentialEquations.Rodas5P"`
"""
struct RunInfo
library :: String
@@ -76,6 +96,7 @@ struct RunInfo
cpu_threads :: Int
ram_gb :: Float64
total_time_s :: Float64
+ solver :: String
end
# ── Result type ────────────────────────────────────────────────────────────────
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"