From a84f1db6e8c5b85e6478d0bdad59a9fd43dfc56c Mon Sep 17 00:00:00 2001 From: oliver Date: Fri, 3 Jun 2005 15:02:14 +0000 Subject: [PATCH] Implemented support for vector valued FEs in some methods for constructing RHS vectors and matrices. git-svn-id: https://svn.dealii.org/trunk@10831 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/source/numerics/matrices.cc | 131 +++++++++++++++----- deal.II/deal.II/source/numerics/vectors.cc | 117 ++++++++++++----- 2 files changed, 183 insertions(+), 65 deletions(-) diff --git a/deal.II/deal.II/source/numerics/matrices.cc b/deal.II/deal.II/source/numerics/matrices.cc index 2e5bba699b..5660fb286a 100644 --- a/deal.II/deal.II/source/numerics/matrices.cc +++ b/deal.II/deal.II/source/numerics/matrices.cc @@ -144,6 +144,7 @@ void MatrixCreator::create_mass_matrix_1 (const Mapping &mapping, { if (coefficient->n_components==1) { + // Version for variable coefficient with 1 component coefficient->value_list (fe_values.get_quadrature_points(), coefficient_values); for (unsigned int point=0; point &mapping, { coefficient->vector_value_list (fe_values.get_quadrature_points(), coefficient_vector_values); + if (fe.is_primitive ()) + { + // Version for variable coefficient with multiple components + for (unsigned int point=0; point &mapping, { std::vector > rhs_values(n_q_points, Vector(n_components)); - for (; cell!=endc; ++cell) + // Use the faster code if the FiniteElement is primitive + if (fe.is_primitive ()) { - fe_values.reinit(cell); - - const std::vector &weights = fe_values.get_JxW_values (); - rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values); - - cell_vector = 0; - for (unsigned int point=0; pointget_dof_indices (dofs); - - for (unsigned int i=0; i &weights = fe_values.get_JxW_values (); + rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values); + + cell_vector = 0; + for (unsigned int point=0; pointget_dof_indices (dofs); + + for (unsigned int i=0; i &weights = fe_values.get_JxW_values (); + rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values); + + cell_vector = 0; + for (unsigned int point=0; pointget_dof_indices (dofs); + + for (unsigned int i=0; i &mapping, boundary_indicators.end())) { fe_values.reinit(cell, face); - + const std::vector &weights = fe_values.get_JxW_values (); rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values); - + cell_vector = 0; - for (unsigned int point=0; pointget_dof_indices (dofs); for (unsigned int i=0; i