From 5230d67d91a6ec851c29125af1648916966aa8b4 Mon Sep 17 00:00:00 2001 From: Luca Fedeli Date: Mon, 20 Jan 2025 15:28:19 +0100 Subject: [PATCH 1/5] move ReorderFornbergCoefficients inside Source/WarpX.cpp --- Source/WarpX.cpp | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index bd193f11bdc..e6f4f5f2ac2 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -210,6 +210,29 @@ namespace std::any_of(field_boundary_hi.begin(), field_boundary_hi.end(), is_pml); return is_any_pml; } + + /** + * \brief Re-orders the Fornberg coefficients so that they can be used more conveniently for + * finite-order centering operations. For example, for finite-order centering of order 6, + * the Fornberg coefficients \c (c_0,c_1,c_2) are re-ordered as \c (c_2,c_1,c_0,c_0,c_1,c_2). + * + * \param[in,out] ordered_coeffs host vector where the re-ordered Fornberg coefficients will be stored + * \param[in] unordered_coeffs host vector storing the original sequence of Fornberg coefficients + * \param[in] order order of the finite-order centering along a given direction + */ + void ReorderFornbergCoefficients ( + amrex::Vector& ordered_coeffs, + const amrex::Vector& unordered_coeffs, + const int order) + { + const int n = order / 2; + for (int i = 0; i < n; i++) { + ordered_coeffs[i] = unordered_coeffs[n-1-i]; + } + for (int i = n; i < order; i++) { + ordered_coeffs[i] = unordered_coeffs[i-n]; + } + } } void WarpX::MakeWarpX () @@ -3192,19 +3215,6 @@ amrex::Vector WarpX::getFornbergStencilCoefficients (const int n_or return coeffs; } -void WarpX::ReorderFornbergCoefficients (amrex::Vector& ordered_coeffs, - amrex::Vector& unordered_coeffs, - const int order) -{ - const int n = order / 2; - for (int i = 0; i < n; i++) { - ordered_coeffs[i] = unordered_coeffs[n-1-i]; - } - for (int i = n; i < order; i++) { - ordered_coeffs[i] = unordered_coeffs[i-n]; - } -} - void WarpX::AllocateCenteringCoefficients (amrex::Gpu::DeviceVector& device_centering_stencil_coeffs_x, amrex::Gpu::DeviceVector& device_centering_stencil_coeffs_y, amrex::Gpu::DeviceVector& device_centering_stencil_coeffs_z, @@ -3233,11 +3243,11 @@ void WarpX::AllocateCenteringCoefficients (amrex::Gpu::DeviceVector // Re-order Fornberg stencil coefficients: // example for order 6: (c_0,c_1,c_2) becomes (c_2,c_1,c_0,c_0,c_1,c_2) - ReorderFornbergCoefficients(host_centering_stencil_coeffs_x, + ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_x, Fornberg_stencil_coeffs_x, centering_nox); - ReorderFornbergCoefficients(host_centering_stencil_coeffs_y, + ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_y, Fornberg_stencil_coeffs_y, centering_noy); - ReorderFornbergCoefficients(host_centering_stencil_coeffs_z, + ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_z, Fornberg_stencil_coeffs_z, centering_noz); // Device vectors of stencil coefficients used for finite-order centering From e614ca565e3b69cee8d5de49cb3ccbc501cbfa2d Mon Sep 17 00:00:00 2001 From: Luca Fedeli Date: Mon, 20 Jan 2025 15:37:52 +0100 Subject: [PATCH 2/5] remove fuction from WarpX header --- Source/WarpX.H | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Source/WarpX.H b/Source/WarpX.H index 2c949cb514a..1a0f5603659 100644 --- a/Source/WarpX.H +++ b/Source/WarpX.H @@ -1309,18 +1309,6 @@ private: return gather_buffer_masks[lev].get(); } - /** - * \brief Re-orders the Fornberg coefficients so that they can be used more conveniently for - * finite-order centering operations. For example, for finite-order centering of order 6, - * the Fornberg coefficients \c (c_0,c_1,c_2) are re-ordered as \c (c_2,c_1,c_0,c_0,c_1,c_2). - * - * \param[in,out] ordered_coeffs host vector where the re-ordered Fornberg coefficients will be stored - * \param[in] unordered_coeffs host vector storing the original sequence of Fornberg coefficients - * \param[in] order order of the finite-order centering along a given direction - */ - void ReorderFornbergCoefficients (amrex::Vector& ordered_coeffs, - amrex::Vector& unordered_coeffs, - int order); /** * \brief Allocates and initializes the stencil coefficients used for the finite-order centering * of fields and currents, and stores them in the given device vectors. From 7c6380f92be3f795016db98677c080391c101bdd Mon Sep 17 00:00:00 2001 From: Luca Fedeli Date: Wed, 22 Jan 2025 09:43:07 +0100 Subject: [PATCH 3/5] Update Source/WarpX.cpp Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com> --- Source/WarpX.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index e6f4f5f2ac2..eb16b328229 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -3243,8 +3243,11 @@ void WarpX::AllocateCenteringCoefficients (amrex::Gpu::DeviceVector // Re-order Fornberg stencil coefficients: // example for order 6: (c_0,c_1,c_2) becomes (c_2,c_1,c_0,c_0,c_1,c_2) - ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_x, - Fornberg_stencil_coeffs_x, centering_nox); + ::ReorderFornbergCoefficients( + host_centering_stencil_coeffs_x, + Fornberg_stencil_coeffs_x, + centering_nox + ); ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_y, Fornberg_stencil_coeffs_y, centering_noy); ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_z, From 07228bdce771f17b0eec69b61c3cf6c7758ac652 Mon Sep 17 00:00:00 2001 From: Luca Fedeli Date: Wed, 22 Jan 2025 09:43:24 +0100 Subject: [PATCH 4/5] Update Source/WarpX.cpp Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com> --- Source/WarpX.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index eb16b328229..a2adc9da5c2 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -3250,8 +3250,11 @@ void WarpX::AllocateCenteringCoefficients (amrex::Gpu::DeviceVector ); ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_y, Fornberg_stencil_coeffs_y, centering_noy); - ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_z, - Fornberg_stencil_coeffs_z, centering_noz); + ::ReorderFornbergCoefficients( + host_centering_stencil_coeffs_z, + Fornberg_stencil_coeffs_z, + centering_noz + ); // Device vectors of stencil coefficients used for finite-order centering From 38cc3f693fedc06ed3701a5d6f440e7eb2fabd56 Mon Sep 17 00:00:00 2001 From: Luca Fedeli Date: Wed, 22 Jan 2025 09:43:38 +0100 Subject: [PATCH 5/5] Update Source/WarpX.cpp Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com> --- Source/WarpX.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index a2adc9da5c2..2da612a90c0 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -3248,8 +3248,11 @@ void WarpX::AllocateCenteringCoefficients (amrex::Gpu::DeviceVector Fornberg_stencil_coeffs_x, centering_nox ); - ::ReorderFornbergCoefficients(host_centering_stencil_coeffs_y, - Fornberg_stencil_coeffs_y, centering_noy); + ::ReorderFornbergCoefficients( + host_centering_stencil_coeffs_y, + Fornberg_stencil_coeffs_y, + centering_noy + ); ::ReorderFornbergCoefficients( host_centering_stencil_coeffs_z, Fornberg_stencil_coeffs_z,