From 7570bc8992bd0963d0cb31a036e399f37f6d838f Mon Sep 17 00:00:00 2001 From: Bruno Turcksin Date: Sat, 19 Aug 2017 18:45:12 -0400 Subject: [PATCH] Fix a bug in CUDA matix-free when there is no constraint --- .../cuda_matrix_free.templates.cuh | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/include/deal.II/matrix_free/cuda_matrix_free.templates.cuh b/include/deal.II/matrix_free/cuda_matrix_free.templates.cuh index e954a2d4c5..56e1cc9470 100644 --- a/include/deal.II/matrix_free/cuda_matrix_free.templates.cuh +++ b/include/deal.II/matrix_free/cuda_matrix_free.templates.cuh @@ -519,36 +519,40 @@ namespace CUDAWrappers // Constrained indices n_constrained_dofs = constraints.n_constraints(); - const unsigned int constraint_n_blocks = std::ceil(static_cast(n_constrained_dofs) / - static_cast(BLOCK_SIZE)); - const unsigned int constraint_x_n_blocks = std::round(std::sqrt(constraint_n_blocks)); - const unsigned int constraint_y_n_blocks = std::ceil(static_cast(constraint_n_blocks) / - static_cast(constraint_x_n_blocks)); + if (n_constrained_dofs != 0) + { - constraint_grid_dim = dim3(constraint_x_n_blocks, constraint_y_n_blocks); - constraint_block_dim = dim3(BLOCK_SIZE); + const unsigned int constraint_n_blocks = std::ceil(static_cast(n_constrained_dofs) / + static_cast(BLOCK_SIZE)); + const unsigned int constraint_x_n_blocks = std::round(std::sqrt(constraint_n_blocks)); + const unsigned int constraint_y_n_blocks = std::ceil(static_cast(constraint_n_blocks) / + static_cast(constraint_x_n_blocks)); - std::vector constrained_dofs_host(n_constrained_dofs); + constraint_grid_dim = dim3(constraint_x_n_blocks, constraint_y_n_blocks); + constraint_block_dim = dim3(BLOCK_SIZE); - unsigned int i_constraint = 0; - const unsigned int n_dofs = dof_handler.n_dofs(); - for (unsigned int i=0; i constrained_dofs_host(n_constrained_dofs); + + unsigned int i_constraint = 0; + const unsigned int n_dofs = dof_handler.n_dofs(); + for (unsigned int i=0; i