libMesh
Loading...
Searching...
No Matches
fe_base.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18
19
20#ifndef LIBMESH_FE_BASE_H
21#define LIBMESH_FE_BASE_H
22
23// Local includes
24#include "libmesh/libmesh_common.h"
25#include "libmesh/compare_types.h"
26#include "libmesh/fe_abstract.h"
27#include "libmesh/fe_transformation_base.h"
28#include "libmesh/point.h"
29#include "libmesh/reference_counted_object.h"
30#include "libmesh/tensor_tools.h"
31#include "libmesh/type_n_tensor.h"
32#include "libmesh/vector_value.h"
33#include "libmesh/dense_matrix.h"
34
35// C++ includes
36#include <cstddef>
37#include <vector>
38#include <memory>
39
40namespace libMesh
41{
42
43
44// forward declarations
45template <typename T> class DenseMatrix;
46template <typename T> class DenseVector;
47class BoundaryInfo;
48class DofConstraints;
49class DofMap;
50class Elem;
51class MeshBase;
52template <typename T> class NumericVector;
53class QBase;
54template <typename T> class FETransformationBase;
55class FEType;
56
57#ifdef LIBMESH_ENABLE_NODE_CONSTRAINTS
58class NodeConstraints;
59#endif
60
61#ifdef LIBMESH_ENABLE_PERIODIC
62class PeriodicBoundaries;
63class PointLocatorBase;
64#endif
65
66#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
67template <unsigned int Dim, FEFamily T_radial, InfMapType T_map>
68class InfFE;
69#endif
70
84template <typename OutputType>
86{
87protected:
88
94 FEGenericBase (const unsigned int dim,
95 const FEType & fet);
96
97public:
98
102 virtual ~FEGenericBase();
103
112 static std::unique_ptr<FEGenericBase> build (const unsigned int dim,
113 const FEType & type);
114
119 typedef OutputType OutputShape;
127
128
129
130#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
131
140 static std::unique_ptr<FEGenericBase> build_InfFE (const unsigned int dim,
141 const FEType & type);
142
143#endif
144
145#ifdef LIBMESH_ENABLE_AMR
146
153 static void compute_proj_constraints (DofConstraints & constraints,
154 DofMap & dof_map,
155 const unsigned int variable_number,
156 const Elem * elem);
157
165 static void coarsened_dof_values(const NumericVector<Number> & global_vector,
166 const DofMap & dof_map,
167 const Elem * coarse_elem,
168 DenseVector<Number> & coarse_dofs,
169 const unsigned int var,
170 const bool use_old_dof_indices = false);
171
178 static void coarsened_dof_values(const NumericVector<Number> & global_vector,
179 const DofMap & dof_map,
180 const Elem * coarse_elem,
181 DenseVector<Number> & coarse_dofs,
182 const bool use_old_dof_indices = false);
183
184#endif // #ifdef LIBMESH_ENABLE_AMR
185
186#ifdef LIBMESH_ENABLE_PERIODIC
187
193 static void compute_periodic_constraints (DofConstraints & constraints,
194 DofMap & dof_map,
195 const PeriodicBoundaries & boundaries,
196 const MeshBase & mesh,
197 const PointLocatorBase * point_locator,
198 const unsigned int variable_number,
199 const Elem * elem);
200
201#endif // LIBMESH_ENABLE_PERIODIC
202
207 const std::vector<std::vector<OutputShape>> & get_phi() const
209 calculate_phi = true; return phi; }
210
233 const std::vector<std::vector<OutputShape>> & get_dual_phi() const
234 {
236 calculate_dual = true;
237 // Dual phi computation relies on primal phi computation
238 this->request_phi();
239 return dual_phi;
240 }
241
242 virtual void request_phi() const override
243 { get_phi(); }
244
245 virtual void request_dual_phi() const override
246 { get_dual_phi(); }
247
252 const std::vector<std::vector<OutputGradient>> & get_dphi() const
254 calculate_dphi = calculate_dphiref = true; return dphi; }
255
261 const std::vector<std::vector<OutputGradient>> & get_dual_dphi() const
264
265 virtual void request_dphi() const override
266 { get_dphi(); }
267
268 virtual void request_dual_dphi() const override
269 { get_dual_dphi(); }
270
277 { return dual_coeff; }
278
283 virtual_for_inffe
284 const std::vector<std::vector<OutputShape>> & get_curl_phi() const
287
292 virtual_for_inffe
293 const std::vector<std::vector<OutputDivergence>> & get_div_phi() const
296
301 const std::vector<std::vector<OutputShape>> & get_dphidx() const
303 calculate_dphi = calculate_dphiref = true; return dphidx; }
304
309 const std::vector<std::vector<OutputShape>> & get_dphidy() const
311 calculate_dphi = calculate_dphiref = true; return dphidy; }
312
317 const std::vector<std::vector<OutputShape>> & get_dphidz() const
319 calculate_dphi = calculate_dphiref = true; return dphidz; }
320
325 const std::vector<std::vector<OutputShape>> & get_dphidxi() const
327 calculate_dphiref = true; return dphidxi; }
328
333 const std::vector<std::vector<OutputShape>> & get_dphideta() const
335 calculate_dphiref = true; return dphideta; }
336
341 const std::vector<std::vector<OutputShape>> & get_dphidzeta() const
343 calculate_dphiref = true; return dphidzeta; }
344
345#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
346
351 const std::vector<std::vector<OutputTensor>> & get_d2phi() const
353 calculate_d2phi = calculate_dphiref = true; return d2phi; }
354
361 const std::vector<std::vector<OutputTensor>> & get_dual_d2phi() const
364
369 const std::vector<std::vector<OutputShape>> & get_d2phidx2() const
371 calculate_d2phi = calculate_dphiref = true; return d2phidx2; }
372
377 const std::vector<std::vector<OutputShape>> & get_d2phidxdy() const
380
385 const std::vector<std::vector<OutputShape>> & get_d2phidxdz() const
388
393 const std::vector<std::vector<OutputShape>> & get_d2phidy2() const
395 calculate_d2phi = calculate_dphiref = true; return d2phidy2; }
396
401 const std::vector<std::vector<OutputShape>> & get_d2phidydz() const
404
409 const std::vector<std::vector<OutputShape>> & get_d2phidz2() const
411 calculate_d2phi = calculate_dphiref = true; return d2phidz2; }
412
417 const std::vector<std::vector<OutputShape>> & get_d2phidxi2() const
420
425 const std::vector<std::vector<OutputShape>> & get_d2phidxideta() const
428
433 const std::vector<std::vector<OutputShape>> & get_d2phidxidzeta() const
436
441 const std::vector<std::vector<OutputShape>> & get_d2phideta2() const
444
449 const std::vector<std::vector<OutputShape>> & get_d2phidetadzeta() const
452
457 const std::vector<std::vector<OutputShape>> & get_d2phidzeta2() const
460
461#endif //LIBMESH_ENABLE_SECOND_DERIVATIVES
462
463#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
464
475 const std::vector<OutputGradient> & get_dphase() const
476 { return dphase; }
477
478
491 virtual const std::vector<Real> & get_Sobolev_weight() const
492 { return weight; }
493
499 virtual const std::vector<RealGradient> & get_Sobolev_dweight() const
500 { return dweight; }
501
508 virtual const std::vector<Real> & get_Sobolev_weightxR_sq() const
509 { return weight; }
510
518 virtual const std::vector<RealGradient> & get_Sobolev_dweightxR_sq() const
519 { return dweight; }
520
531 virtual const std::vector<std::vector<OutputShape>> & get_phi_over_decayxR () const
532 { return get_phi();}
533
539 virtual const std::vector<std::vector<OutputGradient>> & get_dphi_over_decayxR () const
540 { return get_dphi();}
541
549 virtual const std::vector<std::vector<OutputGradient>> & get_dphi_over_decay () const
550 { return get_dphi();}
551
552#endif
553
557 virtual void print_phi(std::ostream & os) const override;
558 virtual void print_dual_phi(std::ostream & os) const override;
559
564 virtual void print_dphi(std::ostream & os) const override;
565 virtual void print_dual_dphi(std::ostream & os) const override;
566
567#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
568
573 virtual void print_d2phi(std::ostream & os) const override;
574 virtual void print_dual_d2phi(std::ostream & os) const override;
575
576#endif
577
578
579protected:
580
581
582
583#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
584
590 virtual void init_base_shape_functions(const std::vector<Point> & qp,
591 const Elem * e) = 0;
592
593#endif
594
599 virtual_for_inffe
601
607 {
608 return calculate_nothing &&
609 !this->calculate_phi && !this->calculate_dphi &&
610#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
611 !this->calculate_d2phi &&
612#endif
613 !this->calculate_curl_phi && !this->calculate_div_phi &&
614 !this->calculate_map;
615 }
616
627 virtual void compute_shape_functions(const Elem * elem, const std::vector<Point> & qp) override;
628
634 void compute_dual_shape_coeffs(const std::vector<Real> & JxW, const std::vector<std::vector<OutputShape>> & phi);
635
642
647 std::unique_ptr<FETransformationBase<OutputType>> _fe_trans;
648
652 std::vector<std::vector<OutputShape>> phi;
653 std::vector<std::vector<OutputShape>> dual_phi;
654
658 std::vector<std::vector<OutputGradient>> dphi;
659 std::vector<std::vector<OutputGradient>> dual_dphi;
660
665
669 std::vector<std::vector<OutputShape>> curl_phi;
670
674 std::vector<std::vector<OutputDivergence>> div_phi;
675
679 std::vector<std::vector<OutputShape>> dphidxi;
680
684 std::vector<std::vector<OutputShape>> dphideta;
685
689 std::vector<std::vector<OutputShape>> dphidzeta;
690
694 std::vector<std::vector<OutputShape>> dphidx;
695
699 std::vector<std::vector<OutputShape>> dphidy;
700
704 std::vector<std::vector<OutputShape>> dphidz;
705
706
707#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
708
712 std::vector<std::vector<OutputTensor>> d2phi;
713 std::vector<std::vector<OutputTensor>> dual_d2phi;
714
718 std::vector<std::vector<OutputShape>> d2phidxi2;
719
723 std::vector<std::vector<OutputShape>> d2phidxideta;
724
728 std::vector<std::vector<OutputShape>> d2phidxidzeta;
729
733 std::vector<std::vector<OutputShape>> d2phideta2;
734
738 std::vector<std::vector<OutputShape>> d2phidetadzeta;
739
743 std::vector<std::vector<OutputShape>> d2phidzeta2;
744
748 std::vector<std::vector<OutputShape>> d2phidx2;
749
753 std::vector<std::vector<OutputShape>> d2phidxdy;
754
758 std::vector<std::vector<OutputShape>> d2phidxdz;
759
763 std::vector<std::vector<OutputShape>> d2phidy2;
764
768 std::vector<std::vector<OutputShape>> d2phidydz;
769
773 std::vector<std::vector<OutputShape>> d2phidz2;
774
775#endif
776
777
778#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
779
780 //--------------------------------------------------------------
781 /* protected members for infinite elements, which are accessed
782 * from the outside through some inline functions
783 */
784
785
791 std::vector<OutputGradient> dphase;
792
798 std::vector<RealGradient> dweight;
799
805 std::vector<Real> weight;
806
807#endif
808
809private:
810
811#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
812
818 template <unsigned int friend_Dim, FEFamily friend_T_radial, InfMapType friend_T_map>
819 friend class InfFE;
820
821#endif
822
823
824};
825
826// --------------------------------------------------------------------
827// Generic templates. We specialize for OutputType = Real, so these are
828// only used for OutputType = RealVectorValue
829template <typename OutputType>
831{
832 libmesh_error_msg(
833 "Computation of dual shape functions for vector finite element "
834 "families is not currently implemented");
835}
836
837template <typename OutputType>
838void FEGenericBase<OutputType>::compute_dual_shape_coeffs(const std::vector<Real> & /*JxW*/, const std::vector<std::vector<OutputShape>> & /*phi_vals*/)
839{
840 libmesh_error_msg(
841 "Computation of dual shape functions for vector finite element "
842 "families is not currently implemented");
843}
844
845// -----------------------------------------------------------
846// Forward declaration of specialization
847template <>
849
850template <>
851void FEGenericBase<Real>::compute_dual_shape_coeffs(const std::vector<Real> & /*JxW*/, const std::vector<std::vector<OutputShape>> & /*phi_vals*/);
852
853
854// Typedefs for convenience and backwards compatibility
857
858
859
860
861// ------------------------------------------------------------
862// FEGenericBase class inline members
863template <typename OutputType>
864inline
866 const FEType & fet) :
867 FEAbstract(d,fet),
868 _fe_trans( FETransformationBase<OutputType>::build(fet) ),
869 phi(),
870 dual_phi(),
871 dphi(),
872 dual_dphi(),
873 curl_phi(),
874 div_phi(),
875 dphidxi(),
876 dphideta(),
877 dphidzeta(),
878 dphidx(),
879 dphidy(),
880 dphidz()
881#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
882 ,d2phi(),
883 dual_d2phi(),
884 d2phidxi2(),
885 d2phidxideta(),
886 d2phidxidzeta(),
887 d2phideta2(),
888 d2phidetadzeta(),
889 d2phidzeta2(),
890 d2phidx2(),
891 d2phidxdy(),
892 d2phidxdz(),
893 d2phidy2(),
894 d2phidydz(),
895 d2phidz2()
896#endif
897#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
898 ,dphase(),
899 dweight(),
900 weight()
901#endif
902{
903}
904
905
906
907template <typename OutputType>
908inline
910{
911}
912
913} // namespace libMesh
914
915#endif // LIBMESH_FE_BASE_H
Defines a dense matrix for use in Finite Element-type computations.
Defines a dense vector for use in Finite Element-type computations.
The constraint matrix storage format.
Definition dof_map.h:112
This class handles the numbering of degrees of freedom on a mesh.
Definition dof_map.h:181
This is the base class from which all geometric element types are derived.
Definition elem.h:96
This class forms the foundation from which generic finite elements may be derived.
bool calculate_map
Are we calculating mapping functions?
bool calculate_nothing
Are we potentially deliberately calculating nothing?
bool calculate_d2phi
Should we calculate shape function hessians?
const unsigned int dim
The dimensionality of the object.
bool calculate_phi
Should we calculate shape functions?
bool calculate_dphi
Should we calculate shape function gradients?
bool calculate_curl_phi
Should we calculate shape function curls?
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
bool calculate_dual
Are we calculating dual basis?
bool calculate_dphiref
Should we calculate reference shape function gradients?
bool calculate_div_phi
Should we calculate shape function divergences?
This class forms the foundation from which generic finite elements may be derived.
Definition fe_base.h:86
std::vector< std::vector< OutputTensor > > d2phi
Shape function second derivative values.
Definition fe_base.h:712
const std::vector< std::vector< OutputShape > > & get_d2phidxidzeta() const
Definition fe_base.h:433
virtual ~FEGenericBase()
Destructor.
const std::vector< std::vector< OutputShape > > & get_dphidxi() const
Definition fe_base.h:325
virtual_for_inffe void determine_calculations()
Determine which values are to be calculated, for both the FE itself and for the FEMap.
Definition fe_base.C:951
const std::vector< std::vector< OutputShape > > & get_dphidzeta() const
Definition fe_base.h:341
static std::unique_ptr< FEGenericBase > build(const unsigned int dim, const FEType &type)
Builds a specific finite element type.
virtual void request_dphi() const override
request dphi calculations
Definition fe_base.h:265
TensorTools::IncrementRank< OutputNumberGradient >::type OutputNumberTensor
Definition fe_base.h:125
virtual void init_base_shape_functions(const std::vector< Point > &qp, const Elem *e)=0
Initialize the data fields for the base of an an infinite element.
void compute_dual_shape_coeffs(const std::vector< Real > &JxW, const std::vector< std::vector< OutputShape > > &phi)
Compute the dual basis coefficients dual_coeff we rely on the JxW (or weights) and the phi values,...
Definition fe_base.h:838
std::vector< std::vector< OutputShape > > d2phidxdz
Shape function second derivatives in the x-z direction.
Definition fe_base.h:758
const std::vector< std::vector< OutputShape > > & get_dphidy() const
Definition fe_base.h:309
virtual void print_dphi(std::ostream &os) const override
Prints the value of each shape function's derivative at each quadrature point.
Definition fe_base.C:933
std::vector< std::vector< OutputShape > > d2phidxidzeta
Shape function second derivatives in the xi-zeta direction.
Definition fe_base.h:728
std::vector< std::vector< OutputShape > > d2phidx2
Shape function second derivatives in the x direction.
Definition fe_base.h:748
static void coarsened_dof_values(const NumericVector< Number > &global_vector, const DofMap &dof_map, const Elem *coarse_elem, DenseVector< Number > &coarse_dofs, const unsigned int var, const bool use_old_dof_indices=false)
Creates a local projection on coarse_elem, based on the DoF values in global_vector for it's children...
Definition fe_base.C:1014
std::vector< std::vector< OutputShape > > d2phidz2
Shape function second derivatives in the z direction.
Definition fe_base.h:773
DenseMatrix< Real > dual_coeff
Coefficient matrix for the dual basis.
Definition fe_base.h:664
std::vector< std::vector< OutputShape > > dphidx
Shape function derivatives in the x direction.
Definition fe_base.h:694
virtual void request_dual_phi() const override
Definition fe_base.h:245
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
Definition fe_base.h:293
std::vector< std::vector< OutputShape > > d2phidy2
Shape function second derivatives in the y direction.
Definition fe_base.h:763
const std::vector< std::vector< OutputShape > > & get_phi() const
Definition fe_base.h:207
virtual const std::vector< RealGradient > & get_Sobolev_dweight() const
Definition fe_base.h:499
const DenseMatrix< Real > & get_dual_coeff() const
Definition fe_base.h:276
const std::vector< std::vector< OutputGradient > > & get_dphi() const
Definition fe_base.h:252
FEGenericBase(const unsigned int dim, const FEType &fet)
Constructor.
Definition fe_base.h:865
std::vector< std::vector< OutputShape > > dphidy
Shape function derivatives in the y direction.
Definition fe_base.h:699
std::vector< std::vector< OutputShape > > d2phidydz
Shape function second derivatives in the y-z direction.
Definition fe_base.h:768
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition fe_base.C:1572
std::vector< std::vector< OutputDivergence > > div_phi
Shape function divergence values.
Definition fe_base.h:674
std::vector< Real > weight
Used for certain infinite element families: the additional radial weight in local coordinates,...
Definition fe_base.h:805
static std::unique_ptr< FEGenericBase > build_InfFE(const unsigned int dim, const FEType &type)
Builds a specific infinite element type.
const std::vector< std::vector< OutputShape > > & get_dphidx() const
Definition fe_base.h:301
virtual void print_dual_d2phi(std::ostream &os) const override
Definition fe_base.C:999
std::vector< std::vector< OutputGradient > > dual_dphi
Definition fe_base.h:659
const std::vector< std::vector< OutputShape > > & get_d2phidxi2() const
Definition fe_base.h:417
TensorTools::IncrementRank< OutputNumber >::type OutputNumberGradient
Definition fe_base.h:124
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition fe_base.h:658
std::vector< std::vector< OutputShape > > d2phidxi2
Shape function second derivatives in the xi direction.
Definition fe_base.h:718
virtual void request_phi() const override
request phi calculations
Definition fe_base.h:242
virtual void print_d2phi(std::ostream &os) const override
Prints the value of each shape function's second derivatives at each quadrature point.
Definition fe_base.C:991
const std::vector< std::vector< OutputShape > > & get_dual_phi() const
Definition fe_base.h:233
const std::vector< std::vector< OutputGradient > > & get_dual_dphi() const
Definition fe_base.h:261
std::vector< std::vector< OutputShape > > d2phidxideta
Shape function second derivatives in the xi-eta direction.
Definition fe_base.h:723
virtual void print_phi(std::ostream &os) const override
Prints the value of each shape function at each quadrature point.
Definition fe_base.C:914
const std::vector< std::vector< OutputShape > > & get_d2phidx2() const
Definition fe_base.h:369
static void compute_periodic_constraints(DofConstraints &constraints, DofMap &dof_map, const PeriodicBoundaries &boundaries, const MeshBase &mesh, const PointLocatorBase *point_locator, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for meshes with periodic boundary conditions) correspon...
Definition fe_base.C:1880
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition fe_base.h:652
std::vector< std::vector< OutputShape > > dphidzeta
Shape function derivatives in the zeta direction.
Definition fe_base.h:689
const std::vector< std::vector< OutputShape > > & get_d2phideta2() const
Definition fe_base.h:441
OutputType OutputShape
Convenient typedefs for gradients of output, hessians of output, and potentially-complex-valued versi...
Definition fe_base.h:119
const std::vector< std::vector< OutputShape > > & get_d2phidy2() const
Definition fe_base.h:393
const std::vector< std::vector< OutputTensor > > & get_dual_d2phi() const
Definition fe_base.h:361
std::vector< std::vector< OutputTensor > > dual_d2phi
Definition fe_base.h:713
virtual void print_dual_phi(std::ostream &os) const override
Definition fe_base.C:922
const std::vector< OutputGradient > & get_dphase() const
Definition fe_base.h:475
std::vector< OutputGradient > dphase
Used for certain infinite element families: the first derivatives of the phase term in global coordin...
Definition fe_base.h:791
virtual const std::vector< Real > & get_Sobolev_weightxR_sq() const
Definition fe_base.h:508
std::vector< std::vector< OutputShape > > dphidz
Shape function derivatives in the z direction.
Definition fe_base.h:704
std::vector< std::vector< OutputShape > > dual_phi
Definition fe_base.h:653
std::vector< std::vector< OutputShape > > d2phidetadzeta
Shape function second derivatives in the eta-zeta direction.
Definition fe_base.h:738
const std::vector< std::vector< OutputShape > > & get_d2phidzeta2() const
Definition fe_base.h:457
TensorTools::MakeNumber< OutputShape >::type OutputNumber
Definition fe_base.h:123
const std::vector< std::vector< OutputShape > > & get_d2phidetadzeta() const
Definition fe_base.h:449
const std::vector< std::vector< OutputShape > > & get_d2phidz2() const
Definition fe_base.h:409
virtual const std::vector< Real > & get_Sobolev_weight() const
Definition fe_base.h:491
std::vector< std::vector< OutputShape > > dphidxi
Shape function derivatives in the xi direction.
Definition fe_base.h:679
TensorTools::DecrementRank< OutputShape >::type OutputDivergence
Definition fe_base.h:122
const std::vector< std::vector< OutputShape > > & get_d2phidydz() const
Definition fe_base.h:401
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
Definition fe_base.h:351
std::vector< std::vector< OutputShape > > d2phideta2
Shape function second derivatives in the eta direction.
Definition fe_base.h:733
std::unique_ptr< FETransformationBase< OutputType > > _fe_trans
Object that handles computing shape function values, gradients, etc in the physical domain.
Definition fe_base.h:647
virtual const std::vector< std::vector< OutputGradient > > & get_dphi_over_decay() const
Definition fe_base.h:549
std::vector< std::vector< OutputShape > > d2phidxdy
Shape function second derivatives in the x-y direction.
Definition fe_base.h:753
const std::vector< std::vector< OutputShape > > & get_dphidz() const
Definition fe_base.h:317
virtual void compute_shape_functions(const Elem *elem, const std::vector< Point > &qp) override
After having updated the jacobian and the transformation from local to global coordinates in FEMap::c...
Definition fe_base.C:774
TensorTools::IncrementRank< OutputGradient >::type OutputTensor
Definition fe_base.h:121
virtual void print_dual_dphi(std::ostream &os) const override
Definition fe_base.C:941
std::vector< RealGradient > dweight
Used for certain infinite element families: the global derivative of the additional radial weight ,...
Definition fe_base.h:798
virtual void request_dual_dphi() const override
Definition fe_base.h:268
virtual const std::vector< std::vector< OutputGradient > > & get_dphi_over_decayxR() const
Definition fe_base.h:539
virtual const std::vector< std::vector< OutputShape > > & get_phi_over_decayxR() const
Definition fe_base.h:531
const std::vector< std::vector< OutputShape > > & get_d2phidxideta() const
Definition fe_base.h:425
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const
Definition fe_base.h:284
std::vector< std::vector< OutputShape > > d2phidzeta2
Shape function second derivatives in the zeta direction.
Definition fe_base.h:743
virtual const std::vector< RealGradient > & get_Sobolev_dweightxR_sq() const
Definition fe_base.h:518
std::vector< std::vector< OutputShape > > curl_phi
Shape function curl values.
Definition fe_base.h:669
const std::vector< std::vector< OutputShape > > & get_d2phidxdz() const
Definition fe_base.h:385
std::vector< std::vector< OutputShape > > dphideta
Shape function derivatives in the eta direction.
Definition fe_base.h:684
const std::vector< std::vector< OutputShape > > & get_d2phidxdy() const
Definition fe_base.h:377
bool calculating_nothing() const
Definition fe_base.h:606
TensorTools::IncrementRank< OutputShape >::type OutputGradient
Definition fe_base.h:120
const std::vector< std::vector< OutputShape > > & get_dphideta() const
Definition fe_base.h:333
void compute_dual_shape_functions()
Compute dual_phi, dual_dphi, dual_d2phi It is only valid for this to be called after reinit has occur...
Definition fe_base.h:830
TensorTools::DecrementRank< OutputNumber >::type OutputNumberDivergence
Definition fe_base.h:126
This class handles the computation of the shape functions in the physical domain.
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition fe_type.h:197
A specific instantiation of the FEBase class.
Definition inf_fe.h:225
This is the MeshBase class.
Definition mesh_base.h:81
Provides a uniform interface to vector storage schemes for different linear algebra libraries.
We're using a class instead of a typedef to allow forward declarations and future flexibility.
This is the base class for point locators.
This class defines a vector in LIBMESH_DIM dimensional Real or Complex space.
MeshBase & mesh
The libMesh namespace provides an interface to certain functionality in the library.
FEGenericBase< RealGradient > FEVectorBase
Definition fe_base.h:856
libmesh_assert(ctx)
FEGenericBase< Real > FEBase