Glossary and quick reference

TermMeaning in a bulk Parareal run
ChunkOne of N time intervals
StartA stored initial value for a chunk; there are N
Boundary valuesThe starts plus the terminal fine output; there are N+1
Fine batchA round of fine propagation from the current starts
SweepA coarse correction between fine batches
SeamA fine endpoint minus the neighbouring stored start, up to sign
Exact completionMatching the chunked fine reference after at most N batches
Referencereference(problem, parareal), not the exact ODE solution
WeightPer-unit-time discount base; diagnostics store the value used by each batch
ζMeasured coarse/fine cost ratio for one chunk
WindowA MoWi subproblem, possibly overlapping its predecessor
ClippedA genuinely shortened endpoint window, excluded from default MoWi statistics

For finite bulk returns, fine_batches=sweeps+1. Partial failures need actual recorded counts. A pipeline has local iterations and no global batch count.

Common calls

The following is a reference list; identifiers such as problem and par must first be constructed as in the guided tour.

TaskCall
Default mixed update testRelativeUpdate(atol=1e-12, rtol=1e-9)
Mean discounted defectWeightedDefect(ϵ=1e-9, weight=FixedWeight(1))
Maximum discounted defectWeightedDefect(ϵ=1e-9, weight=FixedWeight(1), p=Inf)
Empirical same-chunk weightSecantWeight(w=1, τ=1e-10)
Disable early acceptanceNoStop() (budget still applies)
Save boundary historiessolve(problem, par; history=:interfaces)
Save full iteratessolve(problem, par; history=:iterates)
Inspect continuityseams(r), maxseam(r)
Compare to referenceWnorm(r, reference(problem, par))
Read measured weightlast(r.diagnostics.weights) after checking it is nonempty
Estimate costtheoretical_speedup(r, costratio(problem, par))
Change configurationremake(par; N=8, criterion=NoStop())

Wnorm measures a weighted interface distance using the last measured base. Its reference solve is extra work for validation, not part of ordinary stopping.

Diagnose before tuning

ObservationCheck
Initial Inf relative-update residualExpected before a corrected previous iterate exists; read status
Empty residual historyThe coarse pass may have failed before a fine batch
Batch count near NCoarse stability/accuracy, chunk length, phase errors, and tolerance
Small count but large seamsAveraging or discounting may permit this; inspect unweighted defects
Model speed-up below oneCoarse cost can outweigh saved batches
contractionrate is NaNFewer than two positive finite residuals are available
Full-history request fails on reuseThe solution was not allocated with history=:iterates
Cache reuse failsCheck state type/shape, chunk count, time span, and solver output type

Reproducible and meaningful measurements

Record package versions and source revisions, Julia version, platform, backend, thread/rank counts, problem parameters, criteria, and floating-point types. Retain status, residuals, weights, fine/coarse call counts, and accuracy diagnostics. Save seeds whenever initial conditions, forcing, or analysis use randomness. Deterministic tests can establish agreement for a specified configuration; they do not promise bitwise agreement across platforms, BLAS libraries, compiler versions, random right-hand sides, or different operation orders.

Store portable tables alongside Julia-specific serialized records. Only deserialize trusted Julia files. Include a reference-completion check and a step-refinement check appropriate to the accuracy claim. Benchmark warmed-up runs and state whether setup, collection, and communication are included. Cache reuse reduces setup cost but does not make it zero. The tiny tutorial problems teach the API; they are not demonstrations of parallel speed-up.