From d994bdc399c7c5894f33b4cde4ece0e4e0ed1b70 Mon Sep 17 00:00:00 2001 From: Fabian Loeschner Date: Mon, 14 Nov 2022 16:34:43 +0100 Subject: [PATCH 1/5] Implement conversion of Uniform to GeneralQuadratureTable --- src/assembly/local/quadrature_table.rs | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/assembly/local/quadrature_table.rs b/src/assembly/local/quadrature_table.rs index f06455d..e88cc8a 100644 --- a/src/assembly/local/quadrature_table.rs +++ b/src/assembly/local/quadrature_table.rs @@ -147,6 +147,15 @@ where data: self.data, } } + + /// Replaces the data of the quadrature table with the given data. + pub fn with_data(self, data: NestedVec) -> GeneralQuadratureTable { + GeneralQuadratureTable { + points: self.points, + weights: self.weights, + data: data, + } + } } pub struct GeneralQuadratureParts @@ -266,6 +275,28 @@ where } } +impl UniformQuadratureTable +where + T: Scalar, + GeometryDim: DimName, + DefaultAllocator: Allocator, + Data: Clone, +{ + pub fn to_general(&self, num_elements: usize) -> GeneralQuadratureTable { + let mut points = NestedVec::new(); + let mut weights = NestedVec::new(); + let mut data = NestedVec::new(); + + for _ in 0..num_elements { + points.push(&self.points); + weights.push(&self.weights); + data.push(&self.data); + } + + GeneralQuadratureTable::from_points_weights_and_data(points, weights, data) + } +} + impl QuadratureTable for UniformQuadratureTable where T: Scalar, From 5553b73d9483927c8aff01723dc277eeb36ecede Mon Sep 17 00:00:00 2001 From: Fabian Loeschner Date: Wed, 16 Nov 2022 14:19:22 +0100 Subject: [PATCH 2/5] Implement GeneralQuadratureTable::with_data_from_fn --- src/assembly/local/quadrature_table.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/assembly/local/quadrature_table.rs b/src/assembly/local/quadrature_table.rs index e88cc8a..c333ba8 100644 --- a/src/assembly/local/quadrature_table.rs +++ b/src/assembly/local/quadrature_table.rs @@ -156,6 +156,27 @@ where data: data, } } + + pub fn with_data_from_fn( + self, + mut data_fn: impl FnMut(usize, &OPoint) -> NewData, + ) -> GeneralQuadratureTable { + let mut data = NestedVec::new(); + + for (element_index, points) in self.points.iter().enumerate() { + let mut arr = data.begin_array(); + + for point in points { + arr.push_single(data_fn(element_index, point)); + } + } + + GeneralQuadratureTable { + points: self.points, + weights: self.weights, + data: data, + } + } } pub struct GeneralQuadratureParts From 0096d78b25f5cf691d57b82d6858d634afb8e2d0 Mon Sep 17 00:00:00 2001 From: Fabian Loeschner Date: Wed, 16 Nov 2022 14:35:39 +0100 Subject: [PATCH 3/5] Add doc comment --- src/assembly/local/quadrature_table.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/assembly/local/quadrature_table.rs b/src/assembly/local/quadrature_table.rs index c333ba8..b38316a 100644 --- a/src/assembly/local/quadrature_table.rs +++ b/src/assembly/local/quadrature_table.rs @@ -157,6 +157,8 @@ where } } + /// Replaces the data of the quadrature table by calling the given closure with every quadrature + /// point in reference coordinates and its element index. pub fn with_data_from_fn( self, mut data_fn: impl FnMut(usize, &OPoint) -> NewData, From 17352344f9d818322cc017c902572b2a2895b8d2 Mon Sep 17 00:00:00 2001 From: Fabian Loeschner Date: Wed, 16 Nov 2022 14:40:48 +0100 Subject: [PATCH 4/5] Add old data as closure argument to with_data_from_fn --- src/assembly/local/quadrature_table.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/assembly/local/quadrature_table.rs b/src/assembly/local/quadrature_table.rs index b38316a..439131d 100644 --- a/src/assembly/local/quadrature_table.rs +++ b/src/assembly/local/quadrature_table.rs @@ -161,15 +161,15 @@ where /// point in reference coordinates and its element index. pub fn with_data_from_fn( self, - mut data_fn: impl FnMut(usize, &OPoint) -> NewData, + mut data_fn: impl FnMut(usize, &OPoint, &Data) -> NewData, ) -> GeneralQuadratureTable { let mut data = NestedVec::new(); - for (element_index, points) in self.points.iter().enumerate() { + for (element_index, (points, datas)) in self.points.iter().zip(self.data.iter()).enumerate() { let mut arr = data.begin_array(); - for point in points { - arr.push_single(data_fn(element_index, point)); + for (point, data) in points.iter().zip(datas.iter()) { + arr.push_single(data_fn(element_index, point, data)); } } From 1b4b2864410442940e815f31950235491c4d14ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20L=C3=B6schner?= Date: Fri, 18 Nov 2022 15:14:01 +0100 Subject: [PATCH 5/5] Address PR review comments --- src/assembly/local/quadrature_table.rs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/assembly/local/quadrature_table.rs b/src/assembly/local/quadrature_table.rs index 439131d..374c36b 100644 --- a/src/assembly/local/quadrature_table.rs +++ b/src/assembly/local/quadrature_table.rs @@ -150,11 +150,7 @@ where /// Replaces the data of the quadrature table with the given data. pub fn with_data(self, data: NestedVec) -> GeneralQuadratureTable { - GeneralQuadratureTable { - points: self.points, - weights: self.weights, - data: data, - } + GeneralQuadratureTable::from_points_weights_and_data(self.points, self.weights, data) } /// Replaces the data of the quadrature table by calling the given closure with every quadrature @@ -173,11 +169,7 @@ where } } - GeneralQuadratureTable { - points: self.points, - weights: self.weights, - data: data, - } + self.with_data(data) } } @@ -302,8 +294,8 @@ impl UniformQuadratureTable where T: Scalar, GeometryDim: DimName, - DefaultAllocator: Allocator, Data: Clone, + DefaultAllocator: Allocator, { pub fn to_general(&self, num_elements: usize) -> GeneralQuadratureTable { let mut points = NestedVec::new();