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
//! Full AMR quad-tree/oct-tree dynamic refinement framework.
//!
//! # Modules
//!
//! - [`quadtree`]: 2-D quad-tree with Morton ordering, `CellId`, `CellData`,
//! `RefinementCriterion`, `GradientCriterion`
//! - [`octree`]: 3-D oct-tree with 3-D Morton ordering (`OctTree`, `OctCellId`, …)
//! - [`operators`]: Conservative prolongation and restriction operators
//! (`AmrOperators`)
//! - [`level_set`]: Level-set interface tracking on a quad-tree (`LevelSet`)
//!
//! # Quick Example
//!
//! ```
//! use scirs2_integrate::amr::quadtree::{QuadTree, GradientCriterion};
//! use scirs2_integrate::amr::operators::AmrOperators;
//!
//! // Build a 2-D quad-tree over [0,1]²
//! let mut tree = QuadTree::new([0.0, 1.0, 0.0, 1.0], 4, 2);
//! let root = scirs2_integrate::amr::quadtree::CellId::new(0, 0);
//! tree.set_values(root, &[0.0, 5.5]);
//!
//! // Refine cells where the inter-variable gradient > 3
//! let crit = GradientCriterion::new(3.0);
//! tree.adapt(&crit);
//! assert!(tree.leaves().len() > 1);
//!
//! // Conservative prolongation / restriction
//! let ops = AmrOperators::new();
//! let parent_vals = vec![1.0, 2.0];
//! let mut children = [
//! parent_vals.clone(),
//! parent_vals.clone(),
//! parent_vals.clone(),
//! parent_vals.clone(),
//! ];
//! ops.prolongate_2d_values(&parent_vals, &mut children);
//! let restricted = ops.restrict_2d_values(&children);
//! assert!((restricted[0] - 1.0).abs() < 1e-12);
//! ```
// ── Top-level re-exports ────────────────────────────────────────────────────
// Quad-tree types
pub use ;
// Oct-tree types
pub use ;
// Operators
pub use ;
// Level-set
pub use LevelSet;