geodynamics / aspect

A parallel, extensible finite element code to simulate convection in both 2D and 3D models.
https://aspect.geodynamics.org/
Other
227 stars 237 forks source link

Issue with free surface, development version of ASPECT and deal.II 9.4.0/9.4.2 #5357

Open naliboff opened 1 year ago

naliboff commented 1 year ago

@sibiaoliu pointed out in the ASPECT forums (link) that the continental extension cookbook crashes when run with a recent version of ASPECT (version 2.6.0-pre (master, 69faf2563)) and deal.II 9.4.2.

The error is located at the bottom of the post, and I was able to reproduce it with deal.II 9.4.0. However, it does not appear in deal.II 9.5.0. Briefly, the error is related to deal.II not being able to access DoF indices on artificial cells.

Oddly, the error is not encountered at the same time step for the continental extension cookbook test case, which has a lower resolution.

My guess is the error was likely introduced sometime during the hackathon, but will investigate further.

For now, the solution is to use deal.II 9.5.0. I suspect the issue will affect most models with a free surface.

*** Timestep 1:  t=20000 years, dt=20000 years
   Solving mesh surface diffusion
   Solving mesh displacement system... 7 iterations.

--------------------------------------------------------
An error occurred in line <2721> of file </home/naliboff/software/dealii/v9.4.0/install/tmp/unpack/deal.II-v9.4.0/include/deal.II/dofs/dof_accessor.templates.h> in function
    void dealii::DoFCellAccessor<dim, spacedim, lda>::get_dof_values(const InputVector&, ForwardIterator, ForwardIterator) const [with InputVector = dealii::TrilinosWrappers::MPI::Vector; ForwardIterator = double*; int dimension_ = 2; int space_dimension_ = 2; bool level_dof_access = false]
The violated condition was: 
    this->is_artificial() == false
Additional information: 
    Can't ask for DoF indices on artificial cells.

Stacktrace:
-----------
#0  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: void dealii::DoFCellAccessor<2, 2, false>::get_dof_values<dealii::TrilinosWrappers::MPI::Vector, double*>(dealii::TrilinosWrappers::MPI::Vector const&, double*, double*) const
#1  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: void dealii::DoFCellAccessor<2, 2, false>::get_dof_values<dealii::TrilinosWrappers::MPI::Vector, double>(dealii::TrilinosWrappers::MPI::Vector const&, dealii::Vector<double>&) const
#2  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: dealii::MappingQ1Eulerian<2, dealii::TrilinosWrappers::MPI::Vector, 2>::get_vertices(dealii::TriaIterator<dealii::CellAccessor<2, 2> > const&) const
#3  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: dealii::MappingQ1Eulerian<2, dealii::TrilinosWrappers::MPI::Vector, 2>::compute_mapping_support_points(dealii::TriaIterator<dealii::CellAccessor<2, 2> > const&) const
#4  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: dealii::MappingQ<2, 2>::get_bounding_box(dealii::TriaIterator<dealii::CellAccessor<2, 2> > const&) const
#5  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: dealii::GridTools::Cache<2, 2>::get_cell_bounding_boxes_rtree() const
#6  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: std::tuple<std::vector<dealii::Triangulation<2, 2>::active_cell_iterator, std::allocator<dealii::Triangulation<2, 2>::active_cell_iterator> >, std::vector<std::vector<dealii::Point<2, double>, std::allocator<dealii::Point<2, double> > >, std::allocator<std::vector<dealii::Point<2, double>, std::allocator<dealii::Point<2, double> > > > >, std::vector<std::vector<unsigned int, std::allocator<unsigned int> >, std::allocator<std::vector<unsigned int, std::allocator<unsigned int> > > >, std::vector<unsigned int, std::allocator<unsigned int> > > dealii::GridTools::compute_point_locations_try_all<2, 2>(dealii::GridTools::Cache<2, 2> const&, std::vector<dealii::Point<2, double>, std::allocator<dealii::Point<2, double> > > const&, dealii::Triangulation<2, 2>::active_cell_iterator const&)
#7  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: dealii::Functions::FEFieldFunction<2, dealii::TrilinosWrappers::MPI::BlockVector, 2>::compute_point_locations(std::vector<dealii::Point<2, double>, std::allocator<dealii::Point<2, double> > > const&, std::vector<dealii::TriaActiveIterator<dealii::DoFCellAccessor<2, 2, false> >, std::allocator<dealii::TriaActiveIterator<dealii::DoFCellAccessor<2, 2, false> > > >&, std::vector<std::vector<dealii::Point<2, double>, std::allocator<dealii::Point<2, double> > >, std::allocator<std::vector<dealii::Point<2, double>, std::allocator<dealii::Point<2, double> > > > >&, std::vector<std::vector<unsigned int, std::allocator<unsigned int> >, std::allocator<std::vector<unsigned int, std::allocator<unsigned int> > > >&) const
#8  /home/naliboff/software/dealii/v9.4.0/install/deal.II-v9.4.0/lib/libdeal_II.g.so.9.4.0: dealii::Functions::FEFieldFunction<2, dealii::TrilinosWrappers::MPI::BlockVector, 2>::vector_value_list(std::vector<dealii::Point<2, double>, std::allocator<dealii::Point<2, double> > > const&, std::vector<dealii::Vector<do
--------------------------------------------------------
An error occurred in line <2721> of file </home/naliboff/software/dealii/v9.4.0/install/tmp/unpack/deal.II-v9.4.0/include/deal.II/dofs/dof_accessor.templates.h> in function
    void dealii::DoFCellAccessor<dim, spacedim, lda>::get_dof_values(const InputVector&, ForwardIterator, ForwardIterator) const [with InputVector = dealii::TrilinosWrappers::MPI::Vector; ForwardIterator = double*; int dimension_ = 2; int space_dimension_ = 2; bool level_dof_access = false]
The violated condition was: 
    this->is_artificial() == false
Additional information: 
    Can't ask for DoF indices on artificial cells.
tjhei commented 1 year ago

Can you run inside gdb and give the output of backtrace? That should give us a more accurate call stack.