248 for (
int k = 0; k < nq; k++)
252 sin(
m_pi * x[k]) * cos(
m_pi * y[k]);
266 for (
int k = 0; k < nq; k++)
271 sin(
m_pi * y[k]) * sin(
m_pi * z[k]);
290 Vmath::Svtvp(nq, m_a, &inarray[0][0], 1, &temp[0], 1, &temp[0], 1);
295 Vmath::Svtvp(nq, m_c, &inarray[0][0], 1, &temp[0], 1, &temp[0], 1);
310 Vmath::Vmul(nq, &inarray[0][0], 1, &inarray[0][0], 1, &cube[0], 1);
311 Vmath::Vmul(nq, &inarray[1][0], 1, &cube[0], 1, &cube[0], 1);
316 Vmath::Svtvp(nq, coeff, &inarray[0][0], 1, &cube[0], 1, &tmp[0], 1);
317 Vmath::Vadd(nq, &Aonevec[0], 1, &tmp[0], 1, &outarray[0][0], 1);
320 Vmath::Svtvm(nq, B, &inarray[0][0], 1, &cube[0], 1, &outarray[1][0],
337 Vmath::Smul(nq, -1.0 * c1, inarray[0], 1, outarray[0], 1);
339 Vmath::Vmul(nq, tmp, 1, inarray[0], 1, outarray[0], 1);
341 Vmath::Vmul(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
344 Vmath::Vadd(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
347 Vmath::Svtvp(nq, -1.0 * d, inarray[1], 1, inarray[0], 1,
349 Vmath::Smul(nq, b, outarray[1], 1, outarray[1], 1);
364 Vmath::Smul(nq, -1.0 * c1, inarray[0], 1, outarray[0], 1);
366 Vmath::Vmul(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
368 Vmath::Vmul(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
370 Vmath::Vmul(nq, inarray[0], 1, inarray[1], 1, tmp, 1);
372 Vmath::Vadd(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
375 Vmath::Svtvp(nq, -1.0 * d, inarray[1], 1, inarray[0], 1,
377 Vmath::Smul(nq, b, outarray[1], 1, outarray[1], 1);
394 Vmath::Smul(nq, -1.0 * c1, inarray[0], 1, outarray[0], 1);
396 Vmath::Vmul(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
398 Vmath::Vmul(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
400 Vmath::Vmul(nq, inarray[0], 1, inarray[1], 1, tmp, 1);
402 Vmath::Vadd(nq, tmp, 1, outarray[0], 1, outarray[0], 1);
407 Vmath::Smul(nq, mu1, inarray[1], 1, outarray[1], 1);
409 Vmath::Vdiv(nq, outarray[1], 1, tmp, 1, outarray[1], 1);
410 Vmath::Sadd(nq, c0, outarray[1], 1, outarray[1], 1);
412 Vmath::Sadd(nq, (-a - 1.0), inarray[0], 1, tmp, 1);
418 Vmath::Vmul(nq, tmp, 1, outarray[1], 1, outarray[1], 1);
549 NekDouble A_mn, C_mn, theta, phi, radius;
551 std::complex<double> Spericharmonic, delta_n, temp;
552 std::complex<double> varphi0, varphi1;
553 std::complex<double> B_mn, D_mn;
557 int Maxm = 2 * Maxn - 1;
575 for (i = 0; i < Maxn; ++i)
581 Ainit[5][0] = -0.5839;
582 Ainit[5][1] = -0.8436;
583 Ainit[5][2] = -0.4764;
584 Ainit[5][3] = 0.6475;
585 Ainit[5][4] = 0.1886;
586 Ainit[5][5] = 0.8709;
587 Ainit[5][6] = -0.8338;
588 Ainit[5][7] = 0.1795;
589 Ainit[5][8] = -0.7873;
590 Ainit[5][9] = 0.8842;
591 Ainit[5][10] = 0.2943;
593 Binit[5][0] = -0.6263;
594 Binit[5][1] = 0.9803;
595 Binit[5][2] = 0.7222;
596 Binit[5][3] = 0.5945;
597 Binit[5][4] = 0.6026;
598 Binit[5][5] = -0.2076;
599 Binit[5][6] = 0.4556;
600 Binit[5][7] = 0.6024;
601 Binit[5][8] = 0.9695;
602 Binit[5][9] = -0.4936;
603 Binit[5][10] = 0.1098;
612 for (
int i = 0; i < nq; ++i)
614 radius =
sqrt(x[i] * x[i] + y[i] * y[i] + z[i] * z[i]);
617 theta = asin(z[i] / radius) + 0.5 *
m_pi;
620 phi = atan2(y[i], x[i]) +
m_pi;
622 varphi0 = 0.0 * varphi0;
623 varphi1 = 0.0 * varphi1;
624 for (n = 0; n < Maxn; ++n)
627 a_n = m_a -
m_mu * (n * (n + 1) / radius / radius);
628 d_n = m_d - m_nu * (n * (n + 1) / radius / radius);
630 gamma_n = 0.5 * (a_n + d_n);
632 temp = (a_n + d_n) * (a_n + d_n) - 4.0 * (a_n * d_n - m_b * m_c);
633 delta_n = 0.5 *
sqrt(temp);
635 for (m = -n; m <= n; ++m)
638 A_mn = Ainit[n][ind];
639 C_mn = Binit[n][ind];
641 B_mn = ((a_n - gamma_n) * Ainit[n][ind] + m_b * Binit[n][ind]) /
643 D_mn = (m_c * Ainit[n][ind] + (d_n - gamma_n) * Binit[n][ind]) /
647 boost::math::spherical_harmonic(n, m, theta, phi);
648 varphi0 += exp(gamma_n * time) *
649 (A_mn * cosh(delta_n * time) +
650 B_mn * sinh(delta_n * time)) *
652 varphi1 += exp(gamma_n * time) *
653 (C_mn * cosh(delta_n * time) +
654 D_mn * sinh(delta_n * time)) *
659 u[i] = varphi0.real();
660 v[i] = varphi1.real();
static MeshGraphSharedPtr Read(const LibUtilities::SessionReaderSharedPtr pSession, LibUtilities::DomainRangeShPtr rng=LibUtilities::NullDomainRangeShPtr, bool fillGraph=true, SpatialDomains::MeshGraphSharedPtr partitionedGraph=nullptr)