Source code for fenicsR13.geoToH5

#!/usr/bin/env python3

# pylint: disable=invalid-name

"""
Converter from geo-format to a mesh in h5-format.

Installation:

.. code-block:: bash

    pip install .

Usage:

.. code-block:: bash

    Usage: python3 <path_to_geoToH5.py> <geo_file> <h5_file> \
            [<gmsh cli arguments>]
    E.g.: geoToH5 lid.geo lid5.h5 "-setnumber p 5"
"""

import os
import sys
import dolfin as df
from datetime import datetime
import random

# Constants
GMSH_PATH = "gmsh"
GEO_NAME = "ring"


[docs]def geo_to_h5(): "Convert given geo-file to a h5-mesh." # Check if right arguments passed, print usage if not if not 3 <= len(sys.argv) <= 4: print(""" Usage: python3 <path_to_geoToH5.py> <geo_file> <h5_file> [<gmsh cli arguments>] E.g.: geoToH5 lid.geo lid5.h5 "-setnumber p 5" """) return geo_input_file = sys.argv[1] h5_output_file = sys.argv[2] gmsh_arguments = sys.argv[3] if len(sys.argv) == 4 else "" tmp_name = "tmp_" + str(datetime.now().time()) + str(random.random()) # Create msh-mesh with Gmsh os.system( "{} {} -2 -o {}.msh {}".format( GMSH_PATH, gmsh_arguments, tmp_name, geo_input_file ) ) # Convert msh-mesh to xml-mesh os.system("dolfin-convert {0}.msh {0}.xml".format(tmp_name)) # Delete msh-mesh os.remove("{}.msh".format(tmp_name)) # Read xml-mesh mesh = df.Mesh("{}.xml".format(tmp_name)) subdomains = df.MeshFunction( "size_t", mesh, "{}_physical_region.xml".format(tmp_name)) boundaries = df.MeshFunction( "size_t", mesh, "{}_facet_region.xml".format(tmp_name)) # Delete xml-mesh os.remove("{}.xml".format(tmp_name)) os.remove("{}_physical_region.xml".format(tmp_name)) os.remove("{}_facet_region.xml".format(tmp_name)) # Write h5-mesh file = df.HDF5File(mesh.mpi_comm(), h5_output_file, "w") file.write(mesh, "/mesh") file.write(subdomains, "/subdomains") file.write(boundaries, "/boundaries")