187 lines
3.4 KiB
C++
187 lines
3.4 KiB
C++
#include"BF.h"
|
|
|
|
int BF::GetNbrBF(int dim, int GeoType, int BFType, int order)
|
|
{
|
|
_mDim = dim;
|
|
_mGeoType = GeoType;
|
|
_mBFType = BFType;
|
|
|
|
if (dim == ONEDIM)
|
|
{
|
|
if (GeoType == LINE)
|
|
{
|
|
if (order == BF_LINEFUNC)
|
|
_mNbrBF = 2;
|
|
else if (order == BF_QUADFUNC)
|
|
_mNbrBF = 3;
|
|
else
|
|
_mNbrBF = 0;
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
}
|
|
else if (dim == TWODIM)
|
|
{
|
|
if (GeoType == TRIANGLE)
|
|
{
|
|
if ((BFType >= BF_LAGRANGE) && (BFType <= BF_CURL_LAGRANGE))
|
|
{
|
|
order = Limit_Int(order, BF_MIMORDER, BF_MAXORDER);
|
|
_mNbrBF = (order + 1) * (order + 2) / 2;
|
|
}
|
|
else if ((BFType >= BF_NEDELEC) && (BFType <= BF_CURL_NEDELEC))
|
|
{
|
|
order = Limit_Int(order, BF_MIMORDER, BF_MAXORDER);
|
|
_mNbrBF = order * (order + 2);
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
}
|
|
else if (GeoType == QUADRANGLE)
|
|
{
|
|
if ((BFType >= BF_LAGRANGE) && (BFType <= BF_CURL_LAGRANGE))
|
|
{
|
|
_mNbrBF = 0;
|
|
//order = LimitInt(order, BF_MIMORDER, BF_MAXORDER);
|
|
}
|
|
else if ((BFType >= BF_NEDELEC) && (BFType <= BF_CURL_NEDELEC))
|
|
{
|
|
_mNbrBF = 0;
|
|
//order = LimitInt(order, BF_MIMORDER, BF_MAXORDER);
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
}
|
|
else if (dim == THREEDIM)
|
|
{
|
|
if (GeoType == TETRAHEDRON)
|
|
{
|
|
if ((BFType >= BF_NEDELEC) && (BFType <= BF_CURL_NEDELEC))
|
|
{
|
|
order = Limit_Int(order, BF_MIMORDER, BF_MAXORDER);
|
|
_mNbrBF = order * (order + 2) * (order + 3) / 2;
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
}
|
|
else if (GeoType == PRISM)
|
|
{
|
|
if ((BFType >= BF_NEDELEC) && (BFType <= BF_CURL_NEDELEC))
|
|
{
|
|
order = Limit_Int(order, BF_MIMORDER, BF_MAXORDER);
|
|
_mNbrBF = 3 * order * (order + 1) * (order + 2) / 2;
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_mNbrBF = 0;
|
|
}
|
|
|
|
_mOrder = order;
|
|
return _mNbrBF;
|
|
}
|
|
|
|
int BF::GetNbrBF()
|
|
{
|
|
return _mNbrBF;
|
|
}
|
|
|
|
void BF::GetValueBF(int numBF, double u, double v, double w, Eigen::Vector3d& o)
|
|
{
|
|
if (_mDim == ONEDIM)
|
|
{
|
|
if (_mGeoType == LINE)
|
|
{
|
|
if (_mBFType == BF_LAGRANGE)
|
|
{
|
|
BF_Line_Lagrange(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_GRAD_LAGRANGE)
|
|
{
|
|
BF_Line_Grad_Lagrange(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_CURL_LAGRANGE)
|
|
{
|
|
BF_Line_Curl_Lagrange(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
}
|
|
}
|
|
else if (_mDim == TWODIM)
|
|
{
|
|
if (_mGeoType == TRIANGLE)
|
|
{
|
|
if (_mBFType == BF_LAGRANGE)
|
|
{
|
|
BF_Triangle_Lagrange(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_GRAD_LAGRANGE)
|
|
{
|
|
BF_Triangle_Grad_Lagrange(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_CURL_LAGRANGE)
|
|
{
|
|
BF_Triangle_Curl_Lagrange(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_NEDELEC)
|
|
{
|
|
BF_Triangle_Nedelec(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_CURL_NEDELEC)
|
|
{
|
|
BF_Triangle_Curl_Nedelec(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
}
|
|
else if (_mGeoType == QUADRANGLE)
|
|
{
|
|
|
|
}
|
|
}
|
|
else if (_mDim == THREEDIM)
|
|
{
|
|
if (_mGeoType == TETRAHEDRON)
|
|
{
|
|
if (_mBFType == BF_NEDELEC)
|
|
{
|
|
BF_Tetrahedron_Nedelec(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_CURL_NEDELEC)
|
|
{
|
|
BF_Tetrahedron_Curl_Nedelec(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
}
|
|
else if (_mGeoType == PRISM)
|
|
{
|
|
if (_mBFType == BF_NEDELEC)
|
|
{
|
|
BF_Prism_Nedelec(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
else if (_mBFType == BF_CURL_NEDELEC)
|
|
{
|
|
BF_Prism_Curl_Nedelec(_mOrder, numBF, u, v, w, o);
|
|
}
|
|
}
|
|
}
|
|
}
|