128 std::string AdvectiveType)
132 "EqType SolverInfo tag must be defined.");
133 std::string vEquation =
m_session->DefinesSolverInfo(
"SolverType")
139 "EquationSystem '" + vEquation +
140 "' is not defined.\n"
141 "Ensure equation name is correct and module is compiled.\n");
145 "Number of parallel-in-time processes npt must be specified.");
146 m_session->SetTag(
"AdvectiveType", AdvectiveType);
147 m_session->SetTag(
"ParallelInTimeSolver",
"TimeLevel0");
152 int npx =
m_session->DefinesCmdLineArgument(
"npx")
153 ?
m_session->GetCmdLineArgument<
int>(
"npx")
155 int npy =
m_session->DefinesCmdLineArgument(
"npy")
156 ?
m_session->GetCmdLineArgument<
int>(
"npy")
158 int npz =
m_session->DefinesCmdLineArgument(
"npz")
159 ?
m_session->GetCmdLineArgument<
int>(
"npz")
161 int nsz =
m_session->DefinesCmdLineArgument(
"nsz")
162 ?
m_session->GetCmdLineArgument<
int>(
"nsz")
164 int npt =
m_session->GetCmdLineArgument<
int>(
"npt");
167 std::string npx_string = std::to_string(npx);
168 std::string npy_string = std::to_string(npy);
169 std::string npz_string = std::to_string(npz);
170 std::string nsz_string = std::to_string(nsz);
171 std::string npt_string = std::to_string(npt);
172 std::string driver_string =
"Driver=" +
m_session->GetSolverInfo(
"Driver");
175 bool useOptFile =
m_session->DefinesCmdLineArgument(
"use-opt-file");
176 std::string optfilename = useOptFile ?
m_session->GetFilenames()[0] :
"";
178 char *argv[] = {
const_cast<char *
>(
"Solver"),
179 const_cast<char *
>(
"--solverinfo"),
180 const_cast<char *
>(driver_string.c_str()),
181 const_cast<char *
>(
"--npx"),
182 const_cast<char *
>(npx_string.c_str()),
183 const_cast<char *
>(
"--npy"),
184 const_cast<char *
>(npy_string.c_str()),
185 const_cast<char *
>(
"--npz"),
186 const_cast<char *
>(npz_string.c_str()),
187 const_cast<char *
>(
"--nsz"),
188 const_cast<char *
>(nsz_string.c_str()),
189 const_cast<char *
>(
"--npt"),
190 const_cast<char *
>(npt_string.c_str()),
191 const_cast<char *
>(
"-f"),
192 const_cast<char *
>(
"--use-opt-file"),
193 const_cast<char *
>(optfilename.c_str()),
196 size_t argc = useOptFile ? 16 : 14;
199 std::vector<std::string> sessionFileNames;
200 for (
auto &filename :
m_session->GetFilenames())
203 if (filename.substr(filename.find_last_of(
".") + 1) !=
"opt")
205 sessionFileNames.push_back(filename);
210 for (
size_t timeLevel = 1; timeLevel <
m_nTimeLevel; timeLevel++)
213 argc, argv, sessionFileNames,
m_session->GetComm(), timeLevel);
220 graph->SetBndRegionOrdering(
m_graph->GetBndRegionOrdering());
223 graph->SetCompositeOrdering(
m_graph->GetCompositeOrdering());
226 ASSERTL0(session->DefinesSolverInfo(
"EqType"),
227 "EqType SolverInfo tag must be defined.");
228 auto vEquation = session->DefinesSolverInfo(
"SolverType")
229 ? session->GetSolverInfo(
"SolverType")
230 : session->GetSolverInfo(
"EqType");
235 "EquationSystem '" + vEquation +
236 "' is not defined.\n"
237 "Ensure equation name is correct and module is compiled.\n");
240 session->SetTag(
"AdvectiveType", AdvectiveType);
241 session->SetTag(
"ParallelInTimeSolver",
242 "TimeLevel" + std::to_string(timeLevel));
244 vEquation, session, graph);
618 if (infield.size() != outfield.size())
623 for (
size_t n = 0; n < infield.size(); ++n)
628 if (infield[n]->GetExpSize() != outfield[n]->GetExpSize())
635 ? infield[n]->UpdatePhys()
638 ? outfield[n]->UpdatePhys()
642 if (infield[n]->GetTotPoints() == outfield[n]->GetTotPoints())
644 Vmath::Vcopy(infield[n]->GetTotPoints(), inphys, 1, outphys, 1);
649 for (
size_t i = 0; i < infield[n]->GetExpSize(); ++i)
652 auto inElmt = infield[n]->GetExp(i);
653 auto outElmt = outfield[n]->GetExp(i);
656 size_t inoffset = infield[n]->GetPhys_Offset(i);
657 size_t outoffset = outfield[n]->GetPhys_Offset(i);
661 inElmt->FwdTrans(inphys + inoffset, incoeff);
667 expPtr = std::make_shared<StdRegions::StdSegExp>(
669 inElmt->GetBasis(0)->GetBasisType(),
670 inElmt->GetBasis(0)->GetNumModes(),
671 outElmt->GetBasis(0)->GetPointsKey()));
675 expPtr = std::make_shared<StdRegions::StdQuadExp>(
677 inElmt->GetBasis(0)->GetBasisType(),
678 inElmt->GetBasis(0)->GetNumModes(),
679 outElmt->GetBasis(0)->GetPointsKey()),
681 inElmt->GetBasis(1)->GetBasisType(),
682 inElmt->GetBasis(1)->GetNumModes(),
683 outElmt->GetBasis(1)->GetPointsKey()));
687 expPtr = std::make_shared<StdRegions::StdTriExp>(
689 inElmt->GetBasis(0)->GetBasisType(),
690 inElmt->GetBasis(0)->GetNumModes(),
691 outElmt->GetBasis(0)->GetPointsKey()),
693 inElmt->GetBasis(1)->GetBasisType(),
694 inElmt->GetBasis(1)->GetNumModes(),
695 outElmt->GetBasis(1)->GetPointsKey()));
699 expPtr = std::make_shared<StdRegions::StdHexExp>(
701 inElmt->GetBasis(0)->GetBasisType(),
702 inElmt->GetBasis(0)->GetNumModes(),
703 outElmt->GetBasis(0)->GetPointsKey()),
705 inElmt->GetBasis(1)->GetBasisType(),
706 inElmt->GetBasis(1)->GetNumModes(),
707 outElmt->GetBasis(1)->GetPointsKey()),
709 inElmt->GetBasis(2)->GetBasisType(),
710 inElmt->GetBasis(2)->GetNumModes(),
711 outElmt->GetBasis(2)->GetPointsKey()));
715 expPtr = std::make_shared<StdRegions::StdPrismExp>(
717 inElmt->GetBasis(0)->GetBasisType(),
718 inElmt->GetBasis(0)->GetNumModes(),
719 outElmt->GetBasis(0)->GetPointsKey()),
721 inElmt->GetBasis(1)->GetBasisType(),
722 inElmt->GetBasis(1)->GetNumModes(),
723 outElmt->GetBasis(1)->GetPointsKey()),
725 inElmt->GetBasis(2)->GetBasisType(),
726 inElmt->GetBasis(2)->GetNumModes(),
727 outElmt->GetBasis(2)->GetPointsKey()));
731 expPtr = std::make_shared<StdRegions::StdPyrExp>(
733 inElmt->GetBasis(0)->GetBasisType(),
734 inElmt->GetBasis(0)->GetNumModes(),
735 outElmt->GetBasis(0)->GetPointsKey()),
737 inElmt->GetBasis(1)->GetBasisType(),
738 inElmt->GetBasis(1)->GetNumModes(),
739 outElmt->GetBasis(1)->GetPointsKey()),
741 inElmt->GetBasis(2)->GetBasisType(),
742 inElmt->GetBasis(2)->GetNumModes(),
743 outElmt->GetBasis(2)->GetPointsKey()));
747 expPtr = std::make_shared<StdRegions::StdTetExp>(
749 inElmt->GetBasis(0)->GetBasisType(),
750 inElmt->GetBasis(0)->GetNumModes(),
751 outElmt->GetBasis(0)->GetPointsKey()),
753 inElmt->GetBasis(1)->GetBasisType(),
754 inElmt->GetBasis(1)->GetNumModes(),
755 outElmt->GetBasis(1)->GetPointsKey()),
757 inElmt->GetBasis(2)->GetBasisType(),
758 inElmt->GetBasis(2)->GetNumModes(),
759 outElmt->GetBasis(2)->GetPointsKey()));
764 expPtr->BwdTrans(incoeff, tmp);