MFEM v4.9.0
Finite element discretization library
Loading...
Searching...
No Matches
det.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
12#include "det.hpp"
13
14namespace mfem
15{
16
17namespace internal
18{
19namespace quadrature_interpolator
20{
21
22void InitDetKernels()
23{
24 using k = QuadratureInterpolator::DetKernels;
25 // 2D
26 k::Specialization<2,2,2,2>::Add();
27 k::Specialization<2,2,2,3>::Add();
28 k::Specialization<2,2,2,4>::Add();
29 k::Specialization<2,2,2,6>::Add();
30 k::Specialization<2,2,3,4>::Add();
31 k::Specialization<2,2,3,6>::Add();
32 k::Specialization<2,2,4,4>::Add();
33 k::Specialization<2,2,4,6>::Add();
34 k::Specialization<2,2,5,6>::Add();
35 // 3D
36 k::Specialization<3,3,2,4>::Add();
37 k::Specialization<3,3,3,3>::Add();
38 k::Specialization<3,3,3,5>::Add();
39 k::Specialization<3,3,3,6>::Add();
40 k::Specialization<3,3,4,6>::Add();
41 k::Specialization<3,3,3,4>::Add();
42}
43
44} // namespace quadrature_interpolator
45} // namespace internal
46
47/// @cond Suppress_Doxygen_warnings
48
50QuadratureInterpolator::DetKernels::Fallback(
51 int DIM, int SDIM, int D1D, int Q1D)
52{
53 if (DIM == 1) { return internal::quadrature_interpolator::Det1D; }
54 else if (DIM == 2 && SDIM == 2) { return internal::quadrature_interpolator::Det2D; }
55 else if (DIM == 2 && SDIM == 3) { return internal::quadrature_interpolator::Det2DSurface; }
56 else if (DIM == 3)
57 {
58 const int MD = DeviceDofQuadLimits::Get().MAX_DET_1D;
59 const int MQ = DeviceDofQuadLimits::Get().MAX_DET_1D;
60 if (D1D <= MD && Q1D <= MQ) { return internal::quadrature_interpolator::Det3D<0,0,true>; }
61 else { return internal::quadrature_interpolator::Det3D<0,0,false>; }
62 }
63 else { MFEM_ABORT(""); }
64}
65
66/// @endcond
67
68} // namespace mfem
void(*)(const int NE, const real_t *, const real_t *, const real_t *, real_t *, const int, const int, Vector *) DetKernelType
constexpr int SDIM
constexpr int DIM
static const DeviceDofQuadLimits & Get()
Return a const reference to the DeviceDofQuadLimits singleton.
Definition forall.hpp:128
int MAX_DET_1D
Maximum number of points for determinant computation in QuadratureInterpolator.
Definition forall.hpp:125