libmesh
libmesh copied to clipboard
2d, 5th order Nédélec (first kind) and Raviart-Thomas FEs
Hi Roy,
The good:
The bad:
46% slowdown in compute_shape_functions()
and 40% in init_shape_functions()
when running vector fe ex3 with 1st order Nédélec elements.
for i in {1..5}; do ./example-opt element_type=TRI6 -pc_type lu grid_size=150 | grep "| FE " -A2; done
BEFORE (196a0a4):
| FE |
| compute_shape_functions() 181200 0.0584 0.000000 0.0584 0.000000 5.14 5.14 |
| init_shape_functions() 181200 0.0567 0.000000 0.0567 0.000000 4.98 4.98 |
| FE |
| compute_shape_functions() 181200 0.0599 0.000000 0.0599 0.000000 5.26 5.26 |
| init_shape_functions() 181200 0.0570 0.000000 0.0570 0.000000 5.01 5.01 |
| FE |
| compute_shape_functions() 181200 0.0591 0.000000 0.0591 0.000000 5.15 5.15 |
| init_shape_functions() 181200 0.0567 0.000000 0.0567 0.000000 4.95 4.95 |
| FE |
| compute_shape_functions() 181200 0.0611 0.000000 0.0611 0.000000 5.32 5.32 |
| init_shape_functions() 181200 0.0566 0.000000 0.0566 0.000000 4.93 4.93 |
| FE |
| compute_shape_functions() 181200 0.0598 0.000000 0.0598 0.000000 5.24 5.24 |
| init_shape_functions() 181200 0.0567 0.000000 0.0567 0.000000 4.98 4.98 |
AFTER (c659c2b):
| FE |
| compute_shape_functions() 181200 0.0865 0.000000 0.0865 0.000000 7.31 7.31 |
| init_shape_functions() 181200 0.0809 0.000000 0.0809 0.000000 6.84 6.84 |
| FE |
| compute_shape_functions() 181200 0.0861 0.000000 0.0861 0.000000 7.19 7.19 |
| init_shape_functions() 181200 0.0795 0.000000 0.0795 0.000000 6.64 6.64 |
| FE |
| compute_shape_functions() 181200 0.0867 0.000000 0.0867 0.000000 7.36 7.36 |
| init_shape_functions() 181200 0.0798 0.000000 0.0798 0.000000 6.77 6.77 |
| FE |
| compute_shape_functions() 181200 0.0862 0.000000 0.0862 0.000000 7.24 7.24 |
| init_shape_functions() 181200 0.0794 0.000000 0.0794 0.000000 6.67 6.67 |
| FE |
| compute_shape_functions() 181200 0.0853 0.000000 0.0853 0.000000 7.18 7.18 |
| init_shape_functions() 181200 0.0801 0.000000 0.0801 0.000000 6.75 6.75 |
The ugly:
No support for non-conforming interfaces and the shape functions are still explicitly hard-coded. On the bright side, all other code should support arbitrary order Nédélec elements. In practice, this means that, in the future, adding support for 3rd order shape functions would literally 'only' require writing those functions and their derivatives.