Skip to content

Commit

Permalink
Merge pull request #275 from autotwin/defeature
Browse files Browse the repository at this point in the history
dev
  • Loading branch information
mrbuche authored Jan 13, 2025
2 parents f724bd8 + 3a8bf56 commit 768453e
Show file tree
Hide file tree
Showing 12 changed files with 1,028 additions and 523 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ MANIFEST
*.inp
*.mesh
*.npy
*.spn
*.vtk

# ignore build binaries
Expand Down
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ crate-type = ["cdylib", "rlib"]
clap = { version = "=4.5.26", features = ["derive"] }
chrono = "=0.4.39"
conspire = {version = "=0.5.1", features = ["math"]}
ndarray = {version = "=0.15"}
ndarray-npy = {version = "=0.8"}
ndarray = {version = "=0.15.6"}
ndarray-npy = {version = "=0.8.1"}
netcdf = { version = "=0.10.5", features = ["ndarray", "static"] }
pyo3 = {version = "=0.23", features = ["extension-module"], optional = true}
pyo3 = {version = "=0.23.4", features = ["extension-module"], optional = true}
tiff = "=0.9.1"
vtkio = "=0.6.3"

Expand Down
153 changes: 59 additions & 94 deletions benches/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,10 @@ macro_rules! bench_block {
const NEL: [usize; 3] = [$nel, $nel, $nel];
#[bench]
fn calculate_laplacian(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
fem.calculate_node_element_connectivity()?;
fem.calculate_node_node_connectivity()?;
let node_node_connectivity = fem.get_node_node_connectivity();
Expand All @@ -50,25 +48,21 @@ macro_rules! bench_block {
}
#[bench]
fn calculate_nodal_hierarchy(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
fem.calculate_node_element_connectivity()?;
fem.calculate_node_node_connectivity()?;
bencher.iter(|| fem.calculate_nodal_hierarchy().unwrap());
Ok(())
}
#[bench]
fn calculate_nodal_influencers(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
fem.calculate_node_element_connectivity()?;
fem.calculate_node_node_connectivity()?;
fem.calculate_nodal_hierarchy()?;
Expand All @@ -77,35 +71,28 @@ macro_rules! bench_block {
}
#[bench]
fn calculate_node_element_connectivity(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
bencher.iter(|| fem.calculate_node_element_connectivity().unwrap());
Ok(())
}
#[bench]
fn calculate_node_node_connectivity(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
fem.calculate_node_element_connectivity()?;
bencher.iter(|| fem.calculate_node_node_connectivity().unwrap());
Ok(())
}
#[bench]
fn from_inp(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let fem = voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
let inp = format!("target/block_{}.inp", $nel);
fem.write_inp(&inp).unwrap();
bencher.iter(|| FiniteElements::from_inp(&inp).unwrap());
Expand All @@ -119,7 +106,7 @@ macro_rules! bench_block {
#[bench]
fn from_spn(bencher: &mut Bencher) {
let spn = format!("benches/block/block_{}.spn", $nel);
bencher.iter(|| Voxels::from_spn(&spn, NEL).unwrap());
bencher.iter(|| Voxels::from_spn(&spn, NEL.into()).unwrap());
}
#[bench]
fn from_tif(bencher: &mut Bencher) {
Expand All @@ -132,7 +119,7 @@ macro_rules! bench_block {
bencher.iter(|| {
Voxels::from_npy(&npy)
.unwrap()
.into_finite_elements(REMOVE, &Vector::new(SCALE), &Vector::new(TRANSLATE))
.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))
.unwrap()
});
}
Expand All @@ -143,12 +130,10 @@ macro_rules! bench_block {
}
#[bench]
fn set_prescribed_nodes(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
fem.calculate_node_element_connectivity()?;
fem.calculate_node_node_connectivity()?;
fem.calculate_nodal_hierarchy()?;
Expand All @@ -162,12 +147,10 @@ macro_rules! bench_block {
}
#[bench]
fn smooth_laplace(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
fem.calculate_node_element_connectivity()?;
fem.calculate_node_node_connectivity()?;
fem.calculate_nodal_influencers();
Expand All @@ -182,12 +165,10 @@ macro_rules! bench_block {
}
#[bench]
fn smooth_taubin(bencher: &mut Bencher) -> Result<(), String> {
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let mut fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut fem =
voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
fem.calculate_node_element_connectivity()?;
fem.calculate_node_node_connectivity()?;
fem.calculate_nodal_influencers();
Expand All @@ -204,12 +185,9 @@ macro_rules! bench_block {
#[bench]
fn write_exo(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("exo");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let fem = voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
let mut count = 0;
bencher.iter(|| {
fem.write_exo(&format!("target/block_{}_{}.exo", $nel, count))
Expand All @@ -221,12 +199,9 @@ macro_rules! bench_block {
#[bench]
fn write_inp(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("inp");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let fem = voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
let mut count = 0;
bencher.iter(|| {
fem.write_inp(&format!("target/block_{}_{}.inp", $nel, count))
Expand All @@ -238,12 +213,9 @@ macro_rules! bench_block {
#[bench]
fn write_mesh(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("mesh");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let fem = voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
let mut count = 0;
bencher.iter(|| {
fem.write_mesh(&format!("target/block_{}_{}.mesh", $nel, count))
Expand All @@ -255,12 +227,9 @@ macro_rules! bench_block {
#[bench]
fn write_metrics_csv(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("csv");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let fem = voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
let mut count = 0;
bencher.iter(|| {
fem.write_metrics(&format!("target/block_{}_{}.csv", $nel, count))
Expand All @@ -272,12 +241,9 @@ macro_rules! bench_block {
#[bench]
fn write_metrics_npy(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("npy");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let fem = voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
let mut count = 0;
bencher.iter(|| {
fem.write_metrics(&format!("target/block_{}_{}.npy", $nel, count))
Expand All @@ -289,7 +255,8 @@ macro_rules! bench_block {
#[bench]
fn write_npy(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("npy");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut count = 0;
bencher.iter(|| {
voxels
Expand All @@ -302,7 +269,8 @@ macro_rules! bench_block {
#[bench]
fn write_spn(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("spn");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let mut count = 0;
bencher.iter(|| {
voxels
Expand All @@ -315,12 +283,9 @@ macro_rules! bench_block {
#[bench]
fn write_vtk(bencher: &mut Bencher) -> Result<(), String> {
remove_files_with_extension!("vtk");
let voxels = Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL)?;
let fem = voxels.into_finite_elements(
REMOVE,
&Vector::new(SCALE),
&Vector::new(TRANSLATE),
)?;
let voxels =
Voxels::from_spn(&format!("benches/block/block_{}.spn", $nel), NEL.into())?;
let fem = voxels.into_finite_elements(REMOVE, SCALE.into(), &Vector::new(TRANSLATE))?;
let mut count = 0;
bencher.iter(|| {
fem.write_vtk(&format!("target/block_{}_{}.vtk", $nel, count))
Expand Down
8 changes: 4 additions & 4 deletions src/fem/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ pub const NODE_NUMBERING_OFFSET: usize = 1;
pub const NUM_NODES_HEX: usize = 8;

/// A vector of finite element block IDs.
pub type Blocks = Vec<usize>;
pub type Blocks = Vec<u8>;

pub type VecConnectivity = Vec<Vec<usize>>;
pub type Metrics = Array1<f64>;
Expand Down Expand Up @@ -122,7 +122,7 @@ impl HexahedralFiniteElements {
#[cfg(feature = "profile")]
let time = Instant::now();
let element_blocks = self.get_element_blocks();
let mut connected_blocks: Vec<usize> = vec![];
let mut connected_blocks: Blocks = vec![];
let mut exterior_nodes = vec![];
let mut interface_nodes = vec![];
let mut interior_nodes = vec![];
Expand Down Expand Up @@ -621,10 +621,10 @@ fn finite_element_data_from_inp(
let mut current_block = 0;
let mut element_blocks: Blocks = vec![];
let mut element_node_connectivity: HexConnectivity = vec![];
let mut element_numbers: Blocks = vec![];
let mut element_numbers = vec![];
while buffer != "**\n" {
if buffer.trim().chars().take(8).collect::<String>() == "*ELEMENT" {
current_block = buffer.trim().chars().last().unwrap().to_digit(10).unwrap() as usize;
current_block = buffer.trim().chars().last().unwrap().to_digit(10).unwrap() as u8;
} else {
element_blocks.push(current_block);
element_node_connectivity.push(
Expand Down
4 changes: 2 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ mod voxel;

pub use fem::{Blocks, FiniteElements, HexahedralFiniteElements, Smoothing};
pub use tree::{Octree, Tree};
pub use voxel::{VoxelData, Voxels};
pub use voxel::{Nel, Scale, VoxelData, Voxels};

use conspire::math::{TensorRank1, TensorRank1Vec};

/// The number of spatial dimensions.
const NSD: usize = 3;
pub const NSD: usize = 3;

/// An element-to-node connectivity.
pub type Connectivity<const N: usize> = Vec<[usize; N]>;
Expand Down
Loading

0 comments on commit 768453e

Please sign in to comment.