/usr/lib/python-escript-mpi/esys/escriptcore/gmshrunner.py is in python-escript-mpi 5.1-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | # -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2003-2017 by The University of Queensland
# http://www.uq.edu.au
#
# Primary Business: Queensland, Australia
# Licensed under the Apache License, version 2.0
# http://www.apache.org/licenses/LICENSE-2.0
#
# Development until 2012 by Earth Systems Science Computational Center (ESSCC)
# Development 2012-2013 by School of Earth Sciences
# Development from 2014 by Centre for Geoscience Computing (GeoComp)
#
##############################################################################
from __future__ import print_function, division
__copyright__="""Copyright (c) 2003-2017 by The University of Queensland
http://www.uq.edu.au
Primary Business: Queensland, Australia"""
__license__="""Licensed under the Apache License, version 2.0
http://www.apache.org/licenses/LICENSE-2.0"""
__url__="https://launchpad.net/escript-finley"
"""
interface to gmsh
"""
__all__ = ['gmshGeo2Msh']
from .util import getMPIRankWorld, getMPIWorldMax
from .escriptcpp import hasFeature
try:
import gmshpy
HAVE_GMSHPY=True
except ImportError:
HAVE_GMSHPY=False
HAVE_GMSH = hasFeature("gmsh")
GMSH_MPI = HAVE_GMSH and hasFeature("gmsh_mpi")
def _runGmshPy(geoFile, mshFile, numDim, order, verbosity):
if getMPIRankWorld() == 0:
gmshpy.Msg_SetVerbosity(verbosity)
gmshpy.GModel_readGEO(geoFile)
model=gmshpy.GModel_current()
linear=False
incomplete=False
model.setOrderN(order, linear, incomplete)
model.mesh(numDim)
ret = model.writeMSH(mshFile)==0 # 0 indicates error for gmshpy
gmshpy.GmshClearProject()
else:
ret = 0
ret = getMPIWorldMax(ret)
return ret
def _runGmshSerial(geoFile, mshFile, numDim, order, verbosity):
if getMPIRankWorld() == 0:
import shlex, subprocess
cmdline = "gmsh -format msh -%s -order %s -o '%s' '%s'"%(numDim, order, mshFile, geoFile)
args = shlex.split(cmdline)
try:
ret = subprocess.call(args)
except Exception as e:
ret = 1
else:
ret = 0
ret=getMPIWorldMax(ret)
return ret
def _runGmshMPI(geoFile, mshFile, numDim, order, verbosity):
import shlex
from .escriptcpp import runMPIProgram
from time import sleep
cmdline = "gmsh -format msh -%s -order %s -v %s -o '%s' '%s'"%(numDim, order, verbosity, mshFile, geoFile)
args = shlex.split(cmdline)
ret = runMPIProgram(args)
# on Windows runMPIProgram returns immediately so wait 'a bit' to let gmsh finish
import os
if os.name == "nt":
sleep(10)
return ret #already MPI distributed
def gmshGeo2Msh(geoFile, mshFile, numDim, order=1, verbosity=0):
"""
Runs gmsh to mesh input `geoFile`.
Returns 0 on success.
"""
if HAVE_GMSHPY:
return _runGmshPy(geoFile, mshFile, numDim, order, verbosity)
elif GMSH_MPI:
return _runGmshMPI(geoFile, mshFile, numDim, order, verbosity)
else: # we try our luck even if gmsh was not available at build time
return _runGmshSerial(geoFile, mshFile, numDim, order, verbosity)
|