From: oliver Date: Fri, 3 Jun 2005 15:02:14 +0000 (+0000) Subject: Implemented support for vector valued FEs in some methods for X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a84f1db6e8c5b85e6478d0bdad59a9fd43dfc56c;p=dealii-svn.git 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 --- 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