MFEM v4.9.0
Finite element discretization library
Loading...
Searching...
No Matches
util.hpp File Reference

Go to the source code of this file.

Classes

struct  mfem::future::FunctionSignature< output_t(input_ts...)>
 
struct  mfem::future::create_function_signature< output_t(T::*)(input_ts...) const >
 
struct  mfem::future::create_function_signature< output_t(*)(input_ts...)>
 
struct  mfem::future::FieldDescriptor
 FieldDescriptor struct. More...
 
struct  mfem::future::ThreadBlocks
 ThreadBlocks struct. More...
 
class  mfem::future::FDJacobian
 
struct  mfem::future::DofToQuadMap
 DofToQuadMap struct. More...
 
struct  mfem::future::SharedMemory
 
struct  mfem::future::SharedMemoryInfo< num_fields, num_inputs, num_outputs >
 

Namespaces

namespace  mfem
 
namespace  mfem::future
 
namespace  mfem::future::detail
 
namespace  mfem::future::dfem
 
namespace  mfem::future::Entity
 Entity struct.
 

Typedefs

template<typename T >
using mfem::future::decay_tuple = decltype(decay_types(std::declval<T>()))
 

Functions

template<typename... Ts>
constexpr auto mfem::future::to_array (const std::tuple< Ts... > &tuple)
 
template<typename lambda , std::size_t... i>
constexpr void mfem::future::detail::for_constexpr (lambda &&f, std::integral_constant< std::size_t, i >... Is)
 
template<std::size_t... n, typename lambda , typename... arg_types>
constexpr void mfem::future::detail::for_constexpr (lambda &&f, std::integer_sequence< std::size_t, n... >, arg_types... args)
 
template<typename lambda , std::size_t... i>
constexpr void mfem::future::for_constexpr (lambda &&f, std::integer_sequence< std::size_t, i ... >)
 
template<typename lambda >
constexpr void mfem::future::for_constexpr (lambda &&f, std::integer_sequence< std::size_t >)
 
template<int... n, typename lambda >
constexpr void mfem::future::for_constexpr (lambda &&f)
 
template<typename lambda , typename arg_t >
constexpr void mfem::future::for_constexpr_with_arg (lambda &&f, arg_t &&arg, std::integer_sequence< std::size_t >)
 
template<typename lambda , typename arg_t , std::size_t i, std::size_t... Is>
constexpr void mfem::future::for_constexpr_with_arg (lambda &&f, arg_t &&arg, std::integer_sequence< std::size_t, i, Is... >)
 
template<typename lambda , typename arg_t >
constexpr void mfem::future::for_constexpr_with_arg (lambda &&f, arg_t &&arg)
 
template<std::size_t I, typename Tuple , std::size_t... Is>
std::array< bool, sizeof...(Is)> mfem::future::make_dependency_array (const Tuple &inputs, std::index_sequence< Is... >)
 
template<typename... input_ts, std::size_t... Is>
auto mfem::future::make_dependency_map_impl (tuple< input_ts... > inputs, std::index_sequence< Is... >)
 
template<typename... input_ts>
auto mfem::future::make_dependency_map (tuple< input_ts... > inputs)
 
template<typename T >
constexpr auto mfem::future::get_type_name () -> std::string_view
 
template<typename Tuple , std::size_t... Is>
void mfem::future::print_tuple_impl (const Tuple &t, std::index_sequence< Is... >)
 
template<typename... Args>
void mfem::future::print_tuple (const std::tuple< Args... > &t)
 
void mfem::future::pretty_print (std::ostream &out, const mfem::DenseMatrix &A)
 Pretty print an mfem::DenseMatrix to out.
 
void mfem::future::pretty_print (const mfem::Vector &v)
 Pretty print an mfem::Vector to out.
 
template<typename T >
void mfem::future::pretty_print (const mfem::Array< T > &v)
 Pretty print an mfem::Array to out.
 
template<typename K , typename T , std::size_t N>
void mfem::future::pretty_print (const std::unordered_map< K, std::array< T, N > > &map)
 Pretty prints an unordered map of std::array to out.
 
void mfem::future::print_mpi_root (const std::string &msg)
 
void mfem::future::print_mpi_sync (const std::string &msg)
 print with MPI rank synchronization
 
void mfem::future::pretty_print_mpi (const mfem::Vector &v)
 Pretty print an mfem::Vector with MPI rank.
 
template<typename ... Ts>
constexpr auto mfem::future::decay_types (tuple< Ts... > const &) -> tuple< std::remove_cv_t< std::remove_reference_t< Ts > >... >
 
template<typename T >
constexpr int mfem::future::GetFieldId ()
 
template<typename Tuple , std::size_t... Is>
constexpr auto mfem::future::extract_field_ids_impl (Tuple &&t, std::index_sequence< Is... >)
 
template<typename... Ts>
constexpr auto mfem::future::extract_field_ids (const std::tuple< Ts... > &t)
 Extracts field IDs from a tuple of objects derived from FieldOperator.
 
constexpr bool mfem::future::contains (const int *arr, std::size_t size, int value)
 Helper function to check if an element is in the array.
 
template<typename... Ts>
constexpr std::size_t mfem::future::count_unique_field_ids (const std::tuple< Ts... > &t)
 Function to count unique field IDs in a tuple.
 
template<typename T , std::size_t N>
auto mfem::future::get_marked_entries (const std::array< T, N > &a, const std::array< bool, N > &marker)
 Get marked entries from an std::array based on a marker array.
 
template<typename... Ts>
constexpr auto mfem::future::filter_fields (const std::tuple< Ts... > &t)
 Filter fields from a tuple based on their field IDs.
 
template<typename func_t >
__global__ void mfem::future::forall_kernel_shmem (func_t f, int n)
 
template<typename func_t >
void mfem::future::forall (func_t f, const int &N, const ThreadBlocks &blocks, int num_shmem=0, real_t *shmem=nullptr)
 
std::size_t mfem::future::FindIdx (const std::size_t &id, const std::vector< FieldDescriptor > &fields)
 Find the index of a field descriptor in a vector of field descriptors.
 
int mfem::future::GetVSize (const FieldDescriptor &f)
 Get the vdof size of a field descriptor.
 
void mfem::future::GetElementVDofs (const FieldDescriptor &f, int el, Array< int > &vdofs)
 Get the element vdofs of a field descriptor.
 
int mfem::future::GetTrueVSize (const FieldDescriptor &f)
 Get the true dof size of a field descriptor.
 
int mfem::future::GetVDim (const FieldDescriptor &f)
 Get the vdim of a field descriptor.
 
template<typename entity_t >
int mfem::future::GetDimension (const FieldDescriptor &f)
 Get the spatial dimension of a field descriptor.
 
const Operatormfem::future::get_prolongation (const FieldDescriptor &f)
 Get the prolongation operator for a field descriptor.
 
const Operatormfem::future::get_element_restriction (const FieldDescriptor &f, ElementDofOrdering o)
 Get the element restriction operator for a field descriptor.
 
const Operatormfem::future::get_face_restriction (const FieldDescriptor &f, ElementDofOrdering o, FaceType ft, L2FaceValues m)
 Get the face restriction operator for a field descriptor.
 
template<typename entity_t >
const Operatormfem::future::get_restriction (const FieldDescriptor &f, const ElementDofOrdering &o)
 Get the restriction operator for a field descriptor.
 
template<typename entity_t , typename fop_t >
std::tuple< std::function< void(const Vector &, Vector &)>, int > mfem::future::get_restriction_transpose (const FieldDescriptor &f, const ElementDofOrdering &o, const fop_t &fop)
 Get a transpose restriction callback for a field descriptor.
 
void mfem::future::prolongation (const FieldDescriptor field, const Vector &x, Vector &field_l)
 Apply the prolongation operator to a field.
 
template<std::size_t N, std::size_t M>
void mfem::future::prolongation (const std::array< FieldDescriptor, N > fields, const Vector &x, std::array< Vector, M > &fields_l)
 Apply the prolongation operator to a vector of fields.
 
void mfem::future::prolongation (const std::vector< FieldDescriptor > fields, const Vector &x, std::vector< Vector > &fields_l)
 Apply the prolongation operator to a vector of fields.
 
void mfem::future::get_lvectors (const std::vector< FieldDescriptor > fields, const Vector &x, std::vector< Vector > &fields_l)
 
template<typename fop_t >
std::function< void(const Vector &, Vector &)> mfem::future::get_prolongation_transpose (const FieldDescriptor &f, const fop_t &fop, MPI_Comm mpi_comm)
 Get a transpose prolongation callback for a field descriptor.
 
template<typename entity_t >
void mfem::future::restriction (const FieldDescriptor u, const Vector &u_l, Vector &field_e, ElementDofOrdering ordering)
 Apply the restriction operator to a field.
 
template<typename entity_t >
void mfem::future::restriction (const std::vector< FieldDescriptor > u, const std::vector< Vector > &u_l, std::vector< Vector > &fields_e, ElementDofOrdering ordering, const int offset=0)
 Apply the restriction operator to a vector of fields.
 
template<std::size_t N, std::size_t M>
void mfem::future::element_restriction (const std::array< FieldDescriptor, N > u, const std::array< Vector, N > &u_l, std::array< Vector, M > &fields_e, ElementDofOrdering ordering, const int offset=0)
 
template<typename entity_t >
int mfem::future::GetNumEntities (const mfem::Mesh &mesh)
 Get the number of entities of a given type.
 
template<typename entity_t >
const DofToQuadmfem::future::GetDofToQuad (const FieldDescriptor &f, const IntegrationRule &ir, DofToQuad::Mode mode)
 Get the GetDofToQuad object for a given entity type.
 
template<typename field_operator_t >
void mfem::future::CheckCompatibility (const FieldDescriptor &f)
 Check the compatibility of a field operator type with a FieldDescriptor.
 
template<typename entity_t , typename field_operator_t >
int mfem::future::GetSizeOnQP (const field_operator_t &, const FieldDescriptor &f)
 Get the size on quadrature point for a field operator type and FieldDescriptor combination.
 
template<typename entity_t , typename field_operator_ts >
std::array< size_t, tuple_size< field_operator_ts >::value > mfem::future::create_descriptors_to_fields_map (const std::vector< FieldDescriptor > &fields, field_operator_ts &fops)
 Create a map from field operator types to FieldDescriptor indices.
 
template<typename input_t , std::size_t... i>
std::array< DeviceTensor< 3 >, sizeof...(i)> mfem::future::wrap_input_memory (std::array< Vector, sizeof...(i)> &input_qp_mem, int num_qp, int num_entities, const input_t &inputs, std::index_sequence< i... >)
 Wrap input memory for a given set of inputs.
 
template<typename input_t , std::size_t... i>
std::array< Vector, sizeof...(i)> mfem::future::create_input_qp_memory (int num_qp, int num_entities, input_t &inputs, std::index_sequence< i... >)
 Create input memory for a given set of inputs.
 
template<typename input_t , std::size_t... i>
std::vector< int > mfem::future::get_input_size_on_qp (const input_t &inputs, std::index_sequence< i... >)
 Get the size on quadrature point for a given set of inputs.
 
template<typename entity_t , std::size_t num_fields, std::size_t num_inputs, std::size_t num_outputs, typename input_t >
SharedMemoryInfo< num_fields, num_inputs, num_outputs > mfem::future::get_shmem_info (const std::array< DofToQuadMap, num_inputs > &input_dtq_maps, const std::array< DofToQuadMap, num_outputs > &output_dtq_maps, const std::vector< FieldDescriptor > &fields, const int &num_entities, const input_t &inputs, const int &num_qp, const std::vector< int > &input_size_on_qp, const int &residual_size_on_qp, const ElementDofOrdering &dof_ordering, const int &derivative_action_field_idx=-1)
 
template<typename shmem_info_t >
void mfem::future::print_shared_memory_info (shmem_info_t &shmem_info)
 
template<std::size_t N>
MFEM_HOST_DEVICE std::array< DofToQuadMap, N > mfem::future::load_dtq_mem (void *mem, int offset, const std::array< std::array< int, 2 >, N > &sizes, const std::array< DofToQuadMap, N > &dtq)
 
template<std::size_t num_fields>
MFEM_HOST_DEVICE std::array< DeviceTensor< 1 >, num_fields > mfem::future::load_field_mem (void *mem, int offset, const std::array< int, num_fields > &sizes, const std::array< DeviceTensor< 2 >, num_fields > &fields_e, const int &entity_idx)
 
MFEM_HOST_DEVICE DeviceTensor< 1 > mfem::future::load_direction_mem (void *mem, int offset, const int &size, const DeviceTensor< 2 > &direction, const int &entity_idx)
 
template<std::size_t N>
MFEM_HOST_DEVICE std::array< DeviceTensor< 2 >, N > mfem::future::load_input_mem (void *mem, int offset, const std::array< int, N > &sizes, const int &num_qp)
 
MFEM_HOST_DEVICE DeviceTensor< 2 > mfem::future::load_residual_mem (void *mem, int offset, const int &residual_size, const int &num_qp)
 
template<std::size_t N>
MFEM_HOST_DEVICE std::array< DeviceTensor< 1 >, 6 > mfem::future::load_scratch_mem (void *mem, int offset, const std::array< int, N > &sizes)
 
template<typename shared_mem_info_t , std::size_t num_inputs, std::size_t num_outputs, std::size_t num_fields>
MFEM_HOST_DEVICE auto mfem::future::unpack_shmem (void *shmem, const shared_mem_info_t &shmem_info, const std::array< DofToQuadMap, num_inputs > &input_dtq_maps, const std::array< DofToQuadMap, num_outputs > &output_dtq_maps, const std::array< DeviceTensor< 2 >, num_fields > &wrapped_fields_e, const int &num_qp, const int &e)
 
template<typename shared_mem_info_t , std::size_t num_inputs, std::size_t num_outputs, std::size_t num_fields>
MFEM_HOST_DEVICE auto mfem::future::unpack_shmem (void *shmem, const shared_mem_info_t &shmem_info, const std::array< DofToQuadMap, num_inputs > &input_dtq_maps, const std::array< DofToQuadMap, num_outputs > &output_dtq_maps, const std::array< DeviceTensor< 2 >, num_fields > &wrapped_fields_e, const DeviceTensor< 2 > &wrapped_direction_e, const int &num_qp, const int &e)
 
template<std::size_t... i>
MFEM_HOST_DEVICE std::array< DeviceTensor< 2 >, sizeof...(i)> mfem::future::get_local_input_qp (const std::array< DeviceTensor< 3 >, sizeof...(i)> &input_qp_global, int e, std::index_sequence< i... >)
 
template<std::size_t N>
MFEM_HOST_DEVICE void mfem::future::set_zero (std::array< DeviceTensor< 2 >, N > &v)
 
template<std::size_t n>
MFEM_HOST_DEVICE void mfem::future::set_zero (DeviceTensor< n > &u)
 
template<int n>
MFEM_HOST_DEVICE void mfem::future::copy (DeviceTensor< n > &u, DeviceTensor< n > &v)
 Copy data from DeviceTensor u to DeviceTensor v.
 
template<int n, std::size_t m>
MFEM_HOST_DEVICE void mfem::future::copy (std::array< DeviceTensor< n >, m > &u, std::array< DeviceTensor< n >, m > &v)
 Copy data from array of DeviceTensor u to array of DeviceTensor v.
 
template<std::size_t num_fields>
std::array< DeviceTensor< 2 >, num_fields > mfem::future::wrap_fields (std::vector< Vector > &fields, std::array< int, num_fields > &field_sizes, const int &num_entities)
 Wraps plain data in DeviceTensors for fields.
 
template<typename input_t , std::size_t num_fields, std::size_t... i>
int mfem::future::accumulate_sizes_on_qp (const input_t &inputs, std::array< bool, sizeof...(i)> &kinput_is_dependent, const std::array< int, sizeof...(i)> &input_to_field, const std::array< FieldDescriptor, num_fields > &fields, std::index_sequence< i... > seq)
 Accumulates the sizes of field operators on quadrature points for dependent inputs.
 
template<typename entity_t , typename field_operator_ts , std::size_t N = tuple_size<field_operator_ts>::value, std::size_t... Is>
std::array< DofToQuadMap, N > mfem::future::create_dtq_maps_impl (field_operator_ts &fops, std::vector< const DofToQuad * > &dtqs, const std::array< size_t, N > &field_map, std::index_sequence< Is... >)
 
template<typename entity_t , typename field_operator_ts , std::size_t num_fields>
std::array< DofToQuadMap, num_fields > mfem::future::create_dtq_maps (field_operator_ts &fops, std::vector< const DofToQuad * > &dtqmaps, const std::array< size_t, num_fields > &to_field_map)
 Create DofToQuad maps for a given set of field operators.
 

Variables

template<class... T>
constexpr bool mfem::future::dfem::always_false = false