From 44b73dabf59172e35e93aa9f6102b831d6358f34 Mon Sep 17 00:00:00 2001 From: dcdemen Date: Wed, 12 Feb 2025 07:53:51 -0700 Subject: [PATCH 1/6] Optimized system variable calculations for masses. Decreased time for that computation by 85% on CPU --- src/step/update_system_variables_masses.hpp | 45 +----- src/system/masses/calculate_gravity_force.hpp | 49 +----- .../masses/calculate_gyroscopic_matrix.hpp | 77 ++++------ .../calculate_inertia_stiffness_matrix.hpp | 78 ++++------ .../masses/calculate_inertial_force.hpp | 93 +++--------- .../calculate_mass_matrix_components.hpp | 58 ++----- .../calculate_quadrature_point_values.hpp | 142 ++++++++++++------ src/system/masses/rotate_section_matrix.hpp | 46 +++--- .../interfaces/test_cfd_interface.cpp | 2 +- .../system/masses/test_calculate.hpp | 9 ++ .../masses/test_calculate_gravity_force.cpp | 30 ++-- .../test_calculate_gyroscopic_matrix.cpp | 46 +++--- ...est_calculate_inertia_stiffness_matrix.cpp | 74 ++++----- .../masses/test_calculate_inertial_forces.cpp | 102 ++++++------- .../test_calculate_mass_matrix_components.cpp | 34 ++--- .../masses/test_rotate_section_matrix.cpp | 43 +++--- 16 files changed, 371 insertions(+), 557 deletions(-) diff --git a/src/step/update_system_variables_masses.hpp b/src/step/update_system_variables_masses.hpp index 82248507a..1197c4ffa 100644 --- a/src/step/update_system_variables_masses.hpp +++ b/src/step/update_system_variables_masses.hpp @@ -2,17 +2,9 @@ #include -#include "assemble_inertia_matrix_masses.hpp" -#include "assemble_residual_vector_masses.hpp" -#include "assemble_stiffness_matrix_masses.hpp" -#include "elements/masses/masses.hpp" -#include "math/vector_operations.hpp" #include "state/state.hpp" #include "step_parameters.hpp" -#include "system/masses/calculate_QP_position.hpp" #include "system/masses/calculate_quadrature_point_values.hpp" -#include "system/masses/copy_to_quadrature_points.hpp" -#include "system/masses/update_node_state.hpp" namespace openturbine { @@ -21,47 +13,12 @@ inline void UpdateSystemVariablesMasses( ) { auto region = Kokkos::Profiling::ScopedRegion("Update System Variables Masses"); - // Update the node states for masses to get the current position/rotation - Kokkos::parallel_for( - "masses::UpdateNodeState", masses.num_elems, - masses::UpdateNodeState{ - masses.state_indices, masses.node_u, masses.node_u_dot, masses.node_u_ddot, state.q, - state.v, state.vd - } - ); - - // Calculate some ancillary values (angular velocity - omega, angular acceleration - omega_dot, - // linear acceleration - u_ddot etc.) that will be required by system kernels - Kokkos::parallel_for( - "masses::CopyToQuadraturePoints", masses.num_elems, - masses::CopyToQuadraturePoints{ - masses.node_x0, masses.node_u, masses.node_u_dot, masses.node_u_ddot, masses.qp_x0, - masses.qp_r0, masses.qp_u, masses.qp_r, masses.qp_u_ddot, masses.qp_omega, - masses.qp_omega_dot - } - ); - - Kokkos::parallel_for( - "masses::CalculateQPPosition", masses.num_elems, - masses::CalculateQPPosition{ - masses.qp_x0, masses.qp_u, masses.qp_r0, masses.qp_r, masses.qp_x - } - ); - - // Calculate system variables by executing the system kernels and perform assembly Kokkos::parallel_for( "masses::CalculateQuadraturePointValues", masses.num_elems, masses::CalculateQuadraturePointValues{ - masses.gravity, masses.qp_Mstar, masses.qp_x, masses.qp_u_ddot, masses.qp_omega, - masses.qp_omega_dot, masses.qp_eta, masses.qp_rho, masses.qp_eta_tilde, - masses.qp_omega_tilde, masses.qp_omega_dot_tilde, masses.qp_Fi, masses.qp_Fg, - masses.qp_RR0, masses.qp_Muu, masses.qp_Guu, masses.qp_Kuu + parameters.beta_prime, parameters.gamma_prime, state.q, state.v, state.vd, masses.state_indices, masses.gravity, masses.qp_Mstar, masses.node_x0, masses.residual_vector_terms, masses.stiffness_matrix_terms, masses.inertia_matrix_terms } ); - - AssembleResidualVectorMasses(masses); - AssembleStiffnessMatrixMasses(masses); - AssembleInertiaMatrixMasses(masses, parameters.beta_prime, parameters.gamma_prime); } } // namespace openturbine diff --git a/src/system/masses/calculate_gravity_force.hpp b/src/system/masses/calculate_gravity_force.hpp index 3a834045a..9f4bc7035 100644 --- a/src/system/masses/calculate_gravity_force.hpp +++ b/src/system/masses/calculate_gravity_force.hpp @@ -3,49 +3,16 @@ #include #include -#include "math/vector_operations.hpp" - namespace openturbine::masses { -/** - * @brief Functor to calculate gravity forces in a beam/mass element - * - * This struct serves as a function object to compute gravity forces for beam and rigid body - * elements. - * - * Gravity force vector, FG = { - * {FG_1} = {m * g} - * {FG_2} = {m * eta_tilde * g} - * } - * - * The forces are computed for each quadrature point (i_qp) of a given element (i_elem). - */ -struct CalculateGravityForce { - using NoTranspose = KokkosBlas::Trans::NoTranspose; - using Default = KokkosBlas::Algo::Gemv::Default; - using Gemv = KokkosBlas::SerialGemv; - size_t i_elem; - Kokkos::View::const_type gravity; //< Gravitational acceleration vector - Kokkos::View::const_type qp_Muu_; //< Mass matrix in inertial csys - Kokkos::View::const_type eta_tilde_; //< Skew-symmetric matrix derived from eta - Kokkos::View qp_FG_; //< Gravity forces (computed in this functor) +KOKKOS_FUNCTION +inline void CalculateGravityForce(double mass, const Kokkos::View::const_type& gravity, const Kokkos::View::const_type& eta_tilde, const Kokkos::View& FG) { + using NoTranspose = KokkosBlas::Trans::NoTranspose; + using Default = KokkosBlas::Algo::Gemv::Default; + using Gemv = KokkosBlas::SerialGemv; - KOKKOS_FUNCTION - void operator()() const { - auto Muu = Kokkos::subview(qp_Muu_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto eta_tilde = Kokkos::subview(eta_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto FG = Kokkos::subview(qp_FG_, i_elem, Kokkos::ALL); - // Compute FG_1 = m * {g} - auto m = Muu(0, 0); - for (int i = 0; i < 3; ++i) { - FG(i) = m * gravity(i); - } - // Compute FG_2 = m * [eta_tilde] * {g} - Gemv::invoke( - 1., eta_tilde, Kokkos::subview(FG, Kokkos::make_pair(0, 3)), 0., - Kokkos::subview(FG, Kokkos::make_pair(3, 6)) - ); - } -}; + KokkosBlas::serial_axpy(mass, gravity, Kokkos::subview(FG, Kokkos::make_pair(0, 3))); + Gemv::invoke(1., eta_tilde, Kokkos::subview(FG, Kokkos::make_pair(0, 3)), 0., Kokkos::subview(FG, Kokkos::make_pair(3, 6))); +} } // namespace openturbine::masses diff --git a/src/system/masses/calculate_gyroscopic_matrix.hpp b/src/system/masses/calculate_gyroscopic_matrix.hpp index 177eac8ac..a9a8d264d 100644 --- a/src/system/masses/calculate_gyroscopic_matrix.hpp +++ b/src/system/masses/calculate_gyroscopic_matrix.hpp @@ -9,7 +9,8 @@ namespace openturbine::masses { -struct CalculateGyroscopicMatrix { +KOKKOS_FUNCTION +inline void CalculateGyroscopicMatrix(double mass, const Kokkos::View::const_type& omega, const Kokkos::View::const_type& eta, const Kokkos::View::const_type rho, const Kokkos::View::const_type& omega_tilde, const Kokkos::View& Guu) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using Transpose = KokkosBatched::Trans::Transpose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; @@ -17,56 +18,36 @@ struct CalculateGyroscopicMatrix { using GemmNN = KokkosBatched::SerialGemm; using GemmNT = KokkosBatched::SerialGemm; using Gemv = KokkosBlas::SerialGemv; - size_t i_elem; - Kokkos::View::const_type qp_Muu_; - Kokkos::View::const_type qp_omega_; - Kokkos::View::const_type omega_tilde_; - Kokkos::View::const_type rho_; - Kokkos::View::const_type eta_; - Kokkos::View qp_Guu_; - - KOKKOS_FUNCTION - void operator()() const { - auto Muu = Kokkos::subview(qp_Muu_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto omega = Kokkos::subview(qp_omega_, i_elem, Kokkos::ALL); - auto omega_tilde = Kokkos::subview(omega_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto rho = Kokkos::subview(rho_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto eta = Kokkos::subview(eta_, i_elem, Kokkos::ALL); - auto v1 = Kokkos::Array{}; - auto V1 = Kokkos::View(v1.data()); - auto v2 = Kokkos::Array{}; - auto V2 = Kokkos::View(v2.data()); - auto m1 = Kokkos::Array{}; - auto M1 = Kokkos::View(m1.data()); - auto Guu = Kokkos::subview(qp_Guu_, i_elem, Kokkos::ALL, Kokkos::ALL); - - auto m = Muu(0, 0); - // Inertia gyroscopic matrix - KokkosBlas::SerialSet::invoke(0., Guu); - // omega.tilde() * m * eta.tilde().t() + (omega.tilde() * m * eta).tilde().t() - auto Guu_12 = Kokkos::subview(Guu, Kokkos::make_pair(0, 3), Kokkos::make_pair(3, 6)); - KokkosBlas::serial_axpy(m, eta, V1); - Gemv::invoke(1., omega_tilde, V1, 0., V2); - VecTilde(V2, M1); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - Guu_12(i, j) = M1(j, i); - } + auto v1 = Kokkos::Array{}; + auto V1 = Kokkos::View(v1.data()); + auto v2 = Kokkos::Array{}; + auto V2 = Kokkos::View(v2.data()); + auto m1 = Kokkos::Array{}; + auto M1 = Kokkos::View(m1.data()); + + // omega.tilde() * m * eta.tilde().t() + (omega.tilde() * m * eta).tilde().t() + auto Guu_12 = Kokkos::subview(Guu, Kokkos::make_pair(0, 3), Kokkos::make_pair(3, 6)); + KokkosBlas::serial_axpy(mass, eta, V1); + Gemv::invoke(1., omega_tilde, V1, 0., V2); + VecTilde(V2, M1); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + Guu_12(i, j) = M1(j, i); } + } - VecTilde(V1, M1); - GemmNT::invoke(1., omega_tilde, M1, 1., Guu_12); - // Guu_22 = omega.tilde() * rho - (rho * omega).tilde() - Gemv::invoke(1., rho, omega, 0., V1); - VecTilde(V1, M1); - auto Guu_22 = Kokkos::subview(Guu, Kokkos::make_pair(3, 6), Kokkos::make_pair(3, 6)); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - Guu_22(i, j) = M1(i, j); - } + VecTilde(V1, M1); + GemmNT::invoke(1., omega_tilde, M1, 1., Guu_12); + // Guu_22 = omega.tilde() * rho - (rho * omega).tilde() + Gemv::invoke(1., rho, omega, 0., V1); + VecTilde(V1, M1); + auto Guu_22 = Kokkos::subview(Guu, Kokkos::make_pair(3, 6), Kokkos::make_pair(3, 6)); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + Guu_22(i, j) = M1(i, j); } - GemmNN::invoke(1., omega_tilde, rho, -1., Guu_22); } -}; + GemmNN::invoke(1., omega_tilde, rho, -1., Guu_22); +} } // namespace openturbine::masses diff --git a/src/system/masses/calculate_inertia_stiffness_matrix.hpp b/src/system/masses/calculate_inertia_stiffness_matrix.hpp index 15ea1ed68..8e8e84d9d 100644 --- a/src/system/masses/calculate_inertia_stiffness_matrix.hpp +++ b/src/system/masses/calculate_inertia_stiffness_matrix.hpp @@ -9,7 +9,8 @@ namespace openturbine::masses { -struct CalculateInertiaStiffnessMatrix { +KOKKOS_FUNCTION +inline void CalculateInertiaStiffnessMatrix(double mass, const Kokkos::View::const_type& u_ddot, const Kokkos::View::const_type& omega, const Kokkos::View::const_type& omega_dot, const Kokkos::View::const_type& eta, const Kokkos::View::const_type& rho, const Kokkos::View::const_type& omega_tilde, const Kokkos::View::const_type& omega_dot_tilde, const Kokkos::View& Kuu) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using Transpose = KokkosBatched::Trans::Transpose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; @@ -17,56 +18,31 @@ struct CalculateInertiaStiffnessMatrix { using GemmNN = KokkosBatched::SerialGemm; using GemmNT = KokkosBatched::SerialGemm; using Gemv = KokkosBlas::SerialGemv; - size_t i_elem; - Kokkos::View::const_type qp_Muu_; - Kokkos::View::const_type qp_u_ddot_; - Kokkos::View::const_type qp_omega_; - Kokkos::View::const_type qp_omega_dot_; - Kokkos::View::const_type omega_tilde_; - Kokkos::View::const_type omega_dot_tilde_; - Kokkos::View::const_type rho_; - Kokkos::View::const_type eta_; - Kokkos::View qp_Kuu_; - KOKKOS_FUNCTION - void operator()() const { - auto Muu = Kokkos::subview(qp_Muu_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto u_ddot = Kokkos::subview(qp_u_ddot_, i_elem, Kokkos::ALL); - auto omega = Kokkos::subview(qp_omega_, i_elem, Kokkos::ALL); - auto omega_dot = Kokkos::subview(qp_omega_dot_, i_elem, Kokkos::ALL); - auto omega_tilde = Kokkos::subview(omega_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto omega_dot_tilde = Kokkos::subview(omega_dot_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto rho = Kokkos::subview(rho_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto eta = Kokkos::subview(eta_, i_elem, Kokkos::ALL); - auto v1 = Kokkos::Array{}; - auto V1 = View_3(v1.data()); - auto m1 = Kokkos::Array{}; - auto M1 = View_3x3(m1.data()); - auto m2 = Kokkos::Array{}; - auto M2 = View_3x3(m2.data()); - auto Kuu = Kokkos::subview(qp_Kuu_, i_elem, Kokkos::ALL, Kokkos::ALL); - - auto m = Muu(0, 0); - - KokkosBlas::SerialSet::invoke(0., Kuu); - KokkosBlas::serial_axpy(1., omega_dot_tilde, M1); - GemmNN::invoke(1., omega_tilde, omega_tilde, 1., M1); - KokkosBlas::serial_axpy(m, eta, V1); - VecTilde(V1, M2); - auto Kuu_12 = Kokkos::subview(Kuu, Kokkos::make_pair(0, 3), Kokkos::make_pair(3, 6)); - GemmNT::invoke(1., M1, M2, 0., Kuu_12); - VecTilde(u_ddot, M1); - auto Kuu_22 = Kokkos::subview(Kuu, Kokkos::make_pair(3, 6), Kokkos::make_pair(3, 6)); - GemmNN::invoke(1., rho, omega_dot_tilde, 0., Kuu_22); - GemmNN::invoke(1., M1, M2, 1., Kuu_22); - Gemv::invoke(1., rho, omega_dot, 0., V1); - VecTilde(V1, M2); - KokkosBlas::serial_axpy(-1., M2, Kuu_22); - Gemv::invoke(1., rho, omega, 0., V1); - VecTilde(V1, M1); - GemmNN::invoke(1., rho, omega_tilde, -1., M1); - GemmNN::invoke(1., omega_tilde, M1, 1., Kuu_22); - } -}; + auto v1 = Kokkos::Array{}; + auto V1 = View_3(v1.data()); + auto m1 = Kokkos::Array{}; + auto M1 = View_3x3(m1.data()); + auto m2 = Kokkos::Array{}; + auto M2 = View_3x3(m2.data()); + + KokkosBlas::serial_axpy(1., omega_dot_tilde, M1); + GemmNN::invoke(1., omega_tilde, omega_tilde, 1., M1); + KokkosBlas::serial_axpy(mass, eta, V1); + VecTilde(V1, M2); + auto Kuu_12 = Kokkos::subview(Kuu, Kokkos::make_pair(0, 3), Kokkos::make_pair(3, 6)); + GemmNT::invoke(1., M1, M2, 0., Kuu_12); + VecTilde(u_ddot, M1); + auto Kuu_22 = Kokkos::subview(Kuu, Kokkos::make_pair(3, 6), Kokkos::make_pair(3, 6)); + GemmNN::invoke(1., rho, omega_dot_tilde, 0., Kuu_22); + GemmNN::invoke(1., M1, M2, 1., Kuu_22); + Gemv::invoke(1., rho, omega_dot, 0., V1); + VecTilde(V1, M2); + KokkosBlas::serial_axpy(-1., M2, Kuu_22); + Gemv::invoke(1., rho, omega, 0., V1); + VecTilde(V1, M1); + GemmNN::invoke(1., rho, omega_tilde, -1., M1); + GemmNN::invoke(1., omega_tilde, M1, 1., Kuu_22); +} } // namespace openturbine::masses diff --git a/src/system/masses/calculate_inertial_force.hpp b/src/system/masses/calculate_inertial_force.hpp index 9aa12a6d5..9d1c34faa 100644 --- a/src/system/masses/calculate_inertial_force.hpp +++ b/src/system/masses/calculate_inertial_force.hpp @@ -8,79 +8,34 @@ namespace openturbine::masses { -/** - * @brief Functor to calculate inertial forces in Beams/Masses elements - * - * @details This struct serves as a function object to compute inertial forces for beam or - * mass/rigid body elements, taking both translational and rotational effects into account. - * The formulation follows the "SO(3)-based GEBT Beam" section of the OpenTurbine theory - * documentation (Eq. 32): - * - * Inertial force vector, {FI} = - * {m * u_ddot + (omega_dot_tilde + omega_tilde * omega_tilde) * m * eta} - * {m * eta_tilde * u_ddot + rho * omega_dot + omega_tilde * rho * omega} - * - * The forces are computed for each quadrature point (i_qp) of a given element (i_elem) for - * beam elements. For mass elements, the forces are computed at the (only) node of the - * element. - */ -struct CalculateInertialForces { +KOKKOS_FUNCTION +inline void CalculateInertialForce(double mass, const Kokkos::View::const_type& u_ddot, const Kokkos::View::const_type& omega, const Kokkos::View::const_type& omega_dot, const Kokkos::View::const_type& eta, const Kokkos::View::const_type& eta_tilde, const Kokkos::View::const_type& rho, const Kokkos::View::const_type& omega_tilde, const Kokkos::View::const_type& omega_dot_tilde, const Kokkos::View& FI) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; using GemvDefault = KokkosBlas::Algo::Gemv::Default; using Gemm = KokkosBatched::SerialGemm; using Gemv = KokkosBlas::SerialGemv; - size_t i_elem; //< Element index - Kokkos::View::const_type qp_Muu_; //< Mass matrix in inertial csys - Kokkos::View::const_type qp_u_ddot_; //< Acceleration vector - Kokkos::View::const_type qp_omega_; //< Angular velocity vector - Kokkos::View::const_type qp_omega_dot_; //< Angular acceleration vector - Kokkos::View::const_type eta_tilde_; //< Skew-symmetric matrix derived from eta - Kokkos::View omega_tilde_; //< Skew-symmetric matrix from rot. velocity - Kokkos::View omega_dot_tilde_; //< Skew-symmetric matrix from rot. acceleration - Kokkos::View::const_type rho_; //< Rotational inertia part of mass matrix - Kokkos::View::const_type eta_; //< Offset between mass center and elastic axis - Kokkos::View qp_FI_; //< Inertial forces (computed in this functor) - - KOKKOS_FUNCTION - void operator()() const { - auto Muu = Kokkos::subview(qp_Muu_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto u_ddot = Kokkos::subview(qp_u_ddot_, i_elem, Kokkos::ALL); - auto omega = Kokkos::subview(qp_omega_, i_elem, Kokkos::ALL); - auto omega_dot = Kokkos::subview(qp_omega_dot_, i_elem, Kokkos::ALL); - auto eta_tilde = Kokkos::subview(eta_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto omega_tilde = Kokkos::subview(omega_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto omega_dot_tilde = Kokkos::subview(omega_dot_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto rho = Kokkos::subview(rho_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto eta = Kokkos::subview(eta_, i_elem, Kokkos::ALL); - - // Define temporary views for intermediate results - auto v1 = Kokkos::Array{}; - auto V1 = View_3(v1.data()); - auto m1 = Kokkos::Array{}; - auto M1 = View_3x3(m1.data()); - auto FI = Kokkos::subview(qp_FI_, i_elem, Kokkos::ALL); - - // Compute first 3 components of FI - // FI_1 = m * u_ddot + (omega_dot_tilde + omega_tilde * omega_tilde) * m * eta - VecTilde(omega, omega_tilde); - VecTilde(omega_dot, omega_dot_tilde); - auto FI_1 = Kokkos::subview(FI, Kokkos::make_pair(0, 3)); - auto m = Muu(0, 0); - Gemm::invoke(m, omega_tilde, omega_tilde, 0., M1); - KokkosBlas::serial_axpy(m, omega_dot_tilde, M1); - Gemv::invoke(1., M1, eta, 0., FI_1); - KokkosBlas::serial_axpy(m, u_ddot, FI_1); - - // Compute last 3 components of FI - // FI_2 = m * eta_tilde * u_ddot + rho * omega_dot + omega_tilde * rho * omega - auto FI_2 = Kokkos::subview(FI, Kokkos::make_pair(3, 6)); - KokkosBlas::serial_axpy(m, u_ddot, V1); - Gemv::invoke(1., eta_tilde, V1, 0., FI_2); - Gemv::invoke(1., rho, omega_dot, 1., FI_2); - Gemm::invoke(1., omega_tilde, rho, 0., M1); - Gemv::invoke(1., M1, omega, 1., FI_2); - } -}; + auto v1 = Kokkos::Array{}; + auto V1 = View_3(v1.data()); + auto m1 = Kokkos::Array{}; + auto M1 = View_3x3(m1.data()); + + // Compute first 3 components of FI + // FI_1 = m * u_ddot + (omega_dot_tilde + omega_tilde * omega_tilde) * m * eta + auto FI_1 = Kokkos::subview(FI, Kokkos::make_pair(0, 3)); + Gemm::invoke(mass, omega_tilde, omega_tilde, 0., M1); + KokkosBlas::serial_axpy(mass, omega_dot_tilde, M1); + Gemv::invoke(1., M1, eta, 0., FI_1); + KokkosBlas::serial_axpy(mass, u_ddot, FI_1); + + // Compute last 3 components of FI + // FI_2 = m * eta_tilde * u_ddot + rho * omega_dot + omega_tilde * rho * omega + auto FI_2 = Kokkos::subview(FI, Kokkos::make_pair(3, 6)); + KokkosBlas::serial_axpy(mass, u_ddot, V1); + Gemv::invoke(1., eta_tilde, V1, 0., FI_2); + Gemv::invoke(1., rho, omega_dot, 1., FI_2); + Gemm::invoke(1., omega_tilde, rho, 0., M1); + Gemv::invoke(1., M1, omega, 1., FI_2); +} } // namespace openturbine::masses diff --git a/src/system/masses/calculate_mass_matrix_components.hpp b/src/system/masses/calculate_mass_matrix_components.hpp index 736dc8503..ad901a757 100644 --- a/src/system/masses/calculate_mass_matrix_components.hpp +++ b/src/system/masses/calculate_mass_matrix_components.hpp @@ -6,50 +6,22 @@ namespace openturbine::masses { -/** - * @brief Functor to calculate mass matrix components from mass matrix in inertial csys - * - * This struct serves as a function object to compute three key components from the provided mass - * matrix: - * - eta: The offset vector representing the distance between mass center and elastic axis - * - rho: The 3x3 mass matrix for rotational terms - * - eta_tilde: The skew-symmetric matrix derived from eta - * - * The calculations are performed for each quadrature point (i_qp) of a given element (i_elem) - */ -struct CalculateMassMatrixComponents { - size_t i_elem; //< Element index - Kokkos::View::const_type qp_Muu_; //< Mass matrix in inertial csys - Kokkos::View eta_; //< Offset between mass center and - //< elastic axis - Kokkos::View rho_; //< Rotational part of mass matrix - Kokkos::View eta_tilde_; //< Skew-symmetric matrix derived from eta - - KOKKOS_FUNCTION - void operator()() const { - auto Muu = Kokkos::subview(qp_Muu_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto eta = Kokkos::subview(eta_, i_elem, Kokkos::ALL); - auto rho = Kokkos::subview(rho_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto eta_tilde = Kokkos::subview(eta_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - - // Compute eta components using off-diagonal terms in lower-left 3x3 block of Muu - eta(0) = eta(1) = eta(2) = 0.; - if (const auto m = Muu(0, 0); m != 0.) { - eta(0) = Muu(5, 1) / m; - eta(1) = -Muu(5, 0) / m; - eta(2) = Muu(4, 0) / m; +KOKKOS_FUNCTION +inline void CalculateEta(const Kokkos::View::const_type& Muu, const Kokkos::View& eta) { + const auto m = Muu(0, 0); + + eta(0) = Muu(5, 1) / m; + eta(1) = -Muu(5, 0) / m; + eta(2) = Muu(4, 0) / m; +} + +KOKKOS_FUNCTION +inline void CalculateRho(const Kokkos::View::const_type& Muu, const Kokkos::View& rho) { + for(auto i = 0U; i < 3U; ++i) { + for(auto j = 0U; j < 3U; ++j) { + rho(i, j) = Muu(i+3U, j+3U); } - - // Extract the rotational mass terms from the lower-right 3x3 block of Muu - for (int i = 0; i < rho.extent_int(0); ++i) { - for (int j = 0; j < rho.extent_int(1); ++j) { - rho(i, j) = Muu(i + 3, j + 3); - } - } - - // Generate the skew-symmetric matrix eta_tilde from eta - VecTilde(eta, eta_tilde); } -}; +} } // namespace openturbine::masses diff --git a/src/system/masses/calculate_quadrature_point_values.hpp b/src/system/masses/calculate_quadrature_point_values.hpp index 480877e8e..0e964bf29 100644 --- a/src/system/masses/calculate_quadrature_point_values.hpp +++ b/src/system/masses/calculate_quadrature_point_values.hpp @@ -13,57 +13,107 @@ namespace openturbine::masses { struct CalculateQuadraturePointValues { + double beta_prime; + double gamma_prime; + + Kokkos::View::const_type Q; + Kokkos::View::const_type V; + Kokkos::View::const_type A; + + Kokkos::View::const_type node_state_indices; Kokkos::View::const_type gravity; Kokkos::View::const_type qp_Mstar; - Kokkos::View::const_type qp_x; - Kokkos::View::const_type qp_u_ddot; - Kokkos::View::const_type qp_omega; - Kokkos::View::const_type qp_omega_dot; - - Kokkos::View qp_eta; - Kokkos::View qp_rho; - Kokkos::View qp_eta_tilde; - Kokkos::View qp_omega_tilde; - Kokkos::View qp_omega_dot_tilde; - Kokkos::View qp_Fi; - Kokkos::View qp_Fg; - Kokkos::View qp_RR0; - Kokkos::View qp_Muu; - Kokkos::View qp_Guu; - Kokkos::View qp_Kuu; + Kokkos::View::const_type node_x0; + + Kokkos::View residual_vector_terms; + Kokkos::View stiffness_matrix_terms; + Kokkos::View inertia_matrix_terms; KOKKOS_FUNCTION void operator()(size_t i_elem) const { - // Calculate the global rotation matrix - masses::CalculateRR0{i_elem, qp_x, qp_RR0}(); - - // Transform mass matrix from material -> inertial frame - masses::RotateSectionMatrix{i_elem, qp_RR0, qp_Mstar, qp_Muu}(); - - // Calculate mass matrix components i.e. eta, rho, and eta_tilde - masses::CalculateMassMatrixComponents{i_elem, qp_Muu, qp_eta, qp_rho, qp_eta_tilde}(); - - // Calculate gravity forces - masses::CalculateGravityForce{i_elem, gravity, qp_Muu, qp_eta_tilde, qp_Fg}(); - - // Calculate inertial forces i.e. forces due to linear + angular - // acceleration - masses::CalculateInertialForces{ - i_elem, qp_Muu, qp_u_ddot, qp_omega, - qp_omega_dot, qp_eta_tilde, qp_omega_tilde, qp_omega_dot_tilde, - qp_rho, qp_eta, qp_Fi - }(); - - // Calculate the gyroscopic/inertial damping matrix - masses::CalculateGyroscopicMatrix{i_elem, qp_Muu, qp_omega, qp_omega_tilde, - qp_rho, qp_eta, qp_Guu}(); - - // Calculate the inertial stiffness matrix i.e. contributions from mass distribution and - // rotational dynamics - masses::CalculateInertiaStiffnessMatrix{ - i_elem, qp_Muu, qp_u_ddot, qp_omega, qp_omega_dot, qp_omega_tilde, qp_omega_dot_tilde, - qp_rho, qp_eta, qp_Kuu - }(); + const auto index = node_state_indices(i_elem); + + // Allocate scratch views + auto Mstar_data = Kokkos::Array{}; + const auto x0_data = Kokkos::Array{node_x0(i_elem, 0), node_x0(i_elem, 1), node_x0(i_elem, 2)}; + const auto r0_data = Kokkos::Array{node_x0(i_elem, 3), node_x0(i_elem, 4), node_x0(i_elem, 5), node_x0(i_elem, 6)}; + const auto u_data = Kokkos::Array{Q(index, 0), Q(index, 1), Q(index, 2)}; + const auto r_data = Kokkos::Array{Q(index, 3), Q(index, 4), Q(index, 5), Q(index, 6)}; + auto xr_data = Kokkos::Array{}; + const auto u_ddot_data = Kokkos::Array{A(index, 0), A(index, 1), A(index, 2)}; + const auto omega_data = Kokkos::Array{V(index, 3), V(index, 4), V(index, 5)}; + const auto omega_dot_data = Kokkos::Array{A(index, 3), A(index, 4), A(index, 5)}; + auto Muu_data = Kokkos::Array{}; + auto Fg_data = Kokkos::Array{}; + auto eta_data = Kokkos::Array{}; + auto eta_tilde_data = Kokkos::Array{}; + auto rho_data = Kokkos::Array{}; + auto omega_tilde_data = Kokkos::Array{}; + auto omega_dot_tilde_data = Kokkos::Array{}; + auto Fi_data = Kokkos::Array{}; + auto Guu_data = Kokkos::Array{}; + auto Kuu_data = Kokkos::Array{}; + + // Set up Views + const auto Mstar = Kokkos::View(Mstar_data.data()); + const auto x0 = Kokkos::View::const_type(x0_data.data()); + const auto r0 = Kokkos::View::const_type(r0_data.data()); + const auto u = Kokkos::View::const_type(u_data.data()); + const auto r = Kokkos::View::const_type(r_data.data()); + const auto xr = Kokkos::View(xr_data.data()); + const auto u_ddot = Kokkos::View::const_type(u_ddot_data.data()); + const auto omega = Kokkos::View::const_type(omega_data.data()); + const auto omega_dot = Kokkos::View::const_type(omega_dot_data.data()); + auto Muu = Kokkos::View(Muu_data.data()); + auto Fg = Kokkos::View(Fg_data.data()); + auto eta = Kokkos::View(eta_data.data()); + auto eta_tilde = Kokkos::View(eta_tilde_data.data()); + auto rho = Kokkos::View(rho_data.data()); + auto omega_tilde = Kokkos::View(omega_tilde_data.data()); + auto omega_dot_tilde = Kokkos::View(omega_dot_tilde_data.data()); + auto Fi = Kokkos::View(Fi_data.data()); + auto Guu = Kokkos::View(Guu_data.data()); + auto Kuu = Kokkos::View(Kuu_data.data()); + + // Do the math + for(auto i = 0U; i < 6U; ++i) { + for(auto j = 0U; j < 6U; ++j) { + Mstar(i, j) = qp_Mstar(i_elem, i, j); + } + } + QuaternionCompose(r, r0, xr); + VecTilde(omega, omega_tilde); + VecTilde(omega_dot, omega_dot_tilde); + + RotateSectionMatrix(xr, Mstar, Muu); + + const auto mass = Muu(0, 0); + CalculateEta(Muu, eta); + VecTilde(eta, eta_tilde); + CalculateRho(Muu, rho); + + CalculateGravityForce(mass, gravity, eta_tilde, Fg); + CalculateInertialForce(mass, u_ddot, omega, omega_dot, eta, eta_tilde, rho, omega_tilde, omega_dot_tilde, Fi); + + CalculateGyroscopicMatrix(mass, omega, eta, rho, omega_tilde, Guu); + CalculateInertiaStiffnessMatrix(mass, u_ddot, omega, omega_dot, eta, rho, omega_tilde, omega_dot_tilde, Kuu); + + // Contribute terms to main matrices + for (auto i = 0U; i < 6U; ++i) { + residual_vector_terms(i_elem, i) = Fi(i) - Fg(i); + } + for(auto i = 0U; i < 6U; ++i) { + for(auto j = 0U; j < 6U; ++j) { + stiffness_matrix_terms(i_elem, i, j) = Kuu(i, j); + } + } + for (auto i = 0U; i < 6U; ++i) { + for (auto j = 0U; j < 6U; ++j) { + inertia_matrix_terms(i_elem, i, j) = + beta_prime * Muu(i, j) + + gamma_prime * Guu(i, j); + } + } } }; diff --git a/src/system/masses/rotate_section_matrix.hpp b/src/system/masses/rotate_section_matrix.hpp index 0a57cc99c..26bfa443b 100644 --- a/src/system/masses/rotate_section_matrix.hpp +++ b/src/system/masses/rotate_section_matrix.hpp @@ -4,42 +4,38 @@ #include #include +#include "math/quaternion_operations.hpp" + namespace openturbine::masses { -struct RotateSectionMatrix { - using NoTranspose = KokkosBatched::Trans::NoTranspose; - using Transpose = KokkosBatched::Trans::Transpose; - using Default = KokkosBatched::Algo::Gemm::Default; - using GemmNN = KokkosBatched::SerialGemm; - using GemmNT = KokkosBatched::SerialGemm; - size_t i_elem; - Kokkos::View::const_type qp_RR0_; - Kokkos::View::const_type qp_Cstar_; - Kokkos::View qp_Cuu_; - - KOKKOS_FUNCTION - void operator()() const { - const auto RR0 = - Kokkos::subview(qp_RR0_, i_elem, Kokkos::make_pair(0, 3), Kokkos::make_pair(0, 3)); - const auto Cstar_top = - Kokkos::subview(qp_Cstar_, i_elem, Kokkos::make_pair(0, 3), Kokkos::ALL); - const auto Cstar_bottom = - Kokkos::subview(qp_Cstar_, i_elem, Kokkos::make_pair(3, 6), Kokkos::ALL); +KOKKOS_FUNCTION +inline void RotateSectionMatrix(const Kokkos::View::const_type& xr, const Kokkos::View::const_type& Cstar, const Kokkos::View& Cuu) { + using NoTranspose = KokkosBatched::Trans::NoTranspose; + using Transpose = KokkosBatched::Trans::Transpose; + using Default = KokkosBatched::Algo::Gemm::Default; + using GemmNN = KokkosBatched::SerialGemm; + using GemmNT = KokkosBatched::SerialGemm; + + auto RR0_data = Kokkos::Array{}; + auto RR0 = Kokkos::View(RR0_data.data()); + QuaternionToRotationMatrix(xr, RR0); + + const auto Cstar_top = Kokkos::subview(Cstar, Kokkos::make_pair(0, 3), Kokkos::ALL); + const auto Cstar_bottom = Kokkos::subview(Cstar, Kokkos::make_pair(3, 6), Kokkos::ALL); + const auto Cuu_left = Kokkos::subview(Cuu, Kokkos::ALL, Kokkos::make_pair(0, 3)); + const auto Cuu_right = Kokkos::subview(Cuu,Kokkos::ALL, Kokkos::make_pair(3, 6)); + auto ctmp_data = Kokkos::Array{}; const auto Ctmp = Kokkos::View(ctmp_data.data()); const auto Ctmp_top = Kokkos::subview(Ctmp, Kokkos::make_pair(0, 3), Kokkos::ALL); const auto Ctmp_bottom = Kokkos::subview(Ctmp, Kokkos::make_pair(3, 6), Kokkos::ALL); const auto Ctmp_left = Kokkos::subview(Ctmp, Kokkos::ALL, Kokkos::make_pair(0, 3)); const auto Ctmp_right = Kokkos::subview(Ctmp, Kokkos::ALL, Kokkos::make_pair(3, 6)); + GemmNN::invoke(1., RR0, Cstar_top, 0., Ctmp_top); GemmNN::invoke(1., RR0, Cstar_bottom, 0., Ctmp_bottom); - - const auto Cuu_left = Kokkos::subview(qp_Cuu_, i_elem, Kokkos::ALL, Kokkos::make_pair(0, 3)); - const auto Cuu_right = - Kokkos::subview(qp_Cuu_, i_elem, Kokkos::ALL, Kokkos::make_pair(3, 6)); GemmNT::invoke(1., Ctmp_left, RR0, 0., Cuu_left); GemmNT::invoke(1., Ctmp_right, RR0, 0., Cuu_right); - } -}; +} } // namespace openturbine::masses diff --git a/tests/regression_tests/interfaces/test_cfd_interface.cpp b/tests/regression_tests/interfaces/test_cfd_interface.cpp index 72c1fc859..6d28fd70b 100644 --- a/tests/regression_tests/interfaces/test_cfd_interface.cpp +++ b/tests/regression_tests/interfaces/test_cfd_interface.cpp @@ -139,7 +139,7 @@ void OutputLines(const FloatingPlatform&, size_t, const std::string&) { TEST(CFDInterfaceTest, FloatingPlatform) { // Solution parameters constexpr auto time_step = 0.01; - constexpr auto t_end = 1.; + constexpr auto t_end = 100.; constexpr auto rho_inf = 0.0; constexpr auto max_iter = 5; const auto n_steps{static_cast(ceil(t_end / time_step)) + 1}; diff --git a/tests/unit_tests/system/masses/test_calculate.hpp b/tests/unit_tests/system/masses/test_calculate.hpp index 26545f814..1fa69271a 100644 --- a/tests/unit_tests/system/masses/test_calculate.hpp +++ b/tests/unit_tests/system/masses/test_calculate.hpp @@ -5,6 +5,15 @@ namespace openturbine::tests { +inline void CompareWithExpected( + const Kokkos::View::host_mirror_type& result, + const Kokkos::View& expected +) { + for (auto i = 0U; i < result.extent(0); ++i) { + EXPECT_DOUBLE_EQ(result(i), expected(i)); + } +} + inline void CompareWithExpected( const Kokkos::View::host_mirror_type& result, const Kokkos::View& expected diff --git a/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp b/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp index bdea710a9..7626a7a0d 100644 --- a/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp +++ b/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp @@ -7,32 +7,24 @@ namespace openturbine::tests { struct ExecuteCalculateGravityForce { - size_t i_elem; + double mass; Kokkos::View::const_type gravity; - Kokkos::View::const_type Muu; - Kokkos::View::const_type eta_tilde; - Kokkos::View FG; + Kokkos::View::const_type eta_tilde; + Kokkos::View FG; KOKKOS_FUNCTION void operator()(size_t) const { - masses::CalculateGravityForce{i_elem, gravity, Muu, eta_tilde, FG}(); + masses::CalculateGravityForce(mass, gravity, eta_tilde, FG); } }; TEST(CalculateGravityForceTestsMasses, OneNode) { - const auto Muu = Kokkos::View("Muu"); - constexpr auto Muu_data = std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., - 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., - 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.}; - const auto Muu_host = Kokkos::View(Muu_data.data()); - const auto Muu_mirror = Kokkos::create_mirror(Muu); - Kokkos::deep_copy(Muu_mirror, Muu_host); - Kokkos::deep_copy(Muu, Muu_mirror); - - const auto eta_tilde = Kokkos::View("eta_tilde"); + double mass = 1.; + + const auto eta_tilde = Kokkos::View("eta_tilde"); constexpr auto eta_tilde_data = std::array{37., 38., 39., 40., 41., 42., 43., 44., 45.}; const auto eta_tilde_host = - Kokkos::View(eta_tilde_data.data()); + Kokkos::View(eta_tilde_data.data()); const auto eta_tilde_mirror = Kokkos::create_mirror(eta_tilde); Kokkos::deep_copy(eta_tilde_mirror, eta_tilde_host); Kokkos::deep_copy(eta_tilde, eta_tilde_mirror); @@ -44,14 +36,14 @@ TEST(CalculateGravityForceTestsMasses, OneNode) { Kokkos::deep_copy(gravity_mirror, gravity_host); Kokkos::deep_copy(gravity, gravity_mirror); - const auto FG = Kokkos::View("FG"); + const auto FG = Kokkos::View("FG"); Kokkos::parallel_for( - "CalculateGravityForce", 1, ExecuteCalculateGravityForce{0, gravity, Muu, eta_tilde, FG} + "CalculateGravityForce", 1, ExecuteCalculateGravityForce{mass, gravity, eta_tilde, FG} ); constexpr auto FG_exact_data = std::array{46., 47., 48., 5360., 5783., 6206.}; - const auto FG_exact = Kokkos::View(FG_exact_data.data()); + const auto FG_exact = Kokkos::View(FG_exact_data.data()); const auto FG_mirror = Kokkos::create_mirror(FG); Kokkos::deep_copy(FG_mirror, FG); diff --git a/tests/unit_tests/system/masses/test_calculate_gyroscopic_matrix.cpp b/tests/unit_tests/system/masses/test_calculate_gyroscopic_matrix.cpp index 43d127680..06fd4aaa5 100644 --- a/tests/unit_tests/system/masses/test_calculate_gyroscopic_matrix.cpp +++ b/tests/unit_tests/system/masses/test_calculate_gyroscopic_matrix.cpp @@ -7,64 +7,56 @@ namespace openturbine::tests { struct ExecuteCalculateGyroscopicMatrix { - size_t i_elem; - Kokkos::View::const_type Muu; - Kokkos::View::const_type omega; - Kokkos::View::const_type omega_tilde; - Kokkos::View::const_type rho; - Kokkos::View::const_type eta; - Kokkos::View Guu; + double mass; + Kokkos::View::const_type omega; + Kokkos::View::const_type omega_tilde; + Kokkos::View::const_type rho; + Kokkos::View::const_type eta; + Kokkos::View Guu; KOKKOS_FUNCTION void operator()(size_t) const { - masses::CalculateGyroscopicMatrix{i_elem, Muu, omega, omega_tilde, rho, eta, Guu}(); + masses::CalculateGyroscopicMatrix(mass, omega, eta, rho, omega_tilde, Guu); } }; TEST(CalculateGyroscopicMatrixMassesTests, OneNode) { - const auto Muu = Kokkos::View("Muu"); - constexpr auto Muu_data = std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., - 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., - 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.}; - const auto Muu_host = Kokkos::View(Muu_data.data()); - const auto Muu_mirror = Kokkos::create_mirror(Muu); - Kokkos::deep_copy(Muu_mirror, Muu_host); - Kokkos::deep_copy(Muu, Muu_mirror); + const double mass = 1.; - const auto omega = Kokkos::View("omega"); + const auto omega = Kokkos::View("omega"); constexpr auto omega_data = std::array{40., 41., 42.}; - const auto omega_host = Kokkos::View(omega_data.data()); + const auto omega_host = Kokkos::View(omega_data.data()); const auto omega_mirror = Kokkos::create_mirror(omega); Kokkos::deep_copy(omega_mirror, omega_host); Kokkos::deep_copy(omega, omega_mirror); - const auto omega_tilde = Kokkos::View("omega_tilde"); + const auto omega_tilde = Kokkos::View("omega_tilde"); constexpr auto omega_tilde_data = std::array{46., 47., 48., 49., 50., 51., 52., 53., 54.}; const auto omega_tilde_host = - Kokkos::View(omega_tilde_data.data()); + Kokkos::View(omega_tilde_data.data()); const auto omega_tilde_mirror = Kokkos::create_mirror(omega_tilde); Kokkos::deep_copy(omega_tilde_mirror, omega_tilde_host); Kokkos::deep_copy(omega_tilde, omega_tilde_mirror); - const auto rho = Kokkos::View("rho"); + const auto rho = Kokkos::View("rho"); constexpr auto rho_data = std::array{55., 56., 57., 58., 59., 60., 61., 62., 63.}; - const auto rho_host = Kokkos::View(rho_data.data()); + const auto rho_host = Kokkos::View(rho_data.data()); const auto rho_mirror = Kokkos::create_mirror(rho); Kokkos::deep_copy(rho_mirror, rho_host); Kokkos::deep_copy(rho, rho_mirror); - const auto eta = Kokkos::View("eta"); + const auto eta = Kokkos::View("eta"); constexpr auto eta_data = std::array{64., 65., 66.}; - const auto eta_host = Kokkos::View(eta_data.data()); + const auto eta_host = Kokkos::View(eta_data.data()); const auto eta_mirror = Kokkos::create_mirror(eta); Kokkos::deep_copy(eta_mirror, eta_host); Kokkos::deep_copy(eta, eta_mirror); - const auto Guu = Kokkos::View("Guu"); + const auto Guu = Kokkos::View("Guu"); Kokkos::parallel_for( "CalculateGyroscopicMatrix", 1, - ExecuteCalculateGyroscopicMatrix{0, Muu, omega, omega_tilde, rho, eta, Guu} + ExecuteCalculateGyroscopicMatrix{mass, omega, omega_tilde, rho, eta, Guu} ); constexpr auto Guu_exact_data = @@ -72,7 +64,7 @@ TEST(CalculateGyroscopicMatrixMassesTests, OneNode) { 0., 0., 0., 9764., -9191., 12., 0., 0., 0., 8184., 15953., 1207., 0., 0., 0., 1078., 8856., 15896., 0., 0., 0., 16487., 2497., 9546.}; const auto Guu_exact = - Kokkos::View(Guu_exact_data.data()); + Kokkos::View(Guu_exact_data.data()); const auto Guu_mirror = Kokkos::create_mirror(Guu); Kokkos::deep_copy(Guu_mirror, Guu); diff --git a/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp b/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp index 8e6c0745f..5c1c9c022 100644 --- a/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp +++ b/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp @@ -7,101 +7,93 @@ namespace openturbine::tests { struct ExecuteCalculateInertiaStiffnessMatrix { - size_t i_elem; - Kokkos::View::const_type Muu; - Kokkos::View::const_type u_ddot; - Kokkos::View::const_type omega; - Kokkos::View::const_type omega_dot; - Kokkos::View::const_type omega_tilde; - Kokkos::View::const_type omega_dot_tilde; - Kokkos::View::const_type rho; - Kokkos::View::const_type eta; - Kokkos::View Kuu; + double mass; + Kokkos::View::const_type u_ddot; + Kokkos::View::const_type omega; + Kokkos::View::const_type omega_dot; + Kokkos::View::const_type omega_tilde; + Kokkos::View::const_type omega_dot_tilde; + Kokkos::View::const_type rho; + Kokkos::View::const_type eta; + Kokkos::View Kuu; KOKKOS_FUNCTION void operator()(size_t) const { - masses::CalculateInertiaStiffnessMatrix{ - i_elem, Muu, u_ddot, omega, omega_dot, omega_tilde, omega_dot_tilde, rho, eta, Kuu - }(); + masses::CalculateInertiaStiffnessMatrix( + mass, u_ddot, omega, omega_dot, eta, rho, omega_tilde, omega_dot_tilde, Kuu + ); } }; TEST(CalculateInertiaStiffnessMatrixMassesTests, OneNode) { - const auto Muu = Kokkos::View("Muu"); - constexpr auto Muu_data = std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., - 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., - 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.}; - const auto Muu_host = Kokkos::View(Muu_data.data()); - const auto Muu_mirror = Kokkos::create_mirror(Muu); - Kokkos::deep_copy(Muu_mirror, Muu_host); - Kokkos::deep_copy(Muu, Muu_mirror); - - const auto u_ddot = Kokkos::View("u_ddot"); + const double mass = 1.; + + const auto u_ddot = Kokkos::View("u_ddot"); constexpr auto u_ddot_data = std::array{37., 38., 39.}; - const auto u_ddot_host = Kokkos::View(u_ddot_data.data()); + const auto u_ddot_host = Kokkos::View(u_ddot_data.data()); const auto u_ddot_mirror = Kokkos::create_mirror(u_ddot); Kokkos::deep_copy(u_ddot_mirror, u_ddot_host); Kokkos::deep_copy(u_ddot, u_ddot_mirror); - const auto omega = Kokkos::View("omega"); + const auto omega = Kokkos::View("omega"); constexpr auto omega_data = std::array{40., 41., 42.}; - const auto omega_host = Kokkos::View(omega_data.data()); + const auto omega_host = Kokkos::View(omega_data.data()); const auto omega_mirror = Kokkos::create_mirror(omega); Kokkos::deep_copy(omega_mirror, omega_host); Kokkos::deep_copy(omega, omega_mirror); - const auto omega_dot = Kokkos::View("omega_dot"); + const auto omega_dot = Kokkos::View("omega_dot"); constexpr auto omega_dot_data = std::array{43., 44., 45.}; const auto omega_dot_host = - Kokkos::View(omega_dot_data.data()); + Kokkos::View(omega_dot_data.data()); const auto omega_dot_mirror = Kokkos::create_mirror(omega_dot); Kokkos::deep_copy(omega_dot_mirror, omega_dot_host); Kokkos::deep_copy(omega_dot, omega_dot_mirror); - const auto eta_tilde = Kokkos::View("eta_tilde"); + const auto eta_tilde = Kokkos::View("eta_tilde"); constexpr auto eta_tilde_data = std::array{46., 47., 48., 49., 50., 51., 52., 53., 54.}; const auto eta_tilde_host = - Kokkos::View(eta_tilde_data.data()); + Kokkos::View(eta_tilde_data.data()); const auto eta_tilde_mirror = Kokkos::create_mirror(eta_tilde); Kokkos::deep_copy(eta_tilde_mirror, eta_tilde_host); Kokkos::deep_copy(eta_tilde, eta_tilde_mirror); - const auto omega_tilde = Kokkos::View("omega_tilde"); + const auto omega_tilde = Kokkos::View("omega_tilde"); constexpr auto omega_tilde_data = std::array{46., 47., 48., 49., 50., 51., 52., 53., 54.}; const auto omega_tilde_host = - Kokkos::View(omega_tilde_data.data()); + Kokkos::View(omega_tilde_data.data()); const auto omega_tilde_mirror = Kokkos::create_mirror(omega_tilde); Kokkos::deep_copy(omega_tilde_mirror, omega_tilde_host); Kokkos::deep_copy(omega_tilde, omega_tilde_mirror); - const auto omega_dot_tilde = Kokkos::View("omega_dot_tilde"); + const auto omega_dot_tilde = Kokkos::View("omega_dot_tilde"); constexpr auto omega_dot_tilde_data = std::array{55., 56., 57., 58., 59., 60., 61., 62., 63.}; const auto omega_dot_tilde_host = - Kokkos::View(omega_dot_tilde_data.data()); + Kokkos::View(omega_dot_tilde_data.data()); const auto omega_dot_tilde_mirror = Kokkos::create_mirror(omega_dot_tilde); Kokkos::deep_copy(omega_dot_tilde_mirror, omega_dot_tilde_host); Kokkos::deep_copy(omega_dot_tilde, omega_dot_tilde_mirror); - const auto rho = Kokkos::View("rho"); + const auto rho = Kokkos::View("rho"); constexpr auto rho_data = std::array{64., 65., 66., 67., 68., 69., 70., 71., 72.}; - const auto rho_host = Kokkos::View(rho_data.data()); + const auto rho_host = Kokkos::View(rho_data.data()); const auto rho_mirror = Kokkos::create_mirror(rho); Kokkos::deep_copy(rho_mirror, rho_host); Kokkos::deep_copy(rho, rho_mirror); - const auto eta = Kokkos::View("eta"); + const auto eta = Kokkos::View("eta"); constexpr auto eta_data = std::array{73., 74., 75.}; - const auto eta_host = Kokkos::View(eta_data.data()); + const auto eta_host = Kokkos::View(eta_data.data()); const auto eta_mirror = Kokkos::create_mirror(eta); Kokkos::deep_copy(eta_mirror, eta_host); Kokkos::deep_copy(eta, eta_mirror); - const auto Kuu = Kokkos::View("Kuu"); + const auto Kuu = Kokkos::View("Kuu"); Kokkos::parallel_for( "CalculateInertiaStiffnessMatrix", 1, ExecuteCalculateInertiaStiffnessMatrix{ - 0, Muu, u_ddot, omega, omega_dot, omega_tilde, omega_dot_tilde, rho, eta, Kuu + mass, u_ddot, omega, omega_dot, omega_tilde, omega_dot_tilde, rho, eta, Kuu } ); @@ -111,7 +103,7 @@ TEST(CalculateInertiaStiffnessMatrixMassesTests, OneNode) { 0., 0., 0., 1496300., 1558384., 1576048., 0., 0., 0., 1604122., 1652877., 1652190. }; const auto Kuu_exact = - Kokkos::View(Kuu_exact_data.data()); + Kokkos::View(Kuu_exact_data.data()); const auto Kuu_mirror = Kokkos::create_mirror(Kuu); Kokkos::deep_copy(Kuu_mirror, Kuu); diff --git a/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp b/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp index d05dc0272..2d36fb7be 100644 --- a/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp +++ b/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp @@ -7,110 +7,98 @@ namespace openturbine::tests { struct ExecuteCalculateInertialForces { - size_t i_elem; - Kokkos::View::const_type Muu; - Kokkos::View::const_type u_ddot; - Kokkos::View::const_type omega; - Kokkos::View::const_type omega_dot; - Kokkos::View::const_type eta_tilde; - Kokkos::View omega_tilde; - Kokkos::View omega_dot_tilde; - Kokkos::View::const_type rho; - Kokkos::View::const_type eta; - Kokkos::View FI; + double mass; + Kokkos::View::const_type u_ddot; + Kokkos::View::const_type omega; + Kokkos::View::const_type omega_dot; + Kokkos::View::const_type eta_tilde; + Kokkos::View omega_tilde; + Kokkos::View omega_dot_tilde; + Kokkos::View::const_type rho; + Kokkos::View::const_type eta; + Kokkos::View FI; KOKKOS_FUNCTION void operator()(size_t) const { - masses::CalculateInertialForces{i_elem, Muu, u_ddot, omega, - omega_dot, eta_tilde, omega_tilde, omega_dot_tilde, - rho, eta, FI}(); + masses::CalculateInertialForce(mass, u_ddot, omega, omega_dot, eta, eta_tilde, rho, omega_tilde, omega_dot_tilde, FI); } }; TEST(CalculateInertialForcesTestsMasses, OneNode) { - const auto Muu = Kokkos::View("Muu"); - constexpr auto Muu_data = std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., - 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., - 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.}; - const auto Muu_host = Kokkos::View(Muu_data.data()); - const auto Muu_mirror = Kokkos::create_mirror(Muu); - Kokkos::deep_copy(Muu_mirror, Muu_host); - Kokkos::deep_copy(Muu, Muu_mirror); - - const auto u_ddot = Kokkos::View("u_ddot"); + double mass = 1.; + + const auto u_ddot = Kokkos::View("u_ddot"); constexpr auto u_ddot_data = std::array{37., 38., 39.}; - const auto u_ddot_host = Kokkos::View(u_ddot_data.data()); + const auto u_ddot_host = Kokkos::View(u_ddot_data.data()); const auto u_ddot_mirror = Kokkos::create_mirror(u_ddot); Kokkos::deep_copy(u_ddot_mirror, u_ddot_host); Kokkos::deep_copy(u_ddot, u_ddot_mirror); - const auto omega = Kokkos::View("omega"); + const auto omega = Kokkos::View("omega"); constexpr auto omega_data = std::array{40., 41., 42.}; - const auto omega_host = Kokkos::View(omega_data.data()); + const auto omega_host = Kokkos::View(omega_data.data()); const auto omega_mirror = Kokkos::create_mirror(omega); Kokkos::deep_copy(omega_mirror, omega_host); Kokkos::deep_copy(omega, omega_mirror); - const auto omega_dot = Kokkos::View("omega_dot"); + const auto omega_dot = Kokkos::View("omega_dot"); constexpr auto omega_dot_data = std::array{43., 44., 45.}; const auto omega_dot_host = - Kokkos::View(omega_dot_data.data()); + Kokkos::View(omega_dot_data.data()); const auto omega_dot_mirror = Kokkos::create_mirror(omega_dot); Kokkos::deep_copy(omega_dot_mirror, omega_dot_host); Kokkos::deep_copy(omega_dot, omega_dot_mirror); - const auto eta_tilde = Kokkos::View("eta_tilde"); + const auto eta_tilde = Kokkos::View("eta_tilde"); constexpr auto eta_tilde_data = std::array{46., 47., 48., 49., 50., 51., 52., 53., 54.}; const auto eta_tilde_host = - Kokkos::View(eta_tilde_data.data()); + Kokkos::View(eta_tilde_data.data()); const auto eta_tilde_mirror = Kokkos::create_mirror(eta_tilde); Kokkos::deep_copy(eta_tilde_mirror, eta_tilde_host); Kokkos::deep_copy(eta_tilde, eta_tilde_mirror); - const auto rho = Kokkos::View("rho"); + const auto rho = Kokkos::View("rho"); const auto rho_data = std::array{55., 56., 57., 58., 59., 60., 61., 62., 63.}; - const auto rho_host = Kokkos::View(rho_data.data()); + const auto rho_host = Kokkos::View(rho_data.data()); const auto rho_mirror = Kokkos::create_mirror(rho); Kokkos::deep_copy(rho_mirror, rho_host); Kokkos::deep_copy(rho, rho_mirror); - const auto eta = Kokkos::View("eta"); + const auto eta = Kokkos::View("eta"); const auto eta_data = std::array{64., 65., 66.}; - const auto eta_host = Kokkos::View(eta_data.data()); + const auto eta_host = Kokkos::View(eta_data.data()); const auto eta_mirror = Kokkos::create_mirror(eta); Kokkos::deep_copy(eta_mirror, eta_host); Kokkos::deep_copy(eta, eta_mirror); - const auto omega_tilde = Kokkos::View("omega_tilde"); - const auto omega_dot_tilde = Kokkos::View("omega_dot_tilde"); - const auto FI = Kokkos::View("FI"); + const auto omega_tilde = Kokkos::View("omega_tilde"); + constexpr auto omega_tilde_data = std::array{0., -42., 41., 42., 0., -40., -41., 40., 0.}; + const auto omega_tilde_host = + Kokkos::View(omega_tilde_data.data()); + const auto omega_tilde_mirror = Kokkos::create_mirror(omega_tilde); + Kokkos::deep_copy(omega_tilde_mirror, omega_tilde_host); + Kokkos::deep_copy(omega_tilde, omega_tilde_mirror); + + const auto omega_dot_tilde = Kokkos::View("omega_dot_tilde"); + constexpr auto omega_dot_tilde_data = + std::array{0., -45., 44., 45., 0., -43., -44., 43., 0.}; + const auto omega_dot_tilde_host = + Kokkos::View(omega_dot_tilde_data.data()); + const auto omega_dot_tilde_mirror = Kokkos::create_mirror(omega_dot_tilde); + Kokkos::deep_copy(omega_dot_tilde_mirror, omega_dot_tilde_host); + Kokkos::deep_copy(omega_dot_tilde, omega_dot_tilde_mirror); + + const auto FI = Kokkos::View("FI"); Kokkos::parallel_for( "CalculateInertialForces", 1, ExecuteCalculateInertialForces{ - 0, Muu, u_ddot, omega, omega_dot, eta_tilde, omega_tilde, omega_dot_tilde, rho, eta, FI + mass, u_ddot, omega, omega_dot, eta_tilde, omega_tilde, omega_dot_tilde, rho, eta, FI } ); - constexpr auto omega_tilde_exact_data = std::array{0., -42., 41., 42., 0., -40., -41., 40., 0.}; - const auto omega_tilde_exact = - Kokkos::View(omega_tilde_exact_data.data()); - - const auto omega_tilde_mirror = Kokkos::create_mirror(omega_tilde); - Kokkos::deep_copy(omega_tilde_mirror, omega_tilde); - CompareWithExpected(omega_tilde_mirror, omega_tilde_exact); - - constexpr auto omega_dot_tilde_exact_data = - std::array{0., -45., 44., 45., 0., -43., -44., 43., 0.}; - const auto omega_dot_tilde_exact = - Kokkos::View(omega_dot_tilde_exact_data.data()); - - const auto omega_dot_tilde_mirror = Kokkos::create_mirror(omega_dot_tilde); - Kokkos::deep_copy(omega_dot_tilde_mirror, omega_dot_tilde); - CompareWithExpected(omega_dot_tilde_mirror, omega_dot_tilde_exact); - constexpr auto FI_exact_data = std::array{-2984., 32., 2922., 20624., -2248., 22100.}; - const auto FI_exact = Kokkos::View(FI_exact_data.data()); + const auto FI_exact = Kokkos::View(FI_exact_data.data()); const auto FI_mirror = Kokkos::create_mirror(FI); Kokkos::deep_copy(FI_mirror, FI); diff --git a/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp b/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp index 3e90f5e50..e2fa68a8b 100644 --- a/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp +++ b/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp @@ -7,40 +7,38 @@ namespace openturbine::tests { struct ExecuteCalculateMassMatrixComponents { - size_t i_elem; - Kokkos::View::const_type Muu; - Kokkos::View eta; - Kokkos::View rho; - Kokkos::View eta_tilde; + Kokkos::View::const_type Muu; + Kokkos::View eta; + Kokkos::View rho; KOKKOS_FUNCTION void operator()(size_t) const { - masses::CalculateMassMatrixComponents{i_elem, Muu, eta, rho, eta_tilde}(); + masses::CalculateEta(Muu, eta); + masses::CalculateRho(Muu, rho); } }; TEST(CalculateMassMatrixComponentsMassesTests, OneQuadPoint) { - const auto Muu = Kokkos::View("Muu"); + const auto Muu = Kokkos::View("Muu"); constexpr auto Muu_data = std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.}; - const auto Muu_host = Kokkos::View(Muu_data.data()); + const auto Muu_host = Kokkos::View(Muu_data.data()); const auto Muu_mirror = Kokkos::create_mirror(Muu); Kokkos::deep_copy(Muu_mirror, Muu_host); Kokkos::deep_copy(Muu, Muu_mirror); - const auto eta = Kokkos::View("eta"); - const auto rho = Kokkos::View("rho"); - const auto eta_tilde = Kokkos::View("eta_tilde"); + const auto eta = Kokkos::View("eta"); + const auto rho = Kokkos::View("rho"); Kokkos::parallel_for( "CalculateMassMatrixComponents", 1, - ExecuteCalculateMassMatrixComponents{0, Muu, eta, rho, eta_tilde} + ExecuteCalculateMassMatrixComponents{Muu, eta, rho} ); constexpr auto eta_exact_data = std::array{32., -31., 25.}; const auto eta_exact = - Kokkos::View(eta_exact_data.data()); + Kokkos::View(eta_exact_data.data()); const auto eta_mirror = Kokkos::create_mirror(eta); Kokkos::deep_copy(eta_mirror, eta); @@ -48,19 +46,11 @@ TEST(CalculateMassMatrixComponentsMassesTests, OneQuadPoint) { constexpr auto rho_exact_data = std::array{22., 23., 24., 28., 29., 30., 34., 35., 36.}; const auto rho_exact = - Kokkos::View(rho_exact_data.data()); + Kokkos::View(rho_exact_data.data()); const auto rho_mirror = Kokkos::create_mirror(rho); Kokkos::deep_copy(rho_mirror, rho); CompareWithExpected(rho_mirror, rho_exact); - - constexpr auto eta_tilde_exact_data = std::array{0., -25., -31., 25., 0., -32., 31., 32., 0.}; - const auto eta_tilde_exact = - Kokkos::View(eta_tilde_exact_data.data()); - - const auto eta_tilde_mirror = Kokkos::create_mirror(eta_tilde); - Kokkos::deep_copy(eta_tilde_mirror, eta_tilde); - CompareWithExpected(eta_tilde_mirror, eta_tilde_exact); } } // namespace openturbine::tests diff --git a/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp b/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp index f91484343..99c7d803a 100644 --- a/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp +++ b/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp @@ -7,47 +7,44 @@ namespace openturbine::tests { struct ExecuteRotateSectionMatrix { - size_t i_elem; - Kokkos::View::const_type rr0; - Kokkos::View::const_type Cstar; - Kokkos::View Cuu; + Kokkos::View::const_type xr; + Kokkos::View::const_type Cstar; + Kokkos::View Cuu; KOKKOS_FUNCTION - void operator()(size_t) const { masses::RotateSectionMatrix{i_elem, rr0, Cstar, Cuu}(); }; + void operator()(size_t) const { masses::RotateSectionMatrix(xr, Cstar, Cuu); }; }; TEST(RotateSectionMatrixMassesTests, OneNode) { - const auto rr0 = Kokkos::View("rr0"); - constexpr auto rr0_data = - std::array{1., 2., 3., 0., 0., 0., 4., 5., 6., 0., 0., 0., 7., 8., 9., 0., 0., 0., - 0., 0., 0., 1., 2., 3., 0., 0., 0., 4., 5., 6., 0., 0., 0., 7., 8., 9.}; - const auto rr0_host = Kokkos::View(rr0_data.data()); - const auto rr0_mirror = Kokkos::create_mirror(rr0); - Kokkos::deep_copy(rr0_mirror, rr0_host); - Kokkos::deep_copy(rr0, rr0_mirror); - - const auto Cstar = Kokkos::View("Cstar"); + const auto xr = Kokkos::View("xr"); + constexpr auto xr_data = std::array{1., 2., 3., 4.}; + const auto xr_host = Kokkos::View(xr_data.data()); + const auto xr_mirror = Kokkos::create_mirror(xr); + Kokkos::deep_copy(xr_mirror, xr_host); + Kokkos::deep_copy(xr, xr_mirror); + + const auto Cstar = Kokkos::View("Cstar"); constexpr auto Cstar_data = std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.}; const auto Cstar_host = - Kokkos::View(Cstar_data.data()); + Kokkos::View(Cstar_data.data()); const auto Cstar_mirror = Kokkos::create_mirror(Cstar); Kokkos::deep_copy(Cstar_mirror, Cstar_host); Kokkos::deep_copy(Cstar, Cstar_mirror); - const auto Cuu = Kokkos::View("Cuu"); + const auto Cuu = Kokkos::View("Cuu"); - Kokkos::parallel_for("RotateSectionMatrix", 1, ExecuteRotateSectionMatrix{0, rr0, Cstar, Cuu}); + Kokkos::parallel_for("RotateSectionMatrix", 1, ExecuteRotateSectionMatrix{xr, Cstar, Cuu}); constexpr auto Cuu_exact_data = - std::array{372., 912., 1452., 480., 1182., 1884., 822., 2010., 3198., - 1092., 2685., 4278., 1272., 3108., 4944., 1704., 4188., 6672., - 1020., 2532., 4044., 1128., 2802., 4476., 2442., 6060., 9678., - 2712., 6735., 10758., 3864., 9588., 15312., 4296., 10668., 17040.}; + std::array{2052., 9000., 12564., 2160., 9540., 13320., 2700., 7200., 9900., + 3240., 9900., 13680., 3564., 9000., 12348., 4320., 12780., 17640., + 2700., 12240., 17100., 2808., 12780., 17856., 5940., 23400., 32580., + 6480., 26100., 36360., 8100., 31680., 44100., 8856., 35460., 49392.}; const auto Cuu_exact = - Kokkos::View(Cuu_exact_data.data()); + Kokkos::View(Cuu_exact_data.data()); const auto Cuu_mirror = Kokkos::create_mirror(Cuu); Kokkos::deep_copy(Cuu_mirror, Cuu); From f1f4c7508819f5909838121571e3808026f99f99 Mon Sep 17 00:00:00 2001 From: dcdemen Date: Wed, 12 Feb 2025 13:01:37 -0700 Subject: [PATCH 2/6] Optimized system variable calculations for springs --- src/step/update_system_variables_springs.hpp | 17 +--- .../springs/calculate_distance_components.hpp | 26 ++---- .../springs/calculate_force_coefficients.hpp | 26 ++---- .../springs/calculate_force_vectors.hpp | 24 ++---- src/system/springs/calculate_length.hpp | 18 +---- .../calculate_quadrature_point_values.hpp | 81 +++++++++++++------ .../springs/calculate_stiffness_matrix.hpp | 42 +++------- .../floating_platform/floating_platform.cpp | 13 +-- .../interfaces/test_cfd_interface.cpp | 13 +-- .../test_calculate_distance_components.cpp | 18 ++--- .../test_calculate_force_coefficients.cpp | 3 +- .../springs/test_calculate_force_vectors.cpp | 71 ++++++++-------- .../system/springs/test_calculate_length.cpp | 27 ++++--- .../test_calculate_stiffness_matrix.cpp | 58 +++---------- 14 files changed, 172 insertions(+), 265 deletions(-) diff --git a/src/step/update_system_variables_springs.hpp b/src/step/update_system_variables_springs.hpp index ab3c6d42d..f00debc82 100644 --- a/src/step/update_system_variables_springs.hpp +++ b/src/step/update_system_variables_springs.hpp @@ -1,37 +1,24 @@ #pragma once #include +#include -#include "assemble_residual_vector_springs.hpp" -#include "assemble_stiffness_matrix_springs.hpp" #include "elements/springs/springs.hpp" #include "state/state.hpp" -#include "step_parameters.hpp" #include "system/springs/calculate_quadrature_point_values.hpp" -#include "system/springs/update_node_state.hpp" namespace openturbine { inline void UpdateSystemVariablesSprings(const Springs& springs, State& state) { auto region = Kokkos::Profiling::ScopedRegion("Update System Variables Springs"); - // Update the displacements from state -> element nodes - Kokkos::parallel_for( - "springs::UpdateNodeState", springs.num_elems, - springs::UpdateNodeState{springs.node_state_indices, springs.u1, springs.u2, state.q} - ); - // Calculate system variables and perform assembly Kokkos::parallel_for( "Calculate System Variables Springs", springs.num_elems, springs::CalculateQuadraturePointValues{ - springs.x0, springs.u1, springs.u2, springs.l_ref, springs.k, springs.r, springs.l, - springs.c1, springs.c2, springs.f, springs.r_tilde, springs.a + state.q, springs.node_state_indices, springs.x0, springs.l_ref, springs.k, springs.residual_vector_terms, springs.stiffness_matrix_terms } ); - - AssembleResidualVectorSprings(springs); - AssembleStiffnessMatrixSprings(springs); } } // namespace openturbine diff --git a/src/system/springs/calculate_distance_components.hpp b/src/system/springs/calculate_distance_components.hpp index 0856bec27..f3e612894 100644 --- a/src/system/springs/calculate_distance_components.hpp +++ b/src/system/springs/calculate_distance_components.hpp @@ -7,27 +7,11 @@ namespace openturbine::springs { -/** - * @brief Functor to calculate relative distance vector between spring element nodes - */ -struct CalculateDistanceComponents { - size_t i_elem; //< Element index - Kokkos::View::const_type x0_; //< Initial distance vector between nodes - Kokkos::View::const_type u1_; //< Displacement vector of node 1 - Kokkos::View::const_type u2_; //< Displacement vector of node 2 - Kokkos::View r_; //< Relative distance vector between the two nodes - - KOKKOS_FUNCTION - void operator()() const { - auto x0 = Kokkos::subview(x0_, i_elem, Kokkos::ALL); - auto u1 = Kokkos::subview(u1_, i_elem, Kokkos::ALL); - auto u2 = Kokkos::subview(u2_, i_elem, Kokkos::ALL); - auto r = Kokkos::subview(r_, i_elem, Kokkos::ALL); - - for (int i = 0; i < 3; ++i) { - r(i) = x0(i) + u2(i) - u1(i); - } +KOKKOS_FUNCTION +inline void CalculateDistanceComponents(const Kokkos::View::const_type& x0, const Kokkos::View::const_type& u1, const Kokkos::View::const_type& u2, const Kokkos::View& r) { + for (auto i = 0U; i < 3U; ++i) { + r(i) = x0(i) + u2(i) - u1(i); } -}; +} } // namespace openturbine::springs diff --git a/src/system/springs/calculate_force_coefficients.hpp b/src/system/springs/calculate_force_coefficients.hpp index 351489f39..e87aa2c7f 100644 --- a/src/system/springs/calculate_force_coefficients.hpp +++ b/src/system/springs/calculate_force_coefficients.hpp @@ -7,24 +7,14 @@ namespace openturbine::springs { -/** - * @brief Functor to calculate force coefficients for spring elements - */ -struct CalculateForceCoefficients { - size_t i_elem; //< Element index - Kokkos::View::const_type k_; //< Spring stiffness - Kokkos::View::const_type l_ref_; //< Reference length - Kokkos::View::const_type l_; //< Current length - Kokkos::View c1_; //< Force coefficient 1 - Kokkos::View c2_; //< Force coefficient 2 +KOKKOS_FUNCTION +inline double CalculateForceCoefficient1(double k, double l_ref, double l) { + return k * (l_ref / l - 1.); +} - KOKKOS_FUNCTION - void operator()() const { - // c1 = k * (l_ref/l - 1) - c1_(i_elem) = k_(i_elem) * (l_ref_(i_elem) / l_(i_elem) - 1.); - // c2 = k * l_ref/(l^3) - c2_(i_elem) = k_(i_elem) * l_ref_(i_elem) / (l_(i_elem) * l_(i_elem) * l_(i_elem)); - } -}; +KOKKOS_FUNCTION +inline double CalculateForceCoefficient2(double k, double l_ref, double l) { + return k * l_ref / (l * l * l); +} } // namespace openturbine::springs diff --git a/src/system/springs/calculate_force_vectors.hpp b/src/system/springs/calculate_force_vectors.hpp index 2bc22839b..b5d0a712b 100644 --- a/src/system/springs/calculate_force_vectors.hpp +++ b/src/system/springs/calculate_force_vectors.hpp @@ -7,25 +7,11 @@ namespace openturbine::springs { -/** - * @brief Functor to calculate force vectors for spring elements - */ -struct CalculateForceVectors { - size_t i_elem; //< Element index - Kokkos::View::const_type r_; //< Relative distance vector between nodes - Kokkos::View::const_type c1_; //< Force coefficient 1 - Kokkos::View f_; //< Force vector - - KOKKOS_FUNCTION - void operator()() const { - auto r = Kokkos::subview(r_, i_elem, Kokkos::ALL); - auto f = Kokkos::subview(f_, i_elem, Kokkos::ALL); - - // Calculate force vector components: f = c1 * r - for (int i = 0; i < 3; ++i) { - f(i) = c1_(i_elem) * r(i); - } +KOKKOS_FUNCTION +inline void CalculateForceVectors(const Kokkos::View::const_type& r, double c1, const Kokkos::View& f) { + for (auto i = 0U; i < 3U; ++i) { + f(i) = c1 * r(i); } -}; +} } // namespace openturbine::springs diff --git a/src/system/springs/calculate_length.hpp b/src/system/springs/calculate_length.hpp index 23fe4de90..2796eecd5 100644 --- a/src/system/springs/calculate_length.hpp +++ b/src/system/springs/calculate_length.hpp @@ -7,19 +7,9 @@ namespace openturbine::springs { -/** - * @brief Functor to calculate the current length of a spring element - */ -struct CalculateLength { - size_t i_elem; //< Element index - Kokkos::View::const_type r_; //< Relative distance vector between nodes - Kokkos::View l_; //< Current length - - KOKKOS_FUNCTION - void operator()() const { - auto r = Kokkos::subview(r_, i_elem, Kokkos::ALL); - l_(i_elem) = sqrt(r(0) * r(0) + r(1) * r(1) + r(2) * r(2)); - } -}; +KOKKOS_FUNCTION +inline double CalculateLength(const Kokkos::View::const_type& r) { + return sqrt(r(0) * r(0) + r(1) * r(1) + r(2) * r(2)); +} } // namespace openturbine::springs diff --git a/src/system/springs/calculate_quadrature_point_values.hpp b/src/system/springs/calculate_quadrature_point_values.hpp index 4678bb229..a890f8d1b 100644 --- a/src/system/springs/calculate_quadrature_point_values.hpp +++ b/src/system/springs/calculate_quadrature_point_values.hpp @@ -11,36 +11,71 @@ namespace openturbine::springs { struct CalculateQuadraturePointValues { - Kokkos::View::const_type x0; - Kokkos::View::const_type u1; - Kokkos::View::const_type u2; - Kokkos::View::const_type l_ref; - Kokkos::View::const_type k; - - Kokkos::View r; - Kokkos::View l; - Kokkos::View c1; - Kokkos::View c2; - Kokkos::View f; - Kokkos::View r_tilde; - Kokkos::View a; + Kokkos::View::const_type Q; + + Kokkos::View::const_type node_state_indices; + Kokkos::View::const_type x0_; + Kokkos::View::const_type l_ref_; + Kokkos::View::const_type k_; + + Kokkos::View residual_vector_terms; + Kokkos::View stiffness_matrix_terms; KOKKOS_FUNCTION void operator()(size_t i_elem) const { - // Calculate the relative distance vector between the two nodes - springs::CalculateDistanceComponents{i_elem, x0, u1, u2, r}(); + const auto index_0 = node_state_indices(i_elem, 0); + const auto index_1 = node_state_indices(i_elem, 1); + + const auto x0_data = Kokkos::Array{x0_(i_elem, 0), x0_(i_elem, 1), x0_(i_elem, 2)}; + const auto u1_data = Kokkos::Array{Q(index_0, 0), Q(index_0, 1), Q(index_0, 2)}; + const auto u2_data = Kokkos::Array{Q(index_1, 0), Q(index_1, 1), Q(index_1, 2)}; + auto r_data = Kokkos::Array{}; + auto f_data = Kokkos::Array{}; + auto a_data = Kokkos::Array{}; + + const auto x0 = Kokkos::View::const_type(x0_data.data()); + const auto u1 = Kokkos::View::const_type(u1_data.data()); + const auto u2 = Kokkos::View::const_type(u2_data.data()); + const auto r = Kokkos::View(r_data.data()); + const auto f = Kokkos::View(f_data.data()); + const auto a = Kokkos::View(a_data.data()); - // Calculate the current length of the spring - springs::CalculateLength{i_elem, r, l}(); + const auto l_ref = l_ref_(i_elem); + const auto k = k_(i_elem); - // Calculate the force coefficients - springs::CalculateForceCoefficients{i_elem, k, l_ref, l, c1, c2}(); + springs::CalculateDistanceComponents(x0, u1, u2, r); + const auto l = springs::CalculateLength(r); + const auto c1 = springs::CalculateForceCoefficient1(k, l_ref, l); + const auto c2 = springs::CalculateForceCoefficient2(k, l_ref, l); + CalculateForceVectors(r, c1, f); + CalculateStiffnessMatrix(c1, c2, r, l, a); - // Calculate the force vector - springs::CalculateForceVectors{i_elem, r, c1, f}(); + for (auto i = 0U; i < 3U; ++i) { + residual_vector_terms(i_elem, 0, i) = f(i); + residual_vector_terms(i_elem, 1, i) = -f(i); + } + + for (auto i = 0U; i < 3U; ++i) { + for (auto j = 0U; j < 3U; ++j) { + stiffness_matrix_terms(i_elem, 0, 0, i, j) = a(i, j); + } + } + for (auto i = 0U; i < 3U; ++i) { + for (auto j = 0U; j < 3U; ++j) { + stiffness_matrix_terms(i_elem, 0, 1, i, j) = -a(i, j); + } + } + for (auto i = 0U; i < 3U; ++i) { + for (auto j = 0U; j < 3U; ++j) { + stiffness_matrix_terms(i_elem, 1, 0, i, j) = -a(i, j); + } + } + for (auto i = 0U; i < 3U; ++i) { + for (auto j = 0U; j < 3U; ++j) { + stiffness_matrix_terms(i_elem, 1, 1, i, j) = a(i, j); + } + } - // Calculate the stiffness matrix - springs::CalculateStiffnessMatrix{i_elem, c1, c2, r, l, r_tilde, a}(); } }; diff --git a/src/system/springs/calculate_stiffness_matrix.hpp b/src/system/springs/calculate_stiffness_matrix.hpp index 75c54bb60..f6ae4108a 100644 --- a/src/system/springs/calculate_stiffness_matrix.hpp +++ b/src/system/springs/calculate_stiffness_matrix.hpp @@ -9,41 +9,21 @@ namespace openturbine::springs { -/** - * @brief Functor to calculate the stiffness matrix for spring elements - */ -struct CalculateStiffnessMatrix { - size_t i_elem; //< Element index +KOKKOS_FUNCTION +inline void CalculateStiffnessMatrix(double c1, double c2, const Kokkos::View::const_type& r, double l, const Kokkos::View& a) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; using Gemm = KokkosBatched::SerialGemm; - Kokkos::View::const_type c1_; //< Force coefficient 1 - Kokkos::View::const_type c2_; //< Force coefficient 2 - Kokkos::View::const_type r_; //< Relative distance vector between nodes - Kokkos::View::const_type l_; //< Current length - Kokkos::View r_tilde_; //< Skew-symmetric matrix of r - Kokkos::View a_; //< Stiffness matrix + auto r_tilde_data = Kokkos::Array{}; + auto r_tilde = Kokkos::View(r_tilde_data.data()); - KOKKOS_FUNCTION - void operator()() const { - auto r = Kokkos::subview(r_, i_elem, Kokkos::ALL); - auto r_tilde = Kokkos::subview(r_tilde_, i_elem, Kokkos::ALL, Kokkos::ALL); - auto a = Kokkos::subview(a_, i_elem, Kokkos::ALL, Kokkos::ALL); + const double diag_term = c1 - c2 * l * l; + a(0, 0) = diag_term; + a(1, 1) = diag_term; + a(2, 2) = diag_term; - KokkosBlas::SerialSet::invoke(0., a); - - // diagonal terms: c1 - c2 * l^2 - const double diag_term = c1_(i_elem) - c2_(i_elem) * l_(i_elem) * l_(i_elem); - a(0, 0) = diag_term; - a(1, 1) = diag_term; - a(2, 2) = diag_term; - - // non-diagonal terms: -c2 * r_tilde * r_tilde - auto temp = Kokkos::Array{0.}; - auto temp_view = View_3x3(temp.data()); - VecTilde(r, r_tilde); - Gemm::invoke(-c2_(i_elem), r_tilde, r_tilde, 1., a); - }; -}; + VecTilde(r, r_tilde); + Gemm::invoke(-c2, r_tilde, r_tilde, 1., a); +} } // namespace openturbine::springs diff --git a/tests/documentation_tests/floating_platform/floating_platform.cpp b/tests/documentation_tests/floating_platform/floating_platform.cpp index a3cc9822f..23b3605df 100644 --- a/tests/documentation_tests/floating_platform/floating_platform.cpp +++ b/tests/documentation_tests/floating_platform/floating_platform.cpp @@ -93,20 +93,11 @@ int main() { }, }); - // Save the initial state, then take first step - interface.SaveState(); - auto converged = interface.Step(); - // Calculate buoyancy force as percentage of gravitational force plus spring forces times - const auto spring_f = Kokkos::create_mirror(interface.elements.springs.f); - Kokkos::deep_copy(spring_f, interface.elements.springs.f); - const auto initial_spring_force = spring_f(0, 2) + spring_f(1, 2) + spring_f(2, 2); + const auto initial_spring_force = 1907514.4912628897; const auto platform_gravity_force = -gravity[2] * platform_mass; const auto buoyancy_force = initial_spring_force + platform_gravity_force; - // Reset to initial state and apply - interface.RestoreState(); - // Iterate through time steps for (size_t i = 0U; i < n_steps; ++i) { // Calculate current time @@ -128,7 +119,7 @@ int main() { 2.0e7 * sin(2. * M_PI / 60. * t); // rz // Take a single time step - converged = interface.Step(); + auto converged = interface.Step(); assert(converged); } } diff --git a/tests/regression_tests/interfaces/test_cfd_interface.cpp b/tests/regression_tests/interfaces/test_cfd_interface.cpp index 6d28fd70b..d9329dfbc 100644 --- a/tests/regression_tests/interfaces/test_cfd_interface.cpp +++ b/tests/regression_tests/interfaces/test_cfd_interface.cpp @@ -219,20 +219,11 @@ TEST(CFDInterfaceTest, FloatingPlatform) { }, }); - // Save the initial state, then take first step - interface.SaveState(); - auto converged = interface.Step(); - EXPECT_EQ(converged, true); - // Calculate buoyancy force as percentage of gravitational force plus spring forces times - const auto spring_f = kokkos_view_2D_to_vector(interface.elements.springs.f); - const auto initial_spring_force = spring_f[0][2] + spring_f[1][2] + spring_f[2][2]; + const auto initial_spring_force = 1907514.4912628897; const auto platform_gravity_force = -gravity[2] * platform_mass; const auto buoyancy_force = initial_spring_force + platform_gravity_force; - // Reset to initial state and apply - interface.RestoreState(); - const std::string output_dir{"FloatingPlatform"}; RemoveDirectoryWithRetries(output_dir); std::filesystem::create_directory(output_dir); @@ -258,7 +249,7 @@ TEST(CFDInterfaceTest, FloatingPlatform) { interface.turbine.floating_platform.node.loads[5] = 2.0e7 * sin(2. * M_PI / 60. * t); // rz // Step - converged = interface.Step(); + const auto converged = interface.Step(); EXPECT_EQ(converged, true); // Check for expected displacements/rotations of platform node diff --git a/tests/unit_tests/system/springs/test_calculate_distance_components.cpp b/tests/unit_tests/system/springs/test_calculate_distance_components.cpp index b8b06c621..da4447323 100644 --- a/tests/unit_tests/system/springs/test_calculate_distance_components.cpp +++ b/tests/unit_tests/system/springs/test_calculate_distance_components.cpp @@ -7,18 +7,18 @@ namespace { void TestCalculateDistanceComponentsTests_OneElement() { - const auto x0 = Kokkos::View("x0"); - const auto u1 = Kokkos::View("u1"); - const auto u2 = Kokkos::View("u2"); - const auto r = Kokkos::View("r"); + const auto x0 = Kokkos::View("x0"); + const auto u1 = Kokkos::View("u1"); + const auto u2 = Kokkos::View("u2"); + const auto r = Kokkos::View("r"); constexpr auto x0_data = std::array{1., 2., 3.}; constexpr auto u1_data = std::array{0.1, 0.2, 0.3}; constexpr auto u2_data = std::array{0.4, 0.5, 0.6}; - const auto x0_host = Kokkos::View(x0_data.data()); - const auto u1_host = Kokkos::View(u1_data.data()); - const auto u2_host = Kokkos::View(u2_data.data()); + const auto x0_host = Kokkos::View(x0_data.data()); + const auto u1_host = Kokkos::View(u1_data.data()); + const auto u2_host = Kokkos::View(u2_data.data()); const auto x0_mirror = Kokkos::create_mirror(x0); const auto u1_mirror = Kokkos::create_mirror(u1); @@ -35,7 +35,7 @@ void TestCalculateDistanceComponentsTests_OneElement() { Kokkos::parallel_for( "CalculateDistanceComponents", 1, KOKKOS_LAMBDA(const size_t) { - openturbine::springs::CalculateDistanceComponents{0, x0, u1, u2, r}(); + openturbine::springs::CalculateDistanceComponents(x0, u1, u2, r); } ); @@ -44,7 +44,7 @@ void TestCalculateDistanceComponentsTests_OneElement() { 2. - 0.2 + 0.5, // 2.3 3. - 0.3 + 0.6 // 3.3 }; - const auto r_exact = Kokkos::View(r_exact_data.data()); + const auto r_exact = Kokkos::View(r_exact_data.data()); const auto r_mirror = Kokkos::create_mirror(r); Kokkos::deep_copy(r_mirror, r); diff --git a/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp b/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp index dd66b0cdc..f90958ea2 100644 --- a/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp +++ b/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp @@ -36,7 +36,8 @@ void TestCalculateForceCoefficientsTests_ThreeElements() { Kokkos::parallel_for( "CalculateForceCoefficients", 3, KOKKOS_LAMBDA(const size_t i_elem) { - openturbine::springs::CalculateForceCoefficients{i_elem, k, l_ref, l, c1, c2}(); + c1(i_elem) = openturbine::springs::CalculateForceCoefficient1(k(i_elem), l_ref(i_elem), l(i_elem)); + c2(i_elem) = openturbine::springs::CalculateForceCoefficient2(k(i_elem), l_ref(i_elem), l(i_elem)); } ); diff --git a/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp b/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp index 7194e45c8..0f3803f76 100644 --- a/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp +++ b/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp @@ -7,47 +7,50 @@ namespace { void TestCalculateForceVectorsTests_ThreeElements() { - const auto r = Kokkos::View("r"); - const auto c1 = Kokkos::View("c1"); - const auto f = Kokkos::View("f"); - - constexpr auto r_data = std::array{ - 1., 2., 3., // Element 1 - 4., 5., 6., // Element 2 - 7., 8., 9. // Element 3 - }; - constexpr auto c1_data = std::array{2., -1., 0.5}; // Force coefficients - - const auto r_host = Kokkos::View(r_data.data()); - const auto c1_host = Kokkos::View(c1_data.data()); - - const auto r_mirror = Kokkos::create_mirror(r); - const auto c1_mirror = Kokkos::create_mirror(c1); - - Kokkos::deep_copy(r_mirror, r_host); - Kokkos::deep_copy(c1_mirror, c1_host); - - Kokkos::deep_copy(r, r_mirror); - Kokkos::deep_copy(c1, c1_mirror); + const auto f0 = Kokkos::View("f0"); + const auto f1 = Kokkos::View("f1"); + const auto f2 = Kokkos::View("f2"); Kokkos::parallel_for( - "CalculateForceVectors", 3, - KOKKOS_LAMBDA(const size_t i_elem) { - openturbine::springs::CalculateForceVectors{i_elem, r, c1, f}(); + "CalculateForceVectors", 1, + KOKKOS_LAMBDA(const size_t) { + constexpr auto r0_data = Kokkos::Array{1., 2., 3.}; + constexpr auto r1_data = Kokkos::Array{4., 5., 6.}; + constexpr auto r2_data = Kokkos::Array{7., 8., 9.}; + + const auto r0 = Kokkos::View::const_type(r0_data.data()); + const auto r1 = Kokkos::View::const_type(r1_data.data()); + const auto r2 = Kokkos::View::const_type(r2_data.data()); + + constexpr auto c10 = 2.; + constexpr auto c11 = -1.; + constexpr auto c12 = 0.5; + + openturbine::springs::CalculateForceVectors(r0, c10, f0); + openturbine::springs::CalculateForceVectors(r1, c11, f1); + openturbine::springs::CalculateForceVectors(r2, c12, f2); } ); - constexpr auto f_exact_data = std::array{ - 2., 4., 6., // Element 1 - -4., -5., -6., // Element 2 - 3.5, 4., 4.5 // Element 3 - }; - const auto f_exact = Kokkos::View(f_exact_data.data()); + constexpr auto f0_exact_data = std::array{2., 4., 6.}; + constexpr auto f1_exact_data = std::array{-4., -5., -6.}; + constexpr auto f2_exact_data = std::array{3.5, 4., 4.5}; + + const auto f0_exact = Kokkos::View::const_type(f0_exact_data.data()); + const auto f1_exact = Kokkos::View::const_type(f1_exact_data.data()); + const auto f2_exact = Kokkos::View::const_type(f2_exact_data.data()); + + const auto f0_result = Kokkos::create_mirror(f0); + const auto f1_result = Kokkos::create_mirror(f1); + const auto f2_result = Kokkos::create_mirror(f2); - const auto f_result = Kokkos::create_mirror(f); - Kokkos::deep_copy(f_result, f); + Kokkos::deep_copy(f0_result, f0); + Kokkos::deep_copy(f1_result, f1); + Kokkos::deep_copy(f2_result, f2); - openturbine::tests::CompareWithExpected(f_result, f_exact); + openturbine::tests::CompareWithExpected(f0_result, f0_exact); + openturbine::tests::CompareWithExpected(f1_result, f1_exact); + openturbine::tests::CompareWithExpected(f2_result, f2_exact); } } // namespace diff --git a/tests/unit_tests/system/springs/test_calculate_length.cpp b/tests/unit_tests/system/springs/test_calculate_length.cpp index 609b8b1f2..7beea605a 100644 --- a/tests/unit_tests/system/springs/test_calculate_length.cpp +++ b/tests/unit_tests/system/springs/test_calculate_length.cpp @@ -5,21 +5,22 @@ #include "system/springs/calculate_length.hpp" void TestCalclateLengthTests_ThreeElements() { - const auto r = Kokkos::View("r"); - constexpr auto r_data = std::array{ - 1., 0., 0., // Element 1: length = 1. - 3., 4., 0., // Element 2: length = 5. - 1., 2., 2. // Element 3: length = 3. - }; - const auto r_host = Kokkos::View(r_data.data()); - const auto r_mirror = Kokkos::create_mirror(r); - Kokkos::deep_copy(r_mirror, r_host); - Kokkos::deep_copy(r, r_mirror); - const auto l = Kokkos::View("l"); Kokkos::parallel_for( - "CalculateLength", 3, - KOKKOS_LAMBDA(const size_t i_elem) { openturbine::springs::CalculateLength{i_elem, r, l}(); } + "CalculateLength", 1, + KOKKOS_LAMBDA(const size_t) { + constexpr auto r0_data = Kokkos::Array{1., 0., 0.}; + constexpr auto r1_data = Kokkos::Array{3., 4., 0.}; + constexpr auto r2_data = Kokkos::Array{1., 2., 2.}; + + const auto r0 = Kokkos::View::const_type(r0_data.data()); + const auto r1 = Kokkos::View::const_type(r1_data.data()); + const auto r2 = Kokkos::View::const_type(r2_data.data()); + + l(0) = openturbine::springs::CalculateLength(r0); + l(1) = openturbine::springs::CalculateLength(r1); + l(2) = openturbine::springs::CalculateLength(r2); + } ); constexpr auto l_exact_data = std::array{1., 5., 3.}; diff --git a/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp b/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp index d7b949791..90f699ded 100644 --- a/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp +++ b/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp @@ -4,53 +4,25 @@ #include "system/beams/test_calculate.hpp" #include "system/springs/calculate_stiffness_matrix.hpp" -void TestCalculateStiffnessMatrixTests_OneElement() { - const auto c1 = Kokkos::View("c1"); - const auto c2 = Kokkos::View("c2"); - const auto r = Kokkos::View("r"); - const auto l = Kokkos::View("l"); - auto r_tilde = Kokkos::View("r_tilde"); - auto a = Kokkos::View("a"); - - constexpr auto c1_data = std::array{2.}; // force calc. coeff 1 - constexpr auto c2_data = std::array{1.}; // force calc. coeff 2 - constexpr auto r_data = std::array{1., 2., 3.}; // distance vector - constexpr auto l_data = std::array{1.}; // current length - - const auto c1_host = Kokkos::View(c1_data.data()); - const auto c2_host = Kokkos::View(c2_data.data()); - const auto r_host = Kokkos::View(r_data.data()); - const auto l_host = Kokkos::View(l_data.data()); +namespace { - const auto c1_mirror = Kokkos::create_mirror(c1); - const auto c2_mirror = Kokkos::create_mirror(c2); - const auto r_mirror = Kokkos::create_mirror(r); - const auto l_mirror = Kokkos::create_mirror(l); - - Kokkos::deep_copy(c1_mirror, c1_host); - Kokkos::deep_copy(c2_mirror, c2_host); - Kokkos::deep_copy(r_mirror, r_host); - Kokkos::deep_copy(l_mirror, l_host); - - Kokkos::deep_copy(c1, c1_mirror); - Kokkos::deep_copy(c2, c2_mirror); - Kokkos::deep_copy(r, r_mirror); - Kokkos::deep_copy(l, l_mirror); +void TestCalculateStiffnessMatrixTests_OneElement() { + auto a = Kokkos::View("a"); Kokkos::parallel_for( "CalculateStiffnessMatrix", 1, KOKKOS_LAMBDA(const size_t i_elem) { - openturbine::springs::CalculateStiffnessMatrix{i_elem, c1, c2, r, l, r_tilde, a}(); + constexpr auto c1 = 2.; + constexpr auto c2 = 1.; + constexpr auto l = 1.; + + constexpr auto r_data = Kokkos::Array{1., 2., 3.}; + const auto r = Kokkos::View::const_type(r_data.data()); + + openturbine::springs::CalculateStiffnessMatrix(c1, c2, r, l, a); } ); - // Expected r_tilde matrix (skew-symmetric matrix from r vector) - constexpr auto r_tilde_exact_data = std::array{ - 0., -3., 2., // row 1 - 3., 0., -1., // row 2 - -2., 1., 0. // row 3 - }; - // Expected a matrix: diag_term * I - c2 * r_tilde * r_tilde // where diag_term = c1 - c2 * l^2 = 2. - 1. * 1. = 1. constexpr auto a_exact_data = std::array{ @@ -59,19 +31,15 @@ void TestCalculateStiffnessMatrixTests_OneElement() { -3., -6., 6. // row 3 }; - const auto r_tilde_exact = - Kokkos::View(r_tilde_exact_data.data()); - const auto a_exact = Kokkos::View(a_exact_data.data()); + const auto a_exact = Kokkos::View(a_exact_data.data()); - const auto r_tilde_result = Kokkos::create_mirror(r_tilde); const auto a_result = Kokkos::create_mirror(a); - Kokkos::deep_copy(r_tilde_result, r_tilde); Kokkos::deep_copy(a_result, a); - openturbine::tests::CompareWithExpected(r_tilde_result, r_tilde_exact); openturbine::tests::CompareWithExpected(a_result, a_exact); } +} namespace openturbine::tests { TEST(CalculateStiffnessMatrixTests, OneElement) { From 92f4b60a335d1c9db0377f305f61deeef02705f1 Mon Sep 17 00:00:00 2001 From: dcdemen Date: Wed, 12 Feb 2025 13:51:07 -0700 Subject: [PATCH 3/6] Removed working variables from springs and masses data structures --- src/elements/masses/masses.hpp | 85 +++++++++---------- src/elements/springs/springs.hpp | 18 ---- src/step/assemble_residual_vector_springs.hpp | 1 + .../regression/test_masses.cpp | 32 +------ .../regression/test_springs.cpp | 56 ------------ .../test_assemble_residual_vector_springs.cpp | 2 + ...test_assemble_stiffness_matrix_springs.cpp | 2 + 7 files changed, 46 insertions(+), 150 deletions(-) diff --git a/src/elements/masses/masses.hpp b/src/elements/masses/masses.hpp index 8f2ad7081..36de2720d 100644 --- a/src/elements/masses/masses.hpp +++ b/src/elements/masses/masses.hpp @@ -25,30 +25,30 @@ struct Masses { View_3 gravity; Kokkos::View node_x0; //< Initial position/rotation - Kokkos::View node_u; //< State: translation/rotation displacement - Kokkos::View node_u_dot; //< State: translation/rotation velocity - Kokkos::View node_u_ddot; //< State: translation/rotation acceleration - +// Kokkos::View node_u; //< State: translation/rotation displacement +// Kokkos::View node_u_dot; //< State: translation/rotation velocity +// Kokkos::View node_u_ddot; //< State: translation/rotation acceleration +// Kokkos::View qp_Mstar; //< Mass matrix in material frame - Kokkos::View qp_x; //< Current position/orientation - Kokkos::View qp_x0; - Kokkos::View qp_r0; - Kokkos::View qp_u; - Kokkos::View qp_u_ddot; - Kokkos::View qp_r; - Kokkos::View qp_omega; - Kokkos::View qp_omega_dot; - Kokkos::View qp_eta_tilde; - Kokkos::View qp_omega_tilde; - Kokkos::View qp_omega_dot_tilde; - Kokkos::View qp_eta; //< Offset between mass center and elastic axis - Kokkos::View qp_rho; //< Rotational inertia part of mass matrix - Kokkos::View qp_Fi; //< Inertial force - Kokkos::View qp_Fg; //< Gravity force - Kokkos::View qp_RR0; //< Global rotation - Kokkos::View qp_Muu; //< Mass matrix in global/inertial frame - Kokkos::View qp_Guu; //< Gyroscopic/inertial damping matrix - Kokkos::View qp_Kuu; //< Inertia stiffness matrix +// Kokkos::View qp_x; //< Current position/orientation +// Kokkos::View qp_x0; +// Kokkos::View qp_r0; +// Kokkos::View qp_u; +// Kokkos::View qp_u_ddot; +// Kokkos::View qp_r; +// Kokkos::View qp_omega; +// Kokkos::View qp_omega_dot; +// Kokkos::View qp_eta_tilde; +// Kokkos::View qp_omega_tilde; +// Kokkos::View qp_omega_dot_tilde; +// Kokkos::View qp_eta; //< Offset between mass center and elastic axis +// Kokkos::View qp_rho; //< Rotational inertia part of mass matrix +// Kokkos::View qp_Fi; //< Inertial force +// Kokkos::View qp_Fg; //< Gravity force +// Kokkos::View qp_RR0; //< Global rotation +// Kokkos::View qp_Muu; //< Mass matrix in global/inertial frame +// Kokkos::View qp_Guu; //< Gyroscopic/inertial damping matrix +// Kokkos::View qp_Kuu; //< Inertia stiffness matrix Kokkos::View residual_vector_terms; Kokkos::View stiffness_matrix_terms; @@ -62,29 +62,24 @@ struct Masses { element_freedom_table("element_freedom_table", num_elems), gravity("gravity"), node_x0("node_x0", num_elems), - node_u("node_u", num_elems), - node_u_dot("node_u_dot", num_elems), - node_u_ddot("node_u_ddot", num_elems), +// node_u("node_u", num_elems), +// node_u_dot("node_u_dot", num_elems), +// node_u_ddot("node_u_ddot", num_elems), qp_Mstar("qp_Mstar", num_elems), - qp_x("qp_x", num_elems), - qp_x0("qp_x0", num_elems), - qp_r0("qp_r0", num_elems), - qp_u("qp_u", num_elems), - qp_u_ddot("qp_u_ddot", num_elems), - qp_r("qp_r", num_elems), - qp_omega("qp_omega", num_elems), - qp_omega_dot("qp_omega_dot", num_elems), - qp_eta_tilde("qp_eta_tilde", num_elems), - qp_omega_tilde("qp_omega_tilde", num_elems), - qp_omega_dot_tilde("qp_omega_dot_tilde", num_elems), - qp_eta("qp_eta", num_elems), - qp_rho("qp_rho", num_elems), - qp_Fi("qp_Fi", num_elems), - qp_Fg("qp_Fg", num_elems), - qp_RR0("qp_RR0", num_elems), - qp_Muu("qp_Muu", num_elems), - qp_Guu("qp_Guu", num_elems), - qp_Kuu("qp_Kuu", num_elems), +// qp_r("qp_r", num_elems), +// qp_omega("qp_omega", num_elems), +// qp_omega_dot("qp_omega_dot", num_elems), +// qp_eta_tilde("qp_eta_tilde", num_elems), +// qp_omega_tilde("qp_omega_tilde", num_elems), +// qp_omega_dot_tilde("qp_omega_dot_tilde", num_elems), +// qp_eta("qp_eta", num_elems), +// qp_rho("qp_rho", num_elems), +// qp_Fi("qp_Fi", num_elems), +// qp_Fg("qp_Fg", num_elems), +// qp_RR0("qp_RR0", num_elems), +// qp_Muu("qp_Muu", num_elems), +// qp_Guu("qp_Guu", num_elems), +// qp_Kuu("qp_Kuu", num_elems), residual_vector_terms("residual_vector_terms", num_elems), stiffness_matrix_terms("stiffness_matrix_terms", num_elems), inertia_matrix_terms("inertia_matrix_terms", num_elems) { diff --git a/src/elements/springs/springs.hpp b/src/elements/springs/springs.hpp index 690e464b7..00600cad2 100644 --- a/src/elements/springs/springs.hpp +++ b/src/elements/springs/springs.hpp @@ -20,17 +20,8 @@ struct Springs { Kokkos::View element_freedom_table; //< Only translational DOFs for springs Kokkos::View x0; //< Initial distance vector between nodes - Kokkos::View u1; //< Displacement of node 1 - Kokkos::View u2; //< Displacement of node 2 - Kokkos::View r; //< Current distance vector between nodes - Kokkos::View l; //< Current length of springs Kokkos::View l_ref; //< Initial length of springs Kokkos::View k; //< Spring stiffness coefficients - Kokkos::View c1; //< First coefficient for force calculation - Kokkos::View c2; //< Second coefficient for force calculation - Kokkos::View f; //< Force components - Kokkos::View a; //< Stiffness matrices - Kokkos::View r_tilde; //< Skew-symmetric matrix of r Kokkos::View residual_vector_terms; Kokkos::View stiffness_matrix_terms; @@ -42,17 +33,8 @@ struct Springs { element_freedom_signature("element_freedom_signature", num_elems), element_freedom_table("element_freedom_table", num_elems), x0("x0", num_elems), - u1("u1", num_elems), - u2("u2", num_elems), - r("r", num_elems), - l("l", num_elems), l_ref("l_ref", num_elems), k("k", num_elems), - c1("c1", num_elems), - c2("c2", num_elems), - f("f", num_elems), - a("a", num_elems), - r_tilde("r_tilde", num_elems), residual_vector_terms("residual_vector_terms", num_elems), stiffness_matrix_terms("stiffness_matrix_terms", num_elems) { Kokkos::deep_copy(num_nodes_per_element, 2); // Always 2 nodes per element diff --git a/src/step/assemble_residual_vector_springs.hpp b/src/step/assemble_residual_vector_springs.hpp index c26fe73c7..b8403db06 100644 --- a/src/step/assemble_residual_vector_springs.hpp +++ b/src/step/assemble_residual_vector_springs.hpp @@ -24,6 +24,7 @@ struct AssembleSpringsResidual { }; } // namespace springs + inline void AssembleResidualVectorSprings(const Springs& springs) { auto region = Kokkos::Profiling::ScopedRegion("Assemble Springs Residual"); Kokkos::parallel_for( diff --git a/tests/regression_tests/regression/test_masses.cpp b/tests/regression_tests/regression/test_masses.cpp index 65bc88d09..a3010a48f 100644 --- a/tests/regression_tests/regression/test_masses.cpp +++ b/tests/regression_tests/regression/test_masses.cpp @@ -49,43 +49,13 @@ inline auto SetUpMasses() { TEST(MassesTest, NodeInitialPosition) { const auto masses = SetUpMasses(); expect_kokkos_view_2D_equal( - masses.qp_x0, + masses.node_x0, { {0., 0., 0., 1., 0., 0., 0.}, } ); } -TEST(MassesTest, NodeInitialDisplacement) { - const auto masses = SetUpMasses(); - expect_kokkos_view_2D_equal( - masses.node_u, - { - {0., 0., 0., 1., 0., 0., 0.}, - } - ); -} - -TEST(MassesTest, NodeInitialVelocity) { - const auto masses = SetUpMasses(); - expect_kokkos_view_2D_equal( - masses.node_u_dot, - { - {0., 0., 0., 0., 0., 0.}, - } - ); -} - -TEST(MassesTest, NodeInitialAcceleration) { - const auto masses = SetUpMasses(); - expect_kokkos_view_2D_equal( - masses.node_u_ddot, - { - {0., 0., 0., 0., 0., 0.}, - } - ); -} - TEST(MassesTest, MassMatrixInMaterialFrame) { const auto masses = SetUpMasses(); expect_kokkos_view_2D_equal( diff --git a/tests/regression_tests/regression/test_springs.cpp b/tests/regression_tests/regression/test_springs.cpp index 33b10f336..a2e0338a1 100644 --- a/tests/regression_tests/regression/test_springs.cpp +++ b/tests/regression_tests/regression/test_springs.cpp @@ -55,60 +55,4 @@ TEST(SpringsTest, SpringStiffness) { expect_kokkos_view_1D_equal(springs.k, {10.}); // Spring stiffness } -TEST(SpringsTest, SpringsForceWithZeroDisplacement) { - auto [springs, state] = SetUpSprings(); - UpdateSystemVariablesSprings(springs, state); - - auto l_ref_host = Kokkos::create_mirror(springs.l_ref); - auto l_host = Kokkos::create_mirror(springs.l); - auto c1_host = Kokkos::create_mirror(springs.c1); - - Kokkos::deep_copy(l_ref_host, springs.l_ref); - Kokkos::deep_copy(l_host, springs.l); - Kokkos::deep_copy(c1_host, springs.c1); - - EXPECT_DOUBLE_EQ(l_ref_host(0), 1.); // Undeformed length = 1. - EXPECT_DOUBLE_EQ(l_host(0), 1.); // Current length = 1. - EXPECT_DOUBLE_EQ(c1_host(0), 0.); // c1 = 0. - expect_kokkos_view_1D_equal( - Kokkos::subview(springs.f, 0, Kokkos::ALL), {0., 0., 0.} - ); // No force - expect_kokkos_view_2D_equal( - Kokkos::subview(springs.a, 0, Kokkos::ALL, Kokkos::ALL), - {{-10., 0., 0.}, {0., 0., 0.}, {0., 0., 0.}} - ); -} - -TEST(SpringsTest, SpringsForceWithUnitDisplacement) { - auto [springs, state] = SetUpSprings(); - - auto q = Kokkos::create_mirror(state.q); - q(1, 0) = 1.; // Displace second node in x direction - Kokkos::deep_copy(state.q, q); - - UpdateSystemVariablesSprings(springs, state); - - auto l_ref_host = Kokkos::create_mirror(springs.l_ref); - auto l_host = Kokkos::create_mirror(springs.l); - auto c1_host = Kokkos::create_mirror(springs.c1); - auto c2_host = Kokkos::create_mirror(springs.c2); - - Kokkos::deep_copy(l_ref_host, springs.l_ref); - Kokkos::deep_copy(l_host, springs.l); - Kokkos::deep_copy(c1_host, springs.c1); - Kokkos::deep_copy(c2_host, springs.c2); - - EXPECT_DOUBLE_EQ(l_ref_host(0), 1.); // Undeformed length = 1. - EXPECT_DOUBLE_EQ(l_host(0), 2.); // Current length = 2. - EXPECT_DOUBLE_EQ(c1_host(0), -5.); // c1 = -5. - EXPECT_DOUBLE_EQ(c2_host(0), 10. * 1. / std::pow(2., 3)); // c2 = 10. / 8. - expect_kokkos_view_1D_equal( - Kokkos::subview(springs.f, 0, Kokkos::ALL), {-10., 0., 0.} - ); // Force = c1 * {r} - expect_kokkos_view_2D_equal( - Kokkos::subview(springs.a, 0, Kokkos::ALL, Kokkos::ALL), - {{-10., 0., 0.}, {0., -5., 0.}, {0., 0., -5.}} - ); -} - } // namespace openturbine::tests diff --git a/tests/unit_tests/step/test_assemble_residual_vector_springs.cpp b/tests/unit_tests/step/test_assemble_residual_vector_springs.cpp index ebb90bad7..85cdd86f5 100644 --- a/tests/unit_tests/step/test_assemble_residual_vector_springs.cpp +++ b/tests/unit_tests/step/test_assemble_residual_vector_springs.cpp @@ -1,3 +1,4 @@ +/* #include #include "elements/springs/create_springs.hpp" @@ -76,3 +77,4 @@ TEST(AssembleResidualVectorSpringsTest, ResidualVectorMatchesAppliedForcesInAllD } } // namespace openturbine::tests +*/ diff --git a/tests/unit_tests/step/test_assemble_stiffness_matrix_springs.cpp b/tests/unit_tests/step/test_assemble_stiffness_matrix_springs.cpp index 90b88ccc2..7e824e53e 100644 --- a/tests/unit_tests/step/test_assemble_stiffness_matrix_springs.cpp +++ b/tests/unit_tests/step/test_assemble_stiffness_matrix_springs.cpp @@ -1,3 +1,4 @@ +/* #include #include "elements/springs/create_springs.hpp" @@ -110,3 +111,4 @@ TEST(AssembleStiffnessMatrixSpringsTest, StiffnessMatrixMatchesGeneralStiffness) } } // namespace openturbine::tests +*/ From 7f53f270f26103551220f818fdcbe598357d0c12 Mon Sep 17 00:00:00 2001 From: dcdemen Date: Wed, 12 Feb 2025 14:42:19 -0700 Subject: [PATCH 4/6] Removed vestigial files --- src/step/CMakeLists.txt | 7 -- src/step/assemble_inertia_matrix_masses.hpp | 46 ------------- src/step/assemble_residual_vector_masses.hpp | 36 ----------- src/step/assemble_residual_vector_springs.hpp | 36 ----------- src/step/assemble_stiffness_matrix_masses.hpp | 36 ----------- .../assemble_stiffness_matrix_springs.hpp | 51 --------------- src/step/assemble_system_residual_beams.hpp | 22 ------- src/step/assemble_system_residual_masses.hpp | 22 ------- src/system/masses/CMakeLists.txt | 4 -- src/system/masses/calculate_QP_position.hpp | 64 ------------------- src/system/masses/calculate_RR0.hpp | 30 --------- .../calculate_quadrature_point_values.hpp | 1 - .../masses/copy_to_quadrature_points.hpp | 37 ----------- src/system/masses/update_node_state.hpp | 36 ----------- src/system/springs/CMakeLists.txt | 1 - src/system/springs/update_node_state.hpp | 28 -------- tests/unit_tests/system/masses/CMakeLists.txt | 2 - .../system/masses/test_calculate_RR0.cpp | 43 ------------- .../system/masses/test_update_node_state.cpp | 59 ----------------- .../unit_tests/system/springs/CMakeLists.txt | 1 - .../system/springs/test_update_node_state.cpp | 41 ------------ 21 files changed, 603 deletions(-) delete mode 100644 src/step/assemble_inertia_matrix_masses.hpp delete mode 100644 src/step/assemble_residual_vector_masses.hpp delete mode 100644 src/step/assemble_residual_vector_springs.hpp delete mode 100644 src/step/assemble_stiffness_matrix_masses.hpp delete mode 100644 src/step/assemble_stiffness_matrix_springs.hpp delete mode 100644 src/step/assemble_system_residual_beams.hpp delete mode 100644 src/step/assemble_system_residual_masses.hpp delete mode 100644 src/system/masses/calculate_QP_position.hpp delete mode 100644 src/system/masses/calculate_RR0.hpp delete mode 100644 src/system/masses/copy_to_quadrature_points.hpp delete mode 100644 src/system/masses/update_node_state.hpp delete mode 100644 src/system/springs/update_node_state.hpp delete mode 100644 tests/unit_tests/system/masses/test_calculate_RR0.cpp delete mode 100644 tests/unit_tests/system/masses/test_update_node_state.cpp delete mode 100644 tests/unit_tests/system/springs/test_update_node_state.cpp diff --git a/src/step/CMakeLists.txt b/src/step/CMakeLists.txt index c43b20d86..17b4d0b9c 100644 --- a/src/step/CMakeLists.txt +++ b/src/step/CMakeLists.txt @@ -4,17 +4,10 @@ install(FILES assemble_constraints_matrix.hpp assemble_constraints_residual.hpp assemble_inertia_matrix_beams.hpp - assemble_inertia_matrix_masses.hpp assemble_residual_vector_beams.hpp - assemble_residual_vector_masses.hpp - assemble_residual_vector_springs.hpp assemble_stiffness_matrix_beams.hpp - assemble_stiffness_matrix_masses.hpp - assemble_stiffness_matrix_springs.hpp assemble_system_matrix.hpp - assemble_system_residual_beams.hpp assemble_system_residual.hpp - assemble_system_residual_masses.hpp assemble_tangent_operator.hpp calculate_convergence_error.hpp predict_next_state.hpp diff --git a/src/step/assemble_inertia_matrix_masses.hpp b/src/step/assemble_inertia_matrix_masses.hpp deleted file mode 100644 index 84732d56e..000000000 --- a/src/step/assemble_inertia_matrix_masses.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include -#include - -#include "elements/masses/masses.hpp" - -namespace openturbine { - -namespace masses { - -struct AssembleMassesInertia { - double beta_prime; - double gamma_prime; - Kokkos::View::const_type qp_Muu; - Kokkos::View::const_type qp_Guu; - - Kokkos::View inertia_matrix_terms; - - KOKKOS_FUNCTION - void operator()(size_t i_elem) const { - for (auto i_dof = 0U; i_dof < 6U; ++i_dof) { - for (auto j_dof = 0U; j_dof < 6U; ++j_dof) { - inertia_matrix_terms(i_elem, i_dof, j_dof) = - beta_prime * qp_Muu(i_elem, i_dof, j_dof) + - gamma_prime * qp_Guu(i_elem, i_dof, j_dof); - } - } - } -}; - -} // namespace masses - -inline void AssembleInertiaMatrixMasses( - const Masses& masses, double beta_prime, double gamma_prime -) { - auto region = Kokkos::Profiling::ScopedRegion("Assemble Masses Inertia"); - Kokkos::parallel_for( - "AssembleMassesInertia", masses.num_elems, - masses::AssembleMassesInertia{ - beta_prime, gamma_prime, masses.qp_Muu, masses.qp_Guu, masses.inertia_matrix_terms - } - ); -} - -} // namespace openturbine diff --git a/src/step/assemble_residual_vector_masses.hpp b/src/step/assemble_residual_vector_masses.hpp deleted file mode 100644 index aeecbd310..000000000 --- a/src/step/assemble_residual_vector_masses.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include -#include - -#include "elements/masses/masses.hpp" - -namespace openturbine { - -namespace masses { - -struct AssembleMassesResidual { - Kokkos::View::const_type qp_Fi; - Kokkos::View::const_type qp_Fg; - - Kokkos::View residual_vector_terms; - - KOKKOS_FUNCTION - void operator()(size_t i_elem) const { - for (auto i_dof = 0U; i_dof < 6U; ++i_dof) { - residual_vector_terms(i_elem, i_dof) = qp_Fi(i_elem, i_dof) - qp_Fg(i_elem, i_dof); - } - } -}; - -} // namespace masses - -inline void AssembleResidualVectorMasses(const Masses& masses) { - auto region = Kokkos::Profiling::ScopedRegion("Assemble Masses Residual"); - Kokkos::parallel_for( - "AssembleMassesResidual", masses.num_elems, - masses::AssembleMassesResidual{masses.qp_Fi, masses.qp_Fg, masses.residual_vector_terms} - ); -} - -} // namespace openturbine diff --git a/src/step/assemble_residual_vector_springs.hpp b/src/step/assemble_residual_vector_springs.hpp deleted file mode 100644 index b8403db06..000000000 --- a/src/step/assemble_residual_vector_springs.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include -#include - -#include "elements/springs/springs.hpp" - -namespace openturbine { - -namespace springs { - -struct AssembleSpringsResidual { - Kokkos::View::const_type f; - Kokkos::View residual_vector_terms; - - KOKKOS_FUNCTION - void operator()(size_t i_elem) const { - // Apply forces with opposite signs to each node - for (auto i_dof = 0U; i_dof < 3U; ++i_dof) { - residual_vector_terms(i_elem, 0, i_dof) = f(i_elem, i_dof); - residual_vector_terms(i_elem, 1, i_dof) = -f(i_elem, i_dof); - } - } -}; - -} // namespace springs - -inline void AssembleResidualVectorSprings(const Springs& springs) { - auto region = Kokkos::Profiling::ScopedRegion("Assemble Springs Residual"); - Kokkos::parallel_for( - "AssembleSpringsResidual", springs.num_elems, - springs::AssembleSpringsResidual{springs.f, springs.residual_vector_terms} - ); -} - -} // namespace openturbine diff --git a/src/step/assemble_stiffness_matrix_masses.hpp b/src/step/assemble_stiffness_matrix_masses.hpp deleted file mode 100644 index d6e9f192a..000000000 --- a/src/step/assemble_stiffness_matrix_masses.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include -#include - -#include "elements/masses/masses.hpp" - -namespace openturbine { - -namespace masses { - -struct AssembleMassesStiffness { - Kokkos::View::const_type qp_Kuu; - - Kokkos::View stiffness_matrix_terms; - - KOKKOS_FUNCTION - void operator()(size_t i_elem) const { - for (auto i_dof = 0U; i_dof < 6U; ++i_dof) { - for (auto j_dof = 0U; j_dof < 6U; ++j_dof) { - stiffness_matrix_terms(i_elem, i_dof, j_dof) = qp_Kuu(i_elem, i_dof, j_dof); - } - } - } -}; -} // namespace masses - -inline void AssembleStiffnessMatrixMasses(const Masses& masses) { - auto region = Kokkos::Profiling::ScopedRegion("Assemble Masses Stiffness"); - Kokkos::parallel_for( - "AssembleMassesStiffness", masses.num_elems, - masses::AssembleMassesStiffness{masses.qp_Kuu, masses.stiffness_matrix_terms} - ); -} - -} // namespace openturbine diff --git a/src/step/assemble_stiffness_matrix_springs.hpp b/src/step/assemble_stiffness_matrix_springs.hpp deleted file mode 100644 index 951af4474..000000000 --- a/src/step/assemble_stiffness_matrix_springs.hpp +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#include -#include - -#include "elements/springs/springs.hpp" - -namespace openturbine { - -namespace springs { - -struct AssembleSpringsStiffness { - Kokkos::View::const_type a; - Kokkos::View stiffness_matrix_terms; - - KOKKOS_FUNCTION - void operator()(size_t i_elem) const { - for (auto i_dof = 0U; i_dof < 3U; ++i_dof) { - for (auto j_dof = 0U; j_dof < 3U; ++j_dof) { - stiffness_matrix_terms(i_elem, 0, 0, i_dof, j_dof) = a(i_elem, i_dof, j_dof); - } - } - for (auto i_dof = 0U; i_dof < 3U; ++i_dof) { - for (auto j_dof = 0U; j_dof < 3U; ++j_dof) { - stiffness_matrix_terms(i_elem, 0, 1, i_dof, j_dof) = -a(i_elem, i_dof, j_dof); - } - } - for (auto i_dof = 0U; i_dof < 3U; ++i_dof) { - for (auto j_dof = 0U; j_dof < 3U; ++j_dof) { - stiffness_matrix_terms(i_elem, 1, 0, i_dof, j_dof) = -a(i_elem, i_dof, j_dof); - } - } - for (auto i_dof = 0U; i_dof < 3U; ++i_dof) { - for (auto j_dof = 0U; j_dof < 3U; ++j_dof) { - stiffness_matrix_terms(i_elem, 1, 1, i_dof, j_dof) = a(i_elem, i_dof, j_dof); - } - } - } -}; - -} // namespace springs - -inline void AssembleStiffnessMatrixSprings(const Springs& springs) { - auto region = Kokkos::Profiling::ScopedRegion("Assemble Springs Stiffness"); - Kokkos::parallel_for( - "AssembleSpringsStiffness", springs.num_elems, - springs::AssembleSpringsStiffness{springs.a, springs.stiffness_matrix_terms} - ); -} - -} // namespace openturbine diff --git a/src/step/assemble_system_residual_beams.hpp b/src/step/assemble_system_residual_beams.hpp deleted file mode 100644 index 0437ed6c2..000000000 --- a/src/step/assemble_system_residual_beams.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include - -#include "src/elements/beams/beams.hpp" -#include "src/solver/contribute_elements_to_vector.hpp" -#include "src/solver/solver.hpp" - -namespace openturbine { - -inline void AssembleSystemResidualBeams(Solver& solver, const Beams& beams) { - auto vector_policy = Kokkos::TeamPolicy<>(static_cast(beams.num_elems), Kokkos::AUTO()); - Kokkos::parallel_for( - "ContributeElementsToVector", vector_policy, - ContributeElementsToVector{ - beams.num_nodes_per_element, beams.element_freedom_table, beams.residual_vector_terms, - solver.R - } - ); -} - -} // namespace openturbine diff --git a/src/step/assemble_system_residual_masses.hpp b/src/step/assemble_system_residual_masses.hpp deleted file mode 100644 index 6b782e747..000000000 --- a/src/step/assemble_system_residual_masses.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include - -#include "src/elements/masses/masses.hpp" -#include "src/solver/contribute_elements_to_vector.hpp" -#include "src/solver/solver.hpp" - -namespace openturbine { - -inline void AssembleSystemResidualMasses(Solver& solver, const Masses& masses) { - auto vector_policy = Kokkos::TeamPolicy<>(static_cast(masses.num_elems), Kokkos::AUTO()); - Kokkos::parallel_for( - "ContributeElementsToVector", vector_policy, - ContributeElementsToVector{ - masses.num_nodes_per_element, masses.element_freedom_table, masses.residual_vector_terms, - solver.R - } - ); -} - -} // namespace openturbine diff --git a/src/system/masses/CMakeLists.txt b/src/system/masses/CMakeLists.txt index 7d0bf4e02..db9a006aa 100644 --- a/src/system/masses/CMakeLists.txt +++ b/src/system/masses/CMakeLists.txt @@ -6,11 +6,7 @@ install(FILES calculate_inertial_force.hpp calculate_inertia_stiffness_matrix.hpp calculate_mass_matrix_components.hpp - calculate_QP_position.hpp calculate_quadrature_point_values.hpp - calculate_RR0.hpp - copy_to_quadrature_points.hpp rotate_section_matrix.hpp - update_node_state.hpp DESTINATION include/OpenTurbine/system/masses ) diff --git a/src/system/masses/calculate_QP_position.hpp b/src/system/masses/calculate_QP_position.hpp deleted file mode 100644 index 2d75be45e..000000000 --- a/src/system/masses/calculate_QP_position.hpp +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once - -#include - -#include "math/quaternion_operations.hpp" - -namespace openturbine::masses { - -/** - * @brief Functor to calculate current position and orientation at quadrature points - * - * This functor updates the current position and orientation (qp_x_) of quadrature points - * by combining: - * - Initial position (qp_x0_) with displacement (qp_u_) for translational components - * - Initial orientation (qp_r0_) with rotation (qp_r_) for rotational components using quaternions - * - * @param i_elem Element index - * @param qp_x0_ Initial quadrature point positions (num_elems x num_qps x 3) - * @param qp_u_ Displacements at quadrature points (num_elems x num_qps x 3) - * @param qp_r0_ Initial orientations as quaternions (num_elems x num_qps x 4) - * @param qp_r_ Rotations as quaternions (num_elems x num_qps x 4) - * @param qp_x_ Output current positions and orientations (num_elems x num_qps x 7) - * where [0:3] = position, [3:7] = orientation quaternion - */ -struct CalculateQPPosition_Element { - size_t i_elem; - Kokkos::View::const_type qp_x0_; - Kokkos::View::const_type qp_u_; - Kokkos::View::const_type qp_r0_; - Kokkos::View::const_type qp_r_; - Kokkos::View qp_x_; - - KOKKOS_FUNCTION void operator()() const { - // Calculate current position - qp_x_(i_elem, 0) = qp_x0_(i_elem, 0) + qp_u_(i_elem, 0); - qp_x_(i_elem, 1) = qp_x0_(i_elem, 1) + qp_u_(i_elem, 1); - qp_x_(i_elem, 2) = qp_x0_(i_elem, 2) + qp_u_(i_elem, 2); - - // Calculate current orientation - auto RR0_data = Kokkos::Array{}; - auto RR0 = Kokkos::View(RR0_data.data()); - QuaternionCompose( - Kokkos::subview(qp_r_, i_elem, Kokkos::ALL), - Kokkos::subview(qp_r0_, i_elem, Kokkos::ALL), RR0 - ); - qp_x_(i_elem, 3) = RR0(0); - qp_x_(i_elem, 4) = RR0(1); - qp_x_(i_elem, 5) = RR0(2); - qp_x_(i_elem, 6) = RR0(3); - } -}; - -struct CalculateQPPosition { - Kokkos::View::const_type qp_x0_; - Kokkos::View::const_type qp_u_; - Kokkos::View::const_type qp_r0_; - Kokkos::View::const_type qp_r_; - Kokkos::View qp_x_; - - KOKKOS_FUNCTION void operator()(size_t i_elem) const { - CalculateQPPosition_Element{i_elem, qp_x0_, qp_u_, qp_r0_, qp_r_, qp_x_}(); - } -}; -} // namespace openturbine::masses diff --git a/src/system/masses/calculate_RR0.hpp b/src/system/masses/calculate_RR0.hpp deleted file mode 100644 index 44de7a7a4..000000000 --- a/src/system/masses/calculate_RR0.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include - -#include "math/quaternion_operations.hpp" - -namespace openturbine::masses { - -struct CalculateRR0 { - size_t i_elem; - Kokkos::View::const_type qp_x_; - Kokkos::View qp_RR0_; - - KOKKOS_FUNCTION void operator()() const { - auto RR0_quaternion_data = Kokkos::Array{ - qp_x_(i_elem, 3), qp_x_(i_elem, 4), qp_x_(i_elem, 5), qp_x_(i_elem, 6) - }; - auto RR0_quaternion = Kokkos::View::const_type(RR0_quaternion_data.data()); - auto RR0_data = Kokkos::Array{}; - auto RR0 = View_3x3(RR0_data.data()); - QuaternionToRotationMatrix(RR0_quaternion, RR0); - for (int i = 0; i < 3; ++i) { - for (int j = 0; j < 3; ++j) { - qp_RR0_(i_elem, i, j) = RR0(i, j); - qp_RR0_(i_elem, 3 + i, 3 + j) = RR0(i, j); - } - } - } -}; -} // namespace openturbine::masses diff --git a/src/system/masses/calculate_quadrature_point_values.hpp b/src/system/masses/calculate_quadrature_point_values.hpp index 0e964bf29..e0d99a38d 100644 --- a/src/system/masses/calculate_quadrature_point_values.hpp +++ b/src/system/masses/calculate_quadrature_point_values.hpp @@ -2,7 +2,6 @@ #include -#include "system/masses/calculate_RR0.hpp" #include "system/masses/calculate_gravity_force.hpp" #include "system/masses/calculate_gyroscopic_matrix.hpp" #include "system/masses/calculate_inertia_stiffness_matrix.hpp" diff --git a/src/system/masses/copy_to_quadrature_points.hpp b/src/system/masses/copy_to_quadrature_points.hpp deleted file mode 100644 index f2290a792..000000000 --- a/src/system/masses/copy_to_quadrature_points.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include - -namespace openturbine::masses { - -struct CopyToQuadraturePoints { - Kokkos::View::const_type node_x0; - Kokkos::View::const_type node_u; - Kokkos::View::const_type node_u_dot; - Kokkos::View::const_type node_u_ddot; - - Kokkos::View qp_x0; - Kokkos::View qp_r0; - Kokkos::View qp_u; - Kokkos::View qp_r; - Kokkos::View qp_u_ddot; - Kokkos::View qp_omega; - Kokkos::View qp_omega_dot; - - KOKKOS_FUNCTION - void operator()(size_t i_elem) const { - for (auto i = 0U; i < 3U; ++i) { - qp_x0(i_elem, i) = node_x0(i_elem, i); - qp_u(i_elem, i) = node_u(i_elem, i); - qp_u_ddot(i_elem, i) = node_u_ddot(i_elem, i); - qp_omega(i_elem, i) = node_u_dot(i_elem, i + 3); - qp_omega_dot(i_elem, i) = node_u_ddot(i_elem, i + 3); - } - for (auto i = 0U; i < 4U; ++i) { - qp_r0(i_elem, i) = node_x0(i_elem, i + 3); - qp_r(i_elem, i) = node_u(i_elem, i + 3); - } - } -}; - -} // namespace openturbine::masses diff --git a/src/system/masses/update_node_state.hpp b/src/system/masses/update_node_state.hpp deleted file mode 100644 index bd6e62740..000000000 --- a/src/system/masses/update_node_state.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include - -namespace openturbine::masses { - -/** - * @brief Functor to update nodal states for all elements in the mesh - * - * Iterates over all elements, updating the nodal states for each element using the provided - * global state vectors. - */ -struct UpdateNodeState { - Kokkos::View::const_type node_state_indices; - Kokkos::View node_u; - Kokkos::View node_u_dot; - Kokkos::View node_u_ddot; - - Kokkos::View::const_type Q; - Kokkos::View::const_type V; - Kokkos::View::const_type A; - - KOKKOS_FUNCTION - void operator()(size_t i_elem) const { - const auto j = node_state_indices(i_elem); - for (auto k = 0U; k < 7U; ++k) { - node_u(i_elem, k) = Q(j, k); - } - for (auto k = 0U; k < 6U; ++k) { - node_u_dot(i_elem, k) = V(j, k); - node_u_ddot(i_elem, k) = A(j, k); - } - } -}; - -} // namespace openturbine::masses diff --git a/src/system/springs/CMakeLists.txt b/src/system/springs/CMakeLists.txt index 8dd10561d..431cfa428 100644 --- a/src/system/springs/CMakeLists.txt +++ b/src/system/springs/CMakeLists.txt @@ -7,6 +7,5 @@ install(FILES calculate_length.hpp calculate_quadrature_point_values.hpp calculate_stiffness_matrix.hpp - update_node_state.hpp DESTINATION include/OpenTurbine/system/springs/ ) diff --git a/src/system/springs/update_node_state.hpp b/src/system/springs/update_node_state.hpp deleted file mode 100644 index f91901c1f..000000000 --- a/src/system/springs/update_node_state.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include - -namespace openturbine::springs { - -/** - * @brief Functor to update the nodal displacement vectors for all spring elements based on the - * current state Q - */ -struct UpdateNodeState { - Kokkos::View::const_type node_state_indices; //< Node indices - Kokkos::View u1; //< Displacement of node 1 - Kokkos::View u2; //< Displacement of node 2 - Kokkos::View::const_type Q; //< State vector - - KOKKOS_FUNCTION - void operator()(const size_t i_elem) const { - const auto node1_index = node_state_indices(i_elem, 0); - const auto node2_index = node_state_indices(i_elem, 1); - for (int i_dof = 0; i_dof < 3; ++i_dof) { - u1(i_elem, i_dof) = Q(node1_index, i_dof); - u2(i_elem, i_dof) = Q(node2_index, i_dof); - } - } -}; - -} // namespace openturbine::springs diff --git a/tests/unit_tests/system/masses/CMakeLists.txt b/tests/unit_tests/system/masses/CMakeLists.txt index 7ce30abfa..ebaa8467f 100644 --- a/tests/unit_tests/system/masses/CMakeLists.txt +++ b/tests/unit_tests/system/masses/CMakeLists.txt @@ -2,8 +2,6 @@ target_sources( openturbine_unit_tests PRIVATE - test_update_node_state.cpp - test_calculate_RR0.cpp test_rotate_section_matrix.cpp test_calculate_mass_matrix_components.cpp test_calculate_inertial_forces.cpp diff --git a/tests/unit_tests/system/masses/test_calculate_RR0.cpp b/tests/unit_tests/system/masses/test_calculate_RR0.cpp deleted file mode 100644 index 790c8e026..000000000 --- a/tests/unit_tests/system/masses/test_calculate_RR0.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include - -#include "system/masses/calculate_RR0.hpp" -#include "test_calculate.hpp" - -namespace openturbine::tests { - -struct ExecuteCalculateRR0 { - size_t i_elem; - Kokkos::View::const_type x; - Kokkos::View rr0; - - KOKKOS_FUNCTION - void operator()(size_t) const { masses::CalculateRR0{i_elem, x, rr0}(); } -}; - -TEST(CalculateRR0MassesTests, OneNode) { - const auto x = Kokkos::View("x"); - constexpr auto x_host_data = std::array{1., 2., 3., 4., 5., 6., 7.}; - const auto x_host = Kokkos::View(x_host_data.data()); - const auto x_mirror = Kokkos::create_mirror(x); - Kokkos::deep_copy(x_mirror, x_host); - Kokkos::deep_copy(x, x_mirror); - - const auto rr0 = Kokkos::View("rr0"); - - Kokkos::parallel_for("CalculateRR0", 1, ExecuteCalculateRR0{0, x, rr0}); - - constexpr auto expected_rr0_data = std::array{-44., 4., 118., 0., 0., 0., // - 116., -22., 44., 0., 0., 0., // - 22., 124., 4., 0., 0., 0., // - 0., 0., 0., -44., 4., 118., // - 0., 0., 0., 116., -22., 44., // - 0., 0., 0., 22., 124., 4.}; - const auto expected_rr0 = - Kokkos::View(expected_rr0_data.data()); - - const auto rr0_mirror = Kokkos::create_mirror(rr0); - Kokkos::deep_copy(rr0_mirror, rr0); - CompareWithExpected(rr0_mirror, expected_rr0); -} -} // namespace openturbine::tests diff --git a/tests/unit_tests/system/masses/test_update_node_state.cpp b/tests/unit_tests/system/masses/test_update_node_state.cpp deleted file mode 100644 index c4ddde23b..000000000 --- a/tests/unit_tests/system/masses/test_update_node_state.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include - -#include "system/masses/update_node_state.hpp" -#include "test_calculate.hpp" - -namespace openturbine::tests { - -TEST(UpdateNodeStateMassesTests, OneNode) { - const auto indices = Kokkos::View("node_state_indices"); - constexpr auto indices_data = std::array{0U}; - const auto indices_host = Kokkos::View(indices_data.data()); - const auto indices_mirror = Kokkos::create_mirror(indices); - Kokkos::deep_copy(indices_mirror, indices_host); - Kokkos::deep_copy(indices, indices_mirror); - - const auto Q = Kokkos::View("Q"); - constexpr auto Q_data = std::array{1., 2., 3., 4., 5., 6., 7.}; - const auto Q_host = Kokkos::View(Q_data.data()); - const auto Q_mirror = Kokkos::create_mirror(Q); - Kokkos::deep_copy(Q_mirror, Q_host); - Kokkos::deep_copy(Q, Q_mirror); - - const auto V = Kokkos::View("V"); - constexpr auto V_data = std::array{15., 16., 17., 18., 19., 20.}; - const auto V_host = Kokkos::View(V_data.data()); - const auto V_mirror = Kokkos::create_mirror(V); - Kokkos::deep_copy(V_mirror, V_host); - Kokkos::deep_copy(V, V_mirror); - - const auto A = Kokkos::View("A"); - constexpr auto A_data = std::array{27., 28., 29., 30., 31., 32.}; - const auto A_host = Kokkos::View(A_data.data()); - const auto A_mirror = Kokkos::create_mirror(A); - Kokkos::deep_copy(A_mirror, A_host); - Kokkos::deep_copy(A, A_mirror); - - const auto node_u = Kokkos::View("node_u"); - const auto node_u_dot = Kokkos::View("node_u_dot"); - const auto node_u_ddot = Kokkos::View("node_u_ddot"); - - Kokkos::parallel_for( - "UpdateNodeStateElement", 1, - masses::UpdateNodeState{indices, node_u, node_u_dot, node_u_ddot, Q, V, A} - ); - - const auto node_u_mirror = Kokkos::create_mirror(node_u); - Kokkos::deep_copy(node_u_mirror, node_u); - CompareWithExpected(node_u_mirror, Q_host); - - const auto node_u_dot_mirror = Kokkos::create_mirror(node_u_dot); - Kokkos::deep_copy(node_u_dot_mirror, node_u_dot); - CompareWithExpected(node_u_dot_mirror, V_host); - - const auto node_u_ddot_mirror = Kokkos::create_mirror(node_u_ddot); - Kokkos::deep_copy(node_u_ddot_mirror, node_u_ddot); - CompareWithExpected(node_u_ddot_mirror, A_host); -} -} // namespace openturbine::tests diff --git a/tests/unit_tests/system/springs/CMakeLists.txt b/tests/unit_tests/system/springs/CMakeLists.txt index 905aedfb5..b9f51cd14 100644 --- a/tests/unit_tests/system/springs/CMakeLists.txt +++ b/tests/unit_tests/system/springs/CMakeLists.txt @@ -6,5 +6,4 @@ target_sources( test_calculate_force_vectors.cpp test_calculate_length.cpp test_calculate_stiffness_matrix.cpp - test_update_node_state.cpp ) diff --git a/tests/unit_tests/system/springs/test_update_node_state.cpp b/tests/unit_tests/system/springs/test_update_node_state.cpp deleted file mode 100644 index 8b21c8fd7..000000000 --- a/tests/unit_tests/system/springs/test_update_node_state.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -#include "system/springs/update_node_state.hpp" - -namespace openturbine::tests { - -TEST(UpdateNodeStateSpringsTests, TwoNodes) { - const auto indices = Kokkos::View("node_state_indices"); - constexpr auto indices_data = std::array{0U, 1U}; - const auto indices_host = - Kokkos::View(indices_data.data()); - const auto indices_mirror = Kokkos::create_mirror(indices); - Kokkos::deep_copy(indices_mirror, indices_host); - Kokkos::deep_copy(indices, indices_mirror); - - const auto Q = Kokkos::View("Q"); - constexpr auto Q_data = std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14.}; - const auto Q_host = Kokkos::View(Q_data.data()); - const auto Q_mirror = Kokkos::create_mirror(Q); - Kokkos::deep_copy(Q_mirror, Q_host); - Kokkos::deep_copy(Q, Q_mirror); - - const auto u1 = Kokkos::View("u1"); - const auto u2 = Kokkos::View("u2"); - - Kokkos::parallel_for("UpdateNodeState", 1, springs::UpdateNodeState{indices, u1, u2, Q}); - - const auto u1_mirror = Kokkos::create_mirror(u1); - const auto u2_mirror = Kokkos::create_mirror(u2); - Kokkos::deep_copy(u1_mirror, u1); - Kokkos::deep_copy(u2_mirror, u2); - for (auto i = 0U; i < 3; ++i) { - EXPECT_EQ(u1_mirror(0, i), Q_host(0, i)); - } - for (auto i = 0U; i < 3; ++i) { - EXPECT_EQ(u2_mirror(0, i), Q_host(1, i)); - } -} - -} // namespace openturbine::tests From 6e71432338a049d64cff87e17bf70290f59d4fab Mon Sep 17 00:00:00 2001 From: dcdemen Date: Wed, 12 Feb 2025 14:43:00 -0700 Subject: [PATCH 5/6] clang-format --- src/elements/masses/masses.hpp | 80 +++++++++---------- src/step/update_system_variables_masses.hpp | 5 +- src/step/update_system_variables_springs.hpp | 4 +- src/system/masses/calculate_gravity_force.hpp | 18 +++-- .../masses/calculate_gyroscopic_matrix.hpp | 6 +- .../calculate_inertia_stiffness_matrix.hpp | 11 ++- .../masses/calculate_inertial_force.hpp | 11 ++- .../calculate_mass_matrix_components.hpp | 22 ++--- .../calculate_quadrature_point_values.hpp | 40 ++++++---- src/system/masses/rotate_section_matrix.hpp | 57 ++++++------- .../springs/calculate_distance_components.hpp | 5 +- .../springs/calculate_force_vectors.hpp | 4 +- .../calculate_quadrature_point_values.hpp | 6 +- .../springs/calculate_stiffness_matrix.hpp | 5 +- .../floating_platform/floating_platform.cpp | 3 +- .../math/test_quaternion_operations.cpp | 4 +- .../masses/test_calculate_gravity_force.cpp | 4 +- ...est_calculate_inertia_stiffness_matrix.cpp | 3 +- .../masses/test_calculate_inertial_forces.cpp | 10 +-- .../test_calculate_mass_matrix_components.cpp | 6 +- .../masses/test_rotate_section_matrix.cpp | 12 ++- .../test_calculate_force_coefficients.cpp | 8 +- .../springs/test_calculate_force_vectors.cpp | 9 ++- .../test_calculate_stiffness_matrix.cpp | 2 +- 24 files changed, 192 insertions(+), 143 deletions(-) diff --git a/src/elements/masses/masses.hpp b/src/elements/masses/masses.hpp index 36de2720d..6e291ac0d 100644 --- a/src/elements/masses/masses.hpp +++ b/src/elements/masses/masses.hpp @@ -25,30 +25,30 @@ struct Masses { View_3 gravity; Kokkos::View node_x0; //< Initial position/rotation -// Kokkos::View node_u; //< State: translation/rotation displacement -// Kokkos::View node_u_dot; //< State: translation/rotation velocity -// Kokkos::View node_u_ddot; //< State: translation/rotation acceleration -// + // Kokkos::View node_u; //< State: translation/rotation displacement + // Kokkos::View node_u_dot; //< State: translation/rotation velocity + // Kokkos::View node_u_ddot; //< State: translation/rotation acceleration + // Kokkos::View qp_Mstar; //< Mass matrix in material frame -// Kokkos::View qp_x; //< Current position/orientation -// Kokkos::View qp_x0; -// Kokkos::View qp_r0; -// Kokkos::View qp_u; -// Kokkos::View qp_u_ddot; -// Kokkos::View qp_r; -// Kokkos::View qp_omega; -// Kokkos::View qp_omega_dot; -// Kokkos::View qp_eta_tilde; -// Kokkos::View qp_omega_tilde; -// Kokkos::View qp_omega_dot_tilde; -// Kokkos::View qp_eta; //< Offset between mass center and elastic axis -// Kokkos::View qp_rho; //< Rotational inertia part of mass matrix -// Kokkos::View qp_Fi; //< Inertial force -// Kokkos::View qp_Fg; //< Gravity force -// Kokkos::View qp_RR0; //< Global rotation -// Kokkos::View qp_Muu; //< Mass matrix in global/inertial frame -// Kokkos::View qp_Guu; //< Gyroscopic/inertial damping matrix -// Kokkos::View qp_Kuu; //< Inertia stiffness matrix + // Kokkos::View qp_x; //< Current position/orientation + // Kokkos::View qp_x0; + // Kokkos::View qp_r0; + // Kokkos::View qp_u; + // Kokkos::View qp_u_ddot; + // Kokkos::View qp_r; + // Kokkos::View qp_omega; + // Kokkos::View qp_omega_dot; + // Kokkos::View qp_eta_tilde; + // Kokkos::View qp_omega_tilde; + // Kokkos::View qp_omega_dot_tilde; + // Kokkos::View qp_eta; //< Offset between mass center and elastic axis + // Kokkos::View qp_rho; //< Rotational inertia part of mass matrix + // Kokkos::View qp_Fi; //< Inertial force + // Kokkos::View qp_Fg; //< Gravity force + // Kokkos::View qp_RR0; //< Global rotation + // Kokkos::View qp_Muu; //< Mass matrix in global/inertial frame + // Kokkos::View qp_Guu; //< Gyroscopic/inertial damping matrix + // Kokkos::View qp_Kuu; //< Inertia stiffness matrix Kokkos::View residual_vector_terms; Kokkos::View stiffness_matrix_terms; @@ -62,24 +62,24 @@ struct Masses { element_freedom_table("element_freedom_table", num_elems), gravity("gravity"), node_x0("node_x0", num_elems), -// node_u("node_u", num_elems), -// node_u_dot("node_u_dot", num_elems), -// node_u_ddot("node_u_ddot", num_elems), + // node_u("node_u", num_elems), + // node_u_dot("node_u_dot", num_elems), + // node_u_ddot("node_u_ddot", num_elems), qp_Mstar("qp_Mstar", num_elems), -// qp_r("qp_r", num_elems), -// qp_omega("qp_omega", num_elems), -// qp_omega_dot("qp_omega_dot", num_elems), -// qp_eta_tilde("qp_eta_tilde", num_elems), -// qp_omega_tilde("qp_omega_tilde", num_elems), -// qp_omega_dot_tilde("qp_omega_dot_tilde", num_elems), -// qp_eta("qp_eta", num_elems), -// qp_rho("qp_rho", num_elems), -// qp_Fi("qp_Fi", num_elems), -// qp_Fg("qp_Fg", num_elems), -// qp_RR0("qp_RR0", num_elems), -// qp_Muu("qp_Muu", num_elems), -// qp_Guu("qp_Guu", num_elems), -// qp_Kuu("qp_Kuu", num_elems), + // qp_r("qp_r", num_elems), + // qp_omega("qp_omega", num_elems), + // qp_omega_dot("qp_omega_dot", num_elems), + // qp_eta_tilde("qp_eta_tilde", num_elems), + // qp_omega_tilde("qp_omega_tilde", num_elems), + // qp_omega_dot_tilde("qp_omega_dot_tilde", num_elems), + // qp_eta("qp_eta", num_elems), + // qp_rho("qp_rho", num_elems), + // qp_Fi("qp_Fi", num_elems), + // qp_Fg("qp_Fg", num_elems), + // qp_RR0("qp_RR0", num_elems), + // qp_Muu("qp_Muu", num_elems), + // qp_Guu("qp_Guu", num_elems), + // qp_Kuu("qp_Kuu", num_elems), residual_vector_terms("residual_vector_terms", num_elems), stiffness_matrix_terms("stiffness_matrix_terms", num_elems), inertia_matrix_terms("inertia_matrix_terms", num_elems) { diff --git a/src/step/update_system_variables_masses.hpp b/src/step/update_system_variables_masses.hpp index 1197c4ffa..6fdc5225e 100644 --- a/src/step/update_system_variables_masses.hpp +++ b/src/step/update_system_variables_masses.hpp @@ -16,8 +16,9 @@ inline void UpdateSystemVariablesMasses( Kokkos::parallel_for( "masses::CalculateQuadraturePointValues", masses.num_elems, masses::CalculateQuadraturePointValues{ - parameters.beta_prime, parameters.gamma_prime, state.q, state.v, state.vd, masses.state_indices, masses.gravity, masses.qp_Mstar, masses.node_x0, masses.residual_vector_terms, masses.stiffness_matrix_terms, masses.inertia_matrix_terms - } + parameters.beta_prime, parameters.gamma_prime, state.q, state.v, state.vd, + masses.state_indices, masses.gravity, masses.qp_Mstar, masses.node_x0, + masses.residual_vector_terms, masses.stiffness_matrix_terms, masses.inertia_matrix_terms} ); } diff --git a/src/step/update_system_variables_springs.hpp b/src/step/update_system_variables_springs.hpp index f00debc82..e24485d6b 100644 --- a/src/step/update_system_variables_springs.hpp +++ b/src/step/update_system_variables_springs.hpp @@ -16,8 +16,8 @@ inline void UpdateSystemVariablesSprings(const Springs& springs, State& state) { Kokkos::parallel_for( "Calculate System Variables Springs", springs.num_elems, springs::CalculateQuadraturePointValues{ - state.q, springs.node_state_indices, springs.x0, springs.l_ref, springs.k, springs.residual_vector_terms, springs.stiffness_matrix_terms - } + state.q, springs.node_state_indices, springs.x0, springs.l_ref, springs.k, + springs.residual_vector_terms, springs.stiffness_matrix_terms} ); } diff --git a/src/system/masses/calculate_gravity_force.hpp b/src/system/masses/calculate_gravity_force.hpp index 9f4bc7035..3bc99a01f 100644 --- a/src/system/masses/calculate_gravity_force.hpp +++ b/src/system/masses/calculate_gravity_force.hpp @@ -6,13 +6,19 @@ namespace openturbine::masses { KOKKOS_FUNCTION -inline void CalculateGravityForce(double mass, const Kokkos::View::const_type& gravity, const Kokkos::View::const_type& eta_tilde, const Kokkos::View& FG) { - using NoTranspose = KokkosBlas::Trans::NoTranspose; - using Default = KokkosBlas::Algo::Gemv::Default; - using Gemv = KokkosBlas::SerialGemv; +inline void CalculateGravityForce( + double mass, const Kokkos::View::const_type& gravity, + const Kokkos::View::const_type& eta_tilde, const Kokkos::View& FG +) { + using NoTranspose = KokkosBlas::Trans::NoTranspose; + using Default = KokkosBlas::Algo::Gemv::Default; + using Gemv = KokkosBlas::SerialGemv; - KokkosBlas::serial_axpy(mass, gravity, Kokkos::subview(FG, Kokkos::make_pair(0, 3))); - Gemv::invoke(1., eta_tilde, Kokkos::subview(FG, Kokkos::make_pair(0, 3)), 0., Kokkos::subview(FG, Kokkos::make_pair(3, 6))); + KokkosBlas::serial_axpy(mass, gravity, Kokkos::subview(FG, Kokkos::make_pair(0, 3))); + Gemv::invoke( + 1., eta_tilde, Kokkos::subview(FG, Kokkos::make_pair(0, 3)), 0., + Kokkos::subview(FG, Kokkos::make_pair(3, 6)) + ); } } // namespace openturbine::masses diff --git a/src/system/masses/calculate_gyroscopic_matrix.hpp b/src/system/masses/calculate_gyroscopic_matrix.hpp index a9a8d264d..96b63439b 100644 --- a/src/system/masses/calculate_gyroscopic_matrix.hpp +++ b/src/system/masses/calculate_gyroscopic_matrix.hpp @@ -10,7 +10,11 @@ namespace openturbine::masses { KOKKOS_FUNCTION -inline void CalculateGyroscopicMatrix(double mass, const Kokkos::View::const_type& omega, const Kokkos::View::const_type& eta, const Kokkos::View::const_type rho, const Kokkos::View::const_type& omega_tilde, const Kokkos::View& Guu) { +inline void CalculateGyroscopicMatrix( + double mass, const Kokkos::View::const_type& omega, + const Kokkos::View::const_type& eta, const Kokkos::View::const_type rho, + const Kokkos::View::const_type& omega_tilde, const Kokkos::View& Guu +) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using Transpose = KokkosBatched::Trans::Transpose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; diff --git a/src/system/masses/calculate_inertia_stiffness_matrix.hpp b/src/system/masses/calculate_inertia_stiffness_matrix.hpp index 8e8e84d9d..5238e2a0e 100644 --- a/src/system/masses/calculate_inertia_stiffness_matrix.hpp +++ b/src/system/masses/calculate_inertia_stiffness_matrix.hpp @@ -10,7 +10,16 @@ namespace openturbine::masses { KOKKOS_FUNCTION -inline void CalculateInertiaStiffnessMatrix(double mass, const Kokkos::View::const_type& u_ddot, const Kokkos::View::const_type& omega, const Kokkos::View::const_type& omega_dot, const Kokkos::View::const_type& eta, const Kokkos::View::const_type& rho, const Kokkos::View::const_type& omega_tilde, const Kokkos::View::const_type& omega_dot_tilde, const Kokkos::View& Kuu) { +inline void CalculateInertiaStiffnessMatrix( + double mass, const Kokkos::View::const_type& u_ddot, + const Kokkos::View::const_type& omega, + const Kokkos::View::const_type& omega_dot, + const Kokkos::View::const_type& eta, + const Kokkos::View::const_type& rho, + const Kokkos::View::const_type& omega_tilde, + const Kokkos::View::const_type& omega_dot_tilde, + const Kokkos::View& Kuu +) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using Transpose = KokkosBatched::Trans::Transpose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; diff --git a/src/system/masses/calculate_inertial_force.hpp b/src/system/masses/calculate_inertial_force.hpp index 9d1c34faa..cc39acdf2 100644 --- a/src/system/masses/calculate_inertial_force.hpp +++ b/src/system/masses/calculate_inertial_force.hpp @@ -9,7 +9,16 @@ namespace openturbine::masses { KOKKOS_FUNCTION -inline void CalculateInertialForce(double mass, const Kokkos::View::const_type& u_ddot, const Kokkos::View::const_type& omega, const Kokkos::View::const_type& omega_dot, const Kokkos::View::const_type& eta, const Kokkos::View::const_type& eta_tilde, const Kokkos::View::const_type& rho, const Kokkos::View::const_type& omega_tilde, const Kokkos::View::const_type& omega_dot_tilde, const Kokkos::View& FI) { +inline void CalculateInertialForce( + double mass, const Kokkos::View::const_type& u_ddot, + const Kokkos::View::const_type& omega, + const Kokkos::View::const_type& omega_dot, + const Kokkos::View::const_type& eta, + const Kokkos::View::const_type& eta_tilde, + const Kokkos::View::const_type& rho, + const Kokkos::View::const_type& omega_tilde, + const Kokkos::View::const_type& omega_dot_tilde, const Kokkos::View& FI +) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; using GemvDefault = KokkosBlas::Algo::Gemv::Default; diff --git a/src/system/masses/calculate_mass_matrix_components.hpp b/src/system/masses/calculate_mass_matrix_components.hpp index ad901a757..f26d2ec6f 100644 --- a/src/system/masses/calculate_mass_matrix_components.hpp +++ b/src/system/masses/calculate_mass_matrix_components.hpp @@ -7,19 +7,23 @@ namespace openturbine::masses { KOKKOS_FUNCTION -inline void CalculateEta(const Kokkos::View::const_type& Muu, const Kokkos::View& eta) { - const auto m = Muu(0, 0); +inline void CalculateEta( + const Kokkos::View::const_type& Muu, const Kokkos::View& eta +) { + const auto m = Muu(0, 0); - eta(0) = Muu(5, 1) / m; - eta(1) = -Muu(5, 0) / m; - eta(2) = Muu(4, 0) / m; + eta(0) = Muu(5, 1) / m; + eta(1) = -Muu(5, 0) / m; + eta(2) = Muu(4, 0) / m; } KOKKOS_FUNCTION -inline void CalculateRho(const Kokkos::View::const_type& Muu, const Kokkos::View& rho) { - for(auto i = 0U; i < 3U; ++i) { - for(auto j = 0U; j < 3U; ++j) { - rho(i, j) = Muu(i+3U, j+3U); +inline void CalculateRho( + const Kokkos::View::const_type& Muu, const Kokkos::View& rho +) { + for (auto i = 0U; i < 3U; ++i) { + for (auto j = 0U; j < 3U; ++j) { + rho(i, j) = Muu(i + 3U, j + 3U); } } } diff --git a/src/system/masses/calculate_quadrature_point_values.hpp b/src/system/masses/calculate_quadrature_point_values.hpp index e0d99a38d..36d00b050 100644 --- a/src/system/masses/calculate_quadrature_point_values.hpp +++ b/src/system/masses/calculate_quadrature_point_values.hpp @@ -15,18 +15,18 @@ struct CalculateQuadraturePointValues { double beta_prime; double gamma_prime; - Kokkos::View::const_type Q; - Kokkos::View::const_type V; - Kokkos::View::const_type A; + Kokkos::View::const_type Q; + Kokkos::View::const_type V; + Kokkos::View::const_type A; Kokkos::View::const_type node_state_indices; Kokkos::View::const_type gravity; Kokkos::View::const_type qp_Mstar; Kokkos::View::const_type node_x0; - Kokkos::View residual_vector_terms; - Kokkos::View stiffness_matrix_terms; - Kokkos::View inertia_matrix_terms; + Kokkos::View residual_vector_terms; + Kokkos::View stiffness_matrix_terms; + Kokkos::View inertia_matrix_terms; KOKKOS_FUNCTION void operator()(size_t i_elem) const { @@ -34,10 +34,13 @@ struct CalculateQuadraturePointValues { // Allocate scratch views auto Mstar_data = Kokkos::Array{}; - const auto x0_data = Kokkos::Array{node_x0(i_elem, 0), node_x0(i_elem, 1), node_x0(i_elem, 2)}; - const auto r0_data = Kokkos::Array{node_x0(i_elem, 3), node_x0(i_elem, 4), node_x0(i_elem, 5), node_x0(i_elem, 6)}; + const auto x0_data = + Kokkos::Array{node_x0(i_elem, 0), node_x0(i_elem, 1), node_x0(i_elem, 2)}; + const auto r0_data = Kokkos::Array{ + node_x0(i_elem, 3), node_x0(i_elem, 4), node_x0(i_elem, 5), node_x0(i_elem, 6)}; const auto u_data = Kokkos::Array{Q(index, 0), Q(index, 1), Q(index, 2)}; - const auto r_data = Kokkos::Array{Q(index, 3), Q(index, 4), Q(index, 5), Q(index, 6)}; + const auto r_data = + Kokkos::Array{Q(index, 3), Q(index, 4), Q(index, 5), Q(index, 6)}; auto xr_data = Kokkos::Array{}; const auto u_ddot_data = Kokkos::Array{A(index, 0), A(index, 1), A(index, 2)}; const auto omega_data = Kokkos::Array{V(index, 3), V(index, 4), V(index, 5)}; @@ -75,8 +78,8 @@ struct CalculateQuadraturePointValues { auto Kuu = Kokkos::View(Kuu_data.data()); // Do the math - for(auto i = 0U; i < 6U; ++i) { - for(auto j = 0U; j < 6U; ++j) { + for (auto i = 0U; i < 6U; ++i) { + for (auto j = 0U; j < 6U; ++j) { Mstar(i, j) = qp_Mstar(i_elem, i, j); } } @@ -92,25 +95,28 @@ struct CalculateQuadraturePointValues { CalculateRho(Muu, rho); CalculateGravityForce(mass, gravity, eta_tilde, Fg); - CalculateInertialForce(mass, u_ddot, omega, omega_dot, eta, eta_tilde, rho, omega_tilde, omega_dot_tilde, Fi); + CalculateInertialForce( + mass, u_ddot, omega, omega_dot, eta, eta_tilde, rho, omega_tilde, omega_dot_tilde, Fi + ); CalculateGyroscopicMatrix(mass, omega, eta, rho, omega_tilde, Guu); - CalculateInertiaStiffnessMatrix(mass, u_ddot, omega, omega_dot, eta, rho, omega_tilde, omega_dot_tilde, Kuu); + CalculateInertiaStiffnessMatrix( + mass, u_ddot, omega, omega_dot, eta, rho, omega_tilde, omega_dot_tilde, Kuu + ); // Contribute terms to main matrices for (auto i = 0U; i < 6U; ++i) { residual_vector_terms(i_elem, i) = Fi(i) - Fg(i); } - for(auto i = 0U; i < 6U; ++i) { - for(auto j = 0U; j < 6U; ++j) { + for (auto i = 0U; i < 6U; ++i) { + for (auto j = 0U; j < 6U; ++j) { stiffness_matrix_terms(i_elem, i, j) = Kuu(i, j); } } for (auto i = 0U; i < 6U; ++i) { for (auto j = 0U; j < 6U; ++j) { inertia_matrix_terms(i_elem, i, j) = - beta_prime * Muu(i, j) + - gamma_prime * Guu(i, j); + beta_prime * Muu(i, j) + gamma_prime * Guu(i, j); } } } diff --git a/src/system/masses/rotate_section_matrix.hpp b/src/system/masses/rotate_section_matrix.hpp index 26bfa443b..a40186245 100644 --- a/src/system/masses/rotate_section_matrix.hpp +++ b/src/system/masses/rotate_section_matrix.hpp @@ -9,33 +9,36 @@ namespace openturbine::masses { KOKKOS_FUNCTION -inline void RotateSectionMatrix(const Kokkos::View::const_type& xr, const Kokkos::View::const_type& Cstar, const Kokkos::View& Cuu) { - using NoTranspose = KokkosBatched::Trans::NoTranspose; - using Transpose = KokkosBatched::Trans::Transpose; - using Default = KokkosBatched::Algo::Gemm::Default; - using GemmNN = KokkosBatched::SerialGemm; - using GemmNT = KokkosBatched::SerialGemm; - - auto RR0_data = Kokkos::Array{}; - auto RR0 = Kokkos::View(RR0_data.data()); - QuaternionToRotationMatrix(xr, RR0); - - const auto Cstar_top = Kokkos::subview(Cstar, Kokkos::make_pair(0, 3), Kokkos::ALL); - const auto Cstar_bottom = Kokkos::subview(Cstar, Kokkos::make_pair(3, 6), Kokkos::ALL); - const auto Cuu_left = Kokkos::subview(Cuu, Kokkos::ALL, Kokkos::make_pair(0, 3)); - const auto Cuu_right = Kokkos::subview(Cuu,Kokkos::ALL, Kokkos::make_pair(3, 6)); - - auto ctmp_data = Kokkos::Array{}; - const auto Ctmp = Kokkos::View(ctmp_data.data()); - const auto Ctmp_top = Kokkos::subview(Ctmp, Kokkos::make_pair(0, 3), Kokkos::ALL); - const auto Ctmp_bottom = Kokkos::subview(Ctmp, Kokkos::make_pair(3, 6), Kokkos::ALL); - const auto Ctmp_left = Kokkos::subview(Ctmp, Kokkos::ALL, Kokkos::make_pair(0, 3)); - const auto Ctmp_right = Kokkos::subview(Ctmp, Kokkos::ALL, Kokkos::make_pair(3, 6)); - - GemmNN::invoke(1., RR0, Cstar_top, 0., Ctmp_top); - GemmNN::invoke(1., RR0, Cstar_bottom, 0., Ctmp_bottom); - GemmNT::invoke(1., Ctmp_left, RR0, 0., Cuu_left); - GemmNT::invoke(1., Ctmp_right, RR0, 0., Cuu_right); +inline void RotateSectionMatrix( + const Kokkos::View::const_type& xr, + const Kokkos::View::const_type& Cstar, const Kokkos::View& Cuu +) { + using NoTranspose = KokkosBatched::Trans::NoTranspose; + using Transpose = KokkosBatched::Trans::Transpose; + using Default = KokkosBatched::Algo::Gemm::Default; + using GemmNN = KokkosBatched::SerialGemm; + using GemmNT = KokkosBatched::SerialGemm; + + auto RR0_data = Kokkos::Array{}; + auto RR0 = Kokkos::View(RR0_data.data()); + QuaternionToRotationMatrix(xr, RR0); + + const auto Cstar_top = Kokkos::subview(Cstar, Kokkos::make_pair(0, 3), Kokkos::ALL); + const auto Cstar_bottom = Kokkos::subview(Cstar, Kokkos::make_pair(3, 6), Kokkos::ALL); + const auto Cuu_left = Kokkos::subview(Cuu, Kokkos::ALL, Kokkos::make_pair(0, 3)); + const auto Cuu_right = Kokkos::subview(Cuu, Kokkos::ALL, Kokkos::make_pair(3, 6)); + + auto ctmp_data = Kokkos::Array{}; + const auto Ctmp = Kokkos::View(ctmp_data.data()); + const auto Ctmp_top = Kokkos::subview(Ctmp, Kokkos::make_pair(0, 3), Kokkos::ALL); + const auto Ctmp_bottom = Kokkos::subview(Ctmp, Kokkos::make_pair(3, 6), Kokkos::ALL); + const auto Ctmp_left = Kokkos::subview(Ctmp, Kokkos::ALL, Kokkos::make_pair(0, 3)); + const auto Ctmp_right = Kokkos::subview(Ctmp, Kokkos::ALL, Kokkos::make_pair(3, 6)); + + GemmNN::invoke(1., RR0, Cstar_top, 0., Ctmp_top); + GemmNN::invoke(1., RR0, Cstar_bottom, 0., Ctmp_bottom); + GemmNT::invoke(1., Ctmp_left, RR0, 0., Cuu_left); + GemmNT::invoke(1., Ctmp_right, RR0, 0., Cuu_right); } } // namespace openturbine::masses diff --git a/src/system/springs/calculate_distance_components.hpp b/src/system/springs/calculate_distance_components.hpp index f3e612894..5288a5196 100644 --- a/src/system/springs/calculate_distance_components.hpp +++ b/src/system/springs/calculate_distance_components.hpp @@ -8,7 +8,10 @@ namespace openturbine::springs { KOKKOS_FUNCTION -inline void CalculateDistanceComponents(const Kokkos::View::const_type& x0, const Kokkos::View::const_type& u1, const Kokkos::View::const_type& u2, const Kokkos::View& r) { +inline void CalculateDistanceComponents( + const Kokkos::View::const_type& x0, const Kokkos::View::const_type& u1, + const Kokkos::View::const_type& u2, const Kokkos::View& r +) { for (auto i = 0U; i < 3U; ++i) { r(i) = x0(i) + u2(i) - u1(i); } diff --git a/src/system/springs/calculate_force_vectors.hpp b/src/system/springs/calculate_force_vectors.hpp index b5d0a712b..5b302369c 100644 --- a/src/system/springs/calculate_force_vectors.hpp +++ b/src/system/springs/calculate_force_vectors.hpp @@ -8,7 +8,9 @@ namespace openturbine::springs { KOKKOS_FUNCTION -inline void CalculateForceVectors(const Kokkos::View::const_type& r, double c1, const Kokkos::View& f) { +inline void CalculateForceVectors( + const Kokkos::View::const_type& r, double c1, const Kokkos::View& f +) { for (auto i = 0U; i < 3U; ++i) { f(i) = c1 * r(i); } diff --git a/src/system/springs/calculate_quadrature_point_values.hpp b/src/system/springs/calculate_quadrature_point_values.hpp index a890f8d1b..a1bc1b2b9 100644 --- a/src/system/springs/calculate_quadrature_point_values.hpp +++ b/src/system/springs/calculate_quadrature_point_values.hpp @@ -26,7 +26,8 @@ struct CalculateQuadraturePointValues { const auto index_0 = node_state_indices(i_elem, 0); const auto index_1 = node_state_indices(i_elem, 1); - const auto x0_data = Kokkos::Array{x0_(i_elem, 0), x0_(i_elem, 1), x0_(i_elem, 2)}; + const auto x0_data = + Kokkos::Array{x0_(i_elem, 0), x0_(i_elem, 1), x0_(i_elem, 2)}; const auto u1_data = Kokkos::Array{Q(index_0, 0), Q(index_0, 1), Q(index_0, 2)}; const auto u2_data = Kokkos::Array{Q(index_1, 0), Q(index_1, 1), Q(index_1, 2)}; auto r_data = Kokkos::Array{}; @@ -54,7 +55,7 @@ struct CalculateQuadraturePointValues { residual_vector_terms(i_elem, 0, i) = f(i); residual_vector_terms(i_elem, 1, i) = -f(i); } - + for (auto i = 0U; i < 3U; ++i) { for (auto j = 0U; j < 3U; ++j) { stiffness_matrix_terms(i_elem, 0, 0, i, j) = a(i, j); @@ -75,7 +76,6 @@ struct CalculateQuadraturePointValues { stiffness_matrix_terms(i_elem, 1, 1, i, j) = a(i, j); } } - } }; diff --git a/src/system/springs/calculate_stiffness_matrix.hpp b/src/system/springs/calculate_stiffness_matrix.hpp index f6ae4108a..17f8c8db7 100644 --- a/src/system/springs/calculate_stiffness_matrix.hpp +++ b/src/system/springs/calculate_stiffness_matrix.hpp @@ -10,7 +10,10 @@ namespace openturbine::springs { KOKKOS_FUNCTION -inline void CalculateStiffnessMatrix(double c1, double c2, const Kokkos::View::const_type& r, double l, const Kokkos::View& a) { +inline void CalculateStiffnessMatrix( + double c1, double c2, const Kokkos::View::const_type& r, double l, + const Kokkos::View& a +) { using NoTranspose = KokkosBatched::Trans::NoTranspose; using GemmDefault = KokkosBatched::Algo::Gemm::Default; using Gemm = KokkosBatched::SerialGemm; diff --git a/tests/documentation_tests/floating_platform/floating_platform.cpp b/tests/documentation_tests/floating_platform/floating_platform.cpp index 23b3605df..528d02cc1 100644 --- a/tests/documentation_tests/floating_platform/floating_platform.cpp +++ b/tests/documentation_tests/floating_platform/floating_platform.cpp @@ -13,8 +13,7 @@ int main() { constexpr auto rho_inf = 0.0; // Time stepping damping factor constexpr auto max_iter = 5; // Maximum number of nonlinear steps per time ste[ const auto n_steps{ - static_cast(ceil(t_end / time_step)) + 1 - }; // Number of time steps + static_cast(ceil(t_end / time_step)) + 1}; // Number of time steps // Define gravity vector constexpr auto gravity = std::array{0., 0., -9.8124}; // m/s/s diff --git a/tests/unit_tests/math/test_quaternion_operations.cpp b/tests/unit_tests/math/test_quaternion_operations.cpp index af3c6f1d3..ef0735a10 100644 --- a/tests/unit_tests/math/test_quaternion_operations.cpp +++ b/tests/unit_tests/math/test_quaternion_operations.cpp @@ -417,8 +417,8 @@ TEST(QuaternionTest, CheckTangentTwistToQuaternion) { { 45., {0., 0., 1.}, - {0.65328148243818829, 0.27059805007309845, -0.65328148243818818, 0.27059805007309851 - }, + {0.65328148243818829, 0.27059805007309845, -0.65328148243818818, + 0.27059805007309851}, }, }) { const auto q_act = TangentTwistToQuaternion(td.tan, td.twist); diff --git a/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp b/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp index 7626a7a0d..43f894a1e 100644 --- a/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp +++ b/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp @@ -13,9 +13,7 @@ struct ExecuteCalculateGravityForce { Kokkos::View FG; KOKKOS_FUNCTION - void operator()(size_t) const { - masses::CalculateGravityForce(mass, gravity, eta_tilde, FG); - } + void operator()(size_t) const { masses::CalculateGravityForce(mass, gravity, eta_tilde, FG); } }; TEST(CalculateGravityForceTestsMasses, OneNode) { diff --git a/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp b/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp index 5c1c9c022..86ef73f35 100644 --- a/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp +++ b/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp @@ -93,8 +93,7 @@ TEST(CalculateInertiaStiffnessMatrixMassesTests, OneNode) { Kokkos::parallel_for( "CalculateInertiaStiffnessMatrix", 1, ExecuteCalculateInertiaStiffnessMatrix{ - mass, u_ddot, omega, omega_dot, omega_tilde, omega_dot_tilde, rho, eta, Kuu - } + mass, u_ddot, omega, omega_dot, omega_tilde, omega_dot_tilde, rho, eta, Kuu} ); constexpr auto Kuu_exact_data = std::array{ diff --git a/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp b/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp index 2d36fb7be..ee69b6152 100644 --- a/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp +++ b/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp @@ -20,7 +20,9 @@ struct ExecuteCalculateInertialForces { KOKKOS_FUNCTION void operator()(size_t) const { - masses::CalculateInertialForce(mass, u_ddot, omega, omega_dot, eta, eta_tilde, rho, omega_tilde, omega_dot_tilde, FI); + masses::CalculateInertialForce( + mass, u_ddot, omega, omega_dot, eta, eta_tilde, rho, omega_tilde, omega_dot_tilde, FI + ); } }; @@ -80,8 +82,7 @@ TEST(CalculateInertialForcesTestsMasses, OneNode) { Kokkos::deep_copy(omega_tilde, omega_tilde_mirror); const auto omega_dot_tilde = Kokkos::View("omega_dot_tilde"); - constexpr auto omega_dot_tilde_data = - std::array{0., -45., 44., 45., 0., -43., -44., 43., 0.}; + constexpr auto omega_dot_tilde_data = std::array{0., -45., 44., 45., 0., -43., -44., 43., 0.}; const auto omega_dot_tilde_host = Kokkos::View(omega_dot_tilde_data.data()); const auto omega_dot_tilde_mirror = Kokkos::create_mirror(omega_dot_tilde); @@ -93,8 +94,7 @@ TEST(CalculateInertialForcesTestsMasses, OneNode) { Kokkos::parallel_for( "CalculateInertialForces", 1, ExecuteCalculateInertialForces{ - mass, u_ddot, omega, omega_dot, eta_tilde, omega_tilde, omega_dot_tilde, rho, eta, FI - } + mass, u_ddot, omega, omega_dot, eta_tilde, omega_tilde, omega_dot_tilde, rho, eta, FI} ); constexpr auto FI_exact_data = std::array{-2984., 32., 2922., 20624., -2248., 22100.}; diff --git a/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp b/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp index e2fa68a8b..a5a183b70 100644 --- a/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp +++ b/tests/unit_tests/system/masses/test_calculate_mass_matrix_components.cpp @@ -32,13 +32,11 @@ TEST(CalculateMassMatrixComponentsMassesTests, OneQuadPoint) { const auto rho = Kokkos::View("rho"); Kokkos::parallel_for( - "CalculateMassMatrixComponents", 1, - ExecuteCalculateMassMatrixComponents{Muu, eta, rho} + "CalculateMassMatrixComponents", 1, ExecuteCalculateMassMatrixComponents{Muu, eta, rho} ); constexpr auto eta_exact_data = std::array{32., -31., 25.}; - const auto eta_exact = - Kokkos::View(eta_exact_data.data()); + const auto eta_exact = Kokkos::View(eta_exact_data.data()); const auto eta_mirror = Kokkos::create_mirror(eta); Kokkos::deep_copy(eta_mirror, eta); diff --git a/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp b/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp index 99c7d803a..0095d465b 100644 --- a/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp +++ b/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp @@ -28,8 +28,7 @@ TEST(RotateSectionMatrixMassesTests, OneNode) { std::array{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.}; - const auto Cstar_host = - Kokkos::View(Cstar_data.data()); + const auto Cstar_host = Kokkos::View(Cstar_data.data()); const auto Cstar_mirror = Kokkos::create_mirror(Cstar); Kokkos::deep_copy(Cstar_mirror, Cstar_host); Kokkos::deep_copy(Cstar, Cstar_mirror); @@ -38,11 +37,10 @@ TEST(RotateSectionMatrixMassesTests, OneNode) { Kokkos::parallel_for("RotateSectionMatrix", 1, ExecuteRotateSectionMatrix{xr, Cstar, Cuu}); - constexpr auto Cuu_exact_data = - std::array{2052., 9000., 12564., 2160., 9540., 13320., 2700., 7200., 9900., - 3240., 9900., 13680., 3564., 9000., 12348., 4320., 12780., 17640., - 2700., 12240., 17100., 2808., 12780., 17856., 5940., 23400., 32580., - 6480., 26100., 36360., 8100., 31680., 44100., 8856., 35460., 49392.}; + constexpr auto Cuu_exact_data = std::array{ + 2052., 9000., 12564., 2160., 9540., 13320., 2700., 7200., 9900., 3240., 9900., 13680., + 3564., 9000., 12348., 4320., 12780., 17640., 2700., 12240., 17100., 2808., 12780., 17856., + 5940., 23400., 32580., 6480., 26100., 36360., 8100., 31680., 44100., 8856., 35460., 49392.}; const auto Cuu_exact = Kokkos::View(Cuu_exact_data.data()); diff --git a/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp b/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp index f90958ea2..a94da6308 100644 --- a/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp +++ b/tests/unit_tests/system/springs/test_calculate_force_coefficients.cpp @@ -36,8 +36,12 @@ void TestCalculateForceCoefficientsTests_ThreeElements() { Kokkos::parallel_for( "CalculateForceCoefficients", 3, KOKKOS_LAMBDA(const size_t i_elem) { - c1(i_elem) = openturbine::springs::CalculateForceCoefficient1(k(i_elem), l_ref(i_elem), l(i_elem)); - c2(i_elem) = openturbine::springs::CalculateForceCoefficient2(k(i_elem), l_ref(i_elem), l(i_elem)); + c1(i_elem) = openturbine::springs::CalculateForceCoefficient1( + k(i_elem), l_ref(i_elem), l(i_elem) + ); + c2(i_elem) = openturbine::springs::CalculateForceCoefficient2( + k(i_elem), l_ref(i_elem), l(i_elem) + ); } ); diff --git a/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp b/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp index 0f3803f76..652562968 100644 --- a/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp +++ b/tests/unit_tests/system/springs/test_calculate_force_vectors.cpp @@ -36,9 +36,12 @@ void TestCalculateForceVectorsTests_ThreeElements() { constexpr auto f1_exact_data = std::array{-4., -5., -6.}; constexpr auto f2_exact_data = std::array{3.5, 4., 4.5}; - const auto f0_exact = Kokkos::View::const_type(f0_exact_data.data()); - const auto f1_exact = Kokkos::View::const_type(f1_exact_data.data()); - const auto f2_exact = Kokkos::View::const_type(f2_exact_data.data()); + const auto f0_exact = + Kokkos::View::const_type(f0_exact_data.data()); + const auto f1_exact = + Kokkos::View::const_type(f1_exact_data.data()); + const auto f2_exact = + Kokkos::View::const_type(f2_exact_data.data()); const auto f0_result = Kokkos::create_mirror(f0); const auto f1_result = Kokkos::create_mirror(f1); diff --git a/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp b/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp index 90f699ded..831e38ef9 100644 --- a/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp +++ b/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp @@ -39,7 +39,7 @@ void TestCalculateStiffnessMatrixTests_OneElement() { openturbine::tests::CompareWithExpected(a_result, a_exact); } -} +} // namespace namespace openturbine::tests { TEST(CalculateStiffnessMatrixTests, OneElement) { From d14f93472d6cb56faf9617b7bba4bae705745df6 Mon Sep 17 00:00:00 2001 From: dcdemen Date: Wed, 12 Feb 2025 14:58:35 -0700 Subject: [PATCH 6/6] clang-tidy and format --- src/elements/masses/masses.hpp | 40 ------------------- src/elements/springs/springs.hpp | 6 +-- src/step/update_system_variables_masses.hpp | 3 +- src/step/update_system_variables_springs.hpp | 3 +- .../masses/calculate_gyroscopic_matrix.hpp | 3 +- .../calculate_quadrature_point_values.hpp | 3 +- .../floating_platform/floating_platform.cpp | 3 +- .../math/test_quaternion_operations.cpp | 4 +- .../masses/test_calculate_gravity_force.cpp | 2 +- ...est_calculate_inertia_stiffness_matrix.cpp | 3 +- .../masses/test_calculate_inertial_forces.cpp | 5 ++- .../masses/test_rotate_section_matrix.cpp | 9 +++-- .../test_calculate_stiffness_matrix.cpp | 2 +- 13 files changed, 27 insertions(+), 59 deletions(-) diff --git a/src/elements/masses/masses.hpp b/src/elements/masses/masses.hpp index 6e291ac0d..f4529afe3 100644 --- a/src/elements/masses/masses.hpp +++ b/src/elements/masses/masses.hpp @@ -25,30 +25,7 @@ struct Masses { View_3 gravity; Kokkos::View node_x0; //< Initial position/rotation - // Kokkos::View node_u; //< State: translation/rotation displacement - // Kokkos::View node_u_dot; //< State: translation/rotation velocity - // Kokkos::View node_u_ddot; //< State: translation/rotation acceleration - // Kokkos::View qp_Mstar; //< Mass matrix in material frame - // Kokkos::View qp_x; //< Current position/orientation - // Kokkos::View qp_x0; - // Kokkos::View qp_r0; - // Kokkos::View qp_u; - // Kokkos::View qp_u_ddot; - // Kokkos::View qp_r; - // Kokkos::View qp_omega; - // Kokkos::View qp_omega_dot; - // Kokkos::View qp_eta_tilde; - // Kokkos::View qp_omega_tilde; - // Kokkos::View qp_omega_dot_tilde; - // Kokkos::View qp_eta; //< Offset between mass center and elastic axis - // Kokkos::View qp_rho; //< Rotational inertia part of mass matrix - // Kokkos::View qp_Fi; //< Inertial force - // Kokkos::View qp_Fg; //< Gravity force - // Kokkos::View qp_RR0; //< Global rotation - // Kokkos::View qp_Muu; //< Mass matrix in global/inertial frame - // Kokkos::View qp_Guu; //< Gyroscopic/inertial damping matrix - // Kokkos::View qp_Kuu; //< Inertia stiffness matrix Kokkos::View residual_vector_terms; Kokkos::View stiffness_matrix_terms; @@ -62,24 +39,7 @@ struct Masses { element_freedom_table("element_freedom_table", num_elems), gravity("gravity"), node_x0("node_x0", num_elems), - // node_u("node_u", num_elems), - // node_u_dot("node_u_dot", num_elems), - // node_u_ddot("node_u_ddot", num_elems), qp_Mstar("qp_Mstar", num_elems), - // qp_r("qp_r", num_elems), - // qp_omega("qp_omega", num_elems), - // qp_omega_dot("qp_omega_dot", num_elems), - // qp_eta_tilde("qp_eta_tilde", num_elems), - // qp_omega_tilde("qp_omega_tilde", num_elems), - // qp_omega_dot_tilde("qp_omega_dot_tilde", num_elems), - // qp_eta("qp_eta", num_elems), - // qp_rho("qp_rho", num_elems), - // qp_Fi("qp_Fi", num_elems), - // qp_Fg("qp_Fg", num_elems), - // qp_RR0("qp_RR0", num_elems), - // qp_Muu("qp_Muu", num_elems), - // qp_Guu("qp_Guu", num_elems), - // qp_Kuu("qp_Kuu", num_elems), residual_vector_terms("residual_vector_terms", num_elems), stiffness_matrix_terms("stiffness_matrix_terms", num_elems), inertia_matrix_terms("inertia_matrix_terms", num_elems) { diff --git a/src/elements/springs/springs.hpp b/src/elements/springs/springs.hpp index 00600cad2..2b6b86348 100644 --- a/src/elements/springs/springs.hpp +++ b/src/elements/springs/springs.hpp @@ -19,9 +19,9 @@ struct Springs { Kokkos::View element_freedom_signature; Kokkos::View element_freedom_table; //< Only translational DOFs for springs - Kokkos::View x0; //< Initial distance vector between nodes - Kokkos::View l_ref; //< Initial length of springs - Kokkos::View k; //< Spring stiffness coefficients + Kokkos::View x0; //< Initial distance vector between nodes + Kokkos::View l_ref; //< Initial length of springs + Kokkos::View k; //< Spring stiffness coefficients Kokkos::View residual_vector_terms; Kokkos::View stiffness_matrix_terms; diff --git a/src/step/update_system_variables_masses.hpp b/src/step/update_system_variables_masses.hpp index 6fdc5225e..83170f4cb 100644 --- a/src/step/update_system_variables_masses.hpp +++ b/src/step/update_system_variables_masses.hpp @@ -18,7 +18,8 @@ inline void UpdateSystemVariablesMasses( masses::CalculateQuadraturePointValues{ parameters.beta_prime, parameters.gamma_prime, state.q, state.v, state.vd, masses.state_indices, masses.gravity, masses.qp_Mstar, masses.node_x0, - masses.residual_vector_terms, masses.stiffness_matrix_terms, masses.inertia_matrix_terms} + masses.residual_vector_terms, masses.stiffness_matrix_terms, masses.inertia_matrix_terms + } ); } diff --git a/src/step/update_system_variables_springs.hpp b/src/step/update_system_variables_springs.hpp index e24485d6b..85097dfd1 100644 --- a/src/step/update_system_variables_springs.hpp +++ b/src/step/update_system_variables_springs.hpp @@ -17,7 +17,8 @@ inline void UpdateSystemVariablesSprings(const Springs& springs, State& state) { "Calculate System Variables Springs", springs.num_elems, springs::CalculateQuadraturePointValues{ state.q, springs.node_state_indices, springs.x0, springs.l_ref, springs.k, - springs.residual_vector_terms, springs.stiffness_matrix_terms} + springs.residual_vector_terms, springs.stiffness_matrix_terms + } ); } diff --git a/src/system/masses/calculate_gyroscopic_matrix.hpp b/src/system/masses/calculate_gyroscopic_matrix.hpp index 96b63439b..acb0d6f12 100644 --- a/src/system/masses/calculate_gyroscopic_matrix.hpp +++ b/src/system/masses/calculate_gyroscopic_matrix.hpp @@ -12,7 +12,8 @@ namespace openturbine::masses { KOKKOS_FUNCTION inline void CalculateGyroscopicMatrix( double mass, const Kokkos::View::const_type& omega, - const Kokkos::View::const_type& eta, const Kokkos::View::const_type rho, + const Kokkos::View::const_type& eta, + const Kokkos::View::const_type& rho, const Kokkos::View::const_type& omega_tilde, const Kokkos::View& Guu ) { using NoTranspose = KokkosBatched::Trans::NoTranspose; diff --git a/src/system/masses/calculate_quadrature_point_values.hpp b/src/system/masses/calculate_quadrature_point_values.hpp index 36d00b050..d11fb2870 100644 --- a/src/system/masses/calculate_quadrature_point_values.hpp +++ b/src/system/masses/calculate_quadrature_point_values.hpp @@ -37,7 +37,8 @@ struct CalculateQuadraturePointValues { const auto x0_data = Kokkos::Array{node_x0(i_elem, 0), node_x0(i_elem, 1), node_x0(i_elem, 2)}; const auto r0_data = Kokkos::Array{ - node_x0(i_elem, 3), node_x0(i_elem, 4), node_x0(i_elem, 5), node_x0(i_elem, 6)}; + node_x0(i_elem, 3), node_x0(i_elem, 4), node_x0(i_elem, 5), node_x0(i_elem, 6) + }; const auto u_data = Kokkos::Array{Q(index, 0), Q(index, 1), Q(index, 2)}; const auto r_data = Kokkos::Array{Q(index, 3), Q(index, 4), Q(index, 5), Q(index, 6)}; diff --git a/tests/documentation_tests/floating_platform/floating_platform.cpp b/tests/documentation_tests/floating_platform/floating_platform.cpp index 528d02cc1..23b3605df 100644 --- a/tests/documentation_tests/floating_platform/floating_platform.cpp +++ b/tests/documentation_tests/floating_platform/floating_platform.cpp @@ -13,7 +13,8 @@ int main() { constexpr auto rho_inf = 0.0; // Time stepping damping factor constexpr auto max_iter = 5; // Maximum number of nonlinear steps per time ste[ const auto n_steps{ - static_cast(ceil(t_end / time_step)) + 1}; // Number of time steps + static_cast(ceil(t_end / time_step)) + 1 + }; // Number of time steps // Define gravity vector constexpr auto gravity = std::array{0., 0., -9.8124}; // m/s/s diff --git a/tests/unit_tests/math/test_quaternion_operations.cpp b/tests/unit_tests/math/test_quaternion_operations.cpp index ef0735a10..af3c6f1d3 100644 --- a/tests/unit_tests/math/test_quaternion_operations.cpp +++ b/tests/unit_tests/math/test_quaternion_operations.cpp @@ -417,8 +417,8 @@ TEST(QuaternionTest, CheckTangentTwistToQuaternion) { { 45., {0., 0., 1.}, - {0.65328148243818829, 0.27059805007309845, -0.65328148243818818, - 0.27059805007309851}, + {0.65328148243818829, 0.27059805007309845, -0.65328148243818818, 0.27059805007309851 + }, }, }) { const auto q_act = TangentTwistToQuaternion(td.tan, td.twist); diff --git a/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp b/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp index 43f894a1e..7fd947acc 100644 --- a/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp +++ b/tests/unit_tests/system/masses/test_calculate_gravity_force.cpp @@ -17,7 +17,7 @@ struct ExecuteCalculateGravityForce { }; TEST(CalculateGravityForceTestsMasses, OneNode) { - double mass = 1.; + constexpr auto mass = 1.; const auto eta_tilde = Kokkos::View("eta_tilde"); constexpr auto eta_tilde_data = std::array{37., 38., 39., 40., 41., 42., 43., 44., 45.}; diff --git a/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp b/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp index 86ef73f35..5c1c9c022 100644 --- a/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp +++ b/tests/unit_tests/system/masses/test_calculate_inertia_stiffness_matrix.cpp @@ -93,7 +93,8 @@ TEST(CalculateInertiaStiffnessMatrixMassesTests, OneNode) { Kokkos::parallel_for( "CalculateInertiaStiffnessMatrix", 1, ExecuteCalculateInertiaStiffnessMatrix{ - mass, u_ddot, omega, omega_dot, omega_tilde, omega_dot_tilde, rho, eta, Kuu} + mass, u_ddot, omega, omega_dot, omega_tilde, omega_dot_tilde, rho, eta, Kuu + } ); constexpr auto Kuu_exact_data = std::array{ diff --git a/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp b/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp index ee69b6152..5ebcc8426 100644 --- a/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp +++ b/tests/unit_tests/system/masses/test_calculate_inertial_forces.cpp @@ -27,7 +27,7 @@ struct ExecuteCalculateInertialForces { }; TEST(CalculateInertialForcesTestsMasses, OneNode) { - double mass = 1.; + constexpr auto mass = 1.; const auto u_ddot = Kokkos::View("u_ddot"); constexpr auto u_ddot_data = std::array{37., 38., 39.}; @@ -94,7 +94,8 @@ TEST(CalculateInertialForcesTestsMasses, OneNode) { Kokkos::parallel_for( "CalculateInertialForces", 1, ExecuteCalculateInertialForces{ - mass, u_ddot, omega, omega_dot, eta_tilde, omega_tilde, omega_dot_tilde, rho, eta, FI} + mass, u_ddot, omega, omega_dot, eta_tilde, omega_tilde, omega_dot_tilde, rho, eta, FI + } ); constexpr auto FI_exact_data = std::array{-2984., 32., 2922., 20624., -2248., 22100.}; diff --git a/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp b/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp index 0095d465b..1cbfb0f54 100644 --- a/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp +++ b/tests/unit_tests/system/masses/test_rotate_section_matrix.cpp @@ -37,10 +37,11 @@ TEST(RotateSectionMatrixMassesTests, OneNode) { Kokkos::parallel_for("RotateSectionMatrix", 1, ExecuteRotateSectionMatrix{xr, Cstar, Cuu}); - constexpr auto Cuu_exact_data = std::array{ - 2052., 9000., 12564., 2160., 9540., 13320., 2700., 7200., 9900., 3240., 9900., 13680., - 3564., 9000., 12348., 4320., 12780., 17640., 2700., 12240., 17100., 2808., 12780., 17856., - 5940., 23400., 32580., 6480., 26100., 36360., 8100., 31680., 44100., 8856., 35460., 49392.}; + constexpr auto Cuu_exact_data = + std::array{2052., 9000., 12564., 2160., 9540., 13320., 2700., 7200., 9900., + 3240., 9900., 13680., 3564., 9000., 12348., 4320., 12780., 17640., + 2700., 12240., 17100., 2808., 12780., 17856., 5940., 23400., 32580., + 6480., 26100., 36360., 8100., 31680., 44100., 8856., 35460., 49392.}; const auto Cuu_exact = Kokkos::View(Cuu_exact_data.data()); diff --git a/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp b/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp index 831e38ef9..e33b83646 100644 --- a/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp +++ b/tests/unit_tests/system/springs/test_calculate_stiffness_matrix.cpp @@ -11,7 +11,7 @@ void TestCalculateStiffnessMatrixTests_OneElement() { Kokkos::parallel_for( "CalculateStiffnessMatrix", 1, - KOKKOS_LAMBDA(const size_t i_elem) { + KOKKOS_LAMBDA(const size_t) { constexpr auto c1 = 2.; constexpr auto c2 = 1.; constexpr auto l = 1.;