From: Wolfgang Bangerth Date: Mon, 9 Mar 1998 18:31:41 +0000 (+0000) Subject: . X-Git-Tag: v8.0.0~23201 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f1761037e135c5636cb895ca97a90dcaeb92ff4;p=dealii.git . git-svn-id: https://svn.dealii.org/trunk@50 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/source/dofs/dof_constraints.cc b/deal.II/deal.II/source/dofs/dof_constraints.cc index 79f8aa327d..115730e9d4 100644 --- a/deal.II/deal.II/source/dofs/dof_constraints.cc +++ b/deal.II/deal.II/source/dofs/dof_constraints.cc @@ -233,8 +233,7 @@ void ConstraintMatrix::condense (dSMatrixStruct &sparsity) const { sparsity.compress(); }; - - + unsigned int ConstraintMatrix::n_constraints () const { diff --git a/deal.II/deal.II/source/numerics/assembler.cc b/deal.II/deal.II/source/numerics/assembler.cc index 3eb6d20d89..1a1da666a9 100644 --- a/deal.II/deal.II/source/numerics/assembler.cc +++ b/deal.II/deal.II/source/numerics/assembler.cc @@ -67,6 +67,20 @@ void Equation<2>::assemble (vector &, +/* +template +Assembler::AssemblerData::AssemblerData (DoFHandler *dof, + const bool assemble_matrix, + const bool assemble_rhs, + const unsigned int n_rhs, + ProblemBase *problem, + const Quadrature *quadrature) : + dof(dof), assemble_matrix(assemble_matrix), + assemble_rhs(assemble_rhs), n_rhs(n_rhs), + problem(problem), quadrature(quadrature) {}; + */ + + template Assembler::Assembler (Triangulation *tria, diff --git a/deal.II/deal.II/source/numerics/base.cc b/deal.II/deal.II/source/numerics/base.cc index 99e86bce36..a250604a3a 100644 --- a/deal.II/deal.II/source/numerics/base.cc +++ b/deal.II/deal.II/source/numerics/base.cc @@ -2,13 +2,33 @@ #include #include +#include +#include + + +extern TriaActiveIterator<1,CellAccessor<1> > __dummy1233; // for gcc2.8 +extern TriaActiveIterator<2,CellAccessor<2> > __dummy1234; template ProblemBase::ProblemBase (Triangulation *tria, - DoFHandler *dof) : - tria(tria), dof_handler(dof) {}; + DoFHandler *dof, + const unsigned int n_rhs) : + tria(tria), + dof_handler(dof), + system_sparsity(1,1,1), // dummy initialisation, is later reinit'd + system_matrix(system_sparsity),// dummy initialisation, is later reinit'd + right_hand_sides (n_rhs, (dVector*)0) +{ + Assert (tria == &dof->get_tria(), ExcDofAndTriaDontMatch()); + + for (unsigned int i=0; i::ProblemBase (Triangulation *tria, template void ProblemBase::assemble (const Equation &equation, const Quadrature &quadrature) { - ConstraintMatrix constraints; - system_sparsity.reinit (dof_handler->n_dofs(), dof_handler->n_dofs(), - dof_handler->max_coupling_between_dofs()); + dof_handler->max_couplings_between_dofs()); + solution.reinit (dof_handler->n_dofs()); + for (unsigned int i=0; ireinit (dof_handler->n_dofs()); + + // make up sparsity pattern and + // compress with constraints + ConstraintMatrix constraints; dof_handler->make_constraint_matrix (constraints); dof_handler->make_sparsity_pattern (system_sparsity); constraints.condense (system_sparsity); + // reinite system matrix system_matrix.reinit (system_sparsity); - Assembler::AssemblerData data = {dof_handler, - true, true, - 1, - this, - &quadrature}; - - TriaActiveIterator > assembler (tria, - tria->begin_active()->level(), - tria->begin_active()->index(), - &data); + // create assembler + Assembler::AssemblerData data (dof_handler, + true, true, //assemble matrix and rhs + right_hand_sides.size(), //one rhs + this, + &quadrature); + TriaActiveIterator > assembler (tria, + tria->begin_active()->level(), + tria->begin_active()->index(), + &data); + // loop over all cells, fill matrix and rhs do { assembler->assemble (equation); } while ((++assembler).state() == valid); + + // condense system matrix in-place + constraints.condense (system_matrix); }; + + + + + + +// explicit instantiations +template class ProblemBase<1>; +template class ProblemBase<2>;