3D benchmarks

Benchmark usage

pyOptFEM.FEM3D.assemblyBench.assemblyBench([assembly=<string>, version=<string>, LN=<array>, meshname=<string>, meshdir=<string>, nbruns=<int>, la=<float>, mu=<float>, Num=<int>, tag=<string>, ...])

Benchmark code for P_1-Lagrange finite elements Matrices defined in FEM3D.

Parameters:
  • assembly – Name of an assembly routine. String must be : - ‘MassAssembling3DP1’, - ‘StiffAssembling3DP1’ (default) - ‘StiffElasAssembling3DP1’
  • versions – Versions list. Must be an array of in {‘base’,’OptV1’,’OptV2’} (default : ['OptV2','OptV1','base'])
  • meshname – Name of the medit mesh files. By default is empty string ‘’ : use CubeMesh(N) function to generate meshes.
  • meshdir – Directory location of medit mesh files. Used if meshname is not empty.
  • LN

    array of integer values. Used to generate meshes data via Th=CubeMesh(N) function if meshname is empty or via getMesh class to read FreeFEM++ meshes Th=getMesh(meshdir+’/’+meshname+str(N)+’.mesh’)

    Default is range(5, 14, 2)

  • nbruns – Number of run on each mesh (default : 1)
  • save – Save benchmark results in a file (see params <output>, <outdir> and <tag>). (default : False)
  • plot – (default : True)
  • output – Name used to set results file name (default : ‘bench2D’)
  • outdir – Directory location of saved results file name (default : ‘./results’).
  • tag – Specify a tag string added to filename
  • la – the first Lame coefficient in Hooke’s law, denoted by \lambda. Used by stiffness elasticity assembly matrix functions. (default : 2)
  • mu – the second Lame coefficient in Hooke’s law, denoted by \mu. Used by stiffness elasticity assembly matrix functions. (default : 0.3)
  • Num – Numbering choice. Used by stiffness elasticity assembly matrix functions. (default : 0)

Mass Matrix

  • Benchmark of MassAssembling3DP1 with versions base, OptV1 and OptV2 (see Mass Matrix)

    MassAssembling23P1 benchmark resume
    N nq ndof OptV2 OptV1 base
    5 216 216 0.0015(s) 0.0424(s) 0.8962(s)
          x1.00 x28.29 x597.49
    10 1331 1331 0.0075(s) 0.3390(s) 7.1521(s)
          x1.00 x44.96 x948.64
    15 4096 4096 0.0268(s) 1.1413(s) 24.2836(s)
          x1.00 x42.55 x905.35
    20 9261 9261 0.0677(s) 2.7240(s) 56.9878(s)
          x1.00 x40.26 x842.21
    25 17576 17576 0.1457(s) 5.2998(s) 111.0287(s)
          x1.00 x36.38 x762.11
    30 29791 29791 0.2493(s) 9.2205(s) 192.1030(s)
          x1.00 x36.99 x770.64
    35 46656 46656 0.4121(s) 14.6558(s) 304.5941(s)
          x1.00 x35.57 x739.17

    This tabular was build with the following code :

    >>> from pyOptFEM.FEM3D import assemblyBench
    >>> assemblyBench(assembly='MassAssembling3DP1',LN=range(5,40,5))
    CubeMesh(5):
     -> MassAssembling3DP1OptV2(nq=216, nme=750)
      run ( 1/ 1) : cputime=0.001254(s) - matrix 216-by-216
    ...
    CubeMesh(35):
     -> MassAssembling3DP1base(nq=46656, nme=257250)
      run ( 1/ 1) : cputime=304.594078(s) - matrix 46656-by-46656
    

    We also obtain

    _images/bench_Mass3DP1_01.png

    Figure 159: MassAssembling3DP1 benchmark

  • Benchmark of MassAssembling3DP1 with versions OptV2 and OptV1

    MassAssembling2DP1 benchmark resume
    N nq ndof OptV2 OptV1
    10 1331 1331 0.0065(s) 0.3656(s)
          x1.00 x56.05
    20 9261 9261 0.0578(s) 2.6968(s)
          x1.00 x46.70
    30 29791 29791 0.2195(s) 9.1710(s)
          x1.00 x41.77
    40 68921 68921 0.6109(s) 21.7386(s)
          x1.00 x35.59
    50 132651 132651 1.1558(s) 42.1679(s)
          x1.00 x36.49
    60 226981 226981 2.1182(s) 73.9066(s)
          x1.00 x34.89
    70 357911 357911 3.1952(s) 116.2151(s)
          x1.00 x36.37
    80 531441 531441 5.1899(s) 174.4814(s)
          x1.00 x33.62
    90 753571 753571 7.0460(s) 247.8245(s)
          x1.00 x35.17
    100 1030301 1030301 9.8218(s) 340.9609(s)
          x1.00 x34.71

    This tabular was build with the following code :

    >>> from pyOptFEM.FEM3D import assemblyBench
    >>> assemblyBench(assembly='MassAssembling3DP1',versions=['OptV2','OptV1'],LN=range(10,110,10))
    CubeMesh(10):
     -> MassAssembling3DP1OptV2(nq=1331, nme=6000)
      run ( 1/ 1) : cputime=0.006523(s) - matrix 1331-by-1331
    ...
    CubeMesh(100):
     -> MassAssembling3DP1OptV1(nq=1030301, nme=6000000)
      run ( 1/ 1) : cputime=340.960874(s) - matrix 1030301-by-1030301
    

    We also obtain

    _images/bench_Mass3DP1_02.png

    Figure 160: MassAssembling3DP1 benchmark

Stiffness Matrix

  • Benchmark of StiffAssembling3DP1 with versions base, OptV1 and OptV2

    StiffAssembling3DP1 benchmark resume
    N nq ndof OptV2 OptV1 base
    5 216 216 0.0024(s) 0.0546(s) 0.9065(s)
          x1.00 x23.22 x385.72
    10 1331 1331 0.0072(s) 0.4396(s) 7.2347(s)
          x1.00 x60.68 x998.63
    15 4096 4096 0.0258(s) 1.4985(s) 24.5593(s)
          x1.00 x58.08 x951.81
    20 9261 9261 0.0652(s) 3.4915(s) 57.9647(s)
          x1.00 x53.55 x888.96
    25 17576 17576 0.1315(s) 6.7851(s) 112.9478(s)
          x1.00 x51.61 x859.14
    30 29791 29791 0.2479(s) 11.8616(s) 195.8290(s)
          x1.00 x47.85 x790.05
    35 46656 46656 0.4126(s) 18.3069(s) 310.0601(s)
          x1.00 x44.37 x751.46

    This tabular was build with following code :

    >>> from pyOptFEM.FEM3D import assemblyBench
    >>> assemblyBench(assembly='StiffAssembling3DP1',LN=range(5,40,5))
    CubeMesh(5):
     -> StiffAssembling3DP1OptV2(nq=216, nme=750)
      run ( 1/ 1) : cputime=0.002350(s) - matrix 216-by-216
    ...
    CubeMesh(35):
     -> StiffAssembling3DP1base(nq=46656, nme=257250)
      run ( 1/ 1) : cputime=310.060121(s) - matrix 46656-by-46656
    

    We also obtain

    _images/bench_Stiff3DP1_01.png

    Figure 161: StiffAssembling3DP1 benchmark

  • Benchmark of StiffAssembling3DP1 with versions OptV2 and OptV1

    StiffAssembling3DP1 benchmark resume
    N nq ndof OptV2 OptV1
    10 1331 1331 0.0071(s) 0.4329(s)
          x1.00 x60.68
    20 9261 9261 0.0652(s) 3.4323(s)
          x1.00 x52.64
    30 29791 29791 0.2525(s) 11.6349(s)
          x1.00 x46.07
    40 68921 68921 0.7178(s) 27.6186(s)
          x1.00 x38.48
    50 132651 132651 1.5883(s) 53.9955(s)
          x1.00 x34.00
    60 226981 226981 2.8236(s) 93.1197(s)
          x1.00 x32.98
    70 357911 357911 4.6881(s) 147.6608(s)
          x1.00 x31.50
    80 531441 531441 7.4632(s) 220.7232(s)
          x1.00 x29.57
    90 753571 753571 10.6093(s) 314.8404(s)
          x1.00 x29.68
    100 1030301 1030301 14.7064(s) 427.0878(s)
          x1.00 x29.04

    This tabular was build with the following code :

    >>> from pyOptFEM.FEM3D import assemblyBench
    >>> assemblyBench(assembly='StiffAssembling3DP1',versions=['OptV2','OptV1'],LN=range(10,110,10))
    CubeMesh(10):
     -> StiffAssembling3DP1OptV2(nq=1331, nme=6000)
      run ( 1/ 1) : cputime=0.007133(s) - matrix 1331-by-1331
    ...
    CubeMesh(100):
     -> StiffAssembling3DP1OptV1(nq=1030301, nme=6000000)
    run ( 1/ 1) : cputime=427.087812(s) - matrix 1030301-by-1030301
    

    We also obtain

    _images/bench_Stiff3DP1_02.png

    Figure 162: StiffAssembling3DP1 benchmark

Elasticity Stiffness Matrix

  • Benchmark of StiffAssembling3DP1 with versions base, OptV1 and OptV2

    StiffAssembling3DP1 benchmark resume
    N nq ndof OptV2 OptV1 base
    3 64 192 0.0056(s) 0.0626(s) 0.6896(s)
          x1.00 x11.23 x123.60
    5 216 648 0.0085(s) 0.2877(s) 3.1838(s)
          x1.00 x33.87 x374.88
    7 512 1536 0.0183(s) 0.7933(s) 8.7350(s)
          x1.00 x43.43 x478.25
    10 1331 3993 0.0493(s) 2.3134(s) 25.5321(s)
          x1.00 x46.91 x517.74
    13 2744 8232 0.1061(s) 5.0799(s) 55.8011(s)
          x1.00 x47.89 x526.04
    17 5832 17496 0.2426(s) 11.3663(s) 126.2934(s)
          x1.00 x46.86 x520.66
    20 9261 27783 0.4317(s) 18.6554(s) 205.4239(s)
          x1.00 x43.22 x475.90

    This tabular was build with following code :

    >>> from pyOptFEM.FEM3D import assemblyBench
    >>> from numpy import *
    >>> assemblyBench(assembly='StiffElasAssembling3DP1',LN=array([3,5,7,10,13,17,20]))
    CubeMesh(3):
     -> StiffElasAssembling3DP1OptV2(nq=64, nme=162)
      run ( 1/ 1) : cputime=0.005579(s) - matrix 192-by-192
    ...
    CubeMesh(20):
     -> StiffElasAssembling3DP1base(nq=9261, nme=48000)
      run ( 1/ 1) : cputime=205.423872(s) - matrix 27783-by-27783
    

We also obtain

_images/bench_StiffElas3DP1_01.png

Figure 163: StiffElasAssembling3DP1 benchmark

  • Benchmark of StiffAssembling3DP1 with versions OptV1 and OptV2

    StiffAssembling3DP1 benchmark resume
    N nq ndof OptV2 OptV1
    10 1331 3993 0.0497(s) 2.2711(s)
          x1.00 x45.73
    20 9261 27783 0.4325(s) 18.1990(s)
          x1.00 x42.07
    30 29791 89373 1.7316(s) 61.6716(s)
          x1.00 x35.62
    40 68921 206763 4.5098(s) 146.4793(s)
          x1.00 x32.48
    50 132651 397953 9.3904(s) 284.8776(s)
          x1.00 x30.34
    60 226981 680943 17.2215(s) 494.1435(s)
          x1.00 x28.69
    70 357911 1073733 28.1707(s) 785.3533(s)
          x1.00 x27.88

    This tabular was build with following code :

    >>> from pyOptFEM.FEM3D import assemblyBench
    >>> assemblyBench(assembly='StiffElasAssembling3DP1',versions=['OptV2','OptV1'],LN=range(10,80,10))
    CubeMesh(10):
     -> StiffElasAssembling3DP1OptV2(nq=1331, nme=6000)
      run ( 1/ 1) : cputime=0.049666(s) - matrix 3993-by-3993
    ...
    CubeMesh(70):
     -> StiffElasAssembling3DP1OptV1(nq=357911, nme=2058000)
      run ( 1/ 1) : cputime=785.353305(s) - matrix 1073733-by-1073733
    

We also obtain

_images/bench_StiffElas3DP1_02.png

Figure 164: StiffElasAssembling3DP1 benchmark

Table Of Contents

Previous topic

2D benchmarks

Next topic

FEM2D module

This Page