17 #ifndef dealii_cuda_matrix_free_h 18 #define dealii_cuda_matrix_free_h 20 #include <deal.II/base/config.h> 22 #ifdef DEAL_II_WITH_CUDA 24 # include <deal.II/base/quadrature.h> 25 # include <deal.II/base/tensor.h> 27 # include <deal.II/dofs/dof_handler.h> 29 # include <deal.II/fe/fe_update_flags.h> 30 # include <deal.II/fe/mapping.h> 31 # include <deal.II/fe/mapping_q1.h> 33 # include <deal.II/lac/affine_constraints.h> 34 # include <deal.II/lac/cuda_vector.h> 36 # include <cuda_runtime_api.h> 39 DEAL_II_NAMESPACE_OPEN
46 template <
int dim,
typename Number>
76 template <
int dim,
typename Number =
double>
85 template <
typename Number2>
105 : parallelization_scheme(parallelization_scheme)
106 , mapping_update_flags(mapping_update_flags)
112 unsigned int n_colors;
137 unsigned int *local_to_global;
138 Number * inv_jacobian;
140 unsigned int n_cells;
141 unsigned int padding_length;
142 unsigned int row_start;
143 unsigned int *constraint_mask;
152 get_padding_length()
const;
167 const AdditionalData additional_data = AdditionalData());
176 const AdditionalData AdditionalData = AdditionalData());
182 get_data(
unsigned int color)
const;
188 template <
typename functor>
190 cell_loop(
const functor & func,
211 memory_consumption()
const;
262 std::vector<Number *>
JxW;
265 unsigned int * constrained_dofs;
266 std::vector<unsigned int *> constraint_mask;
279 unsigned int cells_per_block;
280 dim3 constraint_grid_dim;
281 dim3 constraint_block_dim;
283 unsigned int padding_length;
284 std::vector<unsigned int> row_start;
286 friend class internal::ReinitHelper<dim, Number>;
293 template <
int dim,
typename Number>
297 SharedData(Number *vd, Number *gq[dim])
300 for (
int d = 0; d < dim; ++d)
301 gradients[d] = gq[d];
305 Number *gradients[dim];
313 __host__ __device__ constexpr
unsigned int 314 cells_per_block_shmem(
int dim,
int fe_degree)
317 return dim==2 ? (fe_degree==1 ? 32 :
322 dim==3 ? (fe_degree==1 ? 8 :
329 DEAL_II_NAMESPACE_CLOSE
Transformed quadrature weights.
ParallelizationScheme parallelization_scheme
std::vector< unsigned int * > local_to_global
unsigned int q_points_per_cell
std::vector< point_type * > q_points
unsigned int dofs_per_cell
std::vector< Number * > inv_jacobian
std::vector< dim3 > block_dim
std::vector< dim3 > grid_dim
Shape function gradients.
std::vector< Number * > JxW
std::vector< unsigned int > n_cells
unsigned int n_constrained_dofs