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 
48 
49 namespace Nektar
50 {
51 namespace LibUtilities
52 {
53 
54 ///////////////////////////////////////////////////////////////////////////////
55 // IMEXDirk-(s, sigma, p), where s is the number of stages of the
56 // implicit scheme, sigma is the number of stages of the explicit
57 // scheme and p is the combined order of the scheme.
58 
60 {
61 public:
62  IMEXdirkTimeIntegrationScheme(std::string variant, unsigned int order,
63  std::vector<NekDouble> freeParams)
64  : TimeIntegrationSchemeGLM(variant, order, freeParams)
65  {
66  ASSERTL1(freeParams.size() == 2,
67  "IMEX DIRK Time integration scheme invalid number "
68  "of free parameters, expected two "
69  "<implicit stages, explicit stages>, received " +
70  std::to_string(freeParams.size()));
71 
72  int s = freeParams[0];
73  int sigma = freeParams[1];
74 
77  new TimeIntegrationAlgorithmGLM(this));
78 
79  if (order == 1 && s == 1 && sigma == 1)
80  {
81  // This phase is Forward Backward Euler which has two steps.
84  }
85  else
86  {
88  m_integration_phases[0], order, freeParams);
89  }
90  }
91 
93  {
94  }
95 
97  std::string variant, unsigned int order,
98  std::vector<NekDouble> freeParams)
99  {
102  variant, order, freeParams);
103 
104  return p;
105  }
106 
107  static std::string className;
108 
109  LUE virtual std::string GetFullName() const
110  {
111  return m_integration_phases[m_integration_phases.size() - 1]->m_name;
112  }
113 
114  LUE virtual std::string GetName() const
115  {
116  return std::string("IMEX");
117  }
118 
120  {
121  return 1.0;
122  }
123 
125  unsigned int order,
126  std::vector<NekDouble> freeParams)
127  {
128  ASSERTL1(freeParams.size() == 2,
129  "IMEX DIRK Time integration scheme invalid number "
130  "of free parameters, expected two "
131  "<implicit stages, explicit stages>, received " +
132  std::to_string(freeParams.size()) + ".");
133 
134  int s = freeParams[0];
135  int sigma = freeParams[1];
136 
137  phase->m_schemeType = eIMEX;
138  phase->m_variant = "DIRK";
139  phase->m_order = order;
140  phase->m_name = "IMEX_DIRK"
141  "_" +
142  std::to_string(s) + "_" + std::to_string(sigma) + "_" +
143  std::to_string(phase->m_order);
144 
145  phase->m_numsteps = 1;
146  phase->m_numstages = s + 1;
147 
148  phase->m_A = Array<OneD, Array<TwoD, NekDouble>>(2);
149  phase->m_B = Array<OneD, Array<TwoD, NekDouble>>(2);
150 
151  phase->m_A[0] =
152  Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
153  phase->m_B[0] =
154  Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
155  phase->m_A[1] =
156  Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
157  phase->m_B[1] =
158  Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
159  phase->m_U =
160  Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numsteps, 1.0);
161  phase->m_V =
162  Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numsteps, 1.0);
163 
164  if (s == 1 && sigma == 2 && order == 1)
165  {
166  SetupSchemeData_1_2_1(phase);
167  }
168  else if (s == 1 && sigma == 2 && order == 2)
169  {
170  SetupSchemeData_1_2_2(phase);
171  }
172  else if (s == 2 && sigma == 2 && order == 2)
173  {
174  SetupSchemeData_2_2_2(phase);
175  }
176  else if (s == 2 && sigma == 3 && order == 2)
177  {
178  SetupSchemeData_2_3_2(phase);
179  }
180  else if (s == 2 && sigma == 3 && order == 3)
181  {
182  SetupSchemeData_2_3_3(phase);
183  }
184  else if (s == 3 && sigma == 4 && order == 3)
185  {
186  SetupSchemeData_3_4_3(phase);
187  }
188  else if (s == 4 && sigma == 4 && order == 3)
189  {
190  SetupSchemeData_4_4_3(phase);
191  }
192  else
193  {
194  ASSERTL1(false,
195  "IMEX DIRK Time integration scheme bad type "
196  "(s, sigma, order) : (" +
197  std::to_string(s) + "," + std::to_string(sigma) + "," +
198  std::to_string(order) + "). " +
199  "Allowed combinations: (1,1,1), (1,2,1), (1,2,2), "
200  "(2,2,2), (2,3,2), (2,3,3), (3,4,3), (4,4,3)");
201  }
202 
203  phase->m_numMultiStepValues = 1;
204  phase->m_numMultiStepDerivs = 0;
205 
206  phase->m_timeLevelOffset = Array<OneD, unsigned int>(phase->m_numsteps);
207  phase->m_timeLevelOffset[0] = 0;
208 
209  phase->CheckAndVerify();
210  }
211 
212  ///////////////////////////////////////////////////////////////////////////////
213  // IMEX Dirk 1 1 1 : Forward - Backward Euler IMEX
216  {
217  phase->m_schemeType = eIMEX;
218  phase->m_order = 1;
219  phase->m_name =
220  std::string("IMEXdirk_1_1_" + std::to_string(phase->m_order));
221 
222  phase->m_numsteps = 2;
223  phase->m_numstages = 1;
224 
225  phase->m_A = Array<OneD, Array<TwoD, NekDouble>>(2);
226  phase->m_B = Array<OneD, Array<TwoD, NekDouble>>(2);
227 
228  phase->m_A[0] =
229  Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
230  phase->m_B[0] =
231  Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
232  phase->m_A[1] =
233  Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numstages, 0.0);
234  phase->m_B[1] =
235  Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numstages, 0.0);
236  phase->m_U =
237  Array<TwoD, NekDouble>(phase->m_numstages, phase->m_numsteps, 0.0);
238  phase->m_V =
239  Array<TwoD, NekDouble>(phase->m_numsteps, phase->m_numsteps, 0.0);
240 
241  phase->m_A[0][0][0] = 1.0;
242 
243  phase->m_B[0][0][0] = 1.0;
244  phase->m_B[1][1][0] = 1.0;
245 
246  phase->m_U[0][0] = 1.0;
247  phase->m_U[0][1] = 1.0;
248 
249  phase->m_V[0][0] = 1.0;
250  phase->m_V[0][1] = 1.0;
251 
252  phase->m_numMultiStepValues = 1;
253  phase->m_numMultiStepDerivs = 1;
254 
255  phase->m_timeLevelOffset = Array<OneD, unsigned int>(phase->m_numsteps);
256  phase->m_timeLevelOffset[0] = 0;
257  phase->m_timeLevelOffset[1] = 0;
258 
259  phase->CheckAndVerify();
260  }
261 
262  ///////////////////////////////////////////////////////////////////////////////
263  // IMEX Dirk 1 2 1 : Forward - Backward Euler IMEX w/B implicit == B
264  // explicit
267  {
268  phase->m_A[0][1][1] = 1.0;
269  phase->m_B[0][0][1] = 1.0;
270 
271  phase->m_A[1][1][0] = 1.0;
272  phase->m_B[1][0][1] = 1.0;
273 
274  // U and V set to 1 when allocated.
275  }
276 
277  ////////////////////////////////////////////////////////////////////////////
278  // IMEX Dirk 1 2 2 : Implict-Explicit Midpoint IMEX
281  {
282  phase->m_A[0][1][1] = 1.0 / 2.0;
283  phase->m_B[0][0][1] = 1.0;
284 
285  phase->m_A[1][1][0] = 1.0 / 2.0;
286  phase->m_B[1][0][1] = 1.0;
287 
288  // U and V set to 1 when allocated.
289  }
290 
291  ////////////////////////////////////////////////////////////////////////////
292  // IMEX Dirk 2 2 2 : L Stable, two stage, second order IMEX
295  {
296  NekDouble glambda = 0.2928932188134524756;
297  NekDouble gdelta = -0.7071067811865475244;
298 
299  phase->m_A[0][1][1] = glambda;
300  phase->m_A[0][2][1] = 1.0 - glambda;
301  phase->m_A[0][2][2] = glambda;
302 
303  phase->m_B[0][0][1] = 1.0 - glambda;
304  phase->m_B[0][0][2] = glambda;
305 
306  phase->m_A[1][1][0] = glambda;
307  phase->m_A[1][2][0] = gdelta;
308  phase->m_A[1][2][1] = 1.0 - gdelta;
309 
310  phase->m_B[1][0][0] = gdelta;
311  phase->m_B[1][0][1] = 1.0 - gdelta;
312 
313  // U and V set to 1 when allocated.
314  }
315 
316  ////////////////////////////////////////////////////////////////////////////
317  // IMEX Dirk 2 3 2 : L Stable, two stage, second order IMEX
320  {
321  NekDouble lambda = (2.0 - sqrt(2.0)) / 2.0;
322  NekDouble delta = -2.0 * sqrt(2.0) / 3.0;
323 
324  phase->m_A[0][1][1] = lambda;
325  phase->m_A[0][2][1] = 1.0 - lambda;
326  phase->m_A[0][2][2] = lambda;
327 
328  phase->m_B[0][0][1] = 1.0 - lambda;
329  phase->m_B[0][0][2] = lambda;
330 
331  phase->m_A[1][1][0] = lambda;
332  phase->m_A[1][2][0] = delta;
333  phase->m_A[1][2][1] = 1.0 - delta;
334 
335  phase->m_B[1][0][1] = 1.0 - lambda;
336  phase->m_B[1][0][2] = lambda;
337 
338  // U and V set to 1 when allocated.
339  }
340 
341  ////////////////////////////////////////////////////////////////////////////
342  // IMEX Dirk 2 3 3 : L Stable, two stage, third order IMEX
345  {
346  NekDouble glambda = 0.788675134594813;
347 
348  phase->m_A[0][1][1] = glambda;
349  phase->m_A[0][2][1] = 1.0 - 2.0 * glambda;
350  phase->m_A[0][2][2] = glambda;
351 
352  phase->m_B[0][0][1] = 0.5;
353  phase->m_B[0][0][2] = 0.5;
354 
355  phase->m_A[1][1][0] = glambda;
356  phase->m_A[1][2][0] = glambda - 1.0;
357  phase->m_A[1][2][1] = 2.0 * (1 - glambda);
358 
359  phase->m_B[1][0][1] = 0.5;
360  phase->m_B[1][0][2] = 0.5;
361 
362  // U and V set to 1 when allocated.
363  }
364 
365  ////////////////////////////////////////////////////////////////////////////
366  // IMEX Dirk 3 4 3 : L Stable, three stage, third order IMEX
369  {
370  NekDouble lambda = 0.4358665215;
371 
372  phase->m_A[0][1][1] = lambda;
373  phase->m_A[0][2][1] = 0.5 * (1.0 - lambda);
374  phase->m_A[0][3][1] =
375  0.25 * (-6.0 * lambda * lambda + 16.0 * lambda - 1.0);
376  phase->m_A[0][2][2] = lambda;
377  phase->m_A[0][3][2] =
378  0.25 * (6.0 * lambda * lambda - 20.0 * lambda + 5.0);
379  phase->m_A[0][3][3] = lambda;
380 
381  phase->m_B[0][0][1] =
382  0.25 * (-6.0 * lambda * lambda + 16.0 * lambda - 1.0);
383  phase->m_B[0][0][2] =
384  0.25 * (6.0 * lambda * lambda - 20.0 * lambda + 5.0);
385  phase->m_B[0][0][3] = lambda;
386 
387  phase->m_A[1][1][0] = 0.4358665215;
388  phase->m_A[1][2][0] = 0.3212788860;
389  phase->m_A[1][2][1] = 0.3966543747;
390  phase->m_A[1][3][0] = -0.105858296;
391  phase->m_A[1][3][1] = 0.5529291479;
392  phase->m_A[1][3][2] = 0.5529291479;
393 
394  phase->m_B[1][0][1] =
395  0.25 * (-6.0 * lambda * lambda + 16.0 * lambda - 1.0);
396  phase->m_B[1][0][2] =
397  0.25 * (6.0 * lambda * lambda - 20.0 * lambda + 5.0);
398  phase->m_B[1][0][3] = lambda;
399 
400  // U and V set to 1 when allocated.
401  }
402 
403  ////////////////////////////////////////////////////////////////////////////
404  // IMEX Dirk 4 4 3 : L Stable, four stage, third order IMEX
407  {
408  phase->m_A[0][1][1] = 1.0 / 2.0;
409  phase->m_A[0][2][1] = 1.0 / 6.0;
410  phase->m_A[0][2][2] = 1.0 / 2.0;
411  phase->m_A[0][3][1] = -1.0 / 2.0;
412  phase->m_A[0][3][2] = 1.0 / 2.0;
413  phase->m_A[0][3][3] = 1.0 / 2.0;
414  phase->m_A[0][4][1] = 3.0 / 2.0;
415  phase->m_A[0][4][2] = -3.0 / 2.0;
416  phase->m_A[0][4][3] = 1.0 / 2.0;
417  phase->m_A[0][4][4] = 1.0 / 2.0;
418 
419  phase->m_B[0][0][1] = 3.0 / 2.0;
420  phase->m_B[0][0][2] = -3.0 / 2.0;
421  phase->m_B[0][0][3] = 1.0 / 2.0;
422  phase->m_B[0][0][4] = 1.0 / 2.0;
423 
424  phase->m_A[1][1][0] = 1.0 / 2.0;
425  phase->m_A[1][2][0] = 11.0 / 18.0;
426  phase->m_A[1][2][1] = 1.0 / 18.0;
427  phase->m_A[1][3][0] = 5.0 / 6.0;
428  phase->m_A[1][3][1] = -5.0 / 6.0;
429  phase->m_A[1][3][2] = 1.0 / 2.0;
430  phase->m_A[1][4][0] = 1.0 / 4.0;
431  phase->m_A[1][4][1] = 7.0 / 4.0;
432  phase->m_A[1][4][2] = 3.0 / 4.0;
433  phase->m_A[1][4][3] = -7.0 / 4.0;
434 
435  phase->m_B[1][0][0] = 1.0 / 4.0;
436  phase->m_B[1][0][1] = 7.0 / 4.0;
437  phase->m_B[1][0][2] = 3.0 / 4.0;
438  phase->m_B[1][0][3] = -7.0 / 4.0;
439 
440  // U and V set to 1 when allocated.
441  }
442 
443 }; // end class IMEXdirkTimeIntegrationScheme
444 
445 ///////////////////////////////////////////////////////////////////////////////
446 // IMEX Dirk 1 1 1 : Forward - Backward Euler IMEX
448 {
449 public:
450  IMEXdirk_1_1_1TimeIntegrationScheme(std::string variant, unsigned int 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, unsigned int order,
465  std::vector<NekDouble> freeParams)
466  {
467  boost::ignore_unused(variant);
468  boost::ignore_unused(order);
469  boost::ignore_unused(freeParams);
470 
473  AllocateSharedPtr("", 1, std::vector<NekDouble>{1, 1});
474 
475  return p;
476  }
477 
478  static std::string className;
479 
480 }; // end class IMEXdirk_1_1_1TimeIntegrator
481 
482 // IMEX Dirk 1 2 1 : Forward - Backward Euler IMEX w/B implicit == B explicit
484 {
485 public:
486  IMEXdirk_1_2_1TimeIntegrationScheme(std::string variant, unsigned int order,
487  std::vector<NekDouble> freeParams)
488  : IMEXdirkTimeIntegrationScheme("", 1, std::vector<NekDouble>{1, 2})
489  {
490  boost::ignore_unused(variant);
491  boost::ignore_unused(order);
492  boost::ignore_unused(freeParams);
493  }
494 
496  {
497  }
498 
500  std::string variant, unsigned int order,
501  std::vector<NekDouble> freeParams)
502  {
503  boost::ignore_unused(variant);
504  boost::ignore_unused(order);
505  boost::ignore_unused(freeParams);
506 
509  "", 1, std::vector<NekDouble>{1, 2});
510 
511  return p;
512  }
513 
514  static std::string className;
515 
516 }; // end class IMEXdirk_1_2_1TimeIntegrator
517 
518 // IMEX Dirk 1 2 2 : Implict-Explicit Midpoint IMEX
520 {
521 public:
522  IMEXdirk_1_2_2TimeIntegrationScheme(std::string variant, unsigned int order,
523  std::vector<NekDouble> freeParams)
524  : IMEXdirkTimeIntegrationScheme("", 2, std::vector<NekDouble>{1, 2})
525  {
526  boost::ignore_unused(variant);
527  boost::ignore_unused(order);
528  boost::ignore_unused(freeParams);
529  }
530 
532  {
533  }
534 
536  std::string variant, unsigned int order,
537  std::vector<NekDouble> freeParams)
538  {
539  boost::ignore_unused(variant);
540  boost::ignore_unused(order);
541  boost::ignore_unused(freeParams);
542 
545  "", 2, std::vector<NekDouble>{1, 2});
546 
547  return p;
548  }
549 
550  static std::string className;
551 
552 }; // end class IMEXdirk_1_2_2TimeIntegrator
553 
554 // IMEX Dirk 2 2 2 : L Stable, two stage, second order IMEX
556 {
557 public:
558  IMEXdirk_2_2_2TimeIntegrationScheme(std::string variant, unsigned int order,
559  std::vector<NekDouble> freeParams)
560  : IMEXdirkTimeIntegrationScheme("", 2, std::vector<NekDouble>{2, 2})
561  {
562  boost::ignore_unused(variant);
563  boost::ignore_unused(order);
564  boost::ignore_unused(freeParams);
565  }
566 
568  {
569  }
570 
572  std::string variant, unsigned int order,
573  std::vector<NekDouble> freeParams)
574  {
575  boost::ignore_unused(variant);
576  boost::ignore_unused(order);
577  boost::ignore_unused(freeParams);
578 
581  AllocateSharedPtr("", 2, std::vector<NekDouble>{2, 2});
582 
583  return p;
584  }
585 
586  static std::string className;
587 
588 }; // end class IMEXdirk_2_2_2TimeIntegrationScheme
589 
590 // IMEX Dirk 2 3 2 : L Stable, two stage, second order IMEX
592 {
593 public:
594  IMEXdirk_2_3_2TimeIntegrationScheme(std::string variant, unsigned int order,
595  std::vector<NekDouble> freeParams)
596  : IMEXdirkTimeIntegrationScheme("", 2, std::vector<NekDouble>{2, 3})
597  {
598  boost::ignore_unused(variant);
599  boost::ignore_unused(order);
600  boost::ignore_unused(freeParams);
601  }
602 
604  {
605  }
606 
608  std::string variant, unsigned int order,
609  std::vector<NekDouble> freeParams)
610  {
611  boost::ignore_unused(variant);
612  boost::ignore_unused(order);
613  boost::ignore_unused(freeParams);
614 
617  "", 2, std::vector<NekDouble>{2, 3});
618 
619  return p;
620  }
621 
622  static std::string className;
623 
624 }; // end class IMEXdirk_2_3_2TimeIntegrationScheme
625 
626 ///////////////////////////////////////////////////////////////////////////////
627 // IMEX Dirk 2 3 3 : L Stable, two stage, third order IMEX
629 {
630 public:
631  IMEXdirk_2_3_3TimeIntegrationScheme(std::string variant, unsigned int order,
632  std::vector<NekDouble> freeParams)
633  : IMEXdirkTimeIntegrationScheme("", 3, std::vector<NekDouble>{2, 3})
634  {
635  boost::ignore_unused(variant);
636  boost::ignore_unused(order);
637  boost::ignore_unused(freeParams);
638  }
639 
641  {
642  }
643 
645  std::string variant, unsigned int order,
646  std::vector<NekDouble> freeParams)
647  {
648  boost::ignore_unused(variant);
649  boost::ignore_unused(order);
650  boost::ignore_unused(freeParams);
651 
654  "", 3, std::vector<NekDouble>{2, 3});
655 
656  return p;
657  }
658 
659  static std::string className;
660 
661 }; // end class IMEXdirk_2_3_3TimeIntegrationScheme
662 
663 ///////////////////////////////////////////////////////////////////////////////
664 // IMEX Dirk 3 4 3 : L Stable, three stage, third order IMEX
666 {
667 public:
668  IMEXdirk_3_4_3TimeIntegrationScheme(std::string variant, unsigned int order,
669  std::vector<NekDouble> freeParams)
670  : IMEXdirkTimeIntegrationScheme("", 3, std::vector<NekDouble>{3, 4})
671  {
672  boost::ignore_unused(variant);
673  boost::ignore_unused(order);
674  boost::ignore_unused(freeParams);
675  }
676 
678  {
679  }
680 
682  std::string variant, unsigned int order,
683  std::vector<NekDouble> freeParams)
684  {
685  boost::ignore_unused(variant);
686  boost::ignore_unused(order);
687  boost::ignore_unused(freeParams);
688 
691  "", 3, std::vector<NekDouble>{3, 4});
692 
693  return p;
694  }
695 
696  static std::string className;
697 
698 }; // end class IMEXdirk_3_4_3TimeIntegrationScheme
699 
700 ///////////////////////////////////////////////////////////////////////////////
701 // IMEX Dirk 4 4 3 : L Stable, four stage, third order IMEX
703 {
704 public:
705  IMEXdirk_4_4_3TimeIntegrationScheme(std::string variant, unsigned int order,
706  std::vector<NekDouble> freeParams)
707  : IMEXdirkTimeIntegrationScheme("", 3, std::vector<NekDouble>{4, 4})
708  {
709  boost::ignore_unused(order);
710  boost::ignore_unused(variant);
711  boost::ignore_unused(freeParams);
712  }
713 
715  {
716  }
717 
719  std::string variant, unsigned int order,
720  std::vector<NekDouble> freeParams)
721  {
722  boost::ignore_unused(order);
723  boost::ignore_unused(variant);
724  boost::ignore_unused(freeParams);
725 
728  "", 3, std::vector<NekDouble>{4, 4});
729 
730  return p;
731  }
732 
733  static std::string className;
734 
735 }; // end class IMEXdirk_4_4_3TimeIntegrationScheme
736 
737 } // end namespace LibUtilities
738 } // end namespace Nektar
739 
740 #endif
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:250
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_1_1_1TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_1_2_1TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_1_2_2TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_2_2_2TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_2_3_2TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_2_3_3TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_3_4_3TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
IMEXdirk_4_4_3TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData_2_2_2(TimeIntegrationAlgorithmGLMSharedPtr &phase)
IMEXdirkTimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData_1_2_2(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_2_3_3(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_2_3_2(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData_3_4_3(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase, unsigned int order, std::vector< NekDouble > freeParams)
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:1
double NekDouble
scalarT< T > sqrt(scalarT< T > in)
Definition: scalar.hpp:267