dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #19876
Re: [andy.terrel+launchpad@xxxxxxxxx: [Merge] lp:~andy-terrel/dolfin/dev into lp:dolfin]
I didn't have a good idea on this. Triangle has too many files that
are possible (.poly, .ele, .node, .area). I thought it would be
easier with just taking a prefix.
-- Andy
On Fri, Oct 8, 2010 at 5:03 PM, Anders Logg <logg@xxxxxxxxx> wrote:
> Should there also be a check for choosing the Triangle format based on
> file suffix (in meshconvert.py)?
>
> --
> Anders
>
>
> ---------- Forwarded message ----------
> From: Andy R Terrel <andy.terrel+launchpad@xxxxxxxxx>
> To: mp+38023@xxxxxxxxxxxxxxxxxx
> Date: Fri, 08 Oct 2010 21:20:00 -0000
> Subject: [Merge] lp:~andy-terrel/dolfin/dev into lp:dolfin
> Andy R Terrel has proposed merging lp:~andy-terrel/dolfin/dev into lp:dolfin.
>
> Requested reviews:
> DOLFIN Core Team (dolfin-core)
>
>
> The branch adds support for the Triangle mesh format for dolfin-convert.
> --
> https://code.launchpad.net/~andy-terrel/dolfin/dev/+merge/38023
> You are subscribed to branch lp:dolfin.
>
> === modified file 'site-packages/dolfin/mesh/meshconvert.py'
> --- site-packages/dolfin/mesh/meshconvert.py 2010-02-15 20:15:15 +0000
> +++ site-packages/dolfin/mesh/meshconvert.py 2010-10-08 21:19:59 +0000
> @@ -4,7 +4,7 @@
> # Modified by Garth N. Wells (gmsh function)
> # Modified by Alexander H. Jarosch (gmsh fix)
> # Modified by Angelo Simone (Gmsh and Medit fix)
> -# Modified by Andy R. Terrel (gmsh fix)
> +# Modified by Andy R. Terrel (gmsh fix and triangle function)
> # Modified by Magnus Vikstrom (metis and scotch function)
> # Modified by Bartosz Sawicki (diffpack function)
> # Modified by Gideon Simpson (Exodus II function)
> @@ -408,6 +408,64 @@
> ifile.close()
> ofile.close()
>
> +def triangle2xml(ifilename, ofilename):
> + """Convert between triangle format (http://www.cs.cmu.edu/~quake/triangle.html) and .xml. The
> + given ifilename should be the prefix for the corresponding .node, and .ele files.
> + """
> +
> + def get_next_line (fp):
> + """Helper function for skipping comments and blank lines"""
> + line = fp.readline()
> + if line == '':
> + _error("Hit end of file prematurely.")
> + line = line.strip()
> + if not (line.startswith('#') or line == ''):
> + return line
> + return get_next_line(fp)
> +
> +
> + print "Converting from Triangle format {.node, .ele} to DOLFIN XML format"
> +
> + # Open files
> + node_file = open(ifilename+".node", "r")
> + ele_file = open(ifilename+".ele", "r")
> + ofile = open(ofilename, "w")
> +
> + # Read all the nodes
> + nodes = {}
> + num_nodes, dim, attr, bound = map(int, get_next_line(node_file).split())
> + while len(nodes) < num_nodes:
> + node, x, y = get_next_line(node_file).split()[:3]
> + nodes[int(node)] = (float(x), float(y))
> +
> + # Read all the triangles
> + tris = {}
> + num_tris, n_per_tri, attrs = map(int, get_next_line(ele_file).split())
> + while len(tris) < num_tris:
> + tri, n1, n2, n3 = map(int, get_next_line(ele_file).split()[:4])
> + tris[tri] = (n1, n2, n3)
> +
> + # Write everything out
> + write_header_mesh(ofile, "triangle", 2)
> + write_header_vertices(ofile, num_nodes)
> + node_off = 0 if nodes.has_key(0) else -1
> + for node, node_t in nodes.iteritems():
> + write_vertex(ofile, node+node_off, node_t[0], node_t[1], 0.0)
> + write_footer_vertices(ofile)
> + write_header_cells(ofile, num_tris)
> + tri_off = 0 if tris.has_key(0) else -1
> + for tri, tri_t in tris.iteritems():
> + write_cell_triangle(ofile, tri+tri_off, tri_t[0] + node_off,
> + tri_t[1] + node_off, tri_t[2] + node_off)
> + write_footer_cells(ofile)
> + write_footer_mesh(ofile)
> +
> + # Close files
> + node_file.close()
> + ele_file.close()
> + ofile.close()
> +
> +
> def xml_old2xml(ifilename, ofilename):
> "Convert from old DOLFIN XML format to new."
>
> @@ -1212,6 +1270,9 @@
> elif iformat == "gmsh":
> # Convert from gmsh to xml format
> gmsh2xml(ifilename, ofilename)
> + elif iformat == "Triangle":
> + # Convert from Triangle to xml format
> + triangle2xml(ifilename, ofilename)
> elif iformat == "xml-old":
> # Convert from old to new xml format
> xml_old2xml(ifilename, ofilename)
>
> === modified file 'utils/convert/dolfin-convert'
> --- utils/convert/dolfin-convert 2010-08-24 20:35:25 +0000
> +++ utils/convert/dolfin-convert 2010-10-08 21:19:59 +0000
> @@ -6,7 +6,7 @@
> # Modified by Garth N. Wells (gmsh function)
> # Modified by Alexander H. Jarosch (gmsh fix)
> # Modified by Angelo Simone (Gmsh and Medit fix)
> -# Modified by Andy R. Terrel (gmsh fix)
> +# Modified by Andy R. Terrel (gmsh fix and triangle function)
> # Modified by Magnus Vikstrom (metis and scotch function)
> # Modified by Bartosz Sawicki (diffpack function)
> # Modified by Gideon Simpson (Exodus II function)
> @@ -88,6 +88,7 @@
> xml - DOLFIN XML mesh format (current)
> xml-old - DOLFIN XML mesh format (DOLFIN 0.6.2 and earlier)
> mesh - Medit, generated by tetgen with option -g
> + Triangle - Triangle file format (input prefix of .ele and .node files)
> gmsh - Gmsh, version 2.0 file format
> metis - Metis graph file format
> scotch - Scotch graph file format
>
> === added file 'utils/convert/test_Triangle.ele'
> --- utils/convert/test_Triangle.ele 1970-01-01 00:00:00 +0000
> +++ utils/convert/test_Triangle.ele 2010-10-08 21:19:59 +0000
> @@ -0,0 +1,31 @@
> +29 3 0
> + 1 29 2 1
> + 2 2 29 23
> + 3 25 24 23
> + 4 23 22 2
> + 5 25 23 29
> + 6 2 22 3
> + 7 3 21 4
> + 8 21 3 22
> + 9 4 21 20
> + 10 5 4 26
> + 11 19 26 4
> + 12 26 19 18
> + 13 19 4 20
> + 14 5 26 28
> + 15 12 14 13
> + 16 14 12 11
> + 17 11 10 9
> + 18 8 14 9
> + 19 8 15 14
> + 20 9 14 11
> + 21 6 27 7
> + 22 26 18 27
> + 23 5 28 6
> + 24 27 18 7
> + 25 28 27 6
> + 26 15 7 16
> + 27 7 15 8
> + 28 17 7 18
> + 29 7 17 16
> +# Generated by triangle pq A.poly
>
> === added file 'utils/convert/test_Triangle.node'
> --- utils/convert/test_Triangle.node 1970-01-01 00:00:00 +0000
> +++ utils/convert/test_Triangle.node 2010-10-08 21:19:59 +0000
> @@ -0,0 +1,31 @@
> +29 2 1 1
> + 1 0.20000000000000001 -0.77639999999999998 -0.56999999999999995 1
> + 2 0.22 -0.7732 -0.55000000000000004 1
> + 3 0.24560000000000001 -0.75639999999999996 -0.51000000000000001 1
> + 4 0.27760000000000001 -0.70199999999999996 -0.53000000000000003 1
> + 5 0.48880000000000001 -0.20760000000000001 0.28000000000000003 1
> + 6 0.50480000000000003 -0.20760000000000001 0.29999999999999999 1
> + 7 0.74080000000000001 -0.73960000000000004 0 1
> + 8 0.75600000000000001 -0.76119999999999999 -0.01 1
> + 9 0.77439999999999998 -0.77239999999999998 0 1
> + 10 0.80000000000000004 -0.77639999999999998 0.02 1
> + 11 0.80000000000000004 -0.79239999999999999 0.01 1
> + 12 0.57920000000000005 -0.79239999999999999 -0.20999999999999999 1
> + 13 0.57920000000000005 -0.77639999999999998 -0.20000000000000001 1
> + 14 0.62160000000000004 -0.77159999999999995 -0.14999999999999999 1
> + 15 0.63360000000000005 -0.76280000000000003 -0.13 1
> + 16 0.63919999999999999 -0.74439999999999995 -0.10000000000000001 1
> + 17 0.62080000000000002 -0.68440000000000001 -0.059999999999999998 1
> + 18 0.58720000000000006 -0.60440000000000005 -0.01 1
> + 19 0.36080000000000001 -0.60440000000000005 -0.23999999999999999 1
> + 20 0.31919999999999998 -0.70679999999999998 -0.39000000000000001 1
> + 21 0.312 -0.73960000000000004 -0.42999999999999999 1
> + 22 0.31840000000000002 -0.76119999999999999 -0.44 1
> + 23 0.33439999999999998 -0.77159999999999995 -0.44 1
> + 24 0.37119999999999997 -0.77639999999999998 -0.40999999999999998 1
> + 25 0.37119999999999997 -0.79239999999999999 -0.41999999999999998 1
> + 26 0.37440000000000001 -0.56999999999999995 -0.20000000000000001 1
> + 27 0.57440000000000002 -0.56999999999999995 0 1
> + 28 0.47360000000000002 -0.33079999999999998 0.14000000000000001 1
> + 29 0.20000000000000001 -0.79239999999999999 -0.58999999999999997 1
> +# Generated by triangle pq A.poly
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help : https://help.launchpad.net/ListHelp
>
>
References