00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <P2Triangle3DFiniteElement.hpp>
00021
00022 TinyVector<3, real_t> P2Triangle3DFiniteElement::__massCenter(1./3., 1./3., 0);
00023
00024 real_t
00025 P2Triangle3DFiniteElement::W(const size_t& i,
00026 const TinyVector<3>& X) const
00027 {
00028 const real_t& x = X[0];
00029 const real_t& y = X[1];
00030
00031 switch (i) {
00032
00033 case 0: {
00034 return (1-x-y)*(1-x-y);
00035 }
00036 case 1: {
00037 return x*x;
00038 }
00039 case 2: {
00040 return y*y;
00041 }
00042
00043 case 3: {
00044 return 4*x*y;
00045 }
00046 case 4: {
00047 return 4*(1-x-y)*x;
00048 }
00049 case 5: {
00050 return 4*(1-x-y)*y;
00051 }
00052 default: {
00053 throw ErrorHandler(__FILE__,__LINE__,
00054 "unexpected basis function number",
00055 ErrorHandler::unexpected);
00056 return 0.;
00057 }
00058 }
00059 }
00060
00061 real_t
00062 P2Triangle3DFiniteElement::dxW(const size_t& i, const TinyVector<3>& X) const
00063 {
00064 const real_t& x = X[0];
00065 const real_t& y = X[1];
00066
00067 switch (i) {
00068
00069 case 0: {
00070 return -2*(1-x-y);
00071 }
00072 case 1: {
00073 return 2*x;
00074 }
00075 case 2: {
00076 return 0;
00077 }
00078
00079 case 3: {
00080 return 4*y;
00081 }
00082 case 4: {
00083 return 4*(1-2*x-y);
00084 }
00085 case 5: {
00086 return -4*y;
00087 }
00088 default: {
00089 throw ErrorHandler(__FILE__,__LINE__,
00090 "unexpected basis function number",
00091 ErrorHandler::unexpected);
00092 return 0.;
00093 }
00094 }
00095 }
00096
00097 real_t
00098 P2Triangle3DFiniteElement::dyW(const size_t& i,
00099 const TinyVector<3>& X) const
00100 {
00101 const real_t& x = X[0];
00102 const real_t& y = X[1];
00103
00104 switch (i) {
00105
00106 case 0: {
00107 return -2*(1-x-y);
00108 }
00109 case 1: {
00110 return 0;
00111 }
00112 case 2: {
00113 return 2*y;
00114 }
00115
00116 case 3: {
00117 return 4*x;
00118 }
00119 case 4: {
00120 return -4*x;
00121 }
00122 case 5: {
00123 return 4*(1-x-2*y);
00124 }
00125 default: {
00126 throw ErrorHandler(__FILE__,__LINE__,
00127 "unexpected basis function number",
00128 ErrorHandler::unexpected);
00129 return 0.;
00130 }
00131 }
00132 }
00133
00134 real_t
00135 P2Triangle3DFiniteElement::dzW(const size_t& i,
00136 const TinyVector<3>& X) const
00137 {
00138 switch (i) {
00139
00140 case 0:
00141 case 1:
00142 case 2:
00143
00144 case 3:
00145 case 4:
00146 case 5: {
00147 return 0;
00148 }
00149 default: {
00150 throw ErrorHandler(__FILE__,__LINE__,
00151 "unexpected basis function number",
00152 ErrorHandler::unexpected);
00153 return 0.;
00154 }
00155 }
00156 }