src/fe_model/p2_local_model.rs

branch
dev
changeset 86
d5b0e496b72f
parent 63
f7b87d84864d
equal deleted inserted replaced
76:99ad55974e62 86:d5b0e496b72f
1 /*! 1 /*!
2 Second order polynomical (P2) models on real intervals and planar 2D simplices. 2 Second order polynomical (P2) models on real intervals and planar 2D simplices.
3 */ 3 */
4 4
5 use serde::{Serialize, Deserialize};
5 use crate::types::*; 6 use crate::types::*;
6 use crate::loc::Loc; 7 use crate::loc::Loc;
7 use crate::sets::{Set,NPolygon,SpannedHalfspace}; 8 use crate::sets::{Set,NPolygon,SpannedHalfspace};
8 use crate::linsolve::*; 9 use crate::linsolve::*;
9 use crate::euclidean::Euclidean; 10 use crate::euclidean::Euclidean;
14 15
15 /// Type for simplices of arbitrary dimension `N`. 16 /// Type for simplices of arbitrary dimension `N`.
16 /// 17 ///
17 /// The type parameter `D` indicates the number of nodes. (Rust's const generics do not currently 18 /// The type parameter `D` indicates the number of nodes. (Rust's const generics do not currently
18 /// allow its automatic calculation from `N`.) 19 /// allow its automatic calculation from `N`.)
20 #[derive(Debug, Clone, Serialize, Deserialize)]
21 #[serde(bound(
22 serialize = "[Loc<F, N>; D] : Serialize",
23 deserialize = "[Loc<F, N>; D] : for<'a> Deserialize<'a>",
24 ))]
19 pub struct Simplex<F : Float, const N : usize, const D : usize>(pub [Loc<F, N>; D]); 25 pub struct Simplex<F : Float, const N : usize, const D : usize>(pub [Loc<F, N>; D]);
20 /// A two-dimensional planar simplex 26 /// A two-dimensional planar simplex
21 pub type PlanarSimplex<F> = Simplex<F, 2, 3>; 27 pub type PlanarSimplex<F> = Simplex<F, 2, 3>;
22 /// A real interval 28 /// A real interval
23 pub type RealInterval<F> = Simplex<F, 1, 2>; 29 pub type RealInterval<F> = Simplex<F, 1, 2>;
117 /// Generates a second order polynomial model of the function `g` on `Self`. 123 /// Generates a second order polynomial model of the function `g` on `Self`.
118 fn p2_model<G : Fn(&Loc<F, N>) -> F>(&self, g : G) -> Self::Model; 124 fn p2_model<G : Fn(&Loc<F, N>) -> F>(&self, g : G) -> Self::Model;
119 } 125 }
120 126
121 /// A local second order polynomical model of dimension `N` with `E` edges 127 /// A local second order polynomical model of dimension `N` with `E` edges
128 #[derive(Serialize, Deserialize, Debug, Clone)]
129 #[serde(bound(
130 serialize = "F : Serialize,
131 Loc<F, N> : Serialize,
132 Loc<F, E> : Serialize",
133 deserialize = "F : for<'a> Deserialize<'a>,
134 Loc<F, N> : for<'a> Deserialize<'a>,
135 Loc<F, E> : for<'a> Deserialize<'a>",
136 ))]
122 pub struct P2LocalModel<F : Num, const N : usize, const E : usize/*, const V : usize, const Q : usize*/> { 137 pub struct P2LocalModel<F : Num, const N : usize, const E : usize/*, const V : usize, const Q : usize*/> {
123 a0 : F, 138 a0 : F,
124 a1 : Loc<F, N>, 139 a1 : Loc<F, N>,
125 a2 : Loc<F, E>, 140 a2 : Loc<F, E>,
126 //node_values : Loc<F, V>, 141 //node_values : Loc<F, V>,

mercurial