- Home
- About DUNE
- Download
- Documentation
- Community
- Development
00001 // -*- tab-width: 4; indent-tabs-mode: nil -*- 00002 #ifndef DUNE_PRISM_P2_LOCALBASIS_HH 00003 #define DUNE_PRISM_P2_LOCALBASIS_HH 00004 00005 #include <dune/common/fmatrix.hh> 00006 00007 #include <dune/localfunctions/common/localbasis.hh> 00008 00009 namespace Dune 00010 { 00021 template<class D, class R> 00022 class PrismP2LocalBasis 00023 { 00024 public: 00026 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>, 00027 Dune::FieldMatrix<R,1,3> > Traits; 00028 00030 unsigned int size () const 00031 { 00032 return 18; 00033 } 00034 00036 inline void evaluateFunction (const typename Traits::DomainType& in, 00037 std::vector<typename Traits::RangeType>& out) const 00038 { 00039 out.resize(18); 00040 00041 00042 int coeff; 00043 R a[2], b[2], c[2], a1d, b1d, c1d; 00044 00045 00046 // lower triangle: 00047 coeff= 2; 00048 a[0] = 1; 00049 a[1] = 0.5; 00050 b[0] = -1; 00051 b[1] = -1; 00052 c[0] = -1; 00053 c[1] = -1; 00054 a1d = 1; 00055 b1d = -3; 00056 c1d = 2; 00057 out[0] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00058 00059 00060 coeff= 2; 00061 a[0] = 0; 00062 a[1] = -0.5; 00063 b[0] = 1; 00064 b[1] = 0; 00065 c[0] = 1; 00066 c[1] = 0; 00067 a1d = 1; 00068 b1d = -3; 00069 c1d = 2; 00070 out[1] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00071 00072 00073 coeff= 2; 00074 a[0] = 0; 00075 a[1] = -0.5; 00076 b[0] = 0; 00077 b[1] = 1; 00078 c[0] = 0; 00079 c[1] = 1; 00080 a1d = 1; 00081 b1d = -3; 00082 c1d = 2; 00083 out[2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00084 00085 //upper triangle 00086 coeff= 2; 00087 a[0] = 1; 00088 a[1] = 0.5; 00089 b[0] = -1; 00090 b[1] = -1; 00091 c[0] = -1; 00092 c[1] = -1; 00093 a1d = 0; 00094 b1d = -1; 00095 c1d = 2; 00096 out[3] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00097 00098 00099 coeff= 2; 00100 a[0] = 0; 00101 a[1] = -0.5; 00102 b[0] = 1; 00103 b[1] = 0; 00104 c[0] = 1; 00105 c[1] = 0; 00106 a1d = 0; 00107 b1d = -1; 00108 c1d = 2; 00109 out[4] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00110 00111 00112 coeff= 2; 00113 a[0] = 0; 00114 a[1] = -0.5; 00115 b[0] = 0; 00116 b[1] = 1; 00117 c[0] = 0; 00118 c[1] = 1; 00119 a1d = 0; 00120 b1d = -1; 00121 c1d = 2; 00122 out[5] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00123 00124 // vertical edges 00125 coeff= 2; 00126 a[0] = 1; 00127 a[1] = 0.5; 00128 b[0] = -1; 00129 b[1] = -1; 00130 c[0] = -1; 00131 c[1] = -1; 00132 a1d = 0; 00133 b1d = 4; 00134 c1d = -4; 00135 out[6] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00136 00137 00138 coeff= 2; 00139 a[0] = 0; 00140 a[1] = -0.5; 00141 b[0] = 1; 00142 b[1] = 0; 00143 c[0] = 1; 00144 c[1] = 0; 00145 a1d = 0; 00146 b1d = 4; 00147 c1d = -4; 00148 out[7] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00149 00150 00151 coeff= 2; 00152 a[0] = 0; 00153 a[1] = -0.5; 00154 b[0] = 0; 00155 b[1] = 1; 00156 c[0] = 0; 00157 c[1] = 1; 00158 a1d = 0; 00159 b1d = 4; 00160 c1d = -4; 00161 out[8] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00162 00163 // lower triangle edges 00164 coeff= 4; 00165 a[0] = 0; 00166 a[1] = 1; 00167 b[0] = 1; 00168 b[1] = 0; 00169 c[0] = -1; 00170 c[1] = -1; 00171 a1d = 1; 00172 b1d = -3; 00173 c1d = 2; 00174 out[9] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00175 00176 00177 coeff= 4; 00178 a[0] = 0; 00179 a[1] = 1; 00180 b[0] = 0; 00181 b[1] = 1; 00182 c[0] = -1; 00183 c[1] = -1; 00184 a1d = 1; 00185 b1d = -3; 00186 c1d = 2; 00187 out[10] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00188 00189 00190 coeff= 4; 00191 a[0] = 0; 00192 a[1] = 0; 00193 b[0] = 1; 00194 b[1] = 0; 00195 c[0] = 0; 00196 c[1] = 1; 00197 a1d = 1; 00198 b1d = -3; 00199 c1d = 2; 00200 out[11] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00201 00202 // upper triangle edges 00203 coeff= 4; 00204 a[0] = 0; 00205 a[1] = 1; 00206 b[0] = 1; 00207 b[1] = 0; 00208 c[0] = -1; 00209 c[1] = -1; 00210 a1d = 0; 00211 b1d = -1; 00212 c1d = 2; 00213 out[12] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00214 00215 00216 coeff= 4; 00217 a[0] = 0; 00218 a[1] = 1; 00219 b[0] = 0; 00220 b[1] = 1; 00221 c[0] = -1; 00222 c[1] = -1; 00223 a1d = 0; 00224 b1d = -1; 00225 c1d = 2; 00226 out[13] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00227 00228 00229 coeff= 4; 00230 a[0] = 0; 00231 a[1] = 0; 00232 b[0] = 1; 00233 b[1] = 0; 00234 c[0] = 0; 00235 c[1] = 1; 00236 a1d = 0; 00237 b1d = -1; 00238 c1d = 2; 00239 out[14] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00240 00241 // quadrilateral sides 00242 coeff= 4; 00243 a[0] = 0; 00244 a[1] = 1; 00245 b[0] = 1; 00246 b[1] = 0; 00247 c[0] = -1; 00248 c[1] = -1; 00249 a1d = 0; 00250 b1d = 4; 00251 c1d = -4; 00252 out[15] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00253 00254 00255 coeff= 4; 00256 a[0] = 0; 00257 a[1] = 1; 00258 b[0] = 0; 00259 b[1] = 1; 00260 c[0] = -1; 00261 c[1] = -1; 00262 a1d = 0; 00263 b1d = 4; 00264 c1d = -4; 00265 out[16] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00266 00267 00268 coeff= 4; 00269 a[0] = 0; 00270 a[1] = 0; 00271 b[0] = 1; 00272 b[1] = 0; 00273 c[0] = 0; 00274 c[1] = 1; 00275 a1d = 0; 00276 b1d = 4; 00277 c1d = -4; 00278 out[17] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d); 00279 } 00280 00282 inline void 00283 evaluateJacobian (const typename Traits::DomainType& in, // position 00284 std::vector<typename Traits::JacobianType>& out) const // return value 00285 { 00286 out.resize(18); 00287 00288 00289 00290 int coeff; 00291 R a[2], b[2], c[2], aa[2], bb[2][2], a1d, b1d, c1d; 00292 00293 00294 // lower triangle: 00295 coeff= 2; 00296 a[0] = 1; 00297 a[1] = 0.5; 00298 b[0] = -1; 00299 b[1] = -1; 00300 c[0] = -1; 00301 c[1] = -1; 00302 a1d = 1; 00303 b1d = -3; 00304 c1d = 2; 00305 aa[0] = -3; 00306 aa[1] = -3; 00307 bb[0][0] = 4; 00308 bb[0][1] = 4; 00309 bb[1][0] = 4; 00310 bb[1][1] = 4; 00311 out[0][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00312 out[0][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00313 out[0][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00314 00315 00316 00317 coeff= 2; 00318 a[0] = 0; 00319 a[1] = -0.5; 00320 b[0] = 1; 00321 b[1] = 0; 00322 c[0] = 1; 00323 c[1] = 0; 00324 a1d = 1; 00325 b1d = -3; 00326 c1d = 2; 00327 aa[0] = -1; 00328 aa[1] = 0; 00329 bb[0][0] = 4; 00330 bb[0][1] = 0; 00331 bb[1][0] = 0; 00332 bb[1][1] = 0; 00333 out[1][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00334 out[1][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00335 out[1][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00336 00337 00338 coeff= 2; 00339 a[0] = 0; 00340 a[1] = -0.5; 00341 b[0] = 0; 00342 b[1] = 1; 00343 c[0] = 0; 00344 c[1] = 1; 00345 a1d = 1; 00346 b1d = -3; 00347 c1d = 2; 00348 aa[0] = 0; 00349 aa[1] = -1; 00350 bb[0][0] = 0; 00351 bb[0][1] = 0; 00352 bb[1][0] = 0; 00353 bb[1][1] = 4; 00354 out[2][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00355 out[2][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00356 out[2][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00357 00358 00359 //upper triangle 00360 coeff= 2; 00361 a[0] = 1; 00362 a[1] = 0.5; 00363 b[0] = -1; 00364 b[1] = -1; 00365 c[0] = -1; 00366 c[1] = -1; 00367 a1d = 0; 00368 b1d = -1; 00369 c1d = 2; 00370 aa[0] = -3; 00371 aa[1] = -3; 00372 bb[0][0] = 4; 00373 bb[0][1] = 4; 00374 bb[1][0] = 4; 00375 bb[1][1] = 4; 00376 out[3][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00377 out[3][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00378 out[3][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00379 00380 00381 00382 coeff= 2; 00383 a[0] = 0; 00384 a[1] = -0.5; 00385 b[0] = 1; 00386 b[1] = 0; 00387 c[0] = 1; 00388 c[1] = 0; 00389 a1d = 0; 00390 b1d = -1; 00391 c1d = 2; 00392 aa[0] = -1; 00393 aa[1] = 0; 00394 bb[0][0] = 4; 00395 bb[0][1] = 0; 00396 bb[1][0] = 0; 00397 bb[1][1] = 0; 00398 out[4][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00399 out[4][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00400 out[4][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00401 00402 00403 00404 coeff= 2; 00405 a[0] = 0; 00406 a[1] = -0.5; 00407 b[0] = 0; 00408 b[1] = 1; 00409 c[0] = 0; 00410 c[1] = 1; 00411 a1d = 0; 00412 b1d = -1; 00413 c1d = 2; 00414 aa[0] = 0; 00415 aa[1] = -1; 00416 bb[0][0] = 0; 00417 bb[0][1] = 0; 00418 bb[1][0] = 0; 00419 bb[1][1] = 4; 00420 out[5][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00421 out[5][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00422 out[5][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00423 00424 00425 00426 // vertical edges 00427 coeff= 2; 00428 a[0] = 1; 00429 a[1] = 0.5; 00430 b[0] = -1; 00431 b[1] = -1; 00432 c[0] = -1; 00433 c[1] = -1; 00434 a1d = 0; 00435 b1d = 4; 00436 c1d = -4; 00437 aa[0] = -3; 00438 aa[1] = -3; 00439 bb[0][0] = 4; 00440 bb[0][1] = 4; 00441 bb[1][0] = 4; 00442 bb[1][1] = 4; 00443 out[6][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00444 out[6][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00445 out[6][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00446 00447 00448 00449 coeff= 2; 00450 a[0] = 0; 00451 a[1] = -0.5; 00452 b[0] = 1; 00453 b[1] = 0; 00454 c[0] = 1; 00455 c[1] = 0; 00456 a1d = 0; 00457 b1d = 4; 00458 c1d = -4; 00459 aa[0] = -1; 00460 aa[1] = 0; 00461 bb[0][0] = 4; 00462 bb[0][1] = 0; 00463 bb[1][0] = 0; 00464 bb[1][1] = 0; 00465 out[7][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00466 out[7][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00467 out[7][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00468 00469 00470 00471 coeff= 2; 00472 a[0] = 0; 00473 a[1] = -0.5; 00474 b[0] = 0; 00475 b[1] = 1; 00476 c[0] = 0; 00477 c[1] = 1; 00478 a1d = 0; 00479 b1d = 4; 00480 c1d = -4; 00481 aa[0] = 0; 00482 aa[1] = -1; 00483 bb[0][0] = 0; 00484 bb[0][1] = 0; 00485 bb[1][0] = 0; 00486 bb[1][1] = 4; 00487 out[8][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00488 out[8][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00489 out[8][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00490 00491 00492 00493 00494 // lower triangle edges 00495 coeff= 4; 00496 a[0] = 0; 00497 a[1] = 1; 00498 b[0] = 1; 00499 b[1] = 0; 00500 c[0] = -1; 00501 c[1] = -1; 00502 a1d = 1; 00503 b1d = -3; 00504 c1d = 2; 00505 aa[0] = 4; 00506 aa[1] = 0; 00507 bb[0][0] = -8; 00508 bb[0][1] = -4; 00509 bb[1][0] = -4; 00510 bb[1][1] = 0; 00511 out[9][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00512 out[9][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00513 out[9][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00514 00515 00516 00517 00518 coeff= 4; 00519 a[0] = 0; 00520 a[1] = 1; 00521 b[0] = 0; 00522 b[1] = 1; 00523 c[0] = -1; 00524 c[1] = -1; 00525 a1d = 1; 00526 b1d = -3; 00527 c1d = 2; 00528 aa[0] = 0; 00529 aa[1] = 4; //changed from zero to 4 00530 bb[0][0] = 0; 00531 bb[0][1] = -4; 00532 bb[1][0] = -4; 00533 bb[1][1] = -8; 00534 out[10][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00535 out[10][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00536 out[10][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00537 00538 00539 00540 coeff= 4; 00541 a[0] = 0; 00542 a[1] = 0; 00543 b[0] = 1; 00544 b[1] = 0; 00545 c[0] = 0; 00546 c[1] = 1; 00547 a1d = 1; 00548 b1d = -3; 00549 c1d = 2; 00550 aa[0] = 0; 00551 aa[1] = 0; 00552 bb[0][0] = 0; 00553 bb[0][1] = 4; 00554 bb[1][0] = 4; 00555 bb[1][1] = 0; 00556 out[11][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00557 out[11][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00558 out[11][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00559 00560 00561 00562 // upper triangle edges 00563 coeff= 4; 00564 a[0] = 0; 00565 a[1] = 1; 00566 b[0] = 1; 00567 b[1] = 0; 00568 c[0] = -1; 00569 c[1] = -1; 00570 a1d = 0; 00571 b1d = -1; 00572 c1d = 2; 00573 aa[0] = 4; 00574 aa[1] = 0; 00575 bb[0][0] = -8; 00576 bb[0][1] = -4; 00577 bb[1][0] = -4; 00578 bb[1][1] = 0; 00579 out[12][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00580 out[12][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00581 out[12][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00582 00583 00584 00585 coeff= 4; 00586 a[0] = 0; 00587 a[1] = 1; 00588 b[0] = 0; 00589 b[1] = 1; 00590 c[0] = -1; 00591 c[1] = -1; 00592 a1d = 0; 00593 b1d = -1; 00594 c1d = 2; 00595 aa[0] = 0; 00596 aa[1] = 4; 00597 bb[0][0] = 0; 00598 bb[0][1] = -4; 00599 bb[1][0] = -4; 00600 bb[1][1] = -8; 00601 out[13][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00602 out[13][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00603 out[13][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00604 00605 00606 00607 coeff= 4; 00608 a[0] = 0; 00609 a[1] = 0; 00610 b[0] = 1; 00611 b[1] = 0; 00612 c[0] = 0; 00613 c[1] = 1; 00614 a1d = 0; 00615 b1d = -1; 00616 c1d = 2; 00617 aa[0] = 0; 00618 aa[1] = 0; 00619 bb[0][0] = 0; 00620 bb[0][1] = 4; 00621 bb[1][0] = 4; 00622 bb[1][1] = 0; 00623 out[14][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00624 out[14][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00625 out[14][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00626 00627 00628 00629 // quadrilateral sides 00630 coeff= 4; 00631 a[0] = 0; 00632 a[1] = 1; 00633 b[0] = 1; 00634 b[1] = 0; 00635 c[0] = -1; 00636 c[1] = -1; 00637 a1d = 0; 00638 b1d = 4; 00639 c1d = -4; 00640 aa[0] = 4; 00641 aa[1] = 0; 00642 bb[0][0] = -8; 00643 bb[0][1] = -4; 00644 bb[1][0] = -4; 00645 bb[1][1] = 0; 00646 out[15][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00647 out[15][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00648 out[15][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00649 00650 00651 00652 00653 00654 coeff= 4; 00655 a[0] = 0; 00656 a[1] = 1; 00657 b[0] = 0; 00658 b[1] = 1; 00659 c[0] = -1; 00660 c[1] = -1; 00661 a1d = 0; 00662 b1d = 4; 00663 c1d = -4; 00664 aa[0] = 0; 00665 aa[1] = 4; 00666 bb[0][0] = 0; 00667 bb[0][1] = -4; 00668 bb[1][0] = -4; 00669 bb[1][1] = -8; 00670 out[16][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00671 out[16][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00672 out[16][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00673 00674 00675 00676 00677 coeff= 4; 00678 a[0] = 0; 00679 a[1] = 0; 00680 b[0] = 1; 00681 b[1] = 0; 00682 c[0] = 0; 00683 c[1] = 1; 00684 a1d = 0; 00685 b1d = 4; 00686 c1d = -4; 00687 aa[0] = 0; 00688 aa[1] = 0; 00689 bb[0][0] = 0; 00690 bb[0][1] = 4; 00691 bb[1][0] = 4; 00692 bb[1][1] = 0; 00693 out[17][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00694 out[17][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d); 00695 out[17][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 00696 00697 } 00698 00700 unsigned int order () const 00701 { 00702 return 2; 00703 } 00704 }; 00705 } 00706 #endif
Generated on Fri Apr 29 2011 with Doxygen (ver 1.7.1) [doxygen-log,error-log].