Loading...
Searching...
No Matches
kernel_helpers.hpp File Reference

Go to the source code of this file.

Namespaces

namespace  terra
 
namespace  terra::fe
 
namespace  terra::fe::wedge
 Features for wedge elements.
 

Enumerations

enum class  terra::fe::wedge::DoFOrdering { terra::fe::wedge::NODEWISE , terra::fe::wedge::DIMENSIONWISE }
 

Functions

template<std::floating_point T>
void terra::fe::wedge::wedge_surface_physical_coords (dense::Vec< T, 3 >(&wedge_surf_phy_coords)[num_wedges_per_hex_cell][num_nodes_per_wedge_surface], const grid::Grid3DDataVec< T, 3 > &lateral_grid, const int local_subdomain_id, const int x_cell, const int y_cell)
 Extracts the (unit sphere) surface vertex coords of the two wedges of a hex cell.
 
template<std::floating_point T>
void terra::fe::wedge::wedge_0_surface_physical_coords (dense::Vec< T, 3 > *wedge_surf_phy_coords, const grid::Grid3DDataVec< T, 3 > &lateral_grid, const int local_subdomain_id, const int x_cell, const int y_cell)
 
template<std::floating_point T>
void terra::fe::wedge::wedge_1_surface_physical_coords (dense::Vec< T, 3 > *wedge_surf_phy_coords, const grid::Grid3DDataVec< T, 3 > &lateral_grid, const int local_subdomain_id, const int x_cell, const int y_cell)
 
template<std::floating_point T, int NumQuadPoints>
constexpr void terra::fe::wedge::jacobian_lat_inverse_transposed_and_determinant (dense::Mat< T, 3, 3 >(&jac_lat_inv_t)[num_wedges_per_hex_cell][NumQuadPoints], T(&det_jac_lat)[num_wedges_per_hex_cell][NumQuadPoints], const dense::Vec< T, 3 > wedge_surf_phy_coords[num_wedges_per_hex_cell][num_nodes_per_wedge_surface], const dense::Vec< T, 3 > quad_points[NumQuadPoints])
 Computes the transposed inverse of the Jacobian of the lateral forward map from the reference triangle to the triangle on the unit sphere and the absolute determinant of that Jacobian at the passed quadrature points.
 
template<std::floating_point T, int NumQuadPoints>
constexpr void terra::fe::wedge::jacobian_lat_determinant (T(&det_jac_lat)[num_wedges_per_hex_cell][NumQuadPoints], const dense::Vec< T, 3 > wedge_surf_phy_coords[num_wedges_per_hex_cell][num_nodes_per_wedge_surface], const dense::Vec< T, 3 > quad_points[NumQuadPoints])
 Like jacobian_lat_inverse_transposed_and_determinant() but only computes the determinant (cheaper if the transposed inverse of the Jacobian is not required).
 
template<std::floating_point T, int NumQuadPoints>
constexpr void terra::fe::wedge::lateral_parts_of_grad_phi (dense::Vec< T, 3 >(&g_rad)[num_wedges_per_hex_cell][num_nodes_per_wedge][NumQuadPoints], dense::Vec< T, 3 >(&g_lat)[num_wedges_per_hex_cell][num_nodes_per_wedge][NumQuadPoints], const dense::Mat< T, 3, 3 > jac_lat_inv_t[num_wedges_per_hex_cell][NumQuadPoints], const dense::Vec< T, 3 > quad_points[NumQuadPoints])
 Computes the radially independent parts of the physical shape function gradients.
 
template<std::floating_point T, int NumQuadPoints>
constexpr dense::Vec< T, 3 > terra::fe::wedge::grad_shape_full (const dense::Vec< T, 3 > g_rad[num_wedges_per_hex_cell][num_nodes_per_wedge][NumQuadPoints], const dense::Vec< T, 3 > g_lat[num_wedges_per_hex_cell][num_nodes_per_wedge][NumQuadPoints], const T r_inv, const T grad_r_inv, const int wedge_idx, const int node_idx, const int quad_point_idx)
 Computes and returns J^-T grad(N_j).
 
template<std::floating_point T, int NumQuadPoints>
constexpr T terra::fe::wedge::det_full (const T det_jac_lat[num_wedges_per_hex_cell][NumQuadPoints], const T r, const T grad_r, const int wedge_idx, const int quad_point_idx)
 Computes |det(J)|.
 
template<std::floating_point T>
void terra::fe::wedge::extract_local_wedge_scalar_coefficients (dense::Vec< T, 6 >(&local_coefficients)[2], const int local_subdomain_id, const int x_cell, const int y_cell, const int r_cell, const grid::Grid4DDataScalar< T > &global_coefficients)
 Extracts the local vector coefficients for the two wedges of a hex cell from the global coefficient vector.
 
template<std::floating_point T, int VecDim>
void terra::fe::wedge::extract_local_wedge_vector_coefficients (dense::Vec< T, 6 >(&local_coefficients)[2], const int local_subdomain_id, const int x_cell, const int y_cell, const int r_cell, const int d, const grid::Grid4DDataVec< T, VecDim > &global_coefficients)
 Extracts the local vector coefficients for the two wedges of a hex cell from the global coefficient vector.
 
template<std::floating_point T>
void terra::fe::wedge::atomically_add_local_wedge_scalar_coefficients (const grid::Grid4DDataScalar< T > &global_coefficients, const int local_subdomain_id, const int x_cell, const int y_cell, const int r_cell, const dense::Vec< T, 6 >(&local_coefficients)[2])
 Performs an atomic add of the two local wedge coefficient vectors of a hex cell into the global coefficient vector.
 
template<std::floating_point T, int VecDim>
void terra::fe::wedge::atomically_add_local_wedge_vector_coefficients (const grid::Grid4DDataVec< T, VecDim > &global_coefficients, const int local_subdomain_id, const int x_cell, const int y_cell, const int r_cell, const int d, const dense::Vec< T, 6 > local_coefficients[2])
 Performs an atomic add of the two local wedge coefficient vectors of a hex cell into the global coefficient vector.
 
constexpr int terra::fe::wedge::fine_lateral_wedge_idx (const int x_cell_fine, const int y_cell_fine, const int wedge_idx_fine)
 Returns the lateral wedge index with respect to a coarse grid wedge from the fine wedge indices.
 
template<typename ScalarT >
constexpr void terra::fe::wedge::reorder_local_dofs (const DoFOrdering doo_from, const DoFOrdering doo_to, dense::Vec< ScalarT, 18 > &dofs)
 

Variables

constexpr int terra::fe::wedge::num_wedges_per_hex_cell = 2
 
constexpr int terra::fe::wedge::num_nodes_per_wedge_surface = 3
 
constexpr int terra::fe::wedge::num_nodes_per_wedge = 6