From: Bruno Turcksin Date: Sat, 19 Aug 2017 22:45:12 +0000 (-0400) Subject: Fix a bug in CUDA matix-free when there is no constraint X-Git-Tag: v9.0.0-rc1~1206^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F4910%2Fhead;p=dealii.git Fix a bug in CUDA matix-free when there is no constraint --- 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