Hello,

I'm having trouble with loading grid using GridIn. It seems that
having FESystem with 2 components breaks
something. When I changed FESystem to have 1 component, then
distribute_dofs() didn't crash.

Relevant parts of code:

template <int dim>
class Problem
{
public:
 Problem();
 ~Problem();
 void run();

private:
 void generate_grid();
 void setup_system();
 void assemble_system();
 void solve();
 void output();

 Triangulation<dim> tri;
 DoFHandler<dim> dof;
 FESystem<dim> fe;
 SparsityPattern sparsity_pattern;
 SparseMatrix<double> system_matrix;
 Vector<double> solution;
 Vector<double> rhs;
};

template <int dim>
Problem<dim>::Problem():
 tri(),
 dof(tri),
 fe(FE_Q<dim>(1), 2)
{
}

template <int dim>
void Problem<dim>::generate_grid()
{
 {
   Triangulation<dim> t;
   GridGenerator::hyper_cube(t);
   GridOut go;
   std::ofstream of("mesh.msh");
   go.write_msh(t, of);
 }

 {
   GridIn<dim> gin;
   std::ifstream input("mesh.msh");

   gin.attach_triangulation(tri);
   gin.read_msh(input);
 }
 std::cout << "Cells: " << tri.n_active_cells() << "/" <<
tri.n_cells() << std::endl;
}

template <int dim>
void Problem<dim>::setup_system()
{
 dof.distribute_dofs(fe);
 std::cout << "DOF: " << dof.n_dofs() << std::endl;

 CompressedSparsityPattern c_sparsity(dof.n_dofs());
 DoFTools::make_sparsity_pattern(dof, c_sparsity);
 sparsity_pattern.copy_from(c_sparsity);

 system_matrix.reinit(sparsity_pattern);

 solution.reinit(dof.n_dofs());
 rhs.reinit(dof.n_dofs());
}

template <int dim>
void Problem<dim>::run()
{
 generate_grid();
 setup_system();
 assemble_system();
 solve();
 output();
}

int main()
{
 Problem<2> p;
 p.run();

 return 0;
}


Error:

An error occurred in line <103> of file
</home/taavi/opt/fem/dealii/deal.II/source/base/subscriptor.cc>
in function
   virtual dealii::Subscriptor::~Subscriptor()
The violated condition was:
   counter == 0
The name and call sequence of the exception was:
   ExcInUse (counter, object_info->name(), infostring)
Additional Information:
Object of class N6dealii4FE_QILi2ELi2EEE is still used by 1 other objects.
 from Subscriber N6dealii8FESystemILi2ELi2EEE

Stacktrace:
-----------
#0  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
dealii::Subscriptor::~Subscriptor()
#1  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
dealii::FiniteElement<2, 2>::~FiniteElement()
#2  ./main: dealii::FE_Poly<dealii::TensorProductPolynomials<2>, 2,
2>::~FE_Poly()
#3  ./main: dealii::FE_Q<2, 2>::~FE_Q()
#4  ./main: dealii::FE_Q<2, 2>::~FE_Q()
#5  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
dealii::FESystem<2, 2>::~FESystem()
#6  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
dealii::FESystem<2, 2>::~FESystem()
#7  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0: void
boost::checked_delete<dealii::FiniteElement<2, 2>
>(dealii::FiniteElement<2, 2>*)

...

#17  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
dealii::hp::FECollection<2, 2>::~FECollection()
#18  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
void dealii::DoFTools::internal::extract_dofs_by_component<dealii::DoFHandler<2,
2> >(dealii::DoFHandler<2, 2> const&, std::vector<bool,
std::allocator<bool> > const&, bool, std::vector<unsigned char,
std::allocator<unsigned char> >&)
#19  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
void dealii::DoFTools::count_dofs_per_block<2,
2>(dealii::DoFHandler<2, 2> const&, std::vector<unsigned int,
std::allocator<unsigned int> >&, std::vector<unsigned int,
std::allocator<unsigned int> >)
#20  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
void dealii::BlockInfo::initialize<2, 2>(dealii::DoFHandler<2, 2>
const&)
#21  /home/taavi/opt/fem/dealii/deal.II/lib/libdeal_II.g.so.7.1.0:
dealii::DoFHandler<2,2>::distribute_dofs(dealii::FiniteElement<2, 2>
const&, unsigned int)


--
Taavi Repän
_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii

Reply via email to