# Error using SplitODEProblem: type GMRESIterable has no field reltol

Hi,

I have been trying to use a `SplitODEProblem` to solve the equations of motion of a pulse propagating along a transmission line but I get the following message:
` ERROR: LoadError: type GMRESIterable has no field reltol`
I am using DifferentialEquation v6.16.0.
Here’s a code snippet that reproduces the issue:

``````using DifferentialEquations

struct TL2
L::Float64
C::Float64
Rl::Float64
N::Int
end

struct Drive2{F}
Rd::Float64
waveform::F
end

struct GaussianPulse2
amp::Float64
t0::Float64
width::Float64
end

V(s::GaussianPulse2, t)  = s.amp*exp.( -(t-s.t0)^2/(2*s.width) )/sqrt(2π*s.width)
(s::GaussianPulse2)(t) = V(s, t)

struct Circuit2{F}
tl::TL2
drive::Drive2{F}
end

function matrix_tl(tl::TL2)
L = tl.L
C = tl.C
N = tl.N
Rl = tl.Rl

A = zeros(2*(N+1)+2, 2*(N+1)+2)
A[1,3] = 1.0
A[N+3, N+2] = 1.0/Rl/C
A[N+3, N+3] = -1.0/Rl/C
for i in 3:N+2
A[i,(N+1)+ i] = 1.0/L
A[i,(N+1)+ i+1] = -1.0/L
A[(N+1)+ i + 1, i ] = 1.0/C
A[(N+1)+ i + 1, i+1] = -1.0/C
end
return DiffEqArrayOperator(A)
end

matrix_tl(circuit::Circuit2) = matrix_tl(circuit.tl)

function drive_tl(dy, y, circuit::Circuit2, t)
Rd = circuit.drive.Rd
N = circuit.tl.N
dy[2 + (N+1) + 1] = Vd_dot - Rd*dy[3] - dy[2]
end

g = GaussianPulse2(0.3, 1.0, 1e-3)
drive = Drive2(50.0, g)
tl = TL2(0.02, 0.005, 0.008, 51)
circuit = Circuit2(tl, drive)

y0 = zeros(2*(tl.N+1)+2)
prob = SplitODEProblem(matrix_tl(circuit), drive_tl, y0, (0.0, 5.0),  circuit)
sol = solve(prob, tstops=(1.0))
``````

Thanks for letting me know if you how how to fix this error.

P.S. Any comments that would help speedup the code is also highly appreciated

Use Julia v1.5 and the latest package versions. This is just a versioning error. Delete packages holding things back. Share `]st` and `]st -m` if you need help identifying the offending package.

Your problem is unstable though, so when it solves it diverges. `dy[2 + (N+1) + 1] = Vd_dot - Rd*dy[3] - dy[2]` as a line doesn’t make sense in an ODE because `dy[3]` and `dy[2]` are undefined here, so this has a random divergent solution.

Thanks @ChrisRackauckas. Guidance on how to fix the versioning error is appreciated, here is the `]st`:

``````  [6e4b80f9] BenchmarkTools v0.5.0
[0f109fa4] BifurcationKit v0.1.3
[336ed68f] CSV v0.8.3
[717857b8] DSP v0.6.10
[a93c6f00] DataFrames v0.22.5
[0c46a032] DifferentialEquations v6.16.0
[f6369f11] ForwardDiff v0.10.16
[7073ff75] IJulia v1.23.1
[916415d5] Images v0.23.3
[c601a237] Interact v0.10.3
[98e50ef6] JuliaFormatter v0.13.2
[b964fa9f] LaTeXStrings v1.2.0
[961ee093] ModelingToolkit v3.20.1
[6741aa20] Neptune v0.14.0
[1dea7af3] OrdinaryDiffEq v5.42.3
[d96e819e] Parameters v0.12.2
[18e31ff7] Peaks v0.3.0
[a03496cd] PlotlyBase v0.4.3
[f0f68f2c] PlotlyJS v0.14.0
[91a5bcdd] Plots v1.10.5
[c3e4b0f8] Pluto v0.12.20
[d330b81b] PyPlot v2.9.0
[112f6efa] VegaLite v2.3.1
[0f1e0344] WebIO v0.8.15
[e88e6eb3] Zygote v0.6.3
``````

and of `]st -m`;

``````[c3fe647b] AbstractAlgebra v0.11.2
[621f4979] AbstractFFTs v1.0.0
[1520ce14] AbstractTrees v0.3.3
[ec485272] ArnoldiMethod v0.1.0
[7d9fca2a] Arpack v0.5.0
[68821587] Arpack_jll v3.8.0+0
[4fba245c] ArrayInterface v2.14.17
[4c555306] ArrayLayouts v0.3.8
[56f22d72] Artifacts v1.3.0
[bf4720bc] AssetRegistry v0.1.0
[13072b0f] AxisAlgorithms v1.0.0
[39de3d68] AxisArrays v0.4.3
[aae01518] BandedMatrices v0.15.15
[6e4b80f9] BenchmarkTools v0.5.0
[0f109fa4] BifurcationKit v0.1.3
[9e28174c] BinDeps v1.0.2
[8e7c35d0] BlockArrays v0.12.11
[764a87c0] BoundaryValueDiffEq v2.7.1
[6e34b625] Bzip2_jll v1.0.6+5
[fa961155] CEnum v0.4.1
[70588ee8] CSSUtil v0.1.1
[00ebfdb7] CSTParser v2.5.0
[336ed68f] CSV v0.8.3
[83423d85] Cairo_jll v1.16.0+6
[a603d957] CanonicalTraits v0.2.4
[324d7699] CategoricalArrays v0.9.2
[082447d4] ChainRules v0.7.52
[d360d2e6] ChainRulesCore v0.9.29
[944b1d66] CodecZlib v0.7.0
[35d6a980] ColorSchemes v3.10.2
[3da002f7] ColorTypes v0.10.9
[c3611d14] ColorVectorSpace v0.8.7
[5ae59095] Colors v0.12.6
[861a8166] Combinatorics v1.0.2
[a80b9123] CommonMark v0.7.2
[38540f10] CommonSolve v0.2.0
[bbf7d656] CommonSubexpressions v0.3.0
[34da2185] Compat v3.25.0
[e66e0078] CompilerSupportLibraries_jll v0.3.4+0
[ed09eef8] ComputationalResources v0.3.2
[8f4d0f93] Conda v1.5.0
[88cd18e8] ConsoleProgressMonitor v0.1.2
[187b0558] ConstructionBase v1.1.0
[d38c429a] Contour v0.5.7
[150eb455] CoordinateTransformations v0.6.1
[a8cc5b0e] Crayons v4.0.4
[dc8bdbbb] CustomUnitRanges v1.0.1
[717857b8] DSP v0.6.10
[9a962f9c] DataAPI v1.6.0
[a93c6f00] DataFrames v0.22.5
[864edb3b] DataStructures v0.17.20
[e2d170a0] DataValueInterfaces v1.0.0
[e7dc6d0d] DataValues v0.4.13
[bcd4f6db] DelayDiffEq v5.24.1
[2b5f629d] DiffEqBase v6.44.3
[459566f4] DiffEqCallbacks v2.13.5
[5a0ffddc] DiffEqFinancial v2.4.0
[c894b116] DiffEqJump v6.10.0
[77a26b50] DiffEqNoiseProcess v5.6.0
[055956cb] DiffEqPhysics v3.9.0
[163ba53b] DiffResults v1.0.3
[b552c78f] DiffRules v1.0.2
[0c46a032] DifferentialEquations v6.16.0
[c619ae07] DimensionalPlotRecipes v1.2.0
[b4f34e82] Distances v0.10.2
[31c24e10] Distributions v0.23.8
[ffbed154] DocStringExtensions v0.8.3
[e30172f5] Documenter v0.26.2
[497a8b3b] DoubleFloats v1.1.15
[5ae413db] EarCut_jll v2.1.5+1
[da5c29d0] EllipsisNotation v1.0.0
[2e619515] Expat_jll v2.2.7+6
[d4d017d3] ExponentialUtilities v1.8.0
[e2ba6199] ExprTools v0.1.3
[8f5d6c58] EzXML v1.1.0
[c87230d0] FFMPEG v0.4.0
[b22a6f82] FFMPEG_jll v4.3.1+4
[4f61f5a4] FFTViews v0.3.1
[7a1cc6ca] FFTW v1.3.2
[f5851436] FFTW_jll v3.3.9+7
[9aa1b823] FastClosures v0.3.2
[5789e2e9] FileIO v1.4.5
[8fc22ac5] FilePaths v0.8.1
[48062228] FilePathsBase v0.9.9
[1a297f60] FillArrays v0.8.14
[6a86dc24] FiniteDiff v2.8.0
[53c48c17] FixedPointNumbers v0.8.4
[a3f928ae] Fontconfig_jll v2.13.1+14
[59287772] Formatting v0.4.2
[f6369f11] ForwardDiff v0.10.16
[d7e528f0] FreeType2_jll v2.10.1+5
[559328eb] FriBidi_jll v1.0.5+6
[069b7b12] FunctionWrappers v1.1.2
[de31a74c] FunctionalCollections v0.5.0
[fb4132e2] FuzzyCompletions v0.4.0
[0656b61e] GLFW_jll v3.3.2+1
[28b8d3ca] GR v0.54.0
[d2c73de3] GR_jll v0.53.0+0
[6b9d7cbe] GeneralizedGenerated v0.2.8
[01680d73] GenericSVD v0.3.0
[c145ed77] GenericSchur v0.4.1
[5c1252a2] GeometryBasics v0.3.9
[78b55507] Gettext_jll v0.20.1+7
[7746bdde] Glib_jll v2.59.0+4
[c27321d9] Glob v1.3.0
[a2bd30eb] Graphics v1.1.0
[42e2da0e] Grisu v1.0.0
[cd3eb016] HTTP v0.9.0
[9fb69e20] Hiccup v0.2.2
[0e44f5e4] Hwloc v1.2.0
[e33a78d0] Hwloc_jll v2.4.0+0
[7073ff75] IJulia v1.23.1
[b5f81e59] IOCapture v0.1.1
[7869d1d1] IRTools v0.4.2
[bbac6d45] IdentityRanges v0.3.1
[615f187c] IfElse v0.1.0
[2803e5a7] ImageAxes v0.6.8
[a09fc81d] ImageCore v0.8.20
[51556ac3] ImageDistances v0.2.10
[6a3955dd] ImageFiltering v0.6.19
[787d08f9] ImageMorphology v0.2.9
[2996bd0c] ImageQualityIndexes v0.2.1
[4e3cecfd] ImageShow v0.2.3
[02fcd773] ImageTransformations v0.8.9
[916415d5] Images v0.23.3
[9b13fd28] IndirectArrays v0.5.1
[d25df0c9] Inflate v0.1.2
[83e8ac13] IniFile v0.5.0
[1d5cc7b8] IntelOpenMP_jll v2018.0.3+2
[c601a237] Interact v0.10.3
[d3863d7c] InteractBase v0.10.6
[a98d9a8b] Interpolations v0.13.1
[8197267c] IntervalSets v0.5.2
[d8418881] Intervals v1.5.0
[41ab1584] InvertedIndices v1.0.0
[c8e1da08] IterTools v1.3.0
[1c8ee90f] IterableTables v1.0.0
[42fd0dbc] IterativeSolvers v0.8.5
[82899510] IteratorInterfaceExtensions v1.0.0
[692b3bcd] JLLWrappers v1.2.0
[97c1335a] JSExpr v0.5.2
[682c06a0] JSON v0.21.1
[7d188eb4] JSONSchema v0.3.3
[aacddb02] JpegTurbo_jll v2.0.1+3
[98e50ef6] JuliaFormatter v0.13.2
[b14d175d] JuliaVariables v0.2.3
[bcebb21b] Knockout v0.2.4
[0b1a1467] KrylovKit v0.5.2
[c1c5ebd0] LAME_jll v3.100.0+3
[dd4b983a] LZO_jll v2.10.0+3
[b964fa9f] LaTeXStrings v1.2.0
[2ee39098] LabelledArrays v1.5.0
[23fbe1c1] Latexify v0.14.7
[50d2b5c4] Lazy v0.15.1
[4af54fe1] LazyArtifacts v1.3.0
[dd192d2f] LibVPX_jll v1.9.0+1
[e9f186c6] Libffi_jll v3.2.1+4
[d4300ac3] Libgcrypt_jll v1.8.5+4
[7e76a0d4] Libglvnd_jll v1.3.0+3
[94ce4f54] Libiconv_jll v1.16.0+7
[4b2f31a3] Libmount_jll v2.34.0+3
[89763e89] Libtiff_jll v4.1.0+2
[38a345b3] Libuuid_jll v2.34.0+7
[093fc24a] LightGraphs v1.3.5
[d3d80556] LineSearches v7.1.1
[7a12625a] LinearMaps v3.2.0
[e6f89c97] LoggingExtras v0.4.5
[bdcacae8] LoopVectorization v0.10.0
[d00139f3] METIS_jll v5.1.0+5
[856f044c] MKL_jll v2021.1.1+1
[d8e11817] MLStyle v0.4.6
[1914dd2f] MacroTools v0.5.6
[dbb5928d] MappedArrays v0.3.0
[739be429] MbedTLS v1.0.3
[c8ffd9c3] MbedTLS_jll v2.16.8+1
[442fdcdd] Measures v0.3.1
[e1d29d7a] Missings v0.4.5
[78c3b35d] Mocking v0.7.1
[961ee093] ModelingToolkit v3.20.1
[e94cdb99] MosaicViews v0.2.4
[99f44e22] MsgPack v1.1.0
[f9640e96] MultiScaleArrays v1.8.1
[ffc61752] Mustache v1.0.10
[a975b10e] Mux v0.7.5
[d41bc354] NLSolversBase v7.7.1
[2774e3e8] NLsolve v4.5.1
[77ba4419] NaNMath v0.3.5
[71a1bf82] NameResolution v0.1.5
[6741aa20] Neptune v0.14.0
[2bd173c7] NodeJS v1.1.1
[4d1e1d77] Nullables v1.0.0
[510215fc] Observables v0.3.3
[6fe1bfb0] OffsetArrays v1.6.0
[e7412a2a] Ogg_jll v1.3.4+2
[4536629a] OpenBLAS_jll v0.3.9+5
[458c3c95] OpenSSL_jll v1.1.1+6
[efe28fd5] OpenSpecFun_jll v0.5.3+4
[429524aa] Optim v1.2.4
[91d4177d] Opus_jll v1.3.1+3
[bac558e1] OrderedCollections v1.4.0
[1dea7af3] OrdinaryDiffEq v5.42.3
[2f80f16e] PCRE_jll v8.42.0+4
[90014a1f] PDMats v0.10.1
[65888b18] ParameterizedFunctions v5.6.0
[d96e819e] Parameters v0.12.2
[69de0a69] Parsers v1.0.15
[18e31ff7] Peaks v0.3.0
[fa939f87] Pidfile v1.2.0
[30392449] Pixman_jll v0.40.0+0
[995b91a9] PlotUtils v1.0.10
[a03496cd] PlotlyBase v0.4.3
[f0f68f2c] PlotlyJS v0.14.0
[91a5bcdd] Plots v1.10.5
[c3e4b0f8] Pluto v0.12.20
[e409e4f3] PoissonRandom v0.4.0
[f27b6e38] Polynomials v1.2.0
[2dfb63ee] PooledArrays v1.1.0
[85a6dd25] PositiveFactorizations v0.2.4
[8162dcfd] PrettyPrint v0.2.0
[08abe8d2] PrettyTables v0.11.1
[33c8b6b6] ProgressLogging v0.1.4
[92933f4c] ProgressMeter v1.5.0
[438e738f] PyCall v1.92.2
[d330b81b] PyPlot v2.9.0
[ede63266] Qt_jll v5.15.2+1
[74087812] Random123 v1.3.1
[fb686558] RandomExtensions v0.4.3
[e6cf234a] RandomNumbers v1.4.0
[b3c3ace0] RangeArrays v0.3.2
[c84ed2f1] Ratios v0.4.0
[3cdcf5f2] RecipesBase v1.1.1
[01d81517] RecipesPipeline v0.3.1
[731186ca] RecursiveArrayTools v2.11.0
[f2c3362d] RecursiveFactorization v0.1.11
[189a3867] Reexport v0.2.0
[ae029012] Requires v1.1.2
[ae5879a3] ResettableStacks v1.1.0
[79098fc4] Rmath v0.6.1
[f50d1b31] Rmath_jll v0.2.2+1
[f2b01f46] Roots v1.0.8
[6038ab10] Rotations v1.0.2
[476501e8] SLEEFPirates v0.6.8
[1bc83da4] SafeTestsets v0.0.1
[0bca4576] SciMLBase v1.7.3
[6c6a2e73] Scratch v1.0.3
[91c51154] SentinelArrays v1.2.16
[efcf1570] Setfield v0.5.4
[992d4aef] Showoff v0.3.2
[699a6c99] SimpleTraits v0.9.3
[b85f4697] SoftGlobalScope v1.1.0
[a2af1166] SortingAlgorithms v0.3.1
[47a9eef4] SparseDiffTools v1.13.0
[276daf66] SpecialFunctions v0.10.3
[90137ffa] StaticArrays v0.12.5
[2913bbd2] StatsBase v0.33.3
[4c63d2b9] StatsFuns v0.9.6
[789caeaf] StochasticDiffEq v6.25.0
[09ab397b] StructArrays v0.4.4
[856f2bd8] StructTypes v1.2.3
[bea87d4a] SuiteSparse_jll v5.4.0+9
[fb77eaff] Sundials_jll v5.2.0+1
[d1185830] SymbolicUtils v0.5.2
[5e66a065] TableShowUtils v0.2.5
[3783bdb8] TableTraits v1.0.0
[382cd787] TableTraitsUtils v1.0.1
[bd369af6] Tables v1.3.2
[5d786b92] TerminalLoggers v0.1.3
[e0df1984] TextParse v1.0.1
[06e1c1a7] TiledIteration v0.2.5
[f269a46b] TimeZones v1.5.3
[a759f4b9] TimerOutputs v0.5.7
[0796e94c] Tokenize v0.5.13
[3bb67fe8] TranscodingStreams v0.9.5
[a2a6695c] TreeViews v0.3.0
[30578b45] URIParser v0.4.1
[5c2747f8] URIs v1.2.0
[3a884ed6] UnPack v1.0.2
[b8865327] UnicodePlots v1.3.0
[1986cc42] Unitful v1.6.0
[3d5dd08c] VectorizationBase v0.16.2
[239c3e63] Vega v2.0.0
[112f6efa] VegaLite v2.3.1
[81def892] VersionParsing v1.2.0
[19fa3120] VertexSafeGraphs v0.1.2
[a2964d1f] Wayland_jll v1.17.0+4
[2381bf8a] Wayland_protocols_jll v1.18.0+4
[ea10d353] WeakRefStrings v0.6.2
[0f1e0344] WebIO v0.8.15
[104b5d7c] WebSockets v1.5.9
[cc8bc4a8] Widgets v0.6.2
[efce3f68] WoodburyMatrices v0.5.3
[02c8fc9c] XML2_jll v2.9.10+3
[aed1982a] XSLT_jll v1.1.33+4
[4f6342f7] Xorg_libX11_jll v1.6.9+4
[0c0b7dd1] Xorg_libXau_jll v1.0.9+4
[935fb764] Xorg_libXcursor_jll v1.2.0+4
[a3789734] Xorg_libXdmcp_jll v1.1.3+4
[1082639a] Xorg_libXext_jll v1.3.4+4
[d091e8ba] Xorg_libXfixes_jll v5.0.3+4
[a51aa0fd] Xorg_libXi_jll v1.7.10+4
[d1454406] Xorg_libXinerama_jll v1.1.4+4
[ec84b674] Xorg_libXrandr_jll v1.5.2+4
[ea2f1a96] Xorg_libXrender_jll v0.9.10+4
[c7cfdc94] Xorg_libxcb_jll v1.13.0+3
[cc61e674] Xorg_libxkbfile_jll v1.1.0+4
[12413925] Xorg_xcb_util_image_jll v0.4.0+1
[2def613f] Xorg_xcb_util_jll v0.4.0+1
[975044d2] Xorg_xcb_util_keysyms_jll v0.4.0+1
[0d47668e] Xorg_xcb_util_renderutil_jll v0.3.9+1
[c22f9ab0] Xorg_xcb_util_wm_jll v0.4.1+1
[35661453] Xorg_xkbcomp_jll v1.4.2+4
[33bec58e] Xorg_xkeyboard_config_jll v2.27.0+4
[c5fb5394] Xorg_xtrans_jll v1.4.0+3
[c2297ded] ZMQ v1.2.1
[8f1865be] ZeroMQ_jll v4.3.2+6
[a5390f91] ZipFile v0.9.3
[83775a58] Zlib_jll v1.2.11+18
[3161d3a3] Zstd_jll v1.4.8+0
[e88e6eb3] Zygote v0.6.3
[700de1a5] ZygoteRules v0.2.1
[0ac62f75] libass_jll v0.14.0+4
[f638f0a6] libfdk_aac_jll v0.1.6+4
[b53b4c65] libpng_jll v1.6.37+6
[a9144af2] libsodium_jll v1.0.18+1
[f27f6e37] libvorbis_jll v1.3.6+6
[1270edf5] x264_jll v2020.7.14+2
[dfaa095f] x265_jll v3.0.0+3
[d8fb68d0] xkbcommon_jll v0.9.1+5
[2a0f44e3] Base64
[8bb1440f] DelimitedFiles
[8ba89e20] Distributed
[7b1f6079] FileWatching
[9fa8497b] Future
[b77e0a4c] InteractiveUtils
[76f85450] LibGit2
[8f399da3] Libdl
[37e2e46d] LinearAlgebra
[56ddb016] Logging
[d6f4376e] Markdown
[44cfe95a] Pkg
[de0858da] Printf
[3fa0cd96] REPL
[9a3f8284] Random
[ea8e919c] SHA
[9e88b42a] Serialization
[1a1011a3] SharedArrays
[6462fe0b] Sockets
[2f01184e] SparseArrays
[10745b16] Statistics
[4607b0f0] SuiteSparse
[8dfed614] Test
[cf7118a7] UUIDs
[4ec0a83e] Unicode
``````

Concerning the fact that `dy[3]` and `dy[2]` are undefined, it’s partly due to a mistake when I simplified the problem before posting it and partly because I thought that the function `drive_tl` had access to the `dy` defined by `DiffEqArrayOperator(A)*y`

Thanks

It looks like the error `type GMRESIterable has no field reltol` was caused by a `using OrdinaryDiffEq` that was ran in a file included above the code snippet that I shared (i.e. seems like there was a conflict between `OrdinaryDiffEq` and `DifferentialEquations`). Replacing `OrdinaryDiffEq` by `DifferentialEquations` fixed the issue.

I run into an unstability problem however if I try to run the code defined as a `SplitODEProblem` whereas I get the expected result using the problem defined in term of an `ODEProblem`. here’s the code:

``````using DifferentialEquations
using Zygote
using Plots

struct TL2
L::Float64
C::Float64
Rl::Float64
N::Int
end

struct Drive2{F}
Rd::Float64
waveform::F
end

struct GaussianPulse2
amp::Float64
t0::Float64
width::Float64
end

V(s::GaussianPulse2, t)  = s.amp*exp.( -(t-s.t0)^2/(2*s.width) )/sqrt(2π*s.width)
(s::GaussianPulse2)(t) = V(s, t)

struct Circuit2{F}
tl::TL2
drive::Drive2{F}
end

function matrix_tl(tl::TL2)
L = tl.L
C = tl.C
N = tl.N
Rl = tl.Rl

A = zeros(2*(N+1)+2, 2*(N+1)+2)
A[1,3] = 1.0
A[N+3, N+2] = 1.0/Rl/C
A[N+3, N+3] = -1.0/Rl/C
A[(N+1)+ 3 + 1, 3 ] = 1.0/C
A[(N+1)+ 3 + 1, 3+1] = -1.0/C
for i in 4:N+2
A[i,(N+1)+ i] = 1.0/L
A[i,(N+1)+ i+1] = -1.0/L
A[(N+1)+ i + 1, i ] = 1.0/C
A[(N+1)+ i + 1, i+1] = -1.0/C
end

return DiffEqArrayOperator(A)
end

matrix_tl(circuit::Circuit2) = matrix_tl(circuit.tl)

function drive_tl(dy, y, circuit::Circuit2, t)
Rd = circuit.drive.Rd
N = circuit.tl.N
L = circuit.tl.L

dy[3] = (y[N+4]-y[N+5])/L
dy[2] = 0.0  # a non-linear function in the general case
dy[2 + (N+1) + 1] = Vd_dot - Rd*dy[3] - dy[2]

end

##

function eom!(dy,y, circuit::Circuit2,t)
L = circuit.tl.L
C = circuit.tl.C
N = circuit.tl.N
Rl = circuit.tl.Rl

dy[1] = y[3]
dy[2] =  0.0 # a non-linear function in the general case
dy[3] = (y[(N+3) + 1] - y[(N+3) + 2])/L
dy[(N+3) + 1] = gradient(circuit.drive.waveform, t)[1] - circuit.drive.Rd*dy[3] - dy[2]

@inbounds @simd for k = 2:N
dy[k + 2] = (y[(N+3) + k] - y[(N+3) + k+1])/L
dy[k + (N+3)] = (y[2 + k-1] - y[2 + k])/C
end

dy[(N+3)] = (y[N+2] - y[N+3])/Rl/C

dy[(N+1) + (N+3)] = (y[2 + (N+1)-1] - y[2 + (N+1)])/C
end;

##
t0 = 0.50
tend = 3.0
g = GaussianPulse2(0.3, t0, 1e-3)
drive = Drive2(50.0, g)
tl = TL2(0.02, 0.005, 0.008, 51)
circuit = Circuit2(tl, drive)
y0 = zeros(2*(tl.N+1)+2)
##
prob = ODEProblem(eom!, y0, (0.0, tend),  circuit)
sol = solve(prob, tstops=(t0));
##
split_prob = SplitODEProblem(matrix_tl(circuit), drive_tl, y0, (0.0, tend),  circuit)
split_sol = solve(split_prob, tstops=(t0))
``````

So I suppose my question is now: how do I get rid of the unstability issue when using a `SplitODEProblem` and should I expect any performance improvement using a `SplitODEProblem` (provided it works) vs `ODEProblem`?

You are 2 major versions on ModelingToolkit behind. If you do `]add ModelingToolkit@5` it’ll probably tell you what the offending package is.

Which ODE solver is being used in the two cases? `sol.alg` will say. My guess is we might need a better default on SplitODEProblem.

Looks like `ModelingToolkit` installed without any issue:

``````add ModelingToolkit@5

Updating registry at `C:\Users\bjd3\.julia\registries\General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
Resolving package versions...
Updating `K:\bjd3\Test\Project.toml`
[961ee093] + ModelingToolkit v5.6.4
No Changes to `K:\bjd3\Test\Manifest.toml`
``````

Here’s the algorithm that works well for the `ODEProblem`:

``````CompositeAlgorithm{Tuple{Tsit5, Rosenbrock23{0, false, DefaultLinSolve, DataType}}, OrdinaryDiffEq.AutoSwitchCache{Tsit5, Rosenbrock23{0, false, DefaultLinSolve, DataType}, Rational{Int64}, Int64}}((Tsit5(), Rosenbrock23{0, false, DefaultLinSolve, DataType}(DefaultLinSolve(nothing, nothing), Val{:forward})), OrdinaryDiffEq.AutoSwitchCache{Tsit5, Rosenbrock23{0, false, DefaultLinSolve, DataType}, Rational{Int64}, Int64}(9553, Tsit5(), Rosenbrock23{0, false, DefaultLinSolve, DataType}(DefaultLinSolve(nothing, nothing), Val{:forward}), true, 10, 3, 9//10, 9//10, 2, false))
``````

and for the `SplitODEProblem`:

``````KenCarp4{0, false, DefaultLinSolve, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}}, DataType}(DefaultLinSolve(nothing, nothing), NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}}(1//100, 10, 1//5, 1//5), Val{:forward}, true, :linear, :PI)
``````

Also, following Handling Instability When Solving ODE Problems - #5 by ChrisRackauckas,
I tried

``````split_sol = solve(split_prob, tstops=(t0), Rodas4(autodiff=false))
``````

with `split_prob` defined as previously posted. It breaks after 6 points and I get:

``````Warning: dt <= dtmin. Aborting. There is either an error in your model specification or the true solution is unstable.
└ @ SciMLBase C:\Users\bjd3\.julia\packages\SciMLBase\sRVBG\src\integrator_interface.jl:342
``````

I also tried
`split_sol = solve(split_prob, tstops=(t0), Rosenbrock23(autodiff=false)) `
but that was still running after a few minutes whereas the `ODEProblem` approach solves in less than a minute so I killed it before it was over… I can time it if you think it’d be useful to see if the integration finally gets done.

Are you sure the second part of the problem is non-stiff?