304 for (p = 0; p < numModes; ++p, mode += numPoints)
309 scal =
sqrt(0.5 * (2.0 * p + 1.0));
310 for (i = 0; i < numPoints; ++i)
317 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
318 numPoints,
m_bdata.data(), numPoints, 0.0,
339 for (
size_t p = 0; p < numModes; ++p)
341 for (
size_t q = 0; q < numModes - p; ++q, mode += numPoints)
345 for (
size_t j = 0; j < numPoints; ++j)
348 sqrt(p + q + 1.0) * pow(0.5 * (1.0 - z[j]), p);
354 Blas::Dgemm(
'n',
'n', numPoints, numModes * (numModes + 1) / 2,
355 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
373 size_t P = numModes - 1, Q = numModes - 1, R = numModes - 1;
376 for (
size_t p = 0; p <=
P; ++p)
378 for (
size_t q = 0; q <= Q - p; ++q)
380 for (
size_t r = 0; r <= R - p - q; ++r, mode += numPoints)
383 2 * p + 2 * q + 2.0, 0.0);
384 for (
size_t k = 0; k < numPoints; ++k)
387 mode[k] *= pow(0.5 * (1.0 - z[k]), p + q);
390 mode[k] *=
sqrt(r + p + q + 1.5);
398 numModes * (numModes + 1) * (numModes + 2) / 6,
399 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
425 size_t P = numModes - 1, Q = numModes - 1, R = numModes - 1;
428 for (
size_t p = 0; p <=
P; ++p)
430 for (
size_t q = 0; q <= Q; ++q)
432 for (
size_t r = 0; r <= R - std::max(p, q);
433 ++r, mode += numPoints)
442 size_t pq = std::max(p + q,
size_t(0));
446 for (
size_t k = 0; k < numPoints; ++k)
449 mode[k] *= pow(0.5 * (1.0 - z[k]), pq);
452 mode[k] *=
sqrt(r + pq + 1.5);
460 numModes * (numModes + 1) * (numModes + 2) / 6,
461 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
473 for (i = 0; i < numPoints; ++i)
476 m_bdata[numPoints + i] = 0.5 * (1 + z[i]);
479 mode =
m_bdata.data() + 2 * numPoints;
481 for (p = 2; p < numModes; ++p, mode += numPoints)
486 for (i = 0; i < numPoints; ++i)
493 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
494 numPoints,
m_bdata.data(), numPoints, 0.0,
520 for (i = 0; i < numPoints; ++i)
522 m_bdata[0 * numPoints + i] = 0.5 * (1 - z[i]);
523 m_bdata[1 * numPoints + i] = 0.5 * (1 + z[i]);
526 mode =
m_bdata.data() + 2 * numPoints;
528 for (q = 2; q < numModes; ++q, mode += numPoints)
533 for (i = 0; i < numPoints; ++i)
540 for (i = 0; i < numPoints; ++i)
542 mode[i] = 0.5 * (1 - z[i]);
547 for (q = 2; q < numModes; ++q, mode += numPoints)
552 for (i = 0; i < numPoints; ++i)
560 one_p_z =
m_bdata.data() + numPoints;
562 for (p = 2; p < numModes; ++p)
564 for (i = 0; i < numPoints; ++i)
566 mode[i] =
m_bdata[i] * one_m_z_pow[i];
572 for (q = 1; q < numModes - p; ++q, mode += numPoints)
577 for (i = 0; i < numPoints; ++i)
579 mode[i] *= one_m_z_pow[i] * one_p_z[i];
584 Blas::Dgemm(
'n',
'n', numPoints, numModes * (numModes + 1) / 2,
585 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
629 for (p = 0; p < numModes; ++p)
631 N = numPoints * (numModes - p) * (numModes - p + 1) / 2;
634 B_offset += numPoints * (numModes - p);
640 numModes * (numModes + 1) * (numModes + 2) / 6,
641 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
679 N = numPoints * (numModes) * (numModes + 1) / 2;
683 B_offset += numPoints * (numModes);
685 N = numPoints * (numModes - 1);
691 N = numPoints * (numModes - 1) * (numModes) / 2;
696 B_offset += numPoints * (numModes - 1);
700 mode =
m_bdata.data() + offset;
702 for (p = 2; p < numModes; ++p)
705 N = numPoints * (numModes - p);
712 one_p_z =
m_bdata.data() + numPoints;
714 for (q = 2; q < numModes; ++q)
717 for (i = 0; i < numPoints; ++i)
723 mode[i] = pow(
m_bdata[i], p + q - 2);
730 for (
size_t r = 1; r < numModes - std::max(p, q); ++r)
733 r - 1, 2 * p + 2 * q - 3, 1.0);
735 for (i = 0; i < numPoints; ++i)
737 mode[i] *= one_m_z_pow[i] * one_p_z[i];
746 numModes * (numModes + 1) * (2 * numModes + 1) / 6,
747 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
755 std::shared_ptr<Points<NekDouble>>
m_points =
759 for (p = 0; p < numModes; ++p, mode += numPoints)
761 for (q = 0; q < numPoints; ++q)
769 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
770 numPoints,
m_bdata.data(), numPoints, 0.0,
779 std::shared_ptr<Points<NekDouble>>
m_points =
783 for (p = 0; p < numModes; ++p, mode += numPoints)
785 for (q = 0; q < numPoints; ++q)
793 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
794 numPoints,
m_bdata.data(), numPoints, 0.0,
803 "Fourier modes should be a factor of 2");
805 for (i = 0; i < numPoints; ++i)
813 for (p = 1; p < numModes / 2; ++p)
815 for (i = 0; i < numPoints; ++i)
817 m_bdata[2 * p * numPoints + i] = cos(p * M_PI * (z[i] + 1));
818 m_bdata[(2 * p + 1) * numPoints + i] =
819 -sin(p * M_PI * (z[i] + 1));
822 -p * M_PI * sin(p * M_PI * (z[i] + 1));
823 m_dbdata[(2 * p + 1) * numPoints + i] =
824 -p * M_PI * cos(p * M_PI * (z[i] + 1));
833 for (i = 0; i < numPoints; ++i)
835 m_bdata[i] = cos(M_PI * (z[i] + 1));
836 m_bdata[numPoints + i] = -sin(M_PI * (z[i] + 1));
838 m_dbdata[i] = -M_PI * sin(M_PI * (z[i] + 1));
839 m_dbdata[numPoints + i] = -M_PI * cos(M_PI * (z[i] + 1));
842 for (p = 1; p < numModes / 2; ++p)
844 for (i = 0; i < numPoints; ++i)
846 m_bdata[2 * p * numPoints + i] = 0.;
847 m_bdata[(2 * p + 1) * numPoints + i] = 0.;
849 m_dbdata[2 * p * numPoints + i] = 0.;
850 m_dbdata[(2 * p + 1) * numPoints + i] = 0.;
860 m_dbdata[0] = -M_PI * sin(M_PI * z[0]);
867 m_bdata[0] = -sin(M_PI * z[0]);
868 m_dbdata[0] = -M_PI * cos(M_PI * z[0]);
876 for (p = 0, scal = 1; p < numModes; ++p, mode += numPoints)
881 for (i = 0; i < numPoints; ++i)
886 scal *= 4 * (p + 1) * (p + 1) / (2 * p + 2) / (2 * p + 1);
890 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
891 numPoints,
m_bdata.data(), numPoints, 0.0,
900 for (
size_t p = 0; p < numModes; ++p, mode += numPoints)
902 for (
size_t i = 0; i < numPoints; ++i)
904 mode[i] = pow(z[i], p);
909 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
910 numPoints,
m_bdata.data(), numPoints, 0.0,
917 "not implemented at this time.");