Script to import .unv mesh from Salome platform

Here is a contribution from Luyang Han.

Hello all,

This is an ad-hoc script to import the .unv mesh file exported from Salome platform (http://www.salome-platform.org/). The solid modeling and mesh generation in Salome is much more powerful and easier to use compared to gmsh.
Salome can only export unv file with just one region, thus all simplices are set to region 1.

To use the script do:

chmod +x importunv.py
./importunv.py infile.unv outfile.nmesh.h5

The script need to setup nmag path in the env.

Regards.

#!/usr/bin/env nsim

import sys

import nmesh

def loadmesh(filename):
  vertices = []
  simplex = []
  with open(filename) as fname:
      #skip the first two lines
      fname.readline()
      fname.readline()
      # start to read the vertices
      input_a = fname.readline()
      input_b = fname.readline()
      while input_a.strip() <> '-1' :
          coord = map(float,input_b.strip().split())
          vertices.append(coord)
          input_a = fname.readline()
          input_b = fname.readline()
      # finish the vertices part.
      # ignore one line here
      fname.readline()
      # read lines till we reach the simplex region
      input_a = fname.readline()
      while True:
          if len(input_a.strip().split()) == 6 and input_a.strip().split()[-1] == '4':
              break
          else:
              input_a = fname.readline()
      # now we reached the first line of the simplex region
      #input_b = fname.readline()
      #simp = map(int,input_b.strip().split())
      #simplex.append(simp)
      #input_a = fname.readline()
      while input_a.strip() <> '-1' :
          input_b = fname.readline()
          simp = map(int,input_b.strip().split())
          simplex.append(simp)
          input_a = fname.readline()

  # finish the reading
  return vertices, simplex

#main program
mesh = None

infile = sys.argv[1]
outfile = sys.argv[2]

points,simplices_indices = loadmesh(infile)

simplices_regions = [1] * len(simplices_indices)

mesh = nmesh.mesh_from_points_and_simplices(points=points, simplices_indices=simplices_indices, simplices_regions=simplices_regions, periodic_point_indices=[], initial=1, do_reorder=True)

mesh.save(outfile)

Also available in: HTML TXT