📄 fe_base.h
字号:
* d(xi)/d(z). Needed for the Jacobian. */ std::vector<Real> dxidz_map; /** * Map for partial derivatives: * d(eta)/d(x). Needed for the Jacobian. */ std::vector<Real> detadx_map; /** * Map for partial derivatives: * d(eta)/d(y). Needed for the Jacobian. */ std::vector<Real> detady_map; /** * Map for partial derivatives: * d(eta)/d(z). Needed for the Jacobian. */ std::vector<Real> detadz_map; /** * Map for partial derivatives: * d(zeta)/d(x). Needed for the Jacobian. */ std::vector<Real> dzetadx_map; /** * Map for partial derivatives: * d(zeta)/d(y). Needed for the Jacobian. */ std::vector<Real> dzetady_map; /** * Map for partial derivatives: * d(zeta)/d(z). Needed for the Jacobian. */ std::vector<Real> dzetadz_map; /** * Shape function values. */ std::vector<std::vector<Real> > phi; /** * Have calculations with this object already been started? * Then all get_* functions should already have been called. */ mutable bool calculations_started; /** * Should we calculate shape functions? */ mutable bool calculate_phi; /** * Should we calculate shape function gradients? */ mutable bool calculate_dphi; /** * Should we calculate shape function hessians? */ mutable bool calculate_d2phi; /** * Shape function derivative values. */ std::vector<std::vector<RealGradient> > dphi; /** * Shape function derivatives in the xi direction. */ std::vector<std::vector<Real> > dphidxi; /** * Shape function derivatives in the eta direction. */ std::vector<std::vector<Real> > dphideta; /** * Shape function derivatives in the zeta direction. */ std::vector<std::vector<Real> > dphidzeta; /** * Shape function derivatives in the x direction. */ std::vector<std::vector<Real> > dphidx; /** * Shape function derivatives in the y direction. */ std::vector<std::vector<Real> > dphidy; /** * Shape function derivatives in the z direction. */ std::vector<std::vector<Real> > dphidz;#ifdef ENABLE_SECOND_DERIVATIVES /** * Shape function second derivative values. */ std::vector<std::vector<RealTensor> > d2phi; /** * Shape function second derivatives in the xi direction. */ std::vector<std::vector<Real> > d2phidxi2; /** * Shape function second derivatives in the xi-eta direction. */ std::vector<std::vector<Real> > d2phidxideta; /** * Shape function second derivatives in the xi-zeta direction. */ std::vector<std::vector<Real> > d2phidxidzeta; /** * Shape function second derivatives in the eta direction. */ std::vector<std::vector<Real> > d2phideta2; /** * Shape function second derivatives in the eta-zeta direction. */ std::vector<std::vector<Real> > d2phidetadzeta; /** * Shape function second derivatives in the zeta direction. */ std::vector<std::vector<Real> > d2phidzeta2; /** * Shape function second derivatives in the x direction. */ std::vector<std::vector<Real> > d2phidx2; /** * Shape function second derivatives in the x-y direction. */ std::vector<std::vector<Real> > d2phidxdy; /** * Shape function second derivatives in the x-z direction. */ std::vector<std::vector<Real> > d2phidxdz; /** * Shape function second derivatives in the y direction. */ std::vector<std::vector<Real> > d2phidy2; /** * Shape function second derivatives in the y-z direction. */ std::vector<std::vector<Real> > d2phidydz; /** * Shape function second derivatives in the z direction. */ std::vector<std::vector<Real> > d2phidz2; #endif /** * Map for the shape function phi. */ std::vector<std::vector<Real> > phi_map; /** * Map for the derivative, d(phi)/d(xi). */ std::vector<std::vector<Real> > dphidxi_map; /** * Map for the derivative, d(phi)/d(eta). */ std::vector<std::vector<Real> > dphideta_map; /** * Map for the derivative, d(phi)/d(zeta). */ std::vector<std::vector<Real> > dphidzeta_map;#ifdef ENABLE_SECOND_DERIVATIVES /** * Map for the second derivative, d^2(phi)/d(xi)^2. */ std::vector<std::vector<Real> > d2phidxi2_map; /** * Map for the second derivative, d^2(phi)/d(xi)d(eta). */ std::vector<std::vector<Real> > d2phidxideta_map; /** * Map for the second derivative, d^2(phi)/d(xi)d(zeta). */ std::vector<std::vector<Real> > d2phidxidzeta_map; /** * Map for the second derivative, d^2(phi)/d(eta)^2. */ std::vector<std::vector<Real> > d2phideta2_map; /** * Map for the second derivative, d^2(phi)/d(eta)d(zeta). */ std::vector<std::vector<Real> > d2phidetadzeta_map; /** * Map for the second derivative, d^2(phi)/d(zeta)^2. */ std::vector<std::vector<Real> > d2phidzeta2_map;#endif /** * Map for the side shape functions, psi. */ std::vector<std::vector<Real> > psi_map; /** * Map for the derivative of the side functions, * d(psi)/d(xi). */ std::vector<std::vector<Real> > dpsidxi_map; /** * Map for the derivative of the side function, * d(psi)/d(eta). */ std::vector<std::vector<Real> > dpsideta_map; /** * Map for the second derivatives (in xi) of the * side shape functions. Useful for computing * the curvature at the quadrature points. */ std::vector<std::vector<Real> > d2psidxi2_map; /** * Map for the second (cross) derivatives in xi, eta * of the side shape functions. Useful for * computing the curvature at the quadrature points. */ std::vector<std::vector<Real> > d2psidxideta_map; /** * Map for the second derivatives (in eta) of the * side shape functions. Useful for computing the * curvature at the quadrature points. */ std::vector<std::vector<Real> > d2psideta2_map; #ifdef ENABLE_INFINITE_ELEMENTS //-------------------------------------------------------------- /* protected members for infinite elements, which are accessed * from the outside through some inline functions */ /** * Used for certain @e infinite element families: * the first derivatives of the phase term in global coordinates, * over @e all quadrature points. */ std::vector<RealGradient> dphase; /** * Used for certain @e infinite element families: * the global derivative of the additional radial weight \f$ 1/{r^2} \f$, * over @e all quadrature points. */ std::vector<RealGradient> dweight; /** * Used for certain @e infinite element families: * the additional radial weight \f$ 1/{r^2} \f$ in local coordinates, * over @e all quadrature points. */ std::vector<Real> weight;#endif /** * Tangent vectors on boundary at quadrature points. */ std::vector<std::vector<Point> > tangents; /** * Normal vectors on boundary at quadrature points */ std::vector<Point> normals; /** * The mean curvature (= one half the sum of the principal * curvatures) on the boundary at the quadrature points. * The mean curvature is a scalar value. */ std::vector<Real> curvatures; /** * Jacobian*Weight values at quadrature points */ std::vector<Real> JxW; /** * The finite element type for this object. Note that this * should be constant for the object. */ const FEType fe_type; /** * The element type the current data structures are * set up for. */ ElemType elem_type; /** * The p refinement level the current data structures are * set up for. */ unsigned int _p_level; /** * A pointer to the quadrature rule employed */ QBase* qrule; /** * A flag indicating if current data structures * correspond to quadrature rule points */ bool shapes_on_quadrature;private: /** * @returns \p true when the shape functions (for * this \p FEFamily) depend on the particular * element, and therefore needs to be re-initialized * for each new element. \p false otherwise. */ virtual bool shapes_need_reinit() const = 0;#ifdef ENABLE_INFINITE_ELEMENTS /** * Make all \p InfFE<Dim,T_radial,T_map> classes friends * so that they can safely used \p FE<Dim-1,T_base> through * a \p FEBase* as base approximation. */ template <unsigned int friend_Dim, FEFamily friend_T_radial, InfMapType friend_T_map> friend class InfFE;#endif};// ------------------------------------------------------------// FEBase class inline membersinlineFEBase::FEBase(const unsigned int d, const FEType& fet) : dim(d), calculations_started(false), calculate_phi(false), calculate_dphi(false), calculate_d2phi(false), fe_type(fet), elem_type(INVALID_ELEM), _p_level(0), qrule(NULL), shapes_on_quadrature(false){}inlineFEBase::~FEBase(){}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -