Solution Retrieval - PDESolutions

MethodOfLines automatically wraps the ODESolution that results from its generated ODEProblem in a PDESolution object, reshaping it and providing a convenient interface for accessing your results, as well as interpolations.

Solution Retrieval

For example, for a PDESystem such as the following:

@named pdesys = PDESystem(eqs, bcs, domains, [t, x, y], [u(t, x, y), v((t, x, y))])

after the solve:

sol = solve(prob)

You can access the solutions for u and v like this:

solu = sol[u(t, x, y)]
solv = sol[v(t, x, y)]

Note that the result in this case will be a 3D Array, dimensions matching the order that they appear in the argument signature of the variable. The time variable must appear either first or last in the arguments, or an error will be thrown.

Grid Retrieval

To access the discretized axes for the independent variables, simply index the solution with the independent variable itself:

disc_t = sol[t]
disc_x = sol[x]
disc_y = sol[y]

Interpolations

To access an interpolation of the solution, call the sol object:

#Interpolated solution of `u` at t = 0.4, x = 1.7, y = 2.6
u_interp = sol(0.4, 1.7, 2.6, dv = u(t, x, y))

To retrieve an interpolation in all dependent variables as a vector, leave off the dv argument. Be sure to supply a value for every independent variable in the order that they appear in sol.ivs. The vector is in the order of sol.dvs.

uv_interp = sol(0.4, 1.7, 2.6)

Original solution

The original ODESolution is stored in sol.original_sol.

To avoid wrapping entirely, use the wrap keyword argument to solve:

sol = solve(prob, Tsit5(); wrap = Val(false))
> typeof(sol)
ODESolution

This is useful where speed is important, but the shape of the solution is not.