MFEM v4.10.0
Finite element discretization library
Loading...
Searching...
No Matches
bilininteg_mass_ea.cpp
Go to the documentation of this file.
1// Copyright (c) 2010-2026, 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 "../bilininteg.hpp"
14#include "../gridfunc.hpp"
16
17namespace mfem
18{
19
21 const bool add)
22{
23 using internal::EAMassAssemble1D;
24 using internal::EAMassAssemble2D;
25 using internal::EAMassAssemble3D;
26
27 MFEM_VERIFY(maps->mode != DofToQuad::RAGGED_TENSOR,
28 "AssembleEA not implemented for ragged tensor bases");
29 const Array<real_t> &B = maps->B;
30 if (dim == 1)
31 {
32 auto kernel = EAMassAssemble1D<0,0>;
33 switch ((dofs1D << 4 ) | quad1D)
34 {
35 case 0x22: kernel = EAMassAssemble1D<2,2>; break;
36 case 0x33: kernel = EAMassAssemble1D<3,3>; break;
37 case 0x44: kernel = EAMassAssemble1D<4,4>; break;
38 case 0x55: kernel = EAMassAssemble1D<5,5>; break;
39 case 0x66: kernel = EAMassAssemble1D<6,6>; break;
40 case 0x77: kernel = EAMassAssemble1D<7,7>; break;
41 case 0x88: kernel = EAMassAssemble1D<8,8>; break;
42 case 0x99: kernel = EAMassAssemble1D<9,9>; break;
43 }
44 return kernel(ne,B,pa_data,ea_data,add,dofs1D,quad1D);
45 }
46 else if (dim == 2)
47 {
48 auto kernel = EAMassAssemble2D<0,0>;
49 switch ((dofs1D << 4 ) | quad1D)
50 {
51 case 0x22: kernel = EAMassAssemble2D<2,2>; break;
52 case 0x33: kernel = EAMassAssemble2D<3,3>; break;
53 case 0x44: kernel = EAMassAssemble2D<4,4>; break;
54 case 0x55: kernel = EAMassAssemble2D<5,5>; break;
55 case 0x66: kernel = EAMassAssemble2D<6,6>; break;
56 case 0x77: kernel = EAMassAssemble2D<7,7>; break;
57 case 0x88: kernel = EAMassAssemble2D<8,8>; break;
58 case 0x99: kernel = EAMassAssemble2D<9,9>; break;
59 }
60 return kernel(ne,B,pa_data,ea_data,add,dofs1D,quad1D);
61 }
62 else if (dim == 3)
63 {
64 auto kernel = EAMassAssemble3D<0,0>;
65 switch ((dofs1D << 4 ) | quad1D)
66 {
67 case 0x23: kernel = EAMassAssemble3D<2,3>; break;
68 case 0x34: kernel = EAMassAssemble3D<3,4>; break;
69 case 0x45: kernel = EAMassAssemble3D<4,5>; break;
70 case 0x56: kernel = EAMassAssemble3D<5,6>; break;
71 case 0x67: kernel = EAMassAssemble3D<6,7>; break;
72 case 0x78: kernel = EAMassAssemble3D<7,8>; break;
73 case 0x89: kernel = EAMassAssemble3D<8,9>; break;
74 }
75 return kernel(ne,B,pa_data,ea_data,add,dofs1D,quad1D);
76 }
77 MFEM_ABORT("Unknown kernel.");
78}
79
81 Vector &ea_data,
82 const bool add)
83{
84 AssemblePA(fes);
85 if (ne > 0) { AssembleEA_(ea_data, add); }
86}
87
89 Vector &ea_data,
90 const bool add)
91{
93 if (ne > 0) { AssembleEA_(ea_data, add); }
94}
95
96}
Mode mode
Describes the contents of the B, Bt, G, and Gt arrays, see Mode.
Definition fe_base.hpp:182
@ RAGGED_TENSOR
Ragged tensor product representation using 1D matrices/tensors with dimensions using 1D number of qua...
Definition fe_base.hpp:178
Array< real_t > B
Basis functions evaluated at quadrature points.
Definition fe_base.hpp:201
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
Definition fespace.hpp:210
const DofToQuad * maps
Not owned.
void AssembleEA_(Vector &ea, const bool add)
void AssemblePABoundary(const FiniteElementSpace &fes) override
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void AssembleEABoundary(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Vector data type.
Definition vector.hpp:82
void add(const Vector &v1, const Vector &v2, Vector &v)
Definition vector.cpp:414