97 size_t order, [[maybe_unused]] std::vector<NekDouble> freeParams)
99 constexpr size_t nStages[6] = {0, 1, 2, 3, 4, 6};
111 constexpr NekDouble Acoefficients[2][6][15] =
112 { { { 0., 0., 0., 0., 0.,
114 0., 0., 0., 0., 0. },
116 { 0., 0., 0., 0., 0.,
118 0., 0., 0., 0., 0. },
123 0., 0., 0., 0., 0. },
129 0., 0., 0., 0., 0. },
135 0., 0., 0., 0., 0. },
144 3./16., 0., 0., 9./16.,
145 -3./7., 2./7., 12./7., -12./7., 8./7. } },
147 { { 0., 0., 0., 0., 0.,
149 0., 0., 0., 0., 0. },
151 { 0., 0., 0., 0., 0.,
153 0., 0., 0., 0., 0. },
158 0., 0., 0., 0., 0. },
164 0., 0., 0., 0., 0. },
170 0., 0., 0., 0., 0. },
179 3./16., 0., 0., 9./16.,
180 -3./7., 2./7., 12./7., -12./7., 8./7. } } };
186 constexpr NekDouble Bcoefficients[2][6][6] =
187 { { { 0., 0., 0., 0., 0., 0. },
189 { 1., 0., 0., 0., 0., 0. },
191 { 0., 1., 0., 0., 0., 0. },
193 { 2./9., 3./9., 4./9., 0., 0., 0. },
195 { 1./6., 2./6., 2./6., 1./6., 0., 0. },
201 { 7./90., 0., 32./90., 12./90., 32./90., 7./90.} },
203 { { 0., 0., 0., 0., 0., 0. },
205 { 1., 0., 0., 0., 0., 0. },
207 { 1./2., 1./2., 0., 0., 0., 0. },
209 { 1./6., 1./6., 4./6., 0., 0., 0. },
211 { 1./6., 2./6., 2./6., 1./6., 0., 0. },
217 { 7./90., 0., 32./90., 12./90., 32./90., 7./90. } } };
220 size_t index = (variant ==
"SSP" || variant ==
"ImprovedEuler");
223 phase->m_variant = variant;
224 phase->m_order = order;
225 phase->m_name = std::string(
"RungeKutta") + phase->m_variant +
226 std::string(
"Order") + std::to_string(phase->m_order);
228 phase->m_numsteps = 1;
229 phase->m_numstages = nStages[phase->m_order];
248 for (
size_t s = 1; s < phase->m_numstages; ++s)
250 for (
size_t i = 0; i < s; ++i)
252 phase->m_A[0][s][i] =
253 Acoefficients[index][phase->m_order][cc++];
258 for (
size_t n = 0; n < phase->m_numstages; ++n)
260 phase->m_B[0][0][n] = Bcoefficients[index][phase->m_order][n];
263 phase->m_numMultiStepValues = 1;
264 phase->m_numMultiStepImplicitDerivs = 0;
265 phase->m_numMultiStepExplicitDerivs = 0;
267 phase->m_timeLevelOffset[0] = 0;
269 phase->CheckAndVerify();