37 #include <boost/core/ignore_unused.hpp> 38 #include <boost/algorithm/string/predicate.hpp> 69 int shapedim =
m_fields[0]->GetShapeDimension();
122 for (
int j = 0; j < shapedim; ++j)
136 if (
m_session->DefinesSolverInfo(
"TESTMAXWELLTYPE"))
138 std::string TestMaxwellTypeStr =
139 m_session->GetSolverInfo(
"TESTMAXWELLTYPE");
157 if (
m_session->DefinesSolverInfo(
"POLTYPE"))
159 std::string PolTypeStr =
m_session->GetSolverInfo(
"POLTYPE");
175 if (
m_session->DefinesSolverInfo(
"INCTYPE"))
177 std::string IncTypeStr =
m_session->GetSolverInfo(
"INCTYPE");
193 if (
m_session->DefinesSolverInfo(
"CLOAKTYPE"))
195 std::string CloakTypeStr =
m_session->GetSolverInfo(
"CLOAKTYPE");
211 if (
m_session->DefinesSolverInfo(
"SOURCETYPE"))
213 std::string SourceTypeStr =
m_session->GetSolverInfo(
"SOURCETYPE");
256 std::cout <<
"*** rad = [ " <<
Vmath::Vmax(nq, radvec, 1) <<
" , " 257 <<
Vmath::Vmin(nq, radvec, 1) <<
" ) " << std::endl;
268 std::cout <<
"*** rad = [ " <<
Vmath::Vmax(nq, radvec, 1) <<
" , " 269 <<
Vmath::Vmin(nq, radvec, 1) <<
" ) " << std::endl;
289 NekDouble eps1min, eps1max, eps2min, eps2max, eps3min, eps3max;
290 NekDouble mu1min, mu1max, mu2min, mu2max, mu3min, mu3max;
326 std::cout <<
"*** epsvec1 = [ " << eps1min <<
" , " << eps1max
327 <<
" ], epsvec2 = [ " << eps2min <<
" , " << eps2max
328 <<
" ], epsvec3 = [ " << eps3min <<
" , " << eps3max <<
" ] " 330 std::cout <<
"*** muvec1 = [ " << mu1min <<
" , " << mu1max
331 <<
" ], muvec2 = [ " << mu2min <<
" , " << mu2max
332 <<
" ], muvec3 = [ " << mu3min <<
" , " << mu3max <<
" ] " 341 dtFactor = mu1min * eps3min;
344 dtFactor = mu2min * eps3min;
351 dtFactor = eps1min * mu3min;
352 if (eps1min > eps2min)
354 dtFactor = eps2min * mu3min;
365 std::cout <<
"*** dt factor proportional to varepsilon * mu is " << dtFactor
381 Vmath::Sadd(nq, -1.0, m_muvec[k], 1, m_negmuvecminus1[k], 1);
403 std::cout <<
"*** negepsvecminus1 = [ " << eps1min <<
" , " << eps1max
404 <<
" ], negepsvecminus1 = [ " << eps2min <<
" , " << eps2max
405 <<
" ], negepsvecminus1 = [ " << eps3min <<
" , " << eps3max
406 <<
" ] " << std::endl;
407 std::cout <<
"*** negmuvecminus1 = [ " << mu1min <<
" , " << mu1max
408 <<
" ], negmuvecminus1 = [ " << mu2min <<
" , " << mu2max
409 <<
" ], negmuvecminus1 = [ " << mu3min <<
" , " << mu3max <<
" ] " 436 ASSERTL0(
false,
"Implicit unsteady Advection not set up.");
454 int nfields =
m_fields.num_elements();
458 for (i = 0; i < nfields; ++i)
462 nvariables = nfields;
474 for (i = 0; i < nvariables; ++i)
488 "Only one of IO_CheckTime and IO_CheckSteps " 497 bool doCheckTime =
false;
521 for (i = 0; i < nq; ++i)
526 std::cout <<
"rad" << rad << std::endl;
548 for (i = 0; i < nq; ++i)
557 std::cout <<
"*** Area of Planar Source = " 567 int P1indx = 0, P2indx = 0, P3indx = 0;
585 for (
int i = 0; i < nq; ++i)
587 rad = sqrt((x[i] + 3.0) * (x[i] + 3.0) + (y[i]) * (y[i]));
596 for (
int i = 0; i < nq; ++i)
599 sqrt((x[i] + 3.0) * (x[i] + 3.0) + (y[i] - 1.5) * (y[i] - 1.5));
607 for (
int i = 0; i < nq; ++i)
610 sqrt((x[i] + 3.0) * (x[i] + 3.0) + (y[i] - 3.0) * (y[i] - 3.0));
642 std::cout <<
"Steps: " << std::setw(8) << std::left << step + 1 <<
" " 643 <<
"Time: " << std::setw(12) << std::left <<
m_time;
645 std::stringstream ss;
646 ss << cpuTime / 60.0 <<
" min.";
647 std::cout <<
" CPU Time: " << std::setw(8) << std::left << ss.str()
664 &fields[m_intVariables[2]][0], 1);
672 for (
int i = 0; i < 3; ++i)
688 for (i = 0; i < nvariables; ++i)
703 TimeSeries[indx] =
m_time;
720 <<
", Energy = " << Energy[indx] << std::endl;
729 m_fields[0]->GetBndCondExpansions()[0]->GetExpSize();
731 ->GetBndCondExpansions()[0]
745 m_fields[0]->ExtractTracePhys(fields[0], E1Fwd);
746 m_fields[0]->ExtractTracePhys(fields[1], E2Fwd);
747 m_fields[0]->ExtractTracePhys(fields[2], H3Fwd);
758 for (
int e = 0; e < totbdryexp; ++e)
760 id2 =
m_fields[0]->GetTrace()->GetPhys_Offset(
763 ->GetBndCondCoeffsToGlobalCoeffsMap(cnt + e));
773 if (E1atPEC < E1atPECloc)
775 E1atPEC = E1atPECloc;
778 if (E2atPEC < E2atPECloc)
780 E2atPEC = E2atPECloc;
783 if (H3atPEC < H3atPECloc)
785 H3atPEC = H3atPECloc;
789 std::cout <<
"At PEC, Max. E1 = " << E1atPEC
790 <<
", E2 = " << E2atPEC <<
", H3 = " << H3atPEC
796 Ezantipod[cntap++] = fields[2][indxantipod];
801 P1[cntpml] = fields[2][P1indx];
802 P2[cntpml] = fields[2][P2indx];
803 P3[cntpml] = fields[2][P3indx];
814 if (
m_session->GetComm()->GetRank() == 0)
816 std::cout <<
"Time-integration : " << intTime <<
"s" << std::endl;
818 std::cout <<
"TimeSeries = " << std::endl;
821 std::cout << TimeSeries[i] <<
", ";
823 std::cout << std::endl << std::endl;
825 std::cout <<
"Energy Density = " << std::endl;
828 std::cout << Energy[i] <<
", ";
830 std::cout << std::endl << std::endl;
839 std::cout <<
"Ez at antipod = " << std::endl;
842 std::cout << Ezantipod[i] <<
", ";
844 std::cout << std::endl << std::endl;
849 std::cout <<
"P1 = " << std::endl;
852 std::cout << P1[i] <<
", ";
854 std::cout << std::endl << std::endl;
856 std::cout <<
"P2 = " << std::endl;
859 std::cout << P2[i] <<
", ";
861 std::cout << std::endl << std::endl;
863 std::cout <<
"P3 = " << std::endl;
866 std::cout << P3[i] <<
", ";
868 std::cout << std::endl << std::endl;
872 for (i = 0; i < nvariables; ++i)
878 for (i = 0; i < nvariables; ++i)
897 int nvar = inarray.num_elements();
903 for (i = 0; i < nvar; ++i)
908 Vmath::Vcopy(nq, &inarray[i][0], 1, &physarray[i][0], 1);
911 for (i = 0; i < nvar; i++)
928 for (
int i = 0; i < 3; ++i)
939 for (
int i = 0; i < 3; ++i)
942 Vmath::Vcopy(ncoeffs, &tmpout[i][0], 1, &modarray[i][0], 1);
956 for (i = 0; i < nvar; ++i)
958 m_fields[i]->MultiplyByElmtInvMass(modarray[i], modarray[i]);
959 m_fields[i]->BwdTrans(modarray[i], outarray[i]);
965 for (
int j = 0; j < 2; ++j)
968 Vmath::Vadd(nq, &F[0], 1, &outarray[j][0], 1, &outarray[j][0], 1);
975 AddPML(physarray, outarray);
1009 m_fields[0]->GetCoords(x0, x1, x2);
1012 NekDouble uxx, uxy, uyy, detu, uti, uri;
1032 for (
int i = 0; i < nq; i++)
1035 tmpIN[i] * (1.0 - 2 * x0[i] * x0[i]) + (1.0 - tmpIN[i]);
1038 for (
int i = 0; i < nq; ++i)
1040 theta = atan2((x1[i] + 2.0), (x0[i] + 2.0));
1045 uxx = uti * cos(theta) * cos(theta) +
1046 uri * sin(theta) * sin(theta);
1047 uyy = uti * sin(theta) * sin(theta) +
1048 uri * cos(theta) * cos(theta);
1049 uxy = (uti - uri) * cos(theta) * sin(theta);
1051 detu = uxx * uyy - uxy * uxy;
1053 tmpx = outarray[0][i] + (1.0 - uxx) * Hxdt[i] - uxy * Hydt[i];
1054 tmpy = outarray[1][i] - uxy * Hxdt[i] + (1.0 - uyy) * Hydt[i];
1056 outarray[0][i] = (1 / detu) * (uyy * tmpx - uxy * tmpy);
1057 outarray[1][i] = (1 / detu) * (-uxy * tmpx + uxx * tmpy);
1074 outarray[0], 1, outarray[0], 1);
1078 outarray[1], 1, outarray[1], 1);
1082 outarray[2], 1, outarray[2], 1);
1089 outarray[0], 1, outarray[0], 1);
1093 outarray[1], 1, outarray[1], 1);
1097 outarray[2], 1, outarray[2], 1);
1116 outarray[0], 1, outarray[0], 1);
1120 outarray[1], 1, outarray[1], 1);
1124 outarray[2], 1, outarray[2], 1);
1131 outarray[0], 1, outarray[0], 1);
1145 outarray[1], 1, outarray[1], 1);
1150 outarray[2], 1, outarray[2], 1);
1179 int ncoeffs = outarray[0].num_elements();
1180 int nq = physarray[0].num_elements();
1214 m_fields[var]->IProductWRTBase(tmp, tmpc);
1215 Vmath::Vadd(ncoeffs, tmpc, 1, outarray[var], 1, outarray[var], 1);
1222 m_fields[var]->IProductWRTBase(tmp, tmpc);
1223 Vmath::Vadd(ncoeffs, tmpc, 1, outarray[var], 1, outarray[var], 1);
1230 &tmp[0], 1, &tmp[0], 1);
1231 m_fields[var]->IProductWRTBase(tmp, tmpc);
1232 Vmath::Vadd(ncoeffs, tmpc, 1, outarray[var], 1, outarray[var], 1);
1268 for (i = 0; i < nvar; ++i)
1270 physfield[i] = InField[i];
1274 for (i = 0; i < nvar; ++i)
1284 fluxvector[j], tmpc);
1285 Vmath::Vadd(ncoeffs, &tmpc[0], 1, &OutField[i][0], 1,
1286 &OutField[i][0], 1);
1296 for (i = 0; i < nvar; ++i)
1307 for (i = 0; i < nvar; ++i)
1310 m_fields[i]->AddFwdBwdTraceIntegral(numfluxFwd[i], numfluxBwd[i],
1327 boost::ignore_unused(time);
1329 int var = inarray.num_elements();
1334 for (
int i = 0; i < var; ++i)
1341 bool dumpInitialConditions,
1344 boost::ignore_unused(domain);
1347 int nvar =
m_fields.num_elements();
1380 for (
int i = 0; i < nvar; i++)
1407 for (
int i = 0; i < nvar; ++i)
1414 if (dumpInitialConditions)
1420 for (
int i = 0; i < nvar; ++i)
1422 fields[i] =
m_fields[i]->GetPhys();
1433 int nq =
m_fields[0]->GetNpoints();
1474 int nq =
m_fields[0]->GetNpoints();
1480 m_fields[0]->GetCoords(x0, x1, x2);
1498 for (
int i = 0; i < 10000; ++i)
1503 1.0 / cos(
m_n1 * omega) / cos(
m_n1 * omega));
1505 newomega = omega - F / Fprime;
1507 if (fabs(newomega - omega) > Tol)
1520 std::complex<double> im = sqrt(std::complex<double>(-1));
1521 std::complex<double> A1, A2, B1, B2;
1522 std::complex<double> Ak, Bk, nk;
1523 std::complex<double> Ec, Hc;
1526 A2 = exp(-1.0 * im * omega * (
m_n1 +
m_n2));
1527 B1 = A1 * exp(-2.0 * im *
m_n1 * omega);
1528 B2 = A2 * exp(2.0 * im *
m_n2 * omega);
1530 for (
int i = 0; i < nq; ++i)
1546 Ec = (Ak * exp(im * nk * omega * x0[i]) -
1547 Bk * exp(-im * nk * omega * x0[i])) *
1548 exp(im * omega * time);
1549 Hc = nk * (Ak * exp(im * nk * omega * x0[i]) +
1550 Bk * exp(-im * nk * omega * x0[i])) *
1551 exp(im * omega * time);
1577 const NekDouble time,
unsigned int field,
1580 int nq =
m_fields[0]->GetNpoints();
1586 m_fields[0]->GetCoords(x0, x1, x2);
1589 NekDouble omega =
m_pi * sqrt(freqm * freqm + freqn * freqn);
1601 for (
int i = 0; i < nq; ++i)
1603 switch (Polarization)
1607 Fx = -1.0 * (npi / omega) * sin(mpi * x0[i]) *
1608 cos(npi * x1[i]) * sin(omega * time);
1609 Fy = (mpi / omega) * cos(mpi * x0[i]) * sin(npi * x1[i]) *
1615 Fx * m_movingframes[1][i] + Fy * m_movingframes[1][i + nq];
1616 Fz[i] = sin(mpi * x0[i]) * sin(npi * x1[i]) * cos(omega * time);
1618 dFxdt = (npi)*sin(mpi * x0[i]) * cos(npi * x1[i]) *
1620 dFydt = -1.0 * (mpi)*cos(mpi * x0[i]) * sin(npi * x1[i]) *
1623 dF1dt[i] = dFxdt * m_movingframes[0][i] +
1624 dFydt * m_movingframes[0][i + nq];
1625 dF2dt[i] = dFxdt * m_movingframes[1][i] +
1626 dFydt * m_movingframes[1][i + nq];
1627 dFzdt[i] = omega * sin(mpi * x0[i]) * sin(npi * x1[i]) *
1634 Fx = -1.0 * (npi / omega) * cos(mpi * x0[i]) *
1635 sin(npi * x1[i]) * sin(omega * time);
1636 Fy = (mpi / omega) * sin(mpi * x0[i]) * cos(npi * x1[i]) *
1642 Fx * m_movingframes[1][i] + Fy * m_movingframes[1][i + nq];
1643 Fz[i] = cos(mpi * x0[i]) * cos(npi * x1[i]) * cos(omega * time);
1645 dFxdt = (npi)*cos(mpi * x0[i]) * sin(npi * x1[i]) *
1647 dFydt = -1.0 * (mpi)*sin(mpi * x0[i]) * cos(npi * x1[i]) *
1650 dF1dt[i] = dFxdt * m_movingframes[0][i] +
1651 dFydt * m_movingframes[0][i + nq];
1652 dF2dt[i] = dFxdt * m_movingframes[1][i] +
1653 dFydt * m_movingframes[1][i + nq];
1654 dFzdt[i] = omega * cos(mpi * x0[i]) * cos(npi * x1[i]) *
1708 const NekDouble time,
unsigned int field,
1711 int nq =
m_fields[0]->GetNpoints();
1717 m_fields[0]->GetCoords(x0, x1, x2);
1720 NekDouble omega =
m_pi * sqrt(freqm * freqm + freqn * freqn);
1729 for (
int i = 0; i < nq; ++i)
1731 switch (Polarization)
1735 Fx = (npi / omega) * cos(mpi * x0[i]) * sin(npi * x1[i]) *
1737 Fy = -(mpi / omega) * sin(mpi * x0[i]) * cos(npi * x1[i]) *
1743 Fx * m_movingframes[1][i] + Fy * m_movingframes[1][i + nq];
1744 Fz[i] = cos(mpi * x0[i]) * cos(npi * x1[i]) * cos(omega * time);
1750 Fx = (npi / omega) * sin(mpi * x0[i]) * cos(npi * x1[i]) *
1752 Fy = -(mpi / omega) * cos(mpi * x0[i]) * sin(npi * x1[i]) *
1758 Fx * m_movingframes[1][i] + Fy * m_movingframes[1][i + nq];
1759 Fz[i] = sin(mpi * x0[i]) * sin(npi * x1[i]) * cos(omega * time);
1797 int nq =
m_fields[0]->GetTotPoints();
1822 NekDouble xj, yj, zj, sin_varphi, cos_varphi, sin_theta, cos_theta;
1824 for (
int i = 0; i < nq; i++)
1833 vth = -4.0 * sin_varphi * cos_varphi * cos_theta * cos_theta *
1834 cos_theta * sin_theta;
1836 -1.0 * sin_varphi * sin_varphi * cos_theta * cos_theta * cos_theta;
1837 velvec[0][i] = -vth * sin_theta * cos_varphi - vphi * sin_varphi;
1838 velvec[1][i] = -vth * sin_theta * sin_varphi + vphi * cos_varphi;
1839 velvec[2][i] = vth * cos_theta;
1841 E3[i] = (-4.0 * cos_theta * cos_theta * sin_theta * cos_varphi *
1843 (1.0 / omega * sin(omega * time));
1845 Fth = -omega * vth -
1846 (8.0 / omega) * cos_theta * sin_theta * cos_varphi * sin_varphi;
1847 Fphi = -omega * vphi +
1848 (4.0 / omega) * cos_varphi * cos_varphi * cos_theta *
1849 (2.0 * sin_theta * sin_theta - cos_theta * cos_theta);
1850 Fvec[0][i] = -Fth * sin_theta * cos_varphi - Fphi * sin_varphi;
1851 Fvec[1][i] = -Fth * sin_theta * sin_varphi + Fphi * cos_varphi;
1852 Fvec[2][i] = Fth * cos_theta;
1910 int nq =
m_fields[0]->GetTotPoints();
1919 int totnpts = totbdryexp * npts;
1938 m_fields[0]->ExtractTracePhys(x, xFwd);
1939 m_fields[0]->ExtractTracePhys(y, yFwd);
1941 for (
int i = 0; i < nTraceNumPoints; ++i)
1945 phiFwd[i] = atan2(yFwd[i] / radFwd[i], -1.0 * xFwd[i] / radFwd[i]);
1953 for (
int e = 0; e < totbdryexp; ++e)
1955 id2 =
m_fields[0]->GetTrace()->GetPhys_Offset(
1956 m_fields[0]->GetTraceMap()->GetBndCondCoeffsToGlobalCoeffsMap(cnt +
1959 Vmath::Vcopy(npts, &phiFwd[id2], 1, &Jphi[e * npts], 1);
1960 Vmath::Vcopy(npts, &radFwd[id2], 1, &Jrad[e * npts], 1);
1961 Vmath::Vcopy(npts, &ntimesHFwd[id2], 1, &Jcurrent[e * npts], 1);
1968 std::cout <<
"========================================================" 1971 std::cout <<
"phi = " << std::endl;
1972 for (
int i = 0; i < totnpts; ++i)
1974 std::cout << Jphi[i] <<
", ";
1976 std::cout << std::endl << std::endl;
1978 std::cout <<
"J = " << std::endl;
1979 for (
int i = 0; i < totnpts; ++i)
1981 std::cout << Jcurrent[i] <<
", ";
1983 std::cout << std::endl << std::endl;
1989 int nq =
m_fields[0]->GetTotPoints();
2002 for (
int i = 0; i < 2; i++)
2007 m_fields[0]->ExtractTracePhys(tmp, tmpFwd);
2009 &tmpFwd[0], 1, &outfield[0], 1, &outfield[0], 1);
2020 m_fields[0]->ExtractTracePhys(tmp, outfield);
2036 int nq =
m_fields[0]->GetNpoints();
2060 Vmath::Vsub(nq, PMLRegion, 1, RecPML, 1, CurvedPML, 1);
2068 NekDouble xRlayer, xLlayer, yRlayer, yLlayer;
2076 for (
int i = 0; i < nq; i++)
2079 if (x[i] >= xRlayer)
2081 xd = (x[i] - xRlayer) / PMLthickness;
2084 else if (x[i] <= xLlayer)
2086 xd = (xLlayer - x[i]) / PMLthickness;
2094 SigmaPML[0][i] = RecPML[i] * PMLmaxsigma * (xd * xd * xd);
2097 if (y[i] >= yRlayer)
2099 yd = (y[i] - yRlayer) / PMLthickness;
2102 else if (y[i] <= yLlayer)
2104 yd = (yLlayer - y[i]) / PMLthickness;
2112 SigmaPML[1][i] = PMLRegion[i] * PMLmaxsigma * (yd * yd * yd);
2122 for (
int i = 0; i < nq; i++)
2127 if (rad >= PMLstart)
2129 relrad = (rad - PMLstart) / PMLthickness;
2131 PMLRegion[i] * PMLmaxsigma * pow(relrad,
m_PMLorder);
2140 NekDouble relrad, radon, radtw, radth, radfo;
2141 for (
int i = 0; i < nq; i++)
2143 radon = -1.0 * x[i] + y[i] - 7;
2144 radtw = x[i] + y[i] - 7;
2145 radth = -x[i] - y[i] - 7;
2146 radfo = x[i] - y[i] - 7;
2150 relrad = radon / PMLthickness;
2152 PMLRegion[i] * PMLmaxsigma * pow(relrad,
m_PMLorder);
2157 relrad = radtw / PMLthickness;
2159 PMLRegion[i] * PMLmaxsigma * pow(relrad,
m_PMLorder);
2164 relrad = radth / PMLthickness;
2166 PMLRegion[i] * PMLmaxsigma * pow(relrad,
m_PMLorder);
2171 relrad = radfo / PMLthickness;
2173 PMLRegion[i] * PMLmaxsigma * pow(relrad,
m_PMLorder);
2180 std::cout <<
"*** sigma1 = [ " <<
Vmath::Vmin(nq, &SigmaPML[0][0], 1)
2182 <<
" ] , sigma2 = [ " <<
Vmath::Vmin(nq, &SigmaPML[1][0], 1)
2183 <<
" , " <<
Vmath::Vmax(nq, &SigmaPML[1][0], 1) <<
" ] " 2195 for (
int i = 0; i < 3; ++i)
2197 Vmath::Vvtvp(nq, &fields[i][0], 1, &fields[i][0], 1, &tmp[0], 1,
2201 energy = 0.5 * (
m_fields[0]->PhysIntegral(tmp));
2234 m_fields[0]->GenerateElementVector(
2261 m_fields[0]->GenerateElementVector(
2263 m_fields[0]->GenerateElementVector(
2305 boost::ignore_unused(muvec, Dispersion);
2319 NekDouble boveradel = m_b / (m_b - m_adel);
2327 if (fabs(la * lb - 1.0) < 0.00001)
2329 ExactCloakArea =
m_pi * (m_b * m_b - m_a * m_a);
2334 ExactCloakArea =
m_pi * (3.0 * lb * 3.0 * la - lb * la);
2339 ExactCloakArea = ExactCloakArea - (
m_fields[0]->PhysIntegral(Cloakregion));
2340 std::cout <<
"*** Error of Cloakregion area = " << ExactCloakArea
2348 for (
int i = 0; i < nq; ++i)
2350 if (Cloakregion[i] > 0)
2354 ratio = (radvec[i] - m_adel) / radvec[i];
2356 epsvec[0][i] = boveradel * boveradel;
2361 (1.0 - boveradel * boveradel * ratio * ratio) +
2367 epsvec[1][i] = boveradel * boveradel * (ratio * ratio);
2395 Vmath::Vsub(nq, Cloakregion, 1, Vacregion, 1, Cloakregion, 1);
2398 ExactCloakArea = ExactCloakArea - (
m_fields[0]->PhysIntegral(Cloakregion));
2399 std::cout <<
"*** Error of Cloakregion area = " << ExactCloakArea
2407 for (
int i = 0; i < nq; ++i)
2409 if (Cloakregion[i] > 0)
2415 epsvec[0][i] = radvec[i] / (radvec[i] - m_adel);
2416 epsvec[1][i] = (radvec[i] - m_adel) / radvec[i];
2417 muvec[2][i] = (m_b / (m_b - m_adel)) * (m_b / (m_b - m_adel)) *
2418 (radvec[i] - m_adel) / radvec[i];
2420 muvec[0][i] = epsvec[0][i];
2421 muvec[1][i] = epsvec[1][i];
2422 epsvec[2][i] = muvec[2][i];
2431 int nq =
m_fields[0]->GetTotPoints();
2439 &Sigma1minus0[0], 1);
2441 &Sigma0minus1[0], 1);
2443 &Sigma0plus1Neg[0], 1);
2458 Vmath::Vvtvp(nq, &Sigma0minus1[0], 1, &physarray[indxH0][0], 1,
2459 &outarray[indxH0][0], 1, &outarray[indxH0][0], 1);
2460 Vmath::Vadd(nq, &physarray[indxQ0][0], 1, &outarray[indxH0][0], 1,
2461 &outarray[indxH0][0], 1);
2464 Vmath::Vvtvp(nq, &Sigma1minus0[0], 1, &physarray[indxH1][0], 1,
2465 &outarray[indxH1][0], 1, &outarray[indxH1][0], 1);
2466 Vmath::Vadd(nq, &physarray[indxQ1][0], 1, &outarray[indxH1][0], 1,
2467 &outarray[indxH1][0], 1);
2470 Vmath::Vvtvp(nq, &Sigma0plus1Neg[0], 1, &physarray[indxE2][0], 1,
2471 &outarray[indxE2][0], 1, &outarray[indxE2][0], 1);
2472 Vmath::Vadd(nq, &physarray[indxP2][0], 1, &outarray[indxE2][0], 1,
2473 &outarray[indxE2][0], 1);
2476 Vmath::Vvtvp(nq, &Sigma0minus1[0], 1, &physarray[indxH0][0], 1,
2477 &physarray[indxQ0][0], 1, &outarray[indxQ0][0], 1);
2479 &outarray[indxQ0][0], 1);
2483 Vmath::Vvtvp(nq, &Sigma1minus0[0], 1, &physarray[indxH1][0], 1,
2484 &physarray[indxQ1][0], 1, &outarray[indxQ1][0], 1);
2486 &outarray[indxQ1][0], 1);
2492 &outarray[indxQ1][0], 1, &outarray[indxQ1][0], 1);
2497 &outarray[indxP2][0], 1);
2498 Vmath::Vmul(nq, &physarray[indxE2][0], 1, &outarray[indxP2][0], 1,
2499 &outarray[indxP2][0], 1);
2514 Vmath::Vvtvp(nq, &Sigma0minus1[0], 1, &physarray[indxE0][0], 1,
2515 &outarray[indxE0][0], 1, &outarray[indxE0][0], 1);
2516 Vmath::Vsub(nq, &outarray[indxE0][0], 1, &physarray[indxQ0][0], 1,
2517 &outarray[indxE0][0], 1);
2520 Vmath::Vvtvp(nq, &Sigma1minus0[0], 1, &physarray[indxE1][0], 1,
2521 &outarray[indxE1][0], 1, &outarray[indxE1][0], 1);
2522 Vmath::Vsub(nq, &outarray[indxE1][0], 1, &physarray[indxQ1][0], 1,
2523 &outarray[indxE1][0], 1);
2526 Vmath::Vvtvp(nq, &Sigma0plus1Neg[0], 1, &physarray[indxH2][0], 1,
2527 &outarray[indxH2][0], 1, &outarray[indxH2][0], 1);
2528 Vmath::Vsub(nq, &outarray[indxH2][0], 1, &physarray[indxP2][0], 1,
2529 &outarray[indxH2][0], 1);
2532 Vmath::Vvtvp(nq, &Sigma1minus0[0], 1, &physarray[indxE0][0], 1,
2533 &physarray[indxQ0][0], 1, &outarray[indxQ0][0], 1);
2535 &outarray[indxQ0][0], 1);
2539 Vmath::Vvtvp(nq, &Sigma0minus1[0], 1, &physarray[indxE1][0], 1,
2540 &physarray[indxQ1][0], 1, &outarray[indxQ1][0], 1);
2542 &outarray[indxQ1][0], 1);
2548 &outarray[indxQ1][0], 1, &outarray[indxQ1][0], 1);
2553 &outarray[indxP2][0], 1);
2554 Vmath::Vmul(nq, &physarray[indxH2][0], 1, &outarray[indxP2][0], 1,
2555 &outarray[indxP2][0], 1);
2568 int nvar =
m_fields.num_elements();
2569 int nq =
m_fields[0]->GetTotPoints();
2570 int ncoeffs =
m_fields[0]->GetNcoeffs();
2572 std::string outname =
2573 m_sessionName +
"Tot_" + boost::lexical_cast<std::string>(n) +
".chk";
2575 std::vector<std::string> variables(nvar);
2576 std::vector<Array<OneD, NekDouble>> fieldcoeffs(nvar);
2578 for (
int i = 0; i < nvar; ++i)
2584 for (
int i = 0; i < nvar; ++i)
2587 Vmath::Vadd(nq, fieldphys[i], 1, totfield, 1, totfield, 1);
2589 m_fields[i]->FwdTrans(totfield, fieldcoeffs[i]);
2600 int nvar =
m_fields.num_elements();
2601 int nq =
m_fields[0]->GetTotPoints();
2602 int ncoeffs =
m_fields[0]->GetNcoeffs();
2604 std::string outname =
2605 m_sessionName +
"Plot_" + boost::lexical_cast<std::string>(n) +
".chk";
2607 std::vector<std::string> variables(nvar);
2608 variables[0] =
"Fx";
2609 variables[1] =
"Fy";
2610 variables[2] =
"Fz";
2612 std::vector<Array<OneD, NekDouble>> fieldcoeffs(nvar);
2613 for (
int i = 0; i < nvar; ++i)
2624 &tmp[0], 1, &tmp[0], 1);
2626 m_fields[k]->FwdTrans(tmp, fieldcoeffs[k]);
2636 int nvar =
m_fields.num_elements();
2637 int nq =
m_fields[0]->GetTotPoints();
2638 int ncoeffs =
m_fields[0]->GetNcoeffs();
2641 boost::lexical_cast<std::string>(n) +
".chk";
2643 std::vector<std::string> variables(nvar);
2644 variables[0] =
"Frx";
2645 variables[1] =
"Fry";
2646 variables[2] =
"Frz";
2647 for (
int i = 3; i < nvar; ++i)
2652 std::vector<Array<OneD, NekDouble>> fieldcoeffs(nvar);
2653 for (
int i = 0; i < nvar; ++i)
2663 Vmath::Vadd(nq, fieldphys[0], 1, totfield0, 1, totfield0, 1);
2666 Vmath::Vadd(nq, fieldphys[1], 1, totfield1, 1, totfield1, 1);
2673 &tmp[0], 1, &tmp[0], 1);
2675 m_fields[k]->FwdTrans(tmp, fieldcoeffs[k]);
2678 for (
int j = 3; j < nvar; ++j)
2680 m_fields[j]->FwdTrans(fieldphys[j], fieldcoeffs[j]);
2690 boost::ignore_unused(time);
2692 int nvar =
m_fields.num_elements();
2693 int nq =
m_fields[0]->GetTotPoints();
2694 int ncoeffs =
m_fields[0]->GetNcoeffs();
2697 boost::lexical_cast<std::string>(n) +
".chk";
2699 std::vector<std::string> variables(nvar);
2700 variables[0] =
"EDFx";
2701 variables[1] =
"EDFy";
2702 variables[2] =
"EDFz";
2703 for (
int i = 3; i < nvar; ++i)
2708 std::vector<Array<OneD, NekDouble>> fieldcoeffs(nvar);
2709 for (
int i = 0; i < nvar; ++i)
2723 &tmp[0], 1, &tmp[0], 1);
2725 Vmath::Vmul(nq, &fieldphys[2][0], 1, &tmp[0], 1, &tmp[0], 1);
2732 m_fields[k]->FwdTrans(tmp, fieldcoeffs[k]);
2742 boost::ignore_unused(time);
2744 int nvar =
m_fields.num_elements();
2745 int nq =
m_fields[0]->GetTotPoints();
2746 int ncoeffs =
m_fields[0]->GetNcoeffs();
2749 boost::lexical_cast<std::string>(n) +
".chk";
2751 std::vector<std::string> variables(nvar);
2752 variables[0] =
"Energy";
2753 variables[1] =
"EnergyFlux";
2754 variables[2] =
"Zero";
2755 for (
int i = 3; i < nvar; ++i)
2760 std::vector<Array<OneD, NekDouble>> fieldcoeffs(nvar);
2761 for (
int i = 0; i < nvar; ++i)
2775 Vmath::Vvtvp(nq, &fieldphys[k][0], 1, &fieldphys[k][0], 1, &energy[0],
2779 m_fields[0]->FwdTrans(energy, fieldcoeffs[0]);
2784 for (
int k = 0; k < 2; ++k)
2790 Vmath::Vvtvp(nq, &fieldphys[k][0], 1, &fieldphys[k][0], 1,
2791 &energyflux[0], 1, &energyflux[0], 1);
2795 Vmath::Vmul(nq, &fieldphys[2][0], 1, &energyflux[0], 1, &energyflux[0], 1);
2797 m_fields[1]->FwdTrans(energyflux, fieldcoeffs[1]);
2798 m_fields[2]->FwdTrans(Zero, fieldcoeffs[2]);
2809 int nq =
m_fields[0]->GetTotPoints();
2810 int ncoeffs =
m_fields[0]->GetNcoeffs();
2824 1.0 / (1.0 + exp(-0.5 * (time -
m_PSduration) / SFradius));
2826 for (
int j = 0; j < nq; ++j)
2828 rad = sqrt((x[j] - Psx) * (x[j] - Psx) + (y[j] - Psy) * (y[j] - Psy) +
2829 (z[j] - Psz) * (z[j] - Psz));
2830 outarray[j] = SmoothFactor * exp(-1.0 * (rad / Gaussianradius) *
2831 (rad / Gaussianradius));
2834 m_fields[0]->FwdTrans_IterPerExp(outarray, tmpc);
2835 m_fields[0]->BwdTrans(tmpc, outarray);
2847 NekDouble sin_theta, cos_theta, sin_varphi, cos_varphi;
2856 for (
int j = 0; j < nq; ++j)
2865 outarray[j] = 2.0 * m_Omega * sin_theta;
2874 int nq = physarray[0].num_elements();
2916 Vmath::Vadd(nq, tmp, 1, outarray[j], 1, outarray[j], 1);
2931 if (CloakNlayer == 8)
2934 if (fabs(la * lb - 1.0) < 0.0001)
2960 if (CloakNlayer == 16)
2963 if (fabs(la * lb - 1.0) < 0.0001)
3009 m_fields[0]->GetCoords(x0, x1, x2);
3015 m_fields[0]->GenerateElementVector(Layer[0], 1.0, 0.0, Currenttmp);
3017 for (
int i = 1; i < CloakNlayer; ++i)
3019 m_fields[0]->GenerateElementVector(Layer[i], 1.0, 0.0, Currenttmp);
3020 m_fields[0]->GenerateElementVector(Layer[i - 1], 1.0, 0.0, Formertmp);
3022 Vmath::Vsub(nq, Currenttmp, 1, Formertmp, 1, Currenttmp, 1);
3024 Vmath::Svtvp(nq, 1.0 * (i + 1), Currenttmp, 1, Cloakregion, 1,
3030 for (
int i = 0; i < nq; ++i)
3036 if ((Cloakregion[i] > 0) && (CloakNlayer > 0))
3040 (m_b - m_a) / CloakNlayer * (Cloakregion[i] - 0.5);
3046 sqrt(x0[i] * x0[i] / la / la + x1[i] * x1[i] / lb / lb);
3053 radvec[i] = sqrt(2.0 * x0[i] * x0[i] +
3054 x1[i] * x1[i] * x1[i] * x1[i] + x1[i] * x1[i]);
3060 radvec[i] = sqrt(3.0 * x0[i] * x0[i] +
3061 x1[i] * x1[i] * x1[i] * x1[i] - x1[i] * x1[i]);
3077 s,
"TestMaxwellType",
3143 int Ntot = inarray.num_elements();
3146 for (
int i = 0; i < Ntot; ++i)
3148 std::cout <<
"[" << i <<
"] = " << inarray[2][i] << std::endl;
3151 reval = sqrt(reval / Ntot);
Array< OneD, NekDouble > TestMaxwell2DPEC(const NekDouble time, unsigned int field, const SolverUtils::PolType Polarization)
Array< OneD, NekDouble > TestMaxwell2DPMC(const NekDouble time, unsigned int field, const SolverUtils::PolType Polarization)
virtual void v_DoSolve()
Solves an unsteady problem.
#define ASSERTL0(condition, msg)
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
void DoOdeRhs(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
Compute the RHS.
virtual ~MMFMaxwell()
Destructor.
Array< OneD, NekDouble > m_coriolis
SOLVER_UTILS_EXPORT void AdddedtMaxwell(const Array< OneD, const Array< OneD, NekDouble >> &physarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
virtual void v_InitObject()
Initialise the object.
NekDouble m_time
Current time of simulation.
Circular around the centre of domain.
int m_PrintoutSurfaceCurrent
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
Array< OneD, NekDouble > TestMaxwell1D(const NekDouble time, unsigned int field)
A base class for PDEs which include an advection component.
T Vmax(int n, const T *x, const int incx)
Return the maximum element in x – called vmax to avoid conflict with max.
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use.
NekDouble m_timestep
Time step size.
NekDouble TimePerTest(unsigned int n)
Returns amount of seconds per iteration in a test with n iterations.
SOLVER_UTILS_EXPORT Array< OneD, NekDouble > GetIncidentField(const int var, const NekDouble time)
Array< OneD, NekDouble > m_wp2
Array< OneD, Array< OneD, NekDouble > > m_negepsvecminus1
std::vector< std::pair< std::string, std::string > > SummaryList
NekDouble m_Gaussianradius
T Vmin(int n, const T *x, const int incx)
Return the minimum element in x - called vmin to avoid conflict with min.
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_CurlMF
MMFMaxwell(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Session reader.
void Checkpoint_TotPlotOutput(const int n, const NekDouble time, const Array< OneD, const Array< OneD, NekDouble >> &fieldphys)
SOLVER_UTILS_EXPORT void Checkpoint_Output(const int n)
Write checkpoint file of m_fields.
void Printout_SurfaceCurrent(Array< OneD, Array< OneD, NekDouble >> &fields, const int time)
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
const char *const IncTypeMap[]
SOLVER_UTILS_EXPORT void DeriveCrossProductMF(Array< OneD, Array< OneD, NekDouble >> &CrossProductMF)
NekDouble m_checktime
Time between checkpoints.
void DoOdeProjection(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
Compute the projection.
void ComputeMaterialMicroWaveCloak(const Array< OneD, const NekDouble > &radvec, Array< OneD, Array< OneD, NekDouble >> &epsvec, Array< OneD, Array< OneD, NekDouble >> &muvec)
void Vdiv(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x/y.
SOLVER_UTILS_EXPORT void ComputeZimYim(Array< OneD, Array< OneD, NekDouble >> &epsvec, Array< OneD, Array< OneD, NekDouble >> &muvec)
SOLVER_UTILS_EXPORT void Computedemdxicdote()
std::string m_sessionName
Name of the session.
int m_checksteps
Number of steps between checkpoints.
Array< OneD, NekDouble > GaussianPulse(const NekDouble time, const NekDouble Psx, const NekDouble Psy, const NekDouble Psz, const NekDouble Gaussianradius)
void AddPML(const Array< OneD, const Array< OneD, NekDouble >> &physarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Array< OneD, Array< OneD, NekDouble > > m_epsvec
Array< OneD, NekDouble > m_varepsilon
SOLVER_UTILS_EXPORT int GetTotPoints()
Array< OneD, Array< OneD, NekDouble > > m_movingframes
NekDouble m_fintime
Finish time of the simulation.
int m_steps
Number of steps to take.
NekDouble m_Cloakraddelta
Array< OneD, NekDouble > m_SourceVector
Array< OneD, Array< OneD, NekDouble > > m_SigmaPML
void DefineProjection(FuncPointerT func, ObjectPointerT obj)
TestMaxwellType m_TestMaxwellType
const char *const TestMaxwellTypeMap[]
Array< OneD, Array< OneD, NekDouble > > m_muvec
static const NekDouble kNekZeroTol
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
Circular around the centre of domain.
bool m_explicitAdvection
Indicates if explicit or implicit treatment of advection is used.
SOLVER_UTILS_EXPORT Array< OneD, NekDouble > CartesianToMovingframes(const Array< OneD, const Array< OneD, NekDouble >> &uvec, unsigned int field)
void DefineOdeRhs(FuncPointerT func, ObjectPointerT obj)
void ComputeMaterialOpticalCloak(const Array< OneD, const NekDouble > &radvec, Array< OneD, Array< OneD, NekDouble >> &epsvec, Array< OneD, Array< OneD, NekDouble >> &muvec, const bool Dispersion=false)
void Checkpoint_EnergyOutput(const int n, const NekDouble time, const Array< OneD, const Array< OneD, NekDouble >> &fieldphys)
Base class for unsteady solvers.
SOLVER_UTILS_EXPORT NekDouble RootMeanSquare(const Array< OneD, const NekDouble > &inarray)
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list.
SpatialDomains::BoundaryConditionsSharedPtr m_boundaryConditions
Pointer to boundary conditions object.
const char *const PolTypeMap[]
int m_spacedim
Spatial dimension (>= expansion dim).
SOLVER_UTILS_EXPORT void ComputeNtimesMF()
SOLVER_UTILS_EXPORT void NumericalMaxwellFlux(Array< OneD, Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, NekDouble >> &numfluxFwd, Array< OneD, Array< OneD, NekDouble >> &numfluxBwd, const NekDouble time=0.0)
void Checkpoint_TotalFieldOutput(const int n, const NekDouble time, const Array< OneD, const Array< OneD, NekDouble >> &fieldphys)
void print_MMF(Array< OneD, Array< OneD, NekDouble >> &inarray)
void Neg(int n, T *x, const int incx)
Negate x = -x.
SOLVER_UTILS_EXPORT void MMFInitObject(const Array< OneD, const Array< OneD, NekDouble >> &Anisotropy, const int TangentXelem=-1)
static SolverUtils::EquationSystemSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Creates an instance of this class.
virtual SOLVER_UTILS_EXPORT void v_InitObject()
Init object for UnsteadySystem class.
T Vamax(int n, const T *x, const int incx)
Return the maximum absolute element in x called vamax to avoid conflict with max. ...
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.
const char *const CloakTypeMap[]
Array< OneD, NekDouble > m_MMFfactors
void GenerateSigmaPML(const NekDouble PMLthickness, const NekDouble PMLstart, const NekDouble PMLmaxsigma, Array< OneD, Array< OneD, NekDouble >> &SigmaPML)
void WeakDGMaxwellDirDeriv(const Array< OneD, const Array< OneD, NekDouble >> &InField, Array< OneD, Array< OneD, NekDouble >> &OutField, const NekDouble time=0.0)
Calculate weak DG advection in the form .
EquationSystemFactory & GetEquationSystemFactory()
void Checkpoint_EDFluxOutput(const int n, const NekDouble time, const Array< OneD, const Array< OneD, NekDouble >> &fieldphys)
SOLVER_UTILS_EXPORT void CartesianToSpherical(const NekDouble x0j, const NekDouble x1j, const NekDouble x2j, NekDouble &sin_varphi, NekDouble &cos_varphi, NekDouble &sin_theta, NekDouble &cos_theta)
virtual void v_SetInitialConditions(const NekDouble initialtime, bool dumpInitialConditions, const int domain)
Array< OneD, Array< OneD, NekDouble > > m_negmuvecminus1
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
SOLVER_UTILS_EXPORT int GetTraceTotPoints()
static std::string className
Name of class.
static NekDouble rad(NekDouble x, NekDouble y)
SOLVER_UTILS_EXPORT void WriteFld(const std::string &outname)
Write field data to the given filename.
virtual void v_EvaluateExactSolution(unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
SOLVER_UTILS_EXPORT int GetNpoints()
void AddCoriolis(Array< OneD, Array< OneD, NekDouble >> &physarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
void Vvtvm(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvm (vector times vector plus vector): z = w*x - y
Array< OneD, Array< OneD, NekDouble > > m_CrossProductMF
SOLVER_UTILS_EXPORT int GetTraceNpoints()
SOLVER_UTILS_EXPORT int GetNcoeffs()
SOLVER_UTILS_EXPORT void GetMaxwellFluxVector(const int var, const Array< OneD, const Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, NekDouble >> &flux)
void Checkpoint_PlotOutput(const int n, const Array< OneD, const Array< OneD, NekDouble >> &fieldphys)
LibUtilities::TimeIntegrationWrapperSharedPtr m_intScheme
Wrapper to the time integration scheme.
Circular around the centre of domain.
virtual void v_GenerateSummary(SolverUtils::SummaryList &s)
Print Summary.
int m_infosteps
Number of time steps between outputting status information.
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_ntimesMFFwd
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Array< OneD, NekDouble > ComputeRadCloak(const int Nlayer=5)
void Zero(int n, T *x, const int incx)
Zero vector.
NekDouble ComputeEnergyDensity(Array< OneD, Array< OneD, NekDouble >> &fields)
Array< OneD, NekDouble > EvaluateCoriolis()
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary(SummaryList &s)
Print a summary of time stepping parameters.
const char *const SourceTypeMap[]
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
void ComputeMaterialVector(Array< OneD, Array< OneD, NekDouble >> &epsvec, Array< OneD, Array< OneD, NekDouble >> &muvec)
LibUtilities::TimeIntegrationSolutionSharedPtr m_intSoln
std::shared_ptr< SessionReader > SessionReaderSharedPtr
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
Array< OneD, NekDouble > TestMaxwellSphere(const NekDouble time, const NekDouble omega, unsigned int field)
Array< OneD, NekDouble > ComputeSurfaceCurrent(const int time, const Array< OneD, const Array< OneD, NekDouble >> &fields)
void AddGreenDerivCompensate(const Array< OneD, const Array< OneD, NekDouble >> &physarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
std::vector< int > m_intVariables
Array< OneD, NekDouble > m_mu
SpatialDomains::GeomMMF m_MMFdir