Hi,<br><br>I dug into Johannes' issue, and I can confirm that there is something strange here.<br>I used deal.II 7.2.0 and svn version (not the latest though) and gmsh 2.7.0 on Ubuntu 12.04.<br><br>For both versions (built in debug mode) the error was in function<br>    void dealii::internal::GridReordering2d::GridReordering::get_quads(std::vector<dealii::CellData<2> >&) const<br>The violated condition was: <br>    s[1] == s[3]<br>The name and call sequence of the exception was:<br>    ExcInternalError()<br>Additional Information: <br>(none)<br><br>Stacktrace:<br>-----------<br>#0  /home/artemiev/deal.II.dev.orig.new/lib/libdeal_II.g.so.8.0.pre: dealii::internal::GridReordering2d::GridReordering::get_quads(std::vector<dealii::CellData<2>, std::allocator<dealii::CellData<2> > >&) const<br>#1  /home/artemiev/deal.II.dev.orig.new/lib/libdeal_II.g.so.8.0.pre: dealii::internal::GridReordering2d::GridReordering::reorient(std::vector<dealii::CellData<2>, std::allocator<dealii::CellData<2> > >&)<br>#2  /home/artemiev/deal.II.dev.orig.new/lib/libdeal_II.g.so.8.0.pre: dealii::GridReordering<2, 2>::reorder_cells(std::vector<dealii::CellData<2>, std::allocator<dealii::CellData<2> > >&)<br>#3  /home/artemiev/deal.II.dev.orig.new/lib/libdeal_II.g.so.8.0.pre: dealii::GridIn<2, 2>::read_msh(std::istream&)<br>#4  ./proj: GridChecker::check_grid(std::string)<br>#5  ./proj: main<br>--------------------------------------------------------<br><br>@Johannes,<br>I got the same exception as you:<br>   The violated condition was: 
<br>      needed_lines.find(std::make_pair(line_vertices.second,
<br><div>      line_vertices.first)) == needed_lines.end()
</div>for 7.2.0 version built in release mode - did you also launch your program linking to the release version of deal.II ?<br><br>What is more interesting - for the case described in code:<br> 3---4---5
<br> |    |    |
<br> 0---1---2
<br>both versions works fine.<br>I checked it for the following .msh file:<br><br>$MeshFormat<br>2.0 0 8<br>$EndMeshFormat<br>$Nodes<br>6<br>1 0 0 0<br>2 1 0 0<br>3 2 0 0<br>4 0 1 0<br>5 1 1 0<br>6 2 1 0<br>$EndNodes<br>$Elements<br>2<br>1 3 2 0 1 1 2 5 4<br>2 3 2 0 2 5 2 3 6<br>$EndElements<br><br>Mikhail<br><br>On Wednesday, May 29, 2013 7:08:49 PM UTC+7, Johannes Reinhardt wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">Hello everyone,
<br>
<br>I encounter problems when trying to load 2D quad meshes generated by
<br>gmsh into a deal.ii based code. I could roughly find out, what the
<br>causes of the problems are, but I don't know whether it is a problem
<br>with gmsh, my use of it, or a problem in deal.ii code. Therefore I have
<br>sent this mail to the mailing lists of both gmsh and deal.ii. The rest
<br>of this rather lengthy mail explains my findings in detail.
<br>
<br>I need to calculate a certain quantity as a function of a change in the
<br>geometry. For this reason I want to generate a large number of meshes
<br>using gmsh, so I defined some functions in a common file, and then use
<br>a python script to generate many short .geo files that just include the
<br>common file and call the function with different parameters.
<br>
<br>The meshes are 2D quad meshes, because my calculation, that is based on 
<br>deal.ii, which can only deal with quad meshes. The meshes are
<br>relatively detailed already, because I do not use adaptive refinement
<br>and need a good approximation of the curved boundaries of the various
<br>surfaces.
<br>
<br>However when I try to load the resulting .msh files in my calculation
<br>(which uses deal.ii), some of the meshes fail to load. Of the
<br>294 meshes I generated, 39 fail.
<br>
<br>Of these 31 fail with the error message:
<br>
<br>The violated condition was: 
<br>n_negative_cells==0 || n_negative_cells==cells.size()
<br>
<br>and 8 fail with the error message:
<br>
<br>The violated condition was: 
<br>    needed_lines.find(std::make_<wbr>pair(line_vertices.second,
<br>    line_vertices.first)) == needed_lines.end()
<br>
<br>The first error seems to be connected to by a cell orientation
<br>issue that leads to a invalid cell:
<br><a href="http://www.dealii.org/7.3.0/doxygen/deal.II/classGridReordering.html#ae3a479aa86fabf1f761ab05eb1e42838" target="_blank">http://www.dealii.org/7.3.0/<wbr>doxygen/deal.II/<wbr>classGridReordering.html#<wbr>ae3a479aa86fabf1f761ab05eb1e42<wbr>838</a>
<br>
<br>The second seems to be due to a vertex ordering problem, I quote from
<br>deal.II/source/grid/tria.cc around line 1640, where the error is thrown:
<br>
<br>// assert that the line was
<br>// not already inserted in
<br>// reverse order. This
<br>// happens in spite of the
<br>// vertex rotation above,
<br>// if the sense of the cell
<br>// was incorrect.
<br>//
<br>// Here is what usually
<br>// happened when this
<br>// exception is thrown:
<br>// consider these two cells
<br>// and the vertices
<br>//  3---4---5
<br>//  |   |   |
<br>//  0---1---2
<br>// If in the input vector
<br>// the two cells are given
<br>// with vertices <0 1 4 3>
<br>// and <4 1 2 5>, in the
<br>// first cell the middle
<br>// line would have
<br>// direction 1->4, while in
<br>// the second it would be
<br>// 4->1.  This will cause
<br>// the exception.
<br>
<br>The first error seems to be rather common, when looking it up, I found
<br>a tool to postprocess .msh files to resolve it:
<br><a href="https://code.google.com/p/tethex/" target="_blank">https://code.google.com/p/<wbr>tethex/</a>
<br>
<br>When using this tool with my meshes, the first error is indeed avoided,
<br>and of my 294 meshes, but now 9 meshes fail with the second error, so
<br>for one file the first error masked the second one.
<br>
<br>I use deal.ii 7.3 and the Linux 64 bit release of gmsh 2.7.1 on Xubuntu
<br>13.04 64bit.
<br>
<br>I have attached some files from my investigations:
<br>
<br>common_params.geo contains functions that are used to build the
<br>geometry and common parameters.
<br>generate_geo.py is used to generate individual .geos that include
<br>common_params
<br>make_meshes.sh is a shell script that sets up directories, runs the
<br>python scripts, runs gmsh and runs tethex
<br>mass_grid.cc is a small snippet that uses the deal.ii grid classes to
<br>load meshes and logs what is going wrong
<br>failure.log is a log about which .msh files can not be loaded with and
<br>without using tethex and why.
<br>
<br>I uploaded a selection of the msh files that should cover all the cases
<br>here (~3MB):
<br>
<br><a href="http://ist-dein-freund.de/geometries.tar.gz" target="_blank">http://ist-dein-freund.de/<wbr>geometries.tar.gz</a>
<br>
<br>Thank you for your efforts in advance
<br>
<br>Johannes
<br></blockquote>