Nektar++
IMEXdirkTimeIntegrationSchemes.h
Go to the documentation of this file.
1///////////////////////////////////////////////////////////////////////////////
2//
3// File: IMEXdirkTimeIntegrationSchemes.h
4//
5// For more information, please see: http://www.nektar.info
6//
7// The MIT License
8//
9// Copyright (c) 2018 Division of Applied Mathematics, Brown University (USA),
10// Department of Aeronautics, Imperial College London (UK), and Scientific
11// Computing and Imaging Institute, University of Utah (USA).
12//
13// License for the specific language governing rights and limitations under
14// Permission is hereby granted, free of charge, to any person obtaining a
15// copy of this software and associated documentation files (the "Software"),
16// to deal in the Software without restriction, including without limitation
17// the rights to use, copy, modify, merge, publish, distribute, sublicense,
18// and/or sell copies of the Software, and to permit persons to whom the
19// Software is furnished to do so, subject to the following conditions:
20//
21// The above copyright notice and this permission notice shall be included
22// in all copies or substantial portions of the Software.
23//
24// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30// DEALINGS IN THE SOFTWARE.
31//
32// Description: Combined header file for all IMEX Dirk based time integration
33// schemes.
34//
35///////////////////////////////////////////////////////////////////////////////
36
37// Note : If adding a new integrator be sure to register the
38// integrator with the Time Integration Scheme Facatory in
39// SchemeInitializor.cpp.
40
41#ifndef NEKTAR_LIB_UTILITIES_TIME_INTEGRATION_IMEX_DIRK_TIME_INTEGRATION_SCHEME
42#define NEKTAR_LIB_UTILITIES_TIME_INTEGRATION_IMEX_DIRK_TIME_INTEGRATION_SCHEME
43
44#define LUE LIB_UTILITIES_EXPORT
45
47
48namespace Nektar
49{
50namespace LibUtilities
51{
52
53///////////////////////////////////////////////////////////////////////////////
54// IMEXDirk-(s, sigma, p), where s is the number of stages of the
55// implicit scheme, sigma is the number of stages of the explicit
56// scheme and p is the combined order of the scheme.
57
59{
60public:
61 IMEXdirkTimeIntegrationScheme(std::string variant, size_t order,
62 std::vector<NekDouble> freeParams)
63 : TimeIntegrationSchemeGLM(variant, order, freeParams)
64 {
65 ASSERTL1(freeParams.size() == 2,
66 "IMEX DIRK Time integration scheme invalid number "
67 "of free parameters, expected two "
68 "<implicit stages, explicit stages>, received " +
69 std::to_string(freeParams.size()));
70
71 size_t s = freeParams[0];
72 size_t sigma = freeParams[1];
73
77
78 if (order == 1 && s == 1 && sigma == 1)
79 {
80 // This phase is Forward Backward Euler which has two steps.
83 }
84 else
85 {
87 m_integration_phases[0], order, freeParams);
88 }
89 }
90
92 {
93 }
94
96 std::string variant, size_t order, std::vector<NekDouble> freeParams)
97 {
100 variant, order, freeParams);
101
102 return p;
103 }
104
105 static std::string className;
106
108 size_t order,
109 std::vector<NekDouble> freeParams)
110 {
111 ASSERTL1(freeParams.size() == 2,
112 "IMEX DIRK Time integration scheme invalid number "
113 "of free parameters, expected two "
114 "<implicit stages, explicit stages>, received " +
115 std::to_string(freeParams.size()) + ".");
116
117 size_t s = freeParams[0];
118 size_t sigma = freeParams[1];
119
120 phase->m_schemeType = eIMEX;
121 phase->m_variant = "DIRK";
122 phase->m_order = order;
123 phase->m_name = "IMEX_DIRK"
124 "_" +
125 std::to_string(s) + "_" + std::to_string(sigma) + "_" +
126 std::to_string(phase->m_order);
127
128 phase->m_numsteps = 1;
129 phase->m_numstages = s + 1;
130
131 phase->m_A = Array<OneD, Array<TwoD, NekDouble>>(2);
132 phase->m_B = Array<OneD, Array<TwoD, NekDouble>>(2);
133
134 phase->m_A[0] =
135 Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
136 phase->m_B[0] =
137 Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
138 phase->m_A[1] =
139 Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
140 phase->m_B[1] =
141 Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
142 phase->m_U =
143 Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numsteps, 1.0);
144 phase->m_V =
145 Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numsteps, 1.0);
146
147 if (s == 1 && sigma == 2 && order == 1)
148 {
150 }
151 else if (s == 1 && sigma == 2 && order == 2)
152 {
154 }
155 else if (s == 2 && sigma == 2 && order == 2)
156 {
158 }
159 else if (s == 2 && sigma == 3 && order == 2)
160 {
162 }
163 else if (s == 2 && sigma == 3 && order == 3)
164 {
166 }
167 else if (s == 3 && sigma == 4 && order == 3)
168 {
170 }
171 else if (s == 4 && sigma == 4 && order == 3)
172 {
174 }
175 else
176 {
177 ASSERTL1(false,
178 "IMEX DIRK Time integration scheme bad type "
179 "(s, sigma, order) : (" +
180 std::to_string(s) + "," + std::to_string(sigma) + "," +
181 std::to_string(order) + "). " +
182 "Allowed combinations: (1,1,1), (1,2,1), (1,2,2), "
183 "(2,2,2), (2,3,2), (2,3,3), (3,4,3), (4,4,3)");
184 }
185
186 phase->m_numMultiStepValues = 1;
187 phase->m_numMultiStepImplicitDerivs = 0;
188 phase->m_numMultiStepExplicitDerivs = 0;
189 phase->m_timeLevelOffset = Array<OneD, size_t>(phase->m_numsteps);
190 phase->m_timeLevelOffset[0] = 0;
191
192 phase->CheckAndVerify();
193 }
194
195 ///////////////////////////////////////////////////////////////////////////////
196 // IMEX Dirk 1 1 1 : Forward - Backward Euler IMEX
199 {
200 phase->m_schemeType = eIMEX;
201 phase->m_order = 1;
202 phase->m_name =
203 std::string("IMEXdirk_1_1_" + std::to_string(phase->m_order));
204
205 phase->m_numsteps = 2;
206 phase->m_numstages = 1;
207
208 phase->m_A = Array<OneD, Array<TwoD, NekDouble>>(2);
209 phase->m_B = Array<OneD, Array<TwoD, NekDouble>>(2);
210
211 phase->m_A[0] =
212 Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
213 phase->m_B[0] =
214 Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
215 phase->m_A[1] =
216 Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
217 phase->m_B[1] =
218 Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
219 phase->m_U =
220 Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numsteps, 0.0);
221 phase->m_V =
222 Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numsteps, 0.0);
223
224 phase->m_A[0][0][0] = 1.0;
225
226 phase->m_B[0][0][0] = 1.0;
227 phase->m_B[1][1][0] = 1.0;
228
229 phase->m_U[0][0] = 1.0;
230 phase->m_U[0][1] = 1.0;
231
232 phase->m_V[0][0] = 1.0;
233 phase->m_V[0][1] = 1.0;
234
235 phase->m_numMultiStepValues = 1;
236 phase->m_numMultiStepImplicitDerivs = 0;
237 phase->m_numMultiStepExplicitDerivs = 1;
238
239 phase->m_timeLevelOffset = Array<OneD, size_t>(phase->m_numsteps);
240 phase->m_timeLevelOffset[0] = 0;
241 phase->m_timeLevelOffset[1] = 0;
242
243 phase->CheckAndVerify();
244 }
245
246 ///////////////////////////////////////////////////////////////////////////////
247 // IMEX Dirk 1 2 1 : Forward - Backward Euler IMEX w/B implicit == B
248 // explicit
251 {
252 phase->m_A[0][1][1] = 1.0;
253 phase->m_B[0][0][1] = 1.0;
254
255 phase->m_A[1][1][0] = 1.0;
256 phase->m_B[1][0][1] = 1.0;
257
258 // U and V set to 1 when allocated.
259 }
260
261 ////////////////////////////////////////////////////////////////////////////
262 // IMEX Dirk 1 2 2 : Implict-Explicit Midpoint IMEX
265 {
266 phase->m_A[0][1][1] = 1.0 / 2.0;
267 phase->m_B[0][0][1] = 1.0;
268
269 phase->m_A[1][1][0] = 1.0 / 2.0;
270 phase->m_B[1][0][1] = 1.0;
271
272 // U and V set to 1 when allocated.
273 }
274
275 ////////////////////////////////////////////////////////////////////////////
276 // IMEX Dirk 2 2 2 : L Stable, two stage, second order IMEX
279 {
280 const NekDouble glambda = 1.0 - sqrt(2.0) / 2.0;
281 const NekDouble gdelta = -sqrt(2.0) / 2.0;
282
283 phase->m_A[0][1][1] = glambda;
284 phase->m_A[0][2][1] = 1.0 - glambda;
285 phase->m_A[0][2][2] = glambda;
286
287 phase->m_B[0][0][1] = 1.0 - glambda;
288 phase->m_B[0][0][2] = glambda;
289
290 phase->m_A[1][1][0] = glambda;
291 phase->m_A[1][2][0] = gdelta;
292 phase->m_A[1][2][1] = 1.0 - gdelta;
293
294 phase->m_B[1][0][0] = gdelta;
295 phase->m_B[1][0][1] = 1.0 - gdelta;
296
297 // U and V set to 1 when allocated.
298 }
299
300 ////////////////////////////////////////////////////////////////////////////
301 // IMEX Dirk 2 3 2 : L Stable, two stage, second order IMEX
304 {
305 const NekDouble lambda = (2.0 - sqrt(2.0)) / 2.0;
306 const NekDouble delta = -2.0 * sqrt(2.0) / 3.0;
307
308 phase->m_A[0][1][1] = lambda;
309 phase->m_A[0][2][1] = 1.0 - lambda;
310 phase->m_A[0][2][2] = lambda;
311
312 phase->m_B[0][0][1] = 1.0 - lambda;
313 phase->m_B[0][0][2] = lambda;
314
315 phase->m_A[1][1][0] = lambda;
316 phase->m_A[1][2][0] = delta;
317 phase->m_A[1][2][1] = 1.0 - delta;
318
319 phase->m_B[1][0][1] = 1.0 - lambda;
320 phase->m_B[1][0][2] = lambda;
321
322 // U and V set to 1 when allocated.
323 }
324
325 ////////////////////////////////////////////////////////////////////////////
326 // IMEX Dirk 2 3 3 : L Stable, two stage, third order IMEX
329 {
330 const NekDouble glambda = (3.0 + sqrt(3.0)) / 6.0;
331
332 phase->m_A[0][1][1] = glambda;
333 phase->m_A[0][2][1] = 1.0 - 2.0 * glambda;
334 phase->m_A[0][2][2] = glambda;
335
336 phase->m_B[0][0][1] = 0.5;
337 phase->m_B[0][0][2] = 0.5;
338
339 phase->m_A[1][1][0] = glambda;
340 phase->m_A[1][2][0] = glambda - 1.0;
341 phase->m_A[1][2][1] = 2.0 * (1.0 - glambda);
342
343 phase->m_B[1][0][1] = 0.5;
344 phase->m_B[1][0][2] = 0.5;
345
346 // U and V set to 1 when allocated.
347 }
348
349 ////////////////////////////////////////////////////////////////////////////
350 // IMEX Dirk 3 4 3 : L Stable, three stage, third order IMEX
353 {
354 constexpr NekDouble lambda = 0.4358665215;
355
356 phase->m_A[0][1][1] = lambda;
357 phase->m_A[0][2][1] = 0.5 * (1.0 - lambda);
358 phase->m_A[0][2][2] = lambda;
359 phase->m_A[0][3][1] =
360 0.25 * (-6.0 * lambda * lambda + 16.0 * lambda - 1.0);
361 phase->m_A[0][3][2] =
362 0.25 * (6.0 * lambda * lambda - 20.0 * lambda + 5.0);
363 phase->m_A[0][3][3] = lambda;
364
365 phase->m_B[0][0][1] =
366 0.25 * (-6.0 * lambda * lambda + 16.0 * lambda - 1.0);
367 phase->m_B[0][0][2] =
368 0.25 * (6.0 * lambda * lambda - 20.0 * lambda + 5.0);
369 phase->m_B[0][0][3] = lambda;
370
371 phase->m_A[1][1][0] = 0.4358665215;
372 phase->m_A[1][2][0] = 0.3212788860;
373 phase->m_A[1][2][1] = 0.3966543747;
374 phase->m_A[1][3][0] = -0.105858296;
375 phase->m_A[1][3][1] = 0.5529291479;
376 phase->m_A[1][3][2] = 0.5529291479;
377
378 phase->m_B[1][0][1] =
379 0.25 * (-6.0 * lambda * lambda + 16.0 * lambda - 1.0);
380 phase->m_B[1][0][2] =
381 0.25 * (6.0 * lambda * lambda - 20.0 * lambda + 5.0);
382 phase->m_B[1][0][3] = lambda;
383
384 // U and V set to 1 when allocated.
385 }
386
387 ////////////////////////////////////////////////////////////////////////////
388 // IMEX Dirk 4 4 3 : L Stable, four stage, third order IMEX
391 {
392 phase->m_A[0][1][1] = 1.0 / 2.0;
393 phase->m_A[0][2][1] = 1.0 / 6.0;
394 phase->m_A[0][2][2] = 1.0 / 2.0;
395 phase->m_A[0][3][1] = -1.0 / 2.0;
396 phase->m_A[0][3][2] = 1.0 / 2.0;
397 phase->m_A[0][3][3] = 1.0 / 2.0;
398 phase->m_A[0][4][1] = 3.0 / 2.0;
399 phase->m_A[0][4][2] = -3.0 / 2.0;
400 phase->m_A[0][4][3] = 1.0 / 2.0;
401 phase->m_A[0][4][4] = 1.0 / 2.0;
402
403 phase->m_B[0][0][1] = 3.0 / 2.0;
404 phase->m_B[0][0][2] = -3.0 / 2.0;
405 phase->m_B[0][0][3] = 1.0 / 2.0;
406 phase->m_B[0][0][4] = 1.0 / 2.0;
407
408 phase->m_A[1][1][0] = 1.0 / 2.0;
409 phase->m_A[1][2][0] = 11.0 / 18.0;
410 phase->m_A[1][2][1] = 1.0 / 18.0;
411 phase->m_A[1][3][0] = 5.0 / 6.0;
412 phase->m_A[1][3][1] = -5.0 / 6.0;
413 phase->m_A[1][3][2] = 1.0 / 2.0;
414 phase->m_A[1][4][0] = 1.0 / 4.0;
415 phase->m_A[1][4][1] = 7.0 / 4.0;
416 phase->m_A[1][4][2] = 3.0 / 4.0;
417 phase->m_A[1][4][3] = -7.0 / 4.0;
418
419 phase->m_B[1][0][0] = 1.0 / 4.0;
420 phase->m_B[1][0][1] = 7.0 / 4.0;
421 phase->m_B[1][0][2] = 3.0 / 4.0;
422 phase->m_B[1][0][3] = -7.0 / 4.0;
423
424 // U and V set to 1 when allocated.
425 }
426
427protected:
428 LUE virtual std::string v_GetFullName() const override
429 {
430 return m_integration_phases.back()->m_name;
431 }
432
433 LUE virtual std::string v_GetName() const override
434 {
435 return std::string("IMEX");
436 }
437
438 LUE virtual NekDouble v_GetTimeStability() const override
439 {
440 return 1.0;
441 }
442
443}; // end class IMEXdirkTimeIntegrationScheme
444
445///////////////////////////////////////////////////////////////////////////////
446// IMEX Dirk 1 1 1 : Forward - Backward Euler IMEX
448{
449public:
450 IMEXdirk_1_1_1TimeIntegrationScheme(std::string variant, size_t order,
451 std::vector<NekDouble> freeParams)
452 : IMEXdirkTimeIntegrationScheme("", 1, std::vector<NekDouble>{1, 1})
453 {
454 boost::ignore_unused(variant);
455 boost::ignore_unused(order);
456 boost::ignore_unused(freeParams);
457 }
458
460 {
461 }
462
464 std::string variant, size_t order, std::vector<NekDouble> freeParams)
465 {
466 boost::ignore_unused(variant);
467 boost::ignore_unused(order);
468 boost::ignore_unused(freeParams);
469
472 AllocateSharedPtr("", 1, std::vector<NekDouble>{1, 1});
473
474 return p;
475 }
476
477 static std::string className;
478
479protected:
481
482}; // end class IMEXdirk_1_1_1TimeIntegrator
483
484// IMEX Dirk 1 2 1 : Forward - Backward Euler IMEX w/B implicit == B explicit
486{
487public:
488 IMEXdirk_1_2_1TimeIntegrationScheme(std::string variant, size_t order,
489 std::vector<NekDouble> freeParams)
490 : IMEXdirkTimeIntegrationScheme("", 1, std::vector<NekDouble>{1, 2})
491 {
492 boost::ignore_unused(variant);
493 boost::ignore_unused(order);
494 boost::ignore_unused(freeParams);
495 }
496
498 {
499 }
500
502 std::string variant, size_t order, std::vector<NekDouble> freeParams)
503 {
504 boost::ignore_unused(variant);
505 boost::ignore_unused(order);
506 boost::ignore_unused(freeParams);
507
510 "", 1, std::vector<NekDouble>{1, 2});
511
512 return p;
513 }
514
515 static std::string className;
516
517protected:
519
520}; // end class IMEXdirk_1_2_1TimeIntegrator
521
522// IMEX Dirk 1 2 2 : Implict-Explicit Midpoint IMEX
524{
525public:
526 IMEXdirk_1_2_2TimeIntegrationScheme(std::string variant, size_t order,
527 std::vector<NekDouble> freeParams)
528 : IMEXdirkTimeIntegrationScheme("", 2, std::vector<NekDouble>{1, 2})
529 {
530 boost::ignore_unused(variant);
531 boost::ignore_unused(order);
532 boost::ignore_unused(freeParams);
533 }
534
536 {
537 }
538
540 std::string variant, size_t order, std::vector<NekDouble> freeParams)
541 {
542 boost::ignore_unused(variant);
543 boost::ignore_unused(order);
544 boost::ignore_unused(freeParams);
545
548 "", 2, std::vector<NekDouble>{1, 2});
549
550 return p;
551 }
552
553 static std::string className;
554
555protected:
557
558}; // end class IMEXdirk_1_2_2TimeIntegrator
559
560// IMEX Dirk 2 2 2 : L Stable, two stage, second order IMEX
562{
563public:
564 IMEXdirk_2_2_2TimeIntegrationScheme(std::string variant, size_t order,
565 std::vector<NekDouble> freeParams)
566 : IMEXdirkTimeIntegrationScheme("", 2, std::vector<NekDouble>{2, 2})
567 {
568 boost::ignore_unused(variant);
569 boost::ignore_unused(order);
570 boost::ignore_unused(freeParams);
571 }
572
574 {
575 }
576
578 std::string variant, size_t order, std::vector<NekDouble> freeParams)
579 {
580 boost::ignore_unused(variant);
581 boost::ignore_unused(order);
582 boost::ignore_unused(freeParams);
583
586 AllocateSharedPtr("", 2, std::vector<NekDouble>{2, 2});
587
588 return p;
589 }
590
591 static std::string className;
592
593protected:
595
596}; // end class IMEXdirk_2_2_2TimeIntegrationScheme
597
598// IMEX Dirk 2 3 2 : L Stable, two stage, second order IMEX
600{
601public:
602 IMEXdirk_2_3_2TimeIntegrationScheme(std::string variant, size_t order,
603 std::vector<NekDouble> freeParams)
604 : IMEXdirkTimeIntegrationScheme("", 2, std::vector<NekDouble>{2, 3})
605 {
606 boost::ignore_unused(variant);
607 boost::ignore_unused(order);
608 boost::ignore_unused(freeParams);
609 }
610
612 {
613 }
614
616 std::string variant, size_t order, std::vector<NekDouble> freeParams)
617 {
618 boost::ignore_unused(variant);
619 boost::ignore_unused(order);
620 boost::ignore_unused(freeParams);
621
624 "", 2, std::vector<NekDouble>{2, 3});
625
626 return p;
627 }
628
629 static std::string className;
630
631protected:
633
634}; // end class IMEXdirk_2_3_2TimeIntegrationScheme
635
636///////////////////////////////////////////////////////////////////////////////
637// IMEX Dirk 2 3 3 : L Stable, two stage, third order IMEX
639{
640public:
641 IMEXdirk_2_3_3TimeIntegrationScheme(std::string variant, size_t order,
642 std::vector<NekDouble> freeParams)
643 : IMEXdirkTimeIntegrationScheme("", 3, std::vector<NekDouble>{2, 3})
644 {
645 boost::ignore_unused(variant);
646 boost::ignore_unused(order);
647 boost::ignore_unused(freeParams);
648 }
649
651 {
652 }
653
655 std::string variant, size_t order, std::vector<NekDouble> freeParams)
656 {
657 boost::ignore_unused(variant);
658 boost::ignore_unused(order);
659 boost::ignore_unused(freeParams);
660
663 "", 3, std::vector<NekDouble>{2, 3});
664
665 return p;
666 }
667
668 static std::string className;
669
670protected:
672
673}; // end class IMEXdirk_2_3_3TimeIntegrationScheme
674
675///////////////////////////////////////////////////////////////////////////////
676// IMEX Dirk 3 4 3 : L Stable, three stage, third order IMEX
678{
679public:
680 IMEXdirk_3_4_3TimeIntegrationScheme(std::string variant, size_t order,
681 std::vector<NekDouble> freeParams)
682 : IMEXdirkTimeIntegrationScheme("", 3, std::vector<NekDouble>{3, 4})
683 {
684 boost::ignore_unused(variant);
685 boost::ignore_unused(order);
686 boost::ignore_unused(freeParams);
687 }
688
690 {
691 }
692
694 std::string variant, size_t order, std::vector<NekDouble> freeParams)
695 {
696 boost::ignore_unused(variant);
697 boost::ignore_unused(order);
698 boost::ignore_unused(freeParams);
699
702 "", 3, std::vector<NekDouble>{3, 4});
703
704 return p;
705 }
706
707 static std::string className;
708
709protected:
711
712}; // end class IMEXdirk_3_4_3TimeIntegrationScheme
713
714///////////////////////////////////////////////////////////////////////////////
715// IMEX Dirk 4 4 3 : L Stable, four stage, third order IMEX
717{
718public:
719 IMEXdirk_4_4_3TimeIntegrationScheme(std::string variant, size_t order,
720 std::vector<NekDouble> freeParams)
721 : IMEXdirkTimeIntegrationScheme("", 3, std::vector<NekDouble>{4, 4})
722 {
723 boost::ignore_unused(order);
724 boost::ignore_unused(variant);
725 boost::ignore_unused(freeParams);
726 }
727
729 {
730 }
731
733 std::string variant, size_t order, std::vector<NekDouble> freeParams)
734 {
735 boost::ignore_unused(order);
736 boost::ignore_unused(variant);
737 boost::ignore_unused(freeParams);
738
741 "", 3, std::vector<NekDouble>{4, 4});
742
743 return p;
744 }
745
746 static std::string className;
747
748protected:
750
751}; // end class IMEXdirk_4_4_3TimeIntegrationScheme
752
753} // end namespace LibUtilities
754} // end namespace Nektar
755
756#endif
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:249
IMEXdirk_1_1_1TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
IMEXdirk_1_2_1TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
IMEXdirk_1_2_2TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
IMEXdirk_2_2_2TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
IMEXdirk_2_3_2TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
IMEXdirk_2_3_3TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
IMEXdirk_3_4_3TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
IMEXdirk_4_4_3TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase, size_t order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData_2_2_2(TimeIntegrationAlgorithmGLMSharedPtr &phase)
IMEXdirkTimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData_1_2_2(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_2_3_3(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData_2_3_2(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_3_4_3(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_1_1_1(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_4_4_3(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_1_2_1(TimeIntegrationAlgorithmGLMSharedPtr &phase)
Base class for GLM time integration schemes.
TimeIntegrationAlgorithmGLMVector m_integration_phases
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< TimeIntegrationAlgorithmGLM > TimeIntegrationAlgorithmGLMSharedPtr
@ eIMEX
Implicit Explicit General Linear Method.
std::vector< TimeIntegrationAlgorithmGLMSharedPtr > TimeIntegrationAlgorithmGLMVector
std::shared_ptr< TimeIntegrationScheme > TimeIntegrationSchemeSharedPtr
The above copyright notice and this permission notice shall be included.
Definition: CoupledSolver.h:2
double NekDouble
scalarT< T > sqrt(scalarT< T > in)
Definition: scalar.hpp:294