244 for (p = 0; p < numModes; ++p, mode += numPoints)
249 scal =
sqrt(0.5 * (2.0 * p + 1.0));
250 for (i = 0; i < numPoints; ++i)
257 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
258 numPoints,
m_bdata.data(), numPoints, 0.0,
279 for (
size_t p = 0; p < numModes; ++p)
281 for (
size_t q = 0; q < numModes - p; ++q, mode += numPoints)
285 for (
size_t j = 0; j < numPoints; ++j)
288 sqrt(p + q + 1.0) * pow(0.5 * (1.0 - z[j]), p);
294 Blas::Dgemm(
'n',
'n', numPoints, numModes * (numModes + 1) / 2,
295 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
313 size_t P = numModes - 1, Q = numModes - 1, R = numModes - 1;
316 for (
size_t p = 0; p <=
P; ++p)
318 for (
size_t q = 0; q <= Q - p; ++q)
320 for (
size_t r = 0; r <= R - p - q; ++r, mode += numPoints)
323 2 * p + 2 * q + 2.0, 0.0);
324 for (
size_t k = 0; k < numPoints; ++k)
327 mode[k] *= pow(0.5 * (1.0 - z[k]), p + q);
330 mode[k] *=
sqrt(r + p + q + 1.5);
338 numModes * (numModes + 1) * (numModes + 2) / 6,
339 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
365 size_t P = numModes - 1, Q = numModes - 1, R = numModes - 1;
368 for (
size_t p = 0; p <=
P; ++p)
370 for (
size_t q = 0; q <= Q; ++q)
372 for (
size_t r = 0; r <= R - std::max(p, q);
373 ++r, mode += numPoints)
382 size_t pq = std::max(p + q,
size_t(0));
386 for (
size_t k = 0; k < numPoints; ++k)
389 mode[k] *= pow(0.5 * (1.0 - z[k]), pq);
392 mode[k] *=
sqrt(r + pq + 1.5);
400 numModes * (numModes + 1) * (numModes + 2) / 6,
401 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
413 for (i = 0; i < numPoints; ++i)
416 m_bdata[numPoints + i] = 0.5 * (1 + z[i]);
419 mode =
m_bdata.data() + 2 * numPoints;
421 for (p = 2; p < numModes; ++p, mode += numPoints)
426 for (i = 0; i < numPoints; ++i)
433 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
434 numPoints,
m_bdata.data(), numPoints, 0.0,
460 for (i = 0; i < numPoints; ++i)
462 m_bdata[0 * numPoints + i] = 0.5 * (1 - z[i]);
463 m_bdata[1 * numPoints + i] = 0.5 * (1 + z[i]);
466 mode =
m_bdata.data() + 2 * numPoints;
468 for (q = 2; q < numModes; ++q, mode += numPoints)
473 for (i = 0; i < numPoints; ++i)
480 for (i = 0; i < numPoints; ++i)
482 mode[i] = 0.5 * (1 - z[i]);
487 for (q = 2; q < numModes; ++q, mode += numPoints)
492 for (i = 0; i < numPoints; ++i)
500 one_p_z =
m_bdata.data() + numPoints;
502 for (p = 2; p < numModes; ++p)
504 for (i = 0; i < numPoints; ++i)
506 mode[i] =
m_bdata[i] * one_m_z_pow[i];
512 for (q = 1; q < numModes - p; ++q, mode += numPoints)
517 for (i = 0; i < numPoints; ++i)
519 mode[i] *= one_m_z_pow[i] * one_p_z[i];
524 Blas::Dgemm(
'n',
'n', numPoints, numModes * (numModes + 1) / 2,
525 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
569 for (p = 0; p < numModes; ++p)
571 N = numPoints * (numModes - p) * (numModes - p + 1) / 2;
574 B_offset += numPoints * (numModes - p);
580 numModes * (numModes + 1) * (numModes + 2) / 6,
581 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
619 N = numPoints * (numModes) * (numModes + 1) / 2;
623 B_offset += numPoints * (numModes);
625 N = numPoints * (numModes - 1);
631 N = numPoints * (numModes - 1) * (numModes) / 2;
636 B_offset += numPoints * (numModes - 1);
640 mode =
m_bdata.data() + offset;
642 for (p = 2; p < numModes; ++p)
645 N = numPoints * (numModes - p);
652 one_p_z =
m_bdata.data() + numPoints;
654 for (q = 2; q < numModes; ++q)
657 for (i = 0; i < numPoints; ++i)
663 mode[i] = pow(
m_bdata[i], p + q - 2);
670 for (
size_t r = 1; r < numModes - std::max(p, q); ++r)
673 r - 1, 2 * p + 2 * q - 3, 1.0);
675 for (i = 0; i < numPoints; ++i)
677 mode[i] *= one_m_z_pow[i] * one_p_z[i];
686 numModes * (numModes + 1) * (2 * numModes + 1) / 6,
687 numPoints, 1.0, D, numPoints,
m_bdata.data(), numPoints,
695 std::shared_ptr<Points<NekDouble>>
m_points =
699 for (p = 0; p < numModes; ++p, mode += numPoints)
701 for (q = 0; q < numPoints; ++q)
709 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
710 numPoints,
m_bdata.data(), numPoints, 0.0,
719 std::shared_ptr<Points<NekDouble>>
m_points =
723 for (p = 0; p < numModes; ++p, mode += numPoints)
725 for (q = 0; q < numPoints; ++q)
733 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
734 numPoints,
m_bdata.data(), numPoints, 0.0,
743 "Fourier modes should be a factor of 2");
745 for (i = 0; i < numPoints; ++i)
753 for (p = 1; p < numModes / 2; ++p)
755 for (i = 0; i < numPoints; ++i)
757 m_bdata[2 * p * numPoints + i] = cos(p * M_PI * (z[i] + 1));
758 m_bdata[(2 * p + 1) * numPoints + i] =
759 -sin(p * M_PI * (z[i] + 1));
762 -p * M_PI * sin(p * M_PI * (z[i] + 1));
763 m_dbdata[(2 * p + 1) * numPoints + i] =
764 -p * M_PI * cos(p * M_PI * (z[i] + 1));
773 for (i = 0; i < numPoints; ++i)
775 m_bdata[i] = cos(M_PI * (z[i] + 1));
776 m_bdata[numPoints + i] = -sin(M_PI * (z[i] + 1));
778 m_dbdata[i] = -M_PI * sin(M_PI * (z[i] + 1));
779 m_dbdata[numPoints + i] = -M_PI * cos(M_PI * (z[i] + 1));
782 for (p = 1; p < numModes / 2; ++p)
784 for (i = 0; i < numPoints; ++i)
786 m_bdata[2 * p * numPoints + i] = 0.;
787 m_bdata[(2 * p + 1) * numPoints + i] = 0.;
789 m_dbdata[2 * p * numPoints + i] = 0.;
790 m_dbdata[(2 * p + 1) * numPoints + i] = 0.;
800 m_dbdata[0] = -M_PI * sin(M_PI * z[0]);
807 m_bdata[0] = -sin(M_PI * z[0]);
808 m_dbdata[0] = -M_PI * cos(M_PI * z[0]);
816 for (p = 0, scal = 1; p < numModes; ++p, mode += numPoints)
821 for (i = 0; i < numPoints; ++i)
826 scal *= 4 * (p + 1) * (p + 1) / (2 * p + 2) / (2 * p + 1);
830 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
831 numPoints,
m_bdata.data(), numPoints, 0.0,
840 for (
size_t p = 0; p < numModes; ++p, mode += numPoints)
842 for (
size_t i = 0; i < numPoints; ++i)
844 mode[i] = pow(z[i], p);
849 Blas::Dgemm(
'n',
'n', numPoints, numModes, numPoints, 1.0, D,
850 numPoints,
m_bdata.data(), numPoints, 0.0,
857 "not implemented at this time.");