Package: fc-hypermesh
Thefc_hypermeshPython package allows to generate conforming meshes
of hypercubes, hyperrectangles or of any d-orthotopes by p-order simplices or orthotopes  with their m-facesIntroduction:This implementsVectorized algorithms for regular and conforming tessellations of d-orthotopes and their faces with high-order orthotopes or simplicial elements, Cuvelier F., 2019More documentation is available onfc_hypermesh Python packagededicated web page.Installation:Thefc_hypermeshPython package is available from the Python Package Index, so to install/upgrade simply dopip install fc_hypermesh -UThereafter, it’s possible to run one of the demo functionsimportfc_hypermeshfc_hypermesh.demos.demo01()Examples usage:Meshing the rectangle [-1,1]x[0,1] by simplices with 12+1 points in
x-axis and 5+1 points in y-axis:fromfc_hypermeshimportOrthMeshoTh=OrthMesh(2,[12,5],type='simplex',box=[[-1,1],[0,1]])print(oTh)The output of theprint(oTh)command is:OrthMesh object
        d : 2
    order : 1
      box : [[-1.0, 1.0], [0.0, 1.0]]
  mapping : None
Mesh (order,type,nq,nme) : (1,simplex,78,120)
Number of 1-faces : 4
  [ 0] (order,type,nq,nme) : (1,simplex,6,5)
  [ 1] (order,type,nq,nme) : (1,simplex,6,5)
  [ 2] (order,type,nq,nme) : (1,simplex,13,12)
  [ 3] (order,type,nq,nme) : (1,simplex,13,12)
Number of 0-faces : 4
  [ 0] (order,type,nq,nme) : (1,simplex,1,1)
  [ 1] (order,type,nq,nme) : (1,simplex,1,1)
  [ 2] (order,type,nq,nme) : (1,simplex,1,1)
  [ 3] (order,type,nq,nme) : (1,simplex,1,1)Ifmatplotlibpackage is installed one can represent the meshfromfc_tools.graphicsimportset_axes_equalimportmatplotlib.pyplotaspltplt.ion()plt.figure(1)oTh.plotmesh(legend=True)plt.figure(2)oTh.plotmesh(m=1,legend=True,linewidth=3)plt.axis('off')set_axes_equal()Meshing the rectangular cuboid [-1,1]x[0,1]x[0,2] by simplices with 11+1 points in
x-axis, 5+1 points in y-axis and 10+1 points in z-axis:fromfc_hypermeshimportOrthMeshoTh=OrthMesh(3,[10,5,10],box=[[-1,1],[0,1],[0,2]])Ifmatplotlibpackage is installed one can represent the meshfromfc_tools.graphicsimportset_axes_equalimportmatplotlib.pyplotaspltplt.ion()plt.figure(1)oTh.plotmesh(legend=True,linewidth=0.5)set_axes_equal()plt.figure(2)oTh.plotmesh(m=2,legend=True,edgecolor=[0,0,0])plt.axis('off')set_axes_equal()Meshing the rectangle [-1,1]x[0,1] by orthotopes with 12+1 points in
x-axis, 5+1 points in y-axis and 10+1 points in z-axis:fromfc_hypermeshimportOrthMeshoTh=OrthMesh(2,[12,5],type='orthotope',box=[[-1,1],[0,1]])Ifmatplotlibpackage is installed one can represent the meshfromfc_tools.graphicsimportset_axes_equalimportmatplotlib.pyplotaspltplt.ion()plt.figure(1)oTh.plotmesh(legend=True)set_axes_equal()plt.figure(2)oTh.plotmesh(m=1,legend=True,linewidth=3)plt.axis('off')set_axes_equal()Meshing the rectangular cuboid [-1,1]x[0,1]x[0,2] by orthotopes with 11+1 points in
x-axis, 5+1 points in y-axis and 10+1 points in z-axis:fromfc_hypermeshimportOrthMeshoTh=OrthMesh(3,[10,5,10],type='orthotope',box=[[-1,1],[0,1],[0,2]])Ifmatplotlibpackage is installed one can represent the meshfromfc_tools.graphicsimportset_axes_equalimportmatplotlib.pyplotaspltplt.ion()plt.figure(1)oTh.plotmesh(legend=True,linewidth=0.5)set_axes_equal()plt.figure(2)oTh.plotmesh(m=2,legend=True,edgecolor=[0,0,0])plt.axis('off')set_axes_equal()Testing :There are eight demos functions in thefc_hypermesh.demosmodule nameddemo01todemo08.
The source code is in moduledemos.py.
For example, run the following code under Python:importfc_hypermeshfc_hypermesh.demos.demo01()Benchmarking:Bench of theOrthMeshconstructor for a 3-dimensional orthotope tessellated with (order 1) simplices.importfc_hypermeshfc_hypermesh.bench(3,range(20,170,20),type='simplex',box=[[-1,1],[-1,1],[-1,1]])The output of this code is:#---------------------------------------------------------------------------
#    computer: zbook17
#      system: Ubuntu 18.04.3 LTS (x86_64)
#   processor: Intel(R) Core(TM) i7-4800MQ CPU @ 2.70GHz
#              (1 procs/4 cores by proc/2 threads by core)
#         RAM: 31.3 Go
#    software: Python
#     release: 3.7.6
#---------------------------------------------------------------------------
# fc_hypermesh.OrthMesh constructor with
#   d      =3
#   type   =simplex
#   order  =1
#   box    =[[-1, 1], [-1, 1], [-1, 1]]
#   mapping=None
#---------------------------------------------------------------------------
#date:2019-12-29_14-13-35
#nbruns:5
#numpy:      i8        i8        i8            f8
#format: {:>7d}   {:>10d}   {:>10d}      {:11.3f}
#labels:      N        nq       nme   OrthMesh(s)
             20      9261     48000         0.196
             40     68921    384000         0.209
             60    226981   1296000         0.302
             80    531441   3072000         0.411
            100   1030301   6000000         0.576
            120   1771561  10368000         0.840
            140   2803221  16464000         1.197
            160   4173281  24576000         1.679Bench of theOrthMeshconstructor for a 3-dimensional orthotope tessellated with 3-order simplices.importfc_hypermeshfc_hypermesh.bench(3,range(10,61,10),order=3,type='simplex',box=[[-1,1],[-1,1],[-1,1]])The output of this code is:#---------------------------------------------------------------------------
#    computer: zbook17
#      system: Ubuntu 18.04.3 LTS (x86_64)
#   processor: Intel(R) Core(TM) i7-4800MQ CPU @ 2.70GHz
#              (1 procs/4 cores by proc/2 threads by core)
#         RAM: 31.3 Go
#    software: Python
#     release: 3.7.6
#---------------------------------------------------------------------------
# fc_hypermesh.OrthMesh constructor with
#   d      =3
#   type   =simplex
#   order  =3
#   box    =[[-1, 1], [-1, 1], [-1, 1]]
#   mapping=None
#---------------------------------------------------------------------------
#date:2019-12-29_14-26-34
#nbruns:5
#numpy:      i8        i8        i8            f8
#format: {:>7d}   {:>10d}   {:>10d}      {:11.3f}
#labels:      N        nq       nme   OrthMesh(s)
             10     29791      6000         0.143
             20    226981     48000         0.222
             30    753571    162000         0.269
             40   1771561    384000         0.357
             50   3442951    750000         0.500
             60   5929741   1296000         0.733Bench of theOrthMeshconstructor for a 5-dimensional orthotope tessellated with (order 1) orthotopes.importfc_hypermeshfc_hypermesh.bench(5,[5,10,15,20,25,27],type='orthotope',box=[[-1,1],[-1,1],[-1,1],[-1,1],[-1,1]])The output of this code is:#---------------------------------------------------------------------------
#    computer: zbook17
#      system: Ubuntu 18.04.3 LTS (x86_64)
#   processor: Intel(R) Core(TM) i7-4800MQ CPU @ 2.70GHz
#              (1 procs/4 cores by proc/2 threads by core)
#         RAM: 31.3 Go
#    software: Python
#     release: 3.7.6
#---------------------------------------------------------------------------
# fc_hypermesh.OrthMesh constructor with
#   d      =5
#   type   =orthotope
#   order  =1
#   box    =[[-1, 1], [-1, 1], [-1, 1], [-1, 1], [-1, 1]]
#   mapping=None
#---------------------------------------------------------------------------
#date:2019-12-29_14-18-30
#nbruns:5
#numpy:      i8        i8        i8            f8
#format: {:>7d}   {:>10d}   {:>10d}      {:11.3f}
#labels:      N        nq       nme   OrthMesh(s)
              5      7776      3125         0.427
             10    161051    100000         0.529
             15   1048576    759375         0.844
             20   4084101   3200000         1.789
             25  11881376   9765625         4.296
             27  17210368  14348907         5.958