MFEM v4.8.0
Finite element discretization library
Loading...
Searching...
No Matches
bilininteg_mass_ea.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 "../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 const Array<real_t> &B = maps->B;
28 if (dim == 1)
29 {
30 auto kernel = EAMassAssemble1D<0,0>;
31 switch ((dofs1D << 4 ) | quad1D)
32 {
33 case 0x22: kernel = EAMassAssemble1D<2,2>; break;
34 case 0x33: kernel = EAMassAssemble1D<3,3>; break;
35 case 0x44: kernel = EAMassAssemble1D<4,4>; break;
36 case 0x55: kernel = EAMassAssemble1D<5,5>; break;
37 case 0x66: kernel = EAMassAssemble1D<6,6>; break;
38 case 0x77: kernel = EAMassAssemble1D<7,7>; break;
39 case 0x88: kernel = EAMassAssemble1D<8,8>; break;
40 case 0x99: kernel = EAMassAssemble1D<9,9>; break;
41 }
42 return kernel(ne,B,pa_data,ea_data,add,dofs1D,quad1D);
43 }
44 else if (dim == 2)
45 {
46 auto kernel = EAMassAssemble2D<0,0>;
47 switch ((dofs1D << 4 ) | quad1D)
48 {
49 case 0x22: kernel = EAMassAssemble2D<2,2>; break;
50 case 0x33: kernel = EAMassAssemble2D<3,3>; break;
51 case 0x44: kernel = EAMassAssemble2D<4,4>; break;
52 case 0x55: kernel = EAMassAssemble2D<5,5>; break;
53 case 0x66: kernel = EAMassAssemble2D<6,6>; break;
54 case 0x77: kernel = EAMassAssemble2D<7,7>; break;
55 case 0x88: kernel = EAMassAssemble2D<8,8>; break;
56 case 0x99: kernel = EAMassAssemble2D<9,9>; break;
57 }
58 return kernel(ne,B,pa_data,ea_data,add,dofs1D,quad1D);
59 }
60 else if (dim == 3)
61 {
62 auto kernel = EAMassAssemble3D<0,0>;
63 switch ((dofs1D << 4 ) | quad1D)
64 {
65 case 0x23: kernel = EAMassAssemble3D<2,3>; break;
66 case 0x34: kernel = EAMassAssemble3D<3,4>; break;
67 case 0x45: kernel = EAMassAssemble3D<4,5>; break;
68 case 0x56: kernel = EAMassAssemble3D<5,6>; break;
69 case 0x67: kernel = EAMassAssemble3D<6,7>; break;
70 case 0x78: kernel = EAMassAssemble3D<7,8>; break;
71 case 0x89: kernel = EAMassAssemble3D<8,9>; break;
72 }
73 return kernel(ne,B,pa_data,ea_data,add,dofs1D,quad1D);
74 }
75 MFEM_ABORT("Unknown kernel.");
76}
77
79 Vector &ea_data,
80 const bool add)
81{
82 AssemblePA(fes);
83 if (ne > 0) { AssembleEA_(ea_data, add); }
84}
85
87 Vector &ea_data,
88 const bool add)
89{
91 if (ne > 0) { AssembleEA_(ea_data, add); }
92}
93
94}
Array< real_t > B
Basis functions evaluated at quadrature points.
Definition fe_base.hpp:193
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
Definition fespace.hpp:244
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.
virtual 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:391