MFEM v4.8.0
Finite element discretization library
Loading...
Searching...
No Matches
grad_by_nodes.cpp
Go to the documentation of this file.
1// Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
2// at the Lawrence Livermore National Laboratory. All Rights reserved. See files
3// LICENSE and NOTICE for details. LLNL-CODE-806117.
4//
5// This file is part of the MFEM library. For more information and source code
6// availability visit https://mfem.org.
7//
8// MFEM is free software; you can redistribute it and/or modify it under the
9// terms of the BSD-3 license. We welcome feedback and contributions, see file
10// CONTRIBUTING.md for details.
11
13#include "grad.hpp"
14
15namespace mfem
16{
17namespace internal
18{
19namespace quadrature_interpolator
20{
21
22template <bool P>
23void InitGradByNodesKernels()
24{
25 using k = QuadratureInterpolator::GradKernels;
26 constexpr auto L = QVectorLayout::byNODES;
27 // 2D
28 k::Specialization<2,L,P,1,3,3>::template Opt<16>::Add();
29 k::Specialization<2,L,P,1,3,4>::template Opt<16>::Add();
30 k::Specialization<2,L,P,1,4,3>::template Opt<16>::Add();
31 k::Specialization<2,L,P,1,4,4>::template Opt<16>::Add();
32
33 k::Specialization<2,L,P,2,2,2>::template Opt<16>::Add();
34 k::Specialization<2,L,P,2,2,3>::template Opt<8>::Add();
35 k::Specialization<2,L,P,2,2,4>::template Opt<4>::Add();
36 k::Specialization<2,L,P,2,2,5>::template Opt<4>::Add();
37 k::Specialization<2,L,P,2,2,6>::template Opt<2>::Add();
38
39 k::Specialization<2,L,P,2,3,3>::template Opt<2>::Add();
40 k::Specialization<2,L,P,2,3,4>::template Opt<4>::Add();
41 k::Specialization<2,L,P,2,4,3>::template Opt<4>::Add();
42 k::Specialization<2,L,P,2,3,6>::template Opt<2>::Add();
43
44 k::Specialization<2,L,P,2,4,4>::template Opt<2>::Add();
45 k::Specialization<2,L,P,2,4,5>::template Opt<2>::Add();
46 k::Specialization<2,L,P,2,4,6>::template Opt<2>::Add();
47 k::Specialization<2,L,P,2,4,7>::template Opt<2>::Add();
48
49 k::Specialization<2,L,P,2,5,6>::template Opt<2>::Add();
50 // 3D
51 k::Specialization<3,L,P,1,2,4>::Add();
52 k::Specialization<3,L,P,1,3,3>::Add();
53 k::Specialization<3,L,P,1,3,4>::Add();
54 k::Specialization<3,L,P,1,3,6>::Add();
55 k::Specialization<3,L,P,1,4,4>::Add();
56 k::Specialization<3,L,P,1,4,8>::Add();
57
58 k::Specialization<3,L,P,3,2,3>::Add();
59 k::Specialization<3,L,P,3,2,4>::Add();
60 k::Specialization<3,L,P,3,2,5>::Add();
61 k::Specialization<3,L,P,3,2,6>::Add();
62
63 k::Specialization<3,L,P,3,3,3>::Add();
64 k::Specialization<3,L,P,3,3,4>::Add();
65 k::Specialization<3,L,P,3,3,5>::Add();
66 k::Specialization<3,L,P,3,3,6>::Add();
67 k::Specialization<3,L,P,3,4,4>::Add();
68 k::Specialization<3,L,P,3,4,6>::Add();
69 k::Specialization<3,L,P,3,4,7>::Add();
70 k::Specialization<3,L,P,3,4,8>::Add();
71
72 using k2 = QuadratureInterpolator::CollocatedGradKernels;
73
74 // 2D
75 k2::Specialization<2,L,P,1,2>::template Opt<16>::Add();
76 k2::Specialization<2,L,P,1,3>::template Opt<16>::Add();
77 k2::Specialization<2,L,P,1,4>::template Opt<16>::Add();
78 k2::Specialization<2,L,P,2,2>::template Opt<16>::Add();
79 k2::Specialization<2,L,P,2,3>::template Opt<4>::Add();
80 k2::Specialization<2,L,P,2,4>::template Opt<2>::Add();
81
82 k2::Specialization<3,L,P,1,2>::Add();
83 k2::Specialization<3,L,P,1,3>::Add();
84 k2::Specialization<3,L,P,1,4>::Add();
85
86 k2::Specialization<3,L,P,2,2>::Add();
87 k2::Specialization<3,L,P,2,3>::Add();
88 k2::Specialization<3,L,P,2,4>::Add();
89
90 k2::Specialization<3,L,P,3,2>::Add();
91 k2::Specialization<3,L,P,3,3>::Add();
92 k2::Specialization<3,L,P,3,4>::Add();
93}
94
95template void InitGradByNodesKernels<true>();
96template void InitGradByNodesKernels<false>();
97
98} // namespace quadrature_interpolator
99} // namespace internal
100} // namespace mfem