1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//! Multiple shooting for boundary-value problems, in double-, quad- and octo-double precision.
//!
//! A boundary-value problem asks for the solution of differential equations that meets conditions at two or more
//! places. Multiple shooting splits the interval at nodes, integrates the equations across each piece from the
//! values held at its start, and asks Newton's method to make every piece end where the next one begins. The unknowns
//! are the values at the nodes, the data of series that start the solution at singular endpoints, and global
//! parameters such as an eigenvalue; the residual is the list of mismatches; it is zero exactly when the pieces join
//! into one solution.
//!
//! The crate is the engine of that method, generic over the equations, built on
//! [`multidouble`](https://github.com/nmoinvaz/multidouble)'s arithmetic:
//!
//! * the equations enter through one trait: the Taylor coefficients of their right-hand side at a point, and the
//! series that start the solution at the endpoints;
//! * between the nodes the solution is carried by Taylor series, with steps planned so that each truncation term
//! stays below a tolerance;
//! * the fields may depend on a periodic variable, represented on collocation points, with exact derivatives in it;
//! * the Jacobian is exact, by forward-mode dual numbers over the same code that forms the residual, and so is its
//! product with a vector, from one pass per block;
//! * Newton's method runs in double-double, quad-double or octo-double (multidouble's `Precision`), as the
//! conditioning requires, and the residual can be expanded as a Taylor series in a parameter of the equations.
//!
//! Status: under construction (0.1.0, not published).
//!
//! Modules:
//!
//! * [`equations`]: the [`Equations`] trait, the state and the Taylor work arrays;
//! * [`taylor`]: Taylor steps, paths and the step planner;
//! * [`shooting`]: the layout ([`Shooting`]): nodes, segments, the unknown vector and the residual's blocks;
//! * [`residual`]: the residual F(z) in any precision;
//! * [`jacobian`]: its exact Jacobian by forward-mode duals;
//! * [`jvp`]: the Jacobian-vector product J v by one forward-mode pass per block, without the Jacobian;
//! * [`newton`]: the Newton step and the damped Newton loop;
//! * [`jet`]: the residual's Taylor series in a parameter of the equations;
//! * [`mode`]: the mode matrix, the linearization for perturbations growing at a complex rate, and its determinant;
//! * [`prec`]: helpers for states held as part arrays in any of multidouble's precisions ([`Precision`]:
//! double-double [`Double`], quad-double [`Quad`], octo-double [`Octo`]);
//! * [`periodic`]: collocation grids in the periodic variable and their derivative matrices;
//! * [`projected`]: one field's rows of a block replaced by a projection onto its low harmonics;
//! * [`lane`]: the lane types the engine is generic over;
//! * `control` (feature `mutate`): deliberate errors, the controls of the accuracy checks.
pub use ;
pub use ;
pub use multidouble;
pub use DD;
pub use ;
pub use ;
pub use Native;
pub use ;
pub use ProjectedRows;
pub use ;
pub use Plan;