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);
617 if (infield.size() != outfield.size())
622 for (
size_t n = 0; n < infield.size(); ++n)
627 if (infield[n]->GetExpSize() != outfield[n]->GetExpSize())
634 ? infield[n]->UpdatePhys()
637 ? outfield[n]->UpdatePhys()
641 if (infield[n]->GetTotPoints() == outfield[n]->GetTotPoints())
643 Vmath::Vcopy(infield[n]->GetTotPoints(), inphys, 1, outphys, 1);
648 for (
size_t i = 0; i < infield[n]->GetExpSize(); ++i)
651 auto inElmt = infield[n]->GetExp(i);
652 auto outElmt = outfield[n]->GetExp(i);
655 size_t inoffset = infield[n]->GetPhys_Offset(i);
656 size_t outoffset = outfield[n]->GetPhys_Offset(i);
660 inElmt->FwdTrans(inphys + inoffset, incoeff);
666 expPtr = std::make_shared<StdRegions::StdSegExp>(
668 inElmt->GetBasis(0)->GetBasisType(),
669 inElmt->GetBasis(0)->GetNumModes(),
670 outElmt->GetBasis(0)->GetPointsKey()));
674 expPtr = std::make_shared<StdRegions::StdQuadExp>(
676 inElmt->GetBasis(0)->GetBasisType(),
677 inElmt->GetBasis(0)->GetNumModes(),
678 outElmt->GetBasis(0)->GetPointsKey()),
680 inElmt->GetBasis(1)->GetBasisType(),
681 inElmt->GetBasis(1)->GetNumModes(),
682 outElmt->GetBasis(1)->GetPointsKey()));
686 expPtr = std::make_shared<StdRegions::StdTriExp>(
688 inElmt->GetBasis(0)->GetBasisType(),
689 inElmt->GetBasis(0)->GetNumModes(),
690 outElmt->GetBasis(0)->GetPointsKey()),
692 inElmt->GetBasis(1)->GetBasisType(),
693 inElmt->GetBasis(1)->GetNumModes(),
694 outElmt->GetBasis(1)->GetPointsKey()));
698 expPtr = std::make_shared<StdRegions::StdHexExp>(
700 inElmt->GetBasis(0)->GetBasisType(),
701 inElmt->GetBasis(0)->GetNumModes(),
702 outElmt->GetBasis(0)->GetPointsKey()),
704 inElmt->GetBasis(1)->GetBasisType(),
705 inElmt->GetBasis(1)->GetNumModes(),
706 outElmt->GetBasis(1)->GetPointsKey()),
708 inElmt->GetBasis(2)->GetBasisType(),
709 inElmt->GetBasis(2)->GetNumModes(),
710 outElmt->GetBasis(2)->GetPointsKey()));
714 expPtr = std::make_shared<StdRegions::StdPrismExp>(
716 inElmt->GetBasis(0)->GetBasisType(),
717 inElmt->GetBasis(0)->GetNumModes(),
718 outElmt->GetBasis(0)->GetPointsKey()),
720 inElmt->GetBasis(1)->GetBasisType(),
721 inElmt->GetBasis(1)->GetNumModes(),
722 outElmt->GetBasis(1)->GetPointsKey()),
724 inElmt->GetBasis(2)->GetBasisType(),
725 inElmt->GetBasis(2)->GetNumModes(),
726 outElmt->GetBasis(2)->GetPointsKey()));
730 expPtr = std::make_shared<StdRegions::StdPyrExp>(
732 inElmt->GetBasis(0)->GetBasisType(),
733 inElmt->GetBasis(0)->GetNumModes(),
734 outElmt->GetBasis(0)->GetPointsKey()),
736 inElmt->GetBasis(1)->GetBasisType(),
737 inElmt->GetBasis(1)->GetNumModes(),
738 outElmt->GetBasis(1)->GetPointsKey()),
740 inElmt->GetBasis(2)->GetBasisType(),
741 inElmt->GetBasis(2)->GetNumModes(),
742 outElmt->GetBasis(2)->GetPointsKey()));
746 expPtr = std::make_shared<StdRegions::StdTetExp>(
748 inElmt->GetBasis(0)->GetBasisType(),
749 inElmt->GetBasis(0)->GetNumModes(),
750 outElmt->GetBasis(0)->GetPointsKey()),
752 inElmt->GetBasis(1)->GetBasisType(),
753 inElmt->GetBasis(1)->GetNumModes(),
754 outElmt->GetBasis(1)->GetPointsKey()),
756 inElmt->GetBasis(2)->GetBasisType(),
757 inElmt->GetBasis(2)->GetNumModes(),
758 outElmt->GetBasis(2)->GetPointsKey()));
763 expPtr->BwdTrans(incoeff, tmp);