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