140 std::get<0>(ret) = 0;
141 auto array3IsSame = [](
const std::array<int, 3> &a,
const std::array<int, 3> &
b)
143 return (a[0] ==
b[0]) && (a[1] ==
b[1]) && (a[2] ==
b[2]);
145 auto searchForArray3 = [=](
const std::array<int, 3> &a)
149 for (
int i = 0; i < NDiffC; i++)
150 if (array3IsSame(a, diffOps[i]))
155 for (
int d0 = 0; d0 < dim; d0++)
157 std::array<int, 3> entry{0, 0, 0};
159 std::get<1>(ret)[d0] = searchForArray3(entry);
161 for (
int d1 = 0; d1 < dim; d1++)
162 for (
int d0 = 0; d0 < dim; d0++)
164 std::array<int, 3> entry{0, 0, 0};
167 std::get<2>(ret)[d0][d1] = searchForArray3(entry);
169 for (
int d2 = 0; d2 < dim; d2++)
170 for (
int d1 = 0; d1 < dim; d1++)
171 for (
int d0 = 0; d0 < dim; d0++)
173 std::array<int, 3> entry{0, 0, 0};
177 std::get<3>(ret)[d0][d1][d2] = searchForArray3(entry);
214 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 6};
288 using namespace Geom::Base;
290 if (rows == 10 && cols == 10)
299 T(0, 7) = (
x *
x) * y;
300 T(0, 8) =
x * (y * y);
303 T(1, 3) = (
x * 2.0) / lx;
305 T(1, 6) = ((
x *
x) * 3.0) / lx;
306 T(1, 7) = (
x * y * 2.0) / lx;
307 T(1, 8) = (y * y) / lx;
310 T(2, 5) = (y * 2.0) / ly;
311 T(2, 7) = (
x *
x) / ly;
312 T(2, 8) = (
x * y * 2.0) / ly;
313 T(2, 9) = ((y * y) * 3.0) / ly;
314 T(3, 3) = 1.0 / (lx * lx) * 2.0;
315 T(3, 6) = 1.0 / (lx * lx) *
x * 6.0;
316 T(3, 7) = 1.0 / (lx * lx) * y * 2.0;
317 T(4, 4) = 1.0 / (lx * ly);
318 T(4, 7) = (
x * 2.0) / (lx * ly);
319 T(4, 8) = (y * 2.0) / (lx * ly);
320 T(5, 5) = 1.0 / (ly * ly) * 2.0;
321 T(5, 8) = 1.0 / (ly * ly) *
x * 2.0;
322 T(5, 9) = 1.0 / (ly * ly) * y * 6.0;
323 T(6, 6) = 1.0 / (lx * lx * lx) * 6.0;
324 T(7, 7) = (1.0 / (lx * lx) * 2.0) / ly;
325 T(8, 8) = (1.0 / (ly * ly) * 2.0) / lx;
326 T(9, 9) = 1.0 / (ly * ly * ly) * 6.0;
328 else if (rows == 3 && cols == 10)
337 T(0, 7) = (
x *
x) * y;
338 T(0, 8) =
x * (y * y);
341 T(1, 3) = (
x * 2.0) / lx;
343 T(1, 6) = ((
x *
x) * 3.0) / lx;
344 T(1, 7) = (
x * y * 2.0) / lx;
345 T(1, 8) = (y * y) / lx;
348 T(2, 5) = (y * 2.0) / ly;
349 T(2, 7) = (
x *
x) / ly;
350 T(2, 8) = (
x * y * 2.0) / ly;
351 T(2, 9) = ((y * y) * 3.0) / ly;
353 else if (rows == 1 && cols == 10)
362 T(0, 7) = (
x *
x) * y;
363 T(0, 8) =
x * (y * y);
366 else if (rows == 6 && cols == 6)
375 T(1, 3) = (
x * 2.0) / lx;
379 T(2, 5) = (y * 2.0) / ly;
380 T(3, 3) = 1.0 / (lx * lx) * 2.0;
381 T(4, 4) = 1.0 / (lx * ly);
382 T(5, 5) = 1.0 / (ly * ly) * 2.0;
384 else if (rows == 3 && cols == 6)
393 T(1, 3) = (
x * 2.0) / lx;
397 T(2, 5) = (y * 2.0) / ly;
399 else if (rows == 1 && cols == 6)
408 else if (rows == 3 && cols == 3)
416 else if (rows == 1 && cols == 3)
424 for (
int idiff = 0; idiff < rows; idiff++)
425 for (
int ibase = 0; ibase < cols; ibase++)
428 int px = diffOperatorOrderList2D[ibase][0];
429 int py = diffOperatorOrderList2D[ibase][1];
430 int pz = diffOperatorOrderList2D[ibase][2];
431 int ndx = diffOperatorOrderList2D[idiff][0];
432 int ndy = diffOperatorOrderList2D[idiff][1];
433 int ndz = diffOperatorOrderList2D[idiff][2];
435 FPolynomial3D(px, py, pz, ndx, ndy, ndz,
446 if (rows == 20 && cols == 20)
458 T(0, 10) =
x *
x *
x;
459 T(0, 11) = y * y * y;
460 T(0, 12) =
z *
z *
z;
461 T(0, 13) = (
x *
x) * y;
462 T(0, 14) =
x * (y * y);
463 T(0, 15) = (y * y) *
z;
464 T(0, 16) = y * (
z *
z);
465 T(0, 17) =
x * (
z *
z);
466 T(0, 18) = (
x *
x) *
z;
467 T(0, 19) =
x * y *
z;
469 T(1, 4) = (
x * 2.0) / lx;
472 T(1, 10) = ((
x *
x) * 3.0) / lx;
473 T(1, 13) = (
x * y * 2.0) / lx;
474 T(1, 14) = (y * y) / lx;
475 T(1, 17) = (
z *
z) / lx;
476 T(1, 18) = (
x *
z * 2.0) / lx;
477 T(1, 19) = (y *
z) / lx;
479 T(2, 5) = (y * 2.0) / ly;
482 T(2, 11) = ((y * y) * 3.0) / ly;
483 T(2, 13) = (
x *
x) / ly;
484 T(2, 14) = (
x * y * 2.0) / ly;
485 T(2, 15) = (y *
z * 2.0) / ly;
486 T(2, 16) = (
z *
z) / ly;
487 T(2, 19) = (
x *
z) / ly;
489 T(3, 6) = (
z * 2.0) / lz;
492 T(3, 12) = ((
z *
z) * 3.0) / lz;
493 T(3, 15) = (y * y) / lz;
494 T(3, 16) = (y *
z * 2.0) / lz;
495 T(3, 17) = (
x *
z * 2.0) / lz;
496 T(3, 18) = (
x *
x) / lz;
497 T(3, 19) = (
x * y) / lz;
498 T(4, 4) = 1.0 / (lx * lx) * 2.0;
499 T(4, 10) = 1.0 / (lx * lx) *
x * 6.0;
500 T(4, 13) = 1.0 / (lx * lx) * y * 2.0;
501 T(4, 18) = 1.0 / (lx * lx) *
z * 2.0;
502 T(5, 5) = 1.0 / (ly * ly) * 2.0;
503 T(5, 11) = 1.0 / (ly * ly) * y * 6.0;
504 T(5, 14) = 1.0 / (ly * ly) *
x * 2.0;
505 T(5, 15) = 1.0 / (ly * ly) *
z * 2.0;
506 T(6, 6) = 1.0 / (lz * lz) * 2.0;
507 T(6, 12) = 1.0 / (lz * lz) *
z * 6.0;
508 T(6, 16) = 1.0 / (lz * lz) * y * 2.0;
509 T(6, 17) = 1.0 / (lz * lz) *
x * 2.0;
510 T(7, 7) = 1.0 / (lx * ly);
511 T(7, 13) = (
x * 2.0) / (lx * ly);
512 T(7, 14) = (y * 2.0) / (lx * ly);
513 T(7, 19) =
z / (lx * ly);
514 T(8, 8) = 1.0 / (ly * lz);
515 T(8, 15) = (y * 2.0) / (ly * lz);
516 T(8, 16) = (
z * 2.0) / (ly * lz);
517 T(8, 19) =
x / (ly * lz);
518 T(9, 9) = 1.0 / (lx * lz);
519 T(9, 17) = (
z * 2.0) / (lx * lz);
520 T(9, 18) = (
x * 2.0) / (lx * lz);
521 T(9, 19) = y / (lx * lz);
522 T(10, 10) = 1.0 / (lx * lx * lx) * 6.0;
523 T(11, 11) = 1.0 / (ly * ly * ly) * 6.0;
524 T(12, 12) = 1.0 / (lz * lz * lz) * 6.0;
525 T(13, 13) = (1.0 / (lx * lx) * 2.0) / ly;
526 T(14, 14) = (1.0 / (ly * ly) * 2.0) / lx;
527 T(15, 15) = (1.0 / (ly * ly) * 2.0) / lz;
528 T(16, 16) = (1.0 / (lz * lz) * 2.0) / ly;
529 T(17, 17) = (1.0 / (lz * lz) * 2.0) / lx;
530 T(18, 18) = (1.0 / (lx * lx) * 2.0) / lz;
531 T(19, 19) = 1.0 / (lx * ly * lz);
533 else if (rows == 4 && cols == 20)
545 T(0, 10) =
x *
x *
x;
546 T(0, 11) = y * y * y;
547 T(0, 12) =
z *
z *
z;
548 T(0, 13) = (
x *
x) * y;
549 T(0, 14) =
x * (y * y);
550 T(0, 15) = (y * y) *
z;
551 T(0, 16) = y * (
z *
z);
552 T(0, 17) =
x * (
z *
z);
553 T(0, 18) = (
x *
x) *
z;
554 T(0, 19) =
x * y *
z;
556 T(1, 4) = (
x * 2.0) / lx;
559 T(1, 10) = ((
x *
x) * 3.0) / lx;
560 T(1, 13) = (
x * y * 2.0) / lx;
561 T(1, 14) = (y * y) / lx;
562 T(1, 17) = (
z *
z) / lx;
563 T(1, 18) = (
x *
z * 2.0) / lx;
564 T(1, 19) = (y *
z) / lx;
566 T(2, 5) = (y * 2.0) / ly;
569 T(2, 11) = ((y * y) * 3.0) / ly;
570 T(2, 13) = (
x *
x) / ly;
571 T(2, 14) = (
x * y * 2.0) / ly;
572 T(2, 15) = (y *
z * 2.0) / ly;
573 T(2, 16) = (
z *
z) / ly;
574 T(2, 19) = (
x *
z) / ly;
576 T(3, 6) = (
z * 2.0) / lz;
579 T(3, 12) = ((
z *
z) * 3.0) / lz;
580 T(3, 15) = (y * y) / lz;
581 T(3, 16) = (y *
z * 2.0) / lz;
582 T(3, 17) = (
x *
z * 2.0) / lz;
583 T(3, 18) = (
x *
x) / lz;
584 T(3, 19) = (
x * y) / lz;
586 else if (rows == 1 && cols == 20)
598 T(0, 10) =
x *
x *
x;
599 T(0, 11) = y * y * y;
600 T(0, 12) =
z *
z *
z;
601 T(0, 13) = (
x *
x) * y;
602 T(0, 14) =
x * (y * y);
603 T(0, 15) = (y * y) *
z;
604 T(0, 16) = y * (
z *
z);
605 T(0, 17) =
x * (
z *
z);
606 T(0, 18) = (
x *
x) *
z;
607 T(0, 19) =
x * y *
z;
609 else if (rows == 10 && cols == 10)
622 T(1, 4) = (
x * 2.0) / lx;
626 T(2, 5) = (y * 2.0) / ly;
630 T(3, 6) = (
z * 2.0) / lz;
633 T(4, 4) = 1.0 / (lx * lx) * 2.0;
634 T(5, 5) = 1.0 / (ly * ly) * 2.0;
635 T(6, 6) = 1.0 / (lz * lz) * 2.0;
636 T(7, 7) = 1.0 / (lx * ly);
637 T(8, 8) = 1.0 / (ly * lz);
638 T(9, 9) = 1.0 / (lx * lz);
640 else if (rows == 4 && cols == 10)
653 T(1, 4) = (
x * 2.0) / lx;
657 T(2, 5) = (y * 2.0) / ly;
661 T(3, 6) = (
z * 2.0) / lz;
665 else if (rows == 1 && cols == 10)
678 else if (rows == 4 && cols == 4)
688 else if (rows == 1 && cols == 4)
697 for (
int idiff = 0; idiff < rows; idiff++)
698 for (
int ibase = 0; ibase < cols; ibase++)
700 int px = diffOperatorOrderList[ibase][0];
701 int py = diffOperatorOrderList[ibase][1];
702 int pz = diffOperatorOrderList[ibase][2];
703 int ndx = diffOperatorOrderList[idiff][0];
704 int ndy = diffOperatorOrderList[idiff][1];
705 int ndz = diffOperatorOrderList[idiff][2];
707 FPolynomial3D(px, py, pz, ndx, ndy, ndz,