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);
213 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 6};
287 using namespace Geom::Base;
289 if (rows == 10 && cols == 10)
298 T(0, 7) = (
x *
x) * y;
299 T(0, 8) =
x * (y * y);
302 T(1, 3) = (
x * 2.0) / lx;
304 T(1, 6) = ((
x *
x) * 3.0) / lx;
305 T(1, 7) = (
x * y * 2.0) / lx;
306 T(1, 8) = (y * y) / lx;
309 T(2, 5) = (y * 2.0) / ly;
310 T(2, 7) = (
x *
x) / ly;
311 T(2, 8) = (
x * y * 2.0) / ly;
312 T(2, 9) = ((y * y) * 3.0) / ly;
313 T(3, 3) = 1.0 / (lx * lx) * 2.0;
314 T(3, 6) = 1.0 / (lx * lx) *
x * 6.0;
315 T(3, 7) = 1.0 / (lx * lx) * y * 2.0;
316 T(4, 4) = 1.0 / (lx * ly);
317 T(4, 7) = (
x * 2.0) / (lx * ly);
318 T(4, 8) = (y * 2.0) / (lx * ly);
319 T(5, 5) = 1.0 / (ly * ly) * 2.0;
320 T(5, 8) = 1.0 / (ly * ly) *
x * 2.0;
321 T(5, 9) = 1.0 / (ly * ly) * y * 6.0;
322 T(6, 6) = 1.0 / (lx * lx * lx) * 6.0;
323 T(7, 7) = (1.0 / (lx * lx) * 2.0) / ly;
324 T(8, 8) = (1.0 / (ly * ly) * 2.0) / lx;
325 T(9, 9) = 1.0 / (ly * ly * ly) * 6.0;
327 else if (rows == 3 && cols == 10)
336 T(0, 7) = (
x *
x) * y;
337 T(0, 8) =
x * (y * y);
340 T(1, 3) = (
x * 2.0) / lx;
342 T(1, 6) = ((
x *
x) * 3.0) / lx;
343 T(1, 7) = (
x * y * 2.0) / lx;
344 T(1, 8) = (y * y) / lx;
347 T(2, 5) = (y * 2.0) / ly;
348 T(2, 7) = (
x *
x) / ly;
349 T(2, 8) = (
x * y * 2.0) / ly;
350 T(2, 9) = ((y * y) * 3.0) / ly;
352 else if (rows == 1 && cols == 10)
361 T(0, 7) = (
x *
x) * y;
362 T(0, 8) =
x * (y * y);
365 else if (rows == 6 && cols == 6)
374 T(1, 3) = (
x * 2.0) / lx;
378 T(2, 5) = (y * 2.0) / ly;
379 T(3, 3) = 1.0 / (lx * lx) * 2.0;
380 T(4, 4) = 1.0 / (lx * ly);
381 T(5, 5) = 1.0 / (ly * ly) * 2.0;
383 else if (rows == 3 && cols == 6)
392 T(1, 3) = (
x * 2.0) / lx;
396 T(2, 5) = (y * 2.0) / ly;
398 else if (rows == 1 && cols == 6)
407 else if (rows == 3 && cols == 3)
415 else if (rows == 1 && cols == 3)
423 for (
int idiff = 0; idiff < rows; idiff++)
424 for (
int ibase = 0; ibase < cols; ibase++)
427 int px = diffOperatorOrderList2D[ibase][0];
428 int py = diffOperatorOrderList2D[ibase][1];
429 int pz = diffOperatorOrderList2D[ibase][2];
430 int ndx = diffOperatorOrderList2D[idiff][0];
431 int ndy = diffOperatorOrderList2D[idiff][1];
432 int ndz = diffOperatorOrderList2D[idiff][2];
434 FPolynomial3D(px, py, pz, ndx, ndy, ndz,
445 if (rows == 20 && cols == 20)
457 T(0, 10) =
x *
x *
x;
458 T(0, 11) = y * y * y;
459 T(0, 12) =
z *
z *
z;
460 T(0, 13) = (
x *
x) * y;
461 T(0, 14) =
x * (y * y);
462 T(0, 15) = (y * y) *
z;
463 T(0, 16) = y * (
z *
z);
464 T(0, 17) =
x * (
z *
z);
465 T(0, 18) = (
x *
x) *
z;
466 T(0, 19) =
x * y *
z;
468 T(1, 4) = (
x * 2.0) / lx;
471 T(1, 10) = ((
x *
x) * 3.0) / lx;
472 T(1, 13) = (
x * y * 2.0) / lx;
473 T(1, 14) = (y * y) / lx;
474 T(1, 17) = (
z *
z) / lx;
475 T(1, 18) = (
x *
z * 2.0) / lx;
476 T(1, 19) = (y *
z) / lx;
478 T(2, 5) = (y * 2.0) / ly;
481 T(2, 11) = ((y * y) * 3.0) / ly;
482 T(2, 13) = (
x *
x) / ly;
483 T(2, 14) = (
x * y * 2.0) / ly;
484 T(2, 15) = (y *
z * 2.0) / ly;
485 T(2, 16) = (
z *
z) / ly;
486 T(2, 19) = (
x *
z) / ly;
488 T(3, 6) = (
z * 2.0) / lz;
491 T(3, 12) = ((
z *
z) * 3.0) / lz;
492 T(3, 15) = (y * y) / lz;
493 T(3, 16) = (y *
z * 2.0) / lz;
494 T(3, 17) = (
x *
z * 2.0) / lz;
495 T(3, 18) = (
x *
x) / lz;
496 T(3, 19) = (
x * y) / lz;
497 T(4, 4) = 1.0 / (lx * lx) * 2.0;
498 T(4, 10) = 1.0 / (lx * lx) *
x * 6.0;
499 T(4, 13) = 1.0 / (lx * lx) * y * 2.0;
500 T(4, 18) = 1.0 / (lx * lx) *
z * 2.0;
501 T(5, 5) = 1.0 / (ly * ly) * 2.0;
502 T(5, 11) = 1.0 / (ly * ly) * y * 6.0;
503 T(5, 14) = 1.0 / (ly * ly) *
x * 2.0;
504 T(5, 15) = 1.0 / (ly * ly) *
z * 2.0;
505 T(6, 6) = 1.0 / (lz * lz) * 2.0;
506 T(6, 12) = 1.0 / (lz * lz) *
z * 6.0;
507 T(6, 16) = 1.0 / (lz * lz) * y * 2.0;
508 T(6, 17) = 1.0 / (lz * lz) *
x * 2.0;
509 T(7, 7) = 1.0 / (lx * ly);
510 T(7, 13) = (
x * 2.0) / (lx * ly);
511 T(7, 14) = (y * 2.0) / (lx * ly);
512 T(7, 19) =
z / (lx * ly);
513 T(8, 8) = 1.0 / (ly * lz);
514 T(8, 15) = (y * 2.0) / (ly * lz);
515 T(8, 16) = (
z * 2.0) / (ly * lz);
516 T(8, 19) =
x / (ly * lz);
517 T(9, 9) = 1.0 / (lx * lz);
518 T(9, 17) = (
z * 2.0) / (lx * lz);
519 T(9, 18) = (
x * 2.0) / (lx * lz);
520 T(9, 19) = y / (lx * lz);
521 T(10, 10) = 1.0 / (lx * lx * lx) * 6.0;
522 T(11, 11) = 1.0 / (ly * ly * ly) * 6.0;
523 T(12, 12) = 1.0 / (lz * lz * lz) * 6.0;
524 T(13, 13) = (1.0 / (lx * lx) * 2.0) / ly;
525 T(14, 14) = (1.0 / (ly * ly) * 2.0) / lx;
526 T(15, 15) = (1.0 / (ly * ly) * 2.0) / lz;
527 T(16, 16) = (1.0 / (lz * lz) * 2.0) / ly;
528 T(17, 17) = (1.0 / (lz * lz) * 2.0) / lx;
529 T(18, 18) = (1.0 / (lx * lx) * 2.0) / lz;
530 T(19, 19) = 1.0 / (lx * ly * lz);
532 else if (rows == 4 && cols == 20)
544 T(0, 10) =
x *
x *
x;
545 T(0, 11) = y * y * y;
546 T(0, 12) =
z *
z *
z;
547 T(0, 13) = (
x *
x) * y;
548 T(0, 14) =
x * (y * y);
549 T(0, 15) = (y * y) *
z;
550 T(0, 16) = y * (
z *
z);
551 T(0, 17) =
x * (
z *
z);
552 T(0, 18) = (
x *
x) *
z;
553 T(0, 19) =
x * y *
z;
555 T(1, 4) = (
x * 2.0) / lx;
558 T(1, 10) = ((
x *
x) * 3.0) / lx;
559 T(1, 13) = (
x * y * 2.0) / lx;
560 T(1, 14) = (y * y) / lx;
561 T(1, 17) = (
z *
z) / lx;
562 T(1, 18) = (
x *
z * 2.0) / lx;
563 T(1, 19) = (y *
z) / lx;
565 T(2, 5) = (y * 2.0) / ly;
568 T(2, 11) = ((y * y) * 3.0) / ly;
569 T(2, 13) = (
x *
x) / ly;
570 T(2, 14) = (
x * y * 2.0) / ly;
571 T(2, 15) = (y *
z * 2.0) / ly;
572 T(2, 16) = (
z *
z) / ly;
573 T(2, 19) = (
x *
z) / ly;
575 T(3, 6) = (
z * 2.0) / lz;
578 T(3, 12) = ((
z *
z) * 3.0) / lz;
579 T(3, 15) = (y * y) / lz;
580 T(3, 16) = (y *
z * 2.0) / lz;
581 T(3, 17) = (
x *
z * 2.0) / lz;
582 T(3, 18) = (
x *
x) / lz;
583 T(3, 19) = (
x * y) / lz;
585 else if (rows == 1 && cols == 20)
597 T(0, 10) =
x *
x *
x;
598 T(0, 11) = y * y * y;
599 T(0, 12) =
z *
z *
z;
600 T(0, 13) = (
x *
x) * y;
601 T(0, 14) =
x * (y * y);
602 T(0, 15) = (y * y) *
z;
603 T(0, 16) = y * (
z *
z);
604 T(0, 17) =
x * (
z *
z);
605 T(0, 18) = (
x *
x) *
z;
606 T(0, 19) =
x * y *
z;
608 else if (rows == 10 && cols == 10)
621 T(1, 4) = (
x * 2.0) / lx;
625 T(2, 5) = (y * 2.0) / ly;
629 T(3, 6) = (
z * 2.0) / lz;
632 T(4, 4) = 1.0 / (lx * lx) * 2.0;
633 T(5, 5) = 1.0 / (ly * ly) * 2.0;
634 T(6, 6) = 1.0 / (lz * lz) * 2.0;
635 T(7, 7) = 1.0 / (lx * ly);
636 T(8, 8) = 1.0 / (ly * lz);
637 T(9, 9) = 1.0 / (lx * lz);
639 else if (rows == 4 && cols == 10)
652 T(1, 4) = (
x * 2.0) / lx;
656 T(2, 5) = (y * 2.0) / ly;
660 T(3, 6) = (
z * 2.0) / lz;
664 else if (rows == 1 && cols == 10)
677 else if (rows == 4 && cols == 4)
687 else if (rows == 1 && cols == 4)
696 for (
int idiff = 0; idiff < rows; idiff++)
697 for (
int ibase = 0; ibase < cols; ibase++)
699 int px = diffOperatorOrderList[ibase][0];
700 int py = diffOperatorOrderList[ibase][1];
701 int pz = diffOperatorOrderList[ibase][2];
702 int ndx = diffOperatorOrderList[idiff][0];
703 int ndy = diffOperatorOrderList[idiff][1];
704 int ndz = diffOperatorOrderList[idiff][2];
706 FPolynomial3D(px, py, pz, ndx, ndy, ndz,