XIAN-FEM-2026June/opticsfem-master/function/BF_Triangle.cpp

156 lines
4.5 KiB
C++

#include"BF.h"
void BF_Triangle_Lagrange(BF_INPUT)
{
switch (order)
{
case 1:
switch (numBF)
{
case 1: o(0) = o(1) = 0.; o(2) = 1. - u - v; break;
case 2: o(0) = o(1) = 0.; o(2) = u; break;
case 3: o(0) = o(1) = 0.; o(2) = v; break;
default: break;
}
break;
case 2:
switch (numBF)
{
case 1: o(0) = o(1) = 0.; o(2) = 1.0 - 3.0 * u + 2.0 * u * u - 3.0 * v + 4.0 * u * v + 2.0 * v * v; break;//200
case 2: o(0) = o(1) = 0.; o(2) = -u + 2.0 * u * u; break;//020
case 3: o(0) = o(1) = 0.; o(2) = -v + 2.0 * v * v; break;//002
case 4: o(0) = o(1) = 0.; o(2) = 4.0 * u - 4.0 * u * u - 4.0 * u * v; break;//110
case 5: o(0) = o(1) = 0.; o(2) = 4.0 * v - 4.0 * u * v - 4.0 * v * v; break;//101
case 6: o(0) = o(1) = 0.; o(2) = 4.0 * u * v; break;//011
default: break;
}
break;
default:break;
}
}
void BF_Triangle_Grad_Lagrange(BF_INPUT)
{
switch (order)
{
case 1:
switch (numBF)
{
case 1: o(0) = -1.; o(1) = -1.; o(2) = 0.; break;
case 2: o(0) = 1.; o(1) = 0.; o(2) = 0.; break;
case 3: o(0) = 0.; o(1) = 1.; o(2) = 0.; break;
default: break;
}
break;
case 2:
switch (numBF)
{
case 1: o(0) = -3. + 4. * u + 4. * v; o(1) = -3. + 4. * u + 4. * v; o(2) = 0.; break;//200
case 2: o(0) = -1. + 4. * u; o(1) = 0.; o(2) = 0.; break;//020
case 3: o(0) = 0.; o(1) = -1. + 4. * v; o(2) = 0.; break;//002
case 4: o(0) = 4. - 8. * u - 4. * v; o(1) = -4. * u; o(2) = 0.; break;//110
case 5: o(0) = -4. * v; o(1) = 4. - 4. * u - 8. * v; o(2) = 0.; break;//101
case 6: o(0) = 4. * v; o(1) = 4. * u; o(2) = 0.; break;//011
default: break;
}
break;
default:break;
}
}
void BF_Triangle_Curl_Lagrange(BF_INPUT)
{
switch (order)
{
case 1:
switch (numBF)
{
case 1: o(0) = -1.; o(1) = 1.; o(2) = 0.; break;
case 2: o(0) = 0.; o(1) = -1.; o(2) = 0.; break;
case 3: o(0) = 1.; o(1) = 0.; o(2) = 0.; break;
default: break;
}
break;
case 2:
switch (numBF)
{
case 1: o(0) = -3. + 4. * u + 4. * v; o(1) = 3. - 4. * u - 4. * v; o(2) = 0.; break;//200
case 2: o(0) = 0.; o(1) = 1. - 4. * u; o(2) = 0.; break;//020
case 3: o(0) = -1. + 4. * v; o(1) = 0.; o(2) = 0.; break;//002
case 4: o(0) = -4. * u; o(1) = -4. + 8. * u + 4. * v; o(2) = 0.; break;//110
case 5: o(0) = 4. - 4. * u - 8. * v; o(1) = 4. * v; o(2) = 0.; break;//101
case 6: o(0) = 4. * u; o(1) = -4. * v; o(2) = 0.; break;//011
default: break;
}
break;
default:break;
}
}
void BF_Triangle_Nedelec(BF_INPUT)
{
switch (order)
{
case 1:
switch (numBF)
{
case 1: o(0) = 1. - v; o(1) = u; o(2) = 0.; break; //1-2
case 2: o(0) = v; o(1) = -u + 1.; o(2) = 0.; break; //1-3
case 3: o(0) = -v; o(1) = u; o(2) = 0.; break; //2-3
default:break;
}
break;
case 2:
switch (numBF)
{
case 1: o(0) = -1. + 3. * u + v - 3. * u * v; o(1) = -u + 3. * u * u; o(2) = 0.; break; //3-120 1-2
case 2: o(0) = 2. - 3. * u - 5. * v + 3. * u * v + 3. * v * v; o(1) = 2. * u - 3. * u * u - 3. * u * v; o(2) = 0.; break; //3-210 1-2
case 3: o(0) = -v + 3. * v * v; o(1) = -1. + u + 3. * v - 3. * u * v; o(2) = 0.; break; //2-102 1-3
case 4: o(0) = 2. * v - 3. * u * v - 3. * v * v; o(1) = 2. - 5. * u + 3. * u * u - 3. * v + 3. * u * v; o(2) = 0.; break; //2-201 1-3
case 5: o(0) = v - 3. * v * v; o(1) = -u + 3. * u * v; o(2) = 0.; break; //1-012 2-3
case 6: o(0) = v - 3. * u * v; o(1) = -u + 3. * u * u; o(2) = 0.; break; //1-021 2-3
case 7: o(0) = 1.5 * (3. * v - 3. * v * v); o(1) = 1.5 * (3. * u * v); o(2) = 0.; break; //3-111 1-2
case 8: o(0) = 1.5 * (3. * u * v); o(1) = 1.5 * (3. * u - 3. * u * u); o(2) = 0.; break; //2-111 1-3
default:break;
}
break;
default:break;
}
}
void BF_Triangle_Curl_Nedelec(BF_INPUT)
{
switch (order)
{
case 1:
switch (numBF)
{
case 1: o(0) = 0.; o(1) = 0.; o(2) = 2.; break;
case 2: o(0) = 0.; o(1) = 0.; o(2) = -2.; break;
case 3: o(0) = 0.; o(1) = 0.; o(2) = 2.; break;
default: break;
}
break;
case 2:
switch (numBF)
{
case 1: o(0) = 0.; o(1) = 0.; o(2) = -2. + 9. * u; break; //3-120 1-2
case 2: o(0) = 0.; o(1) = 0.; o(2) = 7. - 9. * u - 9. * v; break; //3-210 1-2
case 3: o(0) = 0.; o(1) = 0.; o(2) = 2 - 9. * v; break; //2-102 1-3
case 4: o(0) = 0.; o(1) = 0.; o(2) = -7. + 9. * u + 9. * v; break; //2-201 1-3
case 5: o(0) = 0.; o(1) = 0.; o(2) = -2. + 9. * v; break; //1-012 2-3
case 6: o(0) = 0.; o(1) = 0.; o(2) = -2. + 9. * u; break; //1-021 2-3
case 7: o(0) = 0.; o(1) = 0.; o(2) = 1.5 * (-3. + 9. * v); break;//3-111 1-2
case 8: o(0) = 0.; o(1) = 0.; o(2) = 1.5 * (3. - 9. * u); break;//2-111 1-3
default: break;
}
break;
default:break;
}
}