Convergence Simulations

# Convergence Simulations

The convergence simulation type is useful for deriving order of convergence estimates from a group of simulations. This object will automatically assemble error vectors into a more useful manner and provide plotting functionality. Convergence estimates are also given by pair-wise estimates.

One can automatically have DifferentialEquations.jl perform the error analysis by passing a `ConvergenceSimulation` a vector of solutions, or using one of the provided `test_convergence` functions. These will give order of convergence estimates and provide plotting functionality. This requires that the true solution was provided in the problem definition.

`ConvergenceSimulation`s can either be created by passing the constructor the appropriate solution array or by using one of the provided `test_convergence` functions.

## The ConvergenceSimulation Type

A type which holds the data from a convergence simulation.

### Fields

• `solutions::Array{<:DESolution}`: Holds all the PdeSolutions.

• `errors`: Dictionary of the error calculations. Can contain:

• `h1Errors`: Vector of the H1 errors.
• `l2Errors`: Vector of the L2 errors.
• `maxErrors`: Vector of the nodal maximum errors.
• `node2Errors`: Vector of the nodal l2 errors.
• `N`: The number of simulations.

• `auxdata`: Auxillary data of the convergence simluation. Entries can include:

• `dts`: The dt's in the simulations.
• `dxs`: The dx's in the simulations.
• `μs`: The CFL μ's in the simulations.
• `νs`: The CFL ν's in the simulations.
• `𝒪est`: Dictionary of order estimates. Can contain:

• `ConvEst_h1`: The H1 error order of convergence estimate for the convergence simulation. Generated via `log2(error[i+1]/error[i])`. Thus only valid if generated by halving/doubling the dt/dx. If alternate scaling, modify by dividing of log(base,ConvEst_h1)
• `ConvEst_l2`: The L2 error order of convergence estimate for the convergence simulation. Generated via `log2(error[i+1]/error[i])`. Thus only valid if generated by halving/doubling the dt/dx. If alternate scaling, modify by dividing of log(base,ConvEst_l2)
• `ConvEst_max`: The nodal maximum error order of convergence estimate for the convergence simulation. Generated via `log2(error[i+1]/error[i])`. Thus only valid if generated by halving/doubling the dt/dx. If alternate scaling, modify by dividing of log(base,ConvEst_max)
• `ConvEst_node2`: The nodal l2 error order of convergence estimate for the convergence simulation. Generated via `log2(error[i+1]/error[i])`. Thus only valid if generated by halving/doubling the dt/dx. If alternate scaling, modify by dividing of log(base,ConvEst_node2)
• `convergence_axis`: The axis along which convergence is calculated. For example, if we calculate the dt convergence, convergence_axis is the dts used in the calculation.

## Plot Functions

The plot functionality is provided by a Plots.jl recipe. What is plotted is a line series for each calculated error along the convergence axis. To plot a convergence simulation, simply use:

``plot(sim::ConvergenceSimulation)``

All of the functionality (keyword arguments) provided by Plots.jl are able to be used in this command. Please see the Plots.jl documentation for more information.

## ODE

`test_convergence(dts::AbstractArray,prob::AbstractODEProblem)`

Tests the order of the time convergence of the given algorithm on the given problem solved over the given dts. Keyword arguments are passed to the ODE solver.

## SDE

`test_convergence(dts::AbstractArray,prob::AbstractSDEProblem)`

Tests the strong order time convergence of the given algorithm on the given problem solved over the given dts. Keyword arguments are passed to the ODE solver. Except:

• `numMonte`: The number of simulations for each dt. Default is 10000.

### Order Estimation

`calc𝒪estimates(error::Vector{Number})``

Computes the pairwise convergence estimate for a convergence test done by halving/doubling stepsizes via

log2(error[i+1]/error[i])

Returns the mean of the convergence estimates.