From: Denis Davydov <davydden@gmail.com> Date: Tue, 19 May 2015 05:31:36 +0000 (+0200) Subject: exploit symmetries in Local integrators of mass and laplace matrices X-Git-Tag: v8.3.0-rc1~160^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=873b93c8723ba85fc8a9d5d32bdcf9a22fb5c342;p=dealii.git exploit symmetries in Local integrators of mass and laplace matrices --- diff --git a/include/deal.II/integrators/l2.h b/include/deal.II/integrators/l2.h index 1b54ef493b..24320a8004 100644 --- a/include/deal.II/integrators/l2.h +++ b/include/deal.II/integrators/l2.h @@ -63,12 +63,17 @@ namespace LocalIntegrators const double dx = fe.JxW(k) * factor; for (unsigned int i=0; i<n_dofs; ++i) - for (unsigned int j=0; j<n_dofs; ++j) + for (unsigned int j=i; j<n_dofs; ++j) for (unsigned int d=0; d<n_components; ++d) M(i,j) += dx * fe.shape_value_component(j,k,d) * fe.shape_value_component(i,k,d); } + + // exploit symmetry + for (unsigned int i=0; i<n_dofs; ++i) + for (unsigned int j=i+1; j<n_dofs; ++j) + M(j,i) = M(i,j); } /** @@ -103,12 +108,17 @@ namespace LocalIntegrators const double dx = fe.JxW(k) * weights[k]; for (unsigned int i=0; i<n_dofs; ++i) - for (unsigned int j=0; j<n_dofs; ++j) + for (unsigned int j=i; j<n_dofs; ++j) for (unsigned int d=0; d<n_components; ++d) M(i,j) += dx * fe.shape_value_component(j,k,d) * fe.shape_value_component(i,k,d); } + + //exploit symmetry + for (unsigned int i=0; i<n_dofs; ++i) + for (unsigned int j=i+1; j<n_dofs; ++j) + M(j,i) = M(i,j); } /** diff --git a/include/deal.II/integrators/laplace.h b/include/deal.II/integrators/laplace.h index ec2878d7d8..e84b384001 100644 --- a/include/deal.II/integrators/laplace.h +++ b/include/deal.II/integrators/laplace.h @@ -62,12 +62,18 @@ namespace LocalIntegrators const double dx = fe.JxW(k) * factor; for (unsigned int i=0; i<n_dofs; ++i) { - for (unsigned int j=0; j<n_dofs; ++j) + for (unsigned int j=i; j<n_dofs; ++j) for (unsigned int d=0; d<n_components; ++d) M(i,j) += dx * (fe.shape_grad_component(j,k,d) * fe.shape_grad_component(i,k,d)); } } + + // exploit symmetry + for (unsigned int i=0; i<n_dofs; ++i) + for (unsigned int j=i+1; j<n_dofs; ++j) + M(j,i) = M(i,j); + } /**