Add constrmatrix as separate crate
This commit is contained in:
parent
502679c9a1
commit
be1330ec02
|
@ -9,6 +9,7 @@ members = [
|
||||||
"gridgeneration",
|
"gridgeneration",
|
||||||
"heat-equation",
|
"heat-equation",
|
||||||
"utils/float",
|
"utils/float",
|
||||||
|
"utils/constmatrix",
|
||||||
]
|
]
|
||||||
|
|
||||||
default-members = ["sbp", "euler", "maxwell", "shallow_water"]
|
default-members = ["sbp", "euler", "maxwell", "shallow_water"]
|
||||||
|
|
|
@ -13,6 +13,7 @@ sprs = { version = "0.10.0", optional = true, default-features = false }
|
||||||
serde = { version = "1.0.115", optional = true, default-features = false, features = ["derive"] }
|
serde = { version = "1.0.115", optional = true, default-features = false, features = ["derive"] }
|
||||||
num-traits = "0.2.14"
|
num-traits = "0.2.14"
|
||||||
float = { path = "../utils/float" }
|
float = { path = "../utils/float" }
|
||||||
|
constmatrix = { path = "../utils/constmatrix" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# Use f32 as precision, default is f64
|
# Use f32 as precision, default is f64
|
||||||
|
|
|
@ -2,7 +2,6 @@ use super::*;
|
||||||
use ndarray::s;
|
use ndarray::s;
|
||||||
use num_traits::Zero;
|
use num_traits::Zero;
|
||||||
|
|
||||||
pub(crate) mod constmatrix;
|
|
||||||
pub(crate) use constmatrix::{ColVector, Matrix, RowVector};
|
pub(crate) use constmatrix::{ColVector, Matrix, RowVector};
|
||||||
|
|
||||||
#[cfg(feature = "fast-float")]
|
#[cfg(feature = "fast-float")]
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
[package]
|
||||||
|
name = "constmatrix"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Magnus Ulimoen <magnus@ulimoen.dev>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
approx = { version = "0.4.0", optional = true }
|
||||||
|
float = { path = "../float" }
|
||||||
|
num-traits = "0.2.14"
|
|
@ -1,5 +1,6 @@
|
||||||
#![allow(unused)]
|
#![feature(const_fn_floating_point_arithmetic)]
|
||||||
|
|
||||||
|
use float::Float;
|
||||||
use num_traits::identities::Zero;
|
use num_traits::identities::Zero;
|
||||||
|
|
||||||
/// A row-major matrix
|
/// A row-major matrix
|
||||||
|
@ -178,7 +179,7 @@ where
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{super::*, *};
|
use super::*;
|
||||||
#[test]
|
#[test]
|
||||||
fn construct_copy_type() {
|
fn construct_copy_type() {
|
||||||
let _m0 = Matrix::<i32, 4, 3>::default();
|
let _m0 = Matrix::<i32, 4, 3>::default();
|
||||||
|
@ -209,6 +210,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "approx")]
|
||||||
mod approx {
|
mod approx {
|
||||||
use super::Matrix;
|
use super::Matrix;
|
||||||
use ::approx::{AbsDiffEq, RelativeEq, UlpsEq};
|
use ::approx::{AbsDiffEq, RelativeEq, UlpsEq};
|
||||||
|
@ -262,8 +264,8 @@ mod approx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<const M: usize, const N: usize> Matrix<super::Float, M, N> {
|
impl<const M: usize, const N: usize> Matrix<Float, M, N> {
|
||||||
pub(crate) const fn flip_ud(&self) -> Self {
|
pub const fn flip_ud(&self) -> Self {
|
||||||
let mut m = Self::new([[0.0; N]; M]);
|
let mut m = Self::new([[0.0; N]; M]);
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
while i < M {
|
while i < M {
|
||||||
|
@ -273,7 +275,7 @@ impl<const M: usize, const N: usize> Matrix<super::Float, M, N> {
|
||||||
m
|
m
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) const fn flip_lr(&self) -> Self {
|
pub const fn flip_lr(&self) -> Self {
|
||||||
let mut m = Self::new([[0.0; N]; M]);
|
let mut m = Self::new([[0.0; N]; M]);
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
while i < M {
|
while i < M {
|
||||||
|
@ -288,7 +290,7 @@ impl<const M: usize, const N: usize> Matrix<super::Float, M, N> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Flip all sign bits
|
/// Flip all sign bits
|
||||||
pub(crate) const fn flip_sign(&self) -> Self {
|
pub const fn flip_sign(&self) -> Self {
|
||||||
let mut m = Self::new([[0.0; N]; M]);
|
let mut m = Self::new([[0.0; N]; M]);
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
while i < M {
|
while i < M {
|
||||||
|
@ -303,9 +305,7 @@ impl<const M: usize, const N: usize> Matrix<super::Float, M, N> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Zero extends if larger than self
|
/// Zero extends if larger than self
|
||||||
pub(crate) const fn resize<const M2: usize, const N2: usize>(
|
pub const fn resize<const M2: usize, const N2: usize>(&self) -> Matrix<Float, M2, N2> {
|
||||||
&self,
|
|
||||||
) -> Matrix<super::Float, M2, N2> {
|
|
||||||
let mut m = Matrix::new([[0.0; N2]; M2]);
|
let mut m = Matrix::new([[0.0; N2]; M2]);
|
||||||
|
|
||||||
let m_min = if M < M2 { M } else { M2 };
|
let m_min = if M < M2 { M } else { M2 };
|
||||||
|
@ -325,6 +325,7 @@ impl<const M: usize, const N: usize> Matrix<super::Float, M, N> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
mod flipping {
|
mod flipping {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
Loading…
Reference in New Issue