10 #ifndef Tempus_StepperRKButcherTableau_hpp
11 #define Tempus_StepperRKButcherTableau_hpp
15 #pragma clang system_header
18 #include "Tempus_config.hpp"
19 #include "Tempus_StepperExplicitRK.hpp"
20 #include "Tempus_StepperDIRK.hpp"
41 template <
class Scalar>
62 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
69 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
70 useEmbedded, stepperRKAppAction);
75 std::ostringstream Description;
80 return Description.str();
110 template <
class Scalar>
118 if (pl != Teuchos::null) {
120 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
123 stepperType != stepper->getStepperType() && stepperType !=
"RK1",
125 " ParameterList 'Stepper Type' (='"
126 << stepperType <<
"')\n"
127 <<
" does not match type for this Stepper (='"
128 << stepper->getStepperType()
129 <<
"')\n or one of its aliases ('RK1').\n");
132 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
135 stepper->setStepperRKValues(pl);
137 if (model != Teuchos::null) {
138 stepper->setModel(model);
139 stepper->initialize();
164 template <
class Scalar>
185 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
192 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
193 useEmbedded, stepperRKAppAction);
198 std::ostringstream Description;
200 <<
"\"The\" Runge-Kutta Method (explicit):\n"
201 <<
"Solving Ordinary Differential Equations I:\n"
202 <<
"Nonstiff Problems, 2nd Revised Edition\n"
203 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
204 <<
"Table 1.2, pg 138\n"
205 <<
"c = [ 0 1/2 1/2 1 ]'\n"
210 <<
"b = [ 1/6 1/3 1/3 1/6 ]'";
211 return Description.str();
217 const Scalar one = ST::one();
218 const Scalar zero = ST::zero();
219 const Scalar onehalf = one / (2 * one);
220 const Scalar onesixth = one / (6 * one);
221 const Scalar onethird = one / (3 * one);
267 template <
class Scalar>
274 stepper->setStepperRKValues(pl);
276 if (model != Teuchos::null) {
277 stepper->setModel(model);
278 stepper->initialize();
308 template <
class Scalar>
329 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
336 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
337 useEmbedded, stepperRKAppAction);
342 std::ostringstream Description;
344 <<
"P. Bogacki and L.F. Shampine.\n"
345 <<
"A 3(2) pair of Runge–Kutta formulas.\n"
346 <<
"Applied Mathematics Letters, 2(4):321 – 325, 1989.\n"
347 <<
"c = [ 0 1/2 3/4 1 ]'\n"
351 <<
" [ 2/9 1/3 4/9 0 ]\n"
352 <<
"b = [ 2/9 1/3 4/9 0 ]'\n"
353 <<
"bstar = [ 7/24 1/4 1/3 1/8 ]'";
354 return Description.str();
374 const Scalar one = ST::one();
375 const Scalar zero = ST::zero();
376 const Scalar onehalf = one / (2 * one);
377 const Scalar onethird = one / (3 * one);
378 const Scalar threefourths = (3 * one) / (4 * one);
379 const Scalar twoninths = (2 * one) / (9 * one);
380 const Scalar fourninths = (4 * one) / (9 * one);
392 A(2, 1) = threefourths;
397 A(3, 2) = fourninths;
413 bstar(0) = as<Scalar>(7 * one / (24 * one));
414 bstar(1) = as<Scalar>(1 * one / (4 * one));
415 bstar(2) = as<Scalar>(1 * one / (3 * one));
416 bstar(3) = as<Scalar>(1 * one / (8 * one));
426 template <
class Scalar>
433 stepper->setStepperRKValues(pl);
435 if (model != Teuchos::null) {
436 stepper->setModel(model);
437 stepper->initialize();
469 template <
class Scalar>
490 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
497 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
498 useEmbedded, stepperRKAppAction);
503 std::ostringstream Description;
505 <<
"Solving Ordinary Differential Equations I:\n"
506 <<
"Nonstiff Problems, 2nd Revised Edition\n"
507 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
508 <<
"Table 4.1, pg 167\n"
509 <<
"c = [ 0 1/3 1/3 1/2 1 ]'\n"
512 <<
" [ 1/6 1/6 0 ]\n"
513 <<
" [ 1/8 0 3/8 0 ]\n"
514 <<
" [ 1/2 0 -3/2 2 0 ]\n"
515 <<
"b = [ 1/6 0 0 2/3 1/6 ]'\n"
516 <<
"bstar = [ 1/10 0 3/10 2/5 1/5 ]'";
517 return Description.str();
531 const Scalar one = ST::one();
532 const Scalar zero = ST::zero();
535 A(1, 0) = as<Scalar>(one / (3 * one));
537 A(2, 0) = as<Scalar>(one / (6 * one));
538 A(2, 1) = as<Scalar>(one / (6 * one));
540 A(3, 0) = as<Scalar>(one / (8 * one));
541 A(3, 2) = as<Scalar>(3 * one / (8 * one));
543 A(4, 0) = as<Scalar>(one / (2 * one));
544 A(4, 2) = as<Scalar>(-3 * one / (2 * one));
548 b(0) = as<Scalar>(one / (6 * one));
549 b(3) = as<Scalar>(2 * one / (3 * one));
550 b(4) = as<Scalar>(one / (6 * one));
554 c(1) = as<Scalar>(1 * one / (3 * one));
555 c(2) = as<Scalar>(1 * one / (3 * one));
556 c(3) = as<Scalar>(1 * one / (2 * one));
560 bstar(0) = as<Scalar>(1 * one / (10 * one));
561 bstar(2) = as<Scalar>(3 * one / (10 * one));
562 bstar(3) = as<Scalar>(2 * one / (5 * one));
563 bstar(4) = as<Scalar>(1 * one / (5 * one));
573 template <
class Scalar>
579 stepper->setStepperRKValues(pl);
581 if (model != Teuchos::null) {
582 stepper->setModel(model);
583 stepper->initialize();
612 template <
class Scalar>
628 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
635 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
636 useEmbedded, stepperRKAppAction);
641 std::ostringstream Description;
643 <<
"Solving Ordinary Differential Equations I:\n"
644 <<
"Nonstiff Problems, 2nd Revised Edition\n"
645 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
646 <<
"Table 1.2, pg 138\n"
647 <<
"c = [ 0 1/3 2/3 1 ]'\n"
652 <<
"b = [ 1/8 3/8 3/8 1/8 ]'";
653 return Description.str();
666 const Scalar one = ST::one();
667 const Scalar zero = ST::zero();
668 const Scalar onethird = as<Scalar>(one / (3 * one));
669 const Scalar twothirds = as<Scalar>(2 * one / (3 * one));
670 const Scalar oneeighth = as<Scalar>(one / (8 * one));
671 const Scalar threeeighths = as<Scalar>(3 * one / (8 * one));
712 template <
class Scalar>
718 stepper->setStepperRKValues(pl);
720 if (model != Teuchos::null) {
721 stepper->setModel(model);
722 stepper->initialize();
751 template <
class Scalar>
773 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
780 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
781 useEmbedded, stepperRKAppAction);
786 std::ostringstream Description;
788 <<
"Solving Ordinary Differential Equations I:\n"
789 <<
"Nonstiff Problems, 2nd Revised Edition\n"
790 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
791 <<
"Table 1.1, pg 135\n"
792 <<
"c = [ 0 1/2 1 1 ]'\n"
797 <<
"b = [ 1/6 2/3 0 1/6 ]'";
798 return Description.str();
810 const Scalar one = ST::one();
811 const Scalar onehalf = one / (2 * one);
812 const Scalar onesixth = one / (6 * one);
813 const Scalar twothirds = 2 * one / (3 * one);
814 const Scalar zero = ST::zero();
855 template <
class Scalar>
862 stepper->setStepperRKValues(pl);
864 if (model != Teuchos::null) {
865 stepper->setModel(model);
866 stepper->initialize();
894 template <
class Scalar>
905 this->
setStepperName(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
906 this->
setStepperType(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
916 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
920 this->
setStepperName(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
921 this->
setStepperType(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
923 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
924 useEmbedded, stepperRKAppAction);
929 std::ostringstream Description;
931 <<
"Kinnmark & Gray 5 stage, 3rd order scheme \n"
932 <<
"Modified by P. Ullrich. From the prim_advance_mod.F90 \n"
933 <<
"routine in the HOMME atmosphere model code.\n"
934 <<
"c = [ 0 1/5 1/5 1/3 2/3 ]'\n"
938 <<
" [ 0 0 1/3 0 ]\n"
939 <<
" [ 0 0 0 2/3 0 ]\n"
940 <<
"b = [ 1/4 0 0 0 3/4 ]'";
941 return Description.str();
953 const Scalar one = ST::one();
954 const Scalar onefifth = one / (5 * one);
955 const Scalar onefourth = one / (4 * one);
956 const Scalar onethird = one / (3 * one);
957 const Scalar twothirds = 2 * one / (3 * one);
958 const Scalar threefourths = 3 * one / (4 * one);
959 const Scalar zero = ST::zero();
1011 template <
class Scalar>
1018 stepper->setStepperRKValues(pl);
1020 if (model != Teuchos::null) {
1021 stepper->setModel(model);
1022 stepper->initialize();
1046 template <
class Scalar>
1067 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1074 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1075 useEmbedded, stepperRKAppAction);
1080 std::ostringstream Description;
1082 <<
"c = [ 0 1/2 1 ]'\n"
1086 <<
"b = [ 1/6 4/6 1/6 ]'";
1087 return Description.str();
1094 const Scalar one = ST::one();
1095 const Scalar two = Teuchos::as<Scalar>(2 * one);
1096 const Scalar zero = ST::zero();
1097 const Scalar onehalf = one / (2 * one);
1098 const Scalar onesixth = one / (6 * one);
1099 const Scalar foursixth = 4 * one / (6 * one);
1136 template <
class Scalar>
1143 stepper->setStepperRKValues(pl);
1145 if (model != Teuchos::null) {
1146 stepper->setModel(model);
1147 stepper->initialize();
1182 template <
class Scalar>
1203 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1210 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1211 useEmbedded, stepperRKAppAction);
1216 std::ostringstream Description;
1218 <<
"This Stepper is known as 'RK Explicit 3 Stage 3rd order "
1219 "TVD' or 'SSPERK33'.\n"
1220 <<
"Sigal Gottlieb and Chi-Wang Shu\n"
1221 <<
"`Total Variation Diminishing Runge-Kutta Schemes'\n"
1222 <<
"Mathematics of Computation\n"
1223 <<
"Volume 67, Number 221, January 1998, pp. 73-85\n"
1224 <<
"c = [ 0 1 1/2 ]'\n"
1227 <<
" [ 1/4 1/4 0 ]\n"
1228 <<
"b = [ 1/6 1/6 4/6 ]'\n"
1229 <<
"This is also written in the following set of updates.\n"
1230 <<
"u1 = u^n + dt L(u^n)\n"
1231 <<
"u2 = 3 u^n/4 + u1/4 + dt L(u1)/4\n"
1232 <<
"u^(n+1) = u^n/3 + 2 u2/2 + 2 dt L(u2)/3";
1233 return Description.str();
1241 const Scalar one = ST::one();
1242 const Scalar zero = ST::zero();
1243 const Scalar onehalf = one / (2 * one);
1244 const Scalar onefourth = one / (4 * one);
1245 const Scalar onesixth = one / (6 * one);
1246 const Scalar foursixth = 4 * one / (6 * one);
1261 A(2, 0) = onefourth;
1262 A(2, 1) = onefourth;
1276 bstar(0) = as<Scalar>(0.291485418878409);
1277 bstar(1) = as<Scalar>(0.291485418878409);
1278 bstar(2) = as<Scalar>(0.417029162243181);
1291 template <
class Scalar>
1300 if (pl != Teuchos::null) {
1302 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
1305 stepperType != stepper->getStepperType() && stepperType !=
"SSPERK33" &&
1306 stepperType !=
"SSPRK3",
1308 " ParameterList 'Stepper Type' (='"
1310 <<
"')\n does not match type for this Stepper (='"
1311 << stepper->getStepperType()
1312 <<
"')\n or one of its aliases ('SSPERK33' or 'SSPRK3').\n");
1315 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
1318 stepper->setStepperRKValues(pl);
1320 if (model != Teuchos::null) {
1321 stepper->setModel(model);
1322 stepper->initialize();
1350 template <
class Scalar>
1371 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1378 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1379 useEmbedded, stepperRKAppAction);
1384 std::ostringstream Description;
1386 <<
"Solving Ordinary Differential Equations I:\n"
1387 <<
"Nonstiff Problems, 2nd Revised Edition\n"
1388 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
1389 <<
"Table 1.1, pg 135\n"
1390 <<
"c = [ 0 1/3 2/3 ]'\n"
1394 <<
"b = [ 1/4 0 3/4 ]'";
1395 return Description.str();
1402 const Scalar one = ST::one();
1403 const Scalar zero = ST::zero();
1404 const Scalar onethird = one / (3 * one);
1405 const Scalar twothirds = 2 * one / (3 * one);
1406 const Scalar onefourth = one / (4 * one);
1407 const Scalar threefourths = 3 * one / (4 * one);
1422 A(2, 1) = twothirds;
1428 b(2) = threefourths;
1444 template <
class Scalar>
1451 stepper->setStepperRKValues(pl);
1453 if (model != Teuchos::null) {
1454 stepper->setModel(model);
1455 stepper->initialize();
1482 template <
class Scalar>
1503 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1510 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1511 useEmbedded, stepperRKAppAction);
1516 std::ostringstream Description;
1518 <<
"Solving Ordinary Differential Equations I:\n"
1519 <<
"Nonstiff Problems, 2nd Revised Edition\n"
1520 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
1521 <<
"Table 1.1, pg 135\n"
1522 <<
"c = [ 0 1/2 ]'\n"
1526 return Description.str();
1533 const Scalar one = ST::one();
1534 const Scalar zero = ST::zero();
1535 const Scalar onehalf = one / (2 * one);
1565 template <
class Scalar>
1571 stepper->setStepperRKValues(pl);
1573 if (model != Teuchos::null) {
1574 stepper->setModel(model);
1575 stepper->initialize();
1598 template <
class Scalar>
1619 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1626 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1627 useEmbedded, stepperRKAppAction);
1632 std::ostringstream Description;
1634 <<
"This Stepper is known as 'RK Explicit Ralston' or 'RK2'.\n"
1635 <<
"c = [ 0 2/3 ]'\n"
1638 <<
"b = [ 1/4 3/4 ]'";
1639 return Description.str();
1646 const Scalar one = ST::one();
1647 const Scalar zero = ST::zero();
1649 const int NumStages = 2;
1650 const int order = 2;
1659 A(1, 0) = (2 * one) / (3 * one);
1662 b(0) = (1 * one) / (4 * one);
1663 b(1) = (3 * one) / (4 * one);
1667 c(1) = (2 * one) / (3 * one);
1678 template <
class Scalar>
1686 if (pl != Teuchos::null) {
1688 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
1691 stepperType != stepper->getStepperType() && stepperType !=
"RK2",
1693 " ParameterList 'Stepper Type' (='"
1695 <<
"')\n does not match type for this Stepper (='"
1696 << stepper->getStepperType()
1697 <<
"')\n or one of its aliases ('RK2').\n");
1700 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
1703 stepper->setStepperRKValues(pl);
1705 if (model != Teuchos::null) {
1706 stepper->setModel(model);
1707 stepper->initialize();
1731 template <
class Scalar>
1752 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1759 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1760 useEmbedded, stepperRKAppAction);
1765 std::ostringstream Description;
1767 <<
"This Stepper is known as 'RK Explicit Trapezoidal' or "
1768 "'Heuns Method' or 'SSPERK22'.\n"
1772 <<
"b = [ 1/2 1/2 ]\n"
1773 <<
"bstart = [ 3/4 1/4 ]'";
1774 return Description.str();
1782 const Scalar one = ST::one();
1783 const Scalar zero = ST::zero();
1784 const Scalar onehalf = one / (2 * one);
1807 bstar(0) = as<Scalar>(3 * one / (4 * one));
1808 bstar(1) = as<Scalar>(1 * one / (4 * one));
1821 template <
class Scalar>
1829 if (pl != Teuchos::null) {
1831 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
1834 stepperType != stepper->getStepperType() &&
1835 stepperType !=
"Heuns Method" && stepperType !=
"SSPERK22" &&
1836 stepperType !=
"SSPRK2",
1838 " ParameterList 'Stepper Type' (='"
1840 <<
"')\n does not match type for this Stepper (='"
1841 << stepper->getStepperType()
1842 <<
"')\n or one of its aliases ('Heuns Method' or 'SSPERK22' or "
1846 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
1849 stepper->setStepperRKValues(pl);
1851 if (model != Teuchos::null) {
1852 stepper->setModel(model);
1853 stepper->initialize();
1876 template <
class Scalar>
1892 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1899 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1900 useEmbedded, stepperRKAppAction);
1905 std::ostringstream Description;
1908 <<
"Strong Stability Preserving Explicit RK (stage=5, order=4)\n"
1910 return Description.str();
1918 const int NumStages = 5;
1919 const int order = 4;
1920 const Scalar sspcoef = 1.5082;
1925 const Scalar zero = ST::zero();
1928 A(0, 0) = A(0, 1) = A(0, 2) = A(0, 3) = A(0, 4) = zero;
1930 A(1, 0) = as<Scalar>(0.391752226571889);
1931 A(1, 1) = A(1, 2) = A(1, 3) = A(0, 4) = zero;
1933 A(2, 0) = as<Scalar>(0.217669096261169);
1934 A(2, 1) = as<Scalar>(0.368410593050372);
1935 A(2, 2) = A(2, 3) = A(2, 4) = zero;
1937 A(3, 0) = as<Scalar>(0.082692086657811);
1938 A(3, 1) = as<Scalar>(0.139958502191896);
1939 A(3, 2) = as<Scalar>(0.251891774271693);
1940 A(3, 3) = A(2, 4) = zero;
1942 A(4, 0) = as<Scalar>(0.067966283637115);
1943 A(4, 1) = as<Scalar>(0.115034698504632);
1944 A(4, 2) = as<Scalar>(0.207034898597385);
1945 A(4, 3) = as<Scalar>(0.544974750228520);
1949 b(0) = as<Scalar>(0.146811876084786);
1950 b(1) = as<Scalar>(0.248482909444976);
1951 b(2) = as<Scalar>(0.104258830331980);
1952 b(3) = as<Scalar>(0.274438900901350);
1953 b(4) = as<Scalar>(0.226007483236908);
1958 c(2) = A(2, 0) + A(2, 1);
1959 c(3) = A(3, 0) + A(3, 1) + A(3, 2);
1960 c(4) = A(4, 0) + A(4, 1) + A(4, 2) + A(4, 3);
1963 bstar(0) = as<Scalar>(0.130649104813131);
1964 bstar(1) = as<Scalar>(0.317716031201302);
1965 bstar(2) = as<Scalar>(0.000000869337261);
1966 bstar(3) = as<Scalar>(0.304581512634772);
1967 bstar(4) = as<Scalar>(0.247052482013534);
1972 this->
tableau_->setTVDCoeff(sspcoef);
1978 template <
class Scalar>
1984 stepper->setStepperRKValues(pl);
1986 if (model != Teuchos::null) {
1987 stepper->setModel(model);
1988 stepper->initialize();
2024 template <
class Scalar>
2040 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2044 const int orderMin,
const int orderMax,
2051 this->
setTableau(A, b, c, order, orderMin, orderMax, bstar);
2054 this->
tableau_->isImplicit() ==
true, std::logic_error,
2055 "Error - General ERK received an implicit Butcher Tableau!\n");
2057 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
2058 useEmbedded, stepperRKAppAction);
2063 std::stringstream Description;
2066 <<
"The format of the Butcher Tableau parameter list is\n"
2067 <<
" <Parameter name=\"A\" type=\"string\" value=\"# # # ;\n"
2070 <<
" <Parameter name=\"b\" type=\"string\" value=\"# # #\"/>\n"
2071 <<
" <Parameter name=\"c\" type=\"string\" value=\"# # #\"/>\n\n"
2072 <<
"Note the number of stages is implicit in the number of entries.\n"
2073 <<
"The number of stages must be consistent.\n"
2075 <<
"Default tableau is RK4 (order=4):\n"
2076 <<
"c = [ 0 1/2 1/2 1 ]'\n"
2081 <<
"b = [ 1/6 1/3 1/3 1/6 ]'";
2082 return Description.str();
2087 if (this->
tableau_ == Teuchos::null) {
2090 auto t = stepper->getTableau();
2093 t->orderMin(), t->orderMax(), t->bstar()));
2100 const int order,
const int orderMin,
const int orderMax,
2105 this->
getStepperType(), A, b, c, order, orderMin, orderMax, bstar));
2123 std::ostringstream Astream;
2124 Astream.precision(15);
2125 for (
int i = 0; i < A.
numRows(); i++) {
2126 for (
int j = 0; j < A.
numCols() - 1; j++) {
2127 Astream << A(i, j) <<
" ";
2129 Astream << A(i, A.
numCols() - 1);
2130 if (i != A.
numRows() - 1) Astream <<
"; ";
2132 tableauPL->
set<std::string>(
"A", Astream.str());
2134 std::ostringstream bstream;
2135 bstream.precision(15);
2136 for (
int i = 0; i < b.
length() - 1; i++) {
2137 bstream << b(i) <<
" ";
2139 bstream << b(b.
length() - 1);
2140 tableauPL->
set<std::string>(
"b", bstream.str());
2142 std::ostringstream cstream;
2143 cstream.precision(15);
2144 for (
int i = 0; i < c.
length() - 1; i++) {
2145 cstream << c(i) <<
" ";
2147 cstream << c(c.
length() - 1);
2148 tableauPL->
set<std::string>(
"c", cstream.str());
2150 tableauPL->
set<
int>(
"order", this->
tableau_->order());
2152 if (bstar.
length() == 0) {
2153 tableauPL->
set(
"bstar",
"");
2156 std::ostringstream bstarstream;
2157 bstarstream.precision(15);
2158 for (
int i = 0; i < bstar.
length() - 1; i++) {
2159 bstarstream << bstar(i) <<
" ";
2161 bstarstream << bstar(bstar.
length() - 1);
2162 tableauPL->
set<std::string>(
"bstar", bstarstream.str());
2165 pl->
set(
"Tableau", *tableauPL);
2173 template <
class Scalar>
2179 stepper->setStepperRKValues(pl);
2181 if (pl != Teuchos::null) {
2183 auto t = stepper->createTableau(pl);
2184 stepper->setTableau(t->A(), t->b(), t->c(), t->order(), t->orderMin(),
2185 t->orderMax(), t->bstar());
2189 stepper->getTableau()->isImplicit() ==
true, std::logic_error,
2190 "Error - General ERK received an implicit Butcher Tableau!\n");
2192 if (model != Teuchos::null) {
2193 stepper->setModel(model);
2194 stepper->initialize();
2216 template <
class Scalar>
2238 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2239 bool useEmbedded,
bool zeroInitialGuess,
2245 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2246 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2251 std::ostringstream Description;
2256 return Description.str();
2263 const Scalar sspcoef = std::numeric_limits<Scalar>::max();
2270 A(0, 0) = ST::one();
2283 this->
tableau_->setTVDCoeff(sspcoef);
2289 template <
class Scalar>
2296 stepper->setStepperDIRKValues(pl);
2298 if (model != Teuchos::null) {
2299 stepper->setModel(model);
2300 stepper->initialize();
2331 template <
class Scalar>
2342 const Scalar one = ST::one();
2344 Teuchos::as<Scalar>((2 * one - ST::squareroot(2 * one)) / (2 * one));
2359 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2360 bool useEmbedded,
bool zeroInitialGuess,
2362 Scalar gamma = Scalar(0.2928932188134524))
2365 const Scalar one = ST::one();
2367 Teuchos::as<Scalar>((2 * one - ST::squareroot(2 * one)) / (2 * one));
2373 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2374 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2388 std::ostringstream Description;
2390 <<
"Computer Methods for ODEs and DAEs\n"
2391 <<
"U. M. Ascher and L. R. Petzold\n"
2393 <<
"gamma = (2+-sqrt(2))/2\n"
2394 <<
"c = [ gamma 1 ]'\n"
2395 <<
"A = [ gamma 0 ]\n"
2396 <<
" [ 1-gamma gamma ]\n"
2397 <<
"b = [ 1-gamma gamma ]'";
2398 return Description.str();
2404 pl->template set<double>(
2406 "The default value is gamma = (2-sqrt(2))/2. "
2407 "This will produce an L-stable 2nd order method with the stage "
2408 "times within the timestep. Other values of gamma will still "
2409 "produce an L-stable scheme, but will only be 1st order accurate.");
2423 const Scalar one = ST::one();
2424 const Scalar zero = ST::zero();
2429 A(1, 0) = Teuchos::as<Scalar>(one -
gamma_);
2433 b(0) = Teuchos::as<Scalar>(one -
gamma_);
2454 template <
class Scalar>
2461 stepper->setStepperDIRKValues(pl);
2463 if (pl != Teuchos::null)
2464 stepper->setGamma(pl->
get<
double>(
"gamma", 0.2928932188134524));
2466 if (model != Teuchos::null) {
2467 stepper->setModel(model);
2468 stepper->initialize();
2502 template <
class Scalar>
2524 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2525 bool useEmbedded,
bool zeroInitialGuess,
2531 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2532 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2537 std::ostringstream Description;
2539 <<
"Implicit-explicit Runge-Kutta schemes and applications to\n"
2540 <<
"hyperbolic systems with relaxation\n"
2541 <<
"L Pareschi, G Russo\n"
2542 <<
"Journal of Scientific computing, 2005 - Springer\n"
2544 <<
"gamma = 1/(2+sqrt(2))\n"
2545 <<
"c = [ gamma (1-gamma) 1/2 ]'\n"
2546 <<
"A = [ gamma 0 0 ]\n"
2547 <<
" [ 1-2gamma gamma 0 ]\n"
2548 <<
" [ 1/2-gamma 0 gamma ]\n"
2549 <<
"b = [ 1/6 1/6 2/3 ]'";
2550 return Description.str();
2558 const int NumStages = 3;
2559 const int order = 2;
2560 const Scalar sspcoef = 1.0529;
2564 const Scalar one = ST::one();
2565 const Scalar zero = ST::zero();
2566 const Scalar gamma = as<Scalar>(one - (one / ST::squareroot(2 * one)));
2569 A(0, 0) = A(1, 1) = A(2, 2) = gamma;
2570 A(0, 1) = A(0, 2) = A(1, 2) = A(2, 1) = zero;
2571 A(1, 0) = as<Scalar>(one - 2 * gamma);
2572 A(2, 0) = as<Scalar>((one / (2. * one)) - gamma);
2575 b(0) = b(1) = (one / (6 * one));
2576 b(2) = (2 * one) / (3 * one);
2581 c(2) = one / (2 * one);
2586 this->
tableau_->setTVDCoeff(sspcoef);
2592 template <
class Scalar>
2599 stepper->setStepperDIRKValues(pl);
2601 if (model != Teuchos::null) {
2602 stepper->setModel(model);
2603 stepper->initialize();
2638 template <
class Scalar>
2650 const Scalar one = ST::one();
2651 gammaDefault_ = as<Scalar>((3 * one + ST::squareroot(3 * one)) / (6 * one));
2668 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2669 bool useEmbedded,
bool zeroInitialGuess,
2671 std::string gammaType =
"3rd Order A-stable",
2672 Scalar gamma = Scalar(0.7886751345948128))
2676 const Scalar one = ST::one();
2677 gammaDefault_ = as<Scalar>((3 * one + ST::squareroot(3 * one)) / (6 * one));
2685 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2686 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2692 !(gammaType ==
"3rd Order A-stable" ||
2693 gammaType ==
"2nd Order L-stable" || gammaType ==
"gamma"),
2695 "gammaType needs to be '3rd Order A-stable', '2nd Order L-stable' "
2718 std::ostringstream Description;
2720 <<
"Solving Ordinary Differential Equations I:\n"
2721 <<
"Nonstiff Problems, 2nd Revised Edition\n"
2722 <<
"E. Hairer, S. P. Norsett, and G. Wanner\n"
2723 <<
"Table 7.2, pg 207\n"
2724 <<
"gamma = (3+sqrt(3))/6 -> 3rd order and A-stable\n"
2725 <<
"gamma = (2-sqrt(2))/2 -> 2nd order and L-stable\n"
2726 <<
"c = [ gamma 1-gamma ]'\n"
2727 <<
"A = [ gamma 0 ]\n"
2728 <<
" [ 1-2*gamma gamma ]\n"
2729 <<
"b = [ 1/2 1/2 ]'";
2730 return Description.str();
2737 pl->template set<std::string>(
2739 "Valid values are '3rd Order A-stable' ((3+sqrt(3))/6.), "
2740 "'2nd Order L-stable' ((2-sqrt(2))/2) and 'gamma' (user defined). "
2741 "The default value is '3rd Order A-stable'.");
2742 pl->template set<double>(
2744 "Equal to (3+sqrt(3))/6 if 'Gamma Type' = '3rd Order A-stable', or "
2745 "(2-sqrt(2))/2 if 'Gamma Type' = '2nd Order L-stable', or "
2746 "user-defined gamma value if 'Gamma Type = 'gamma'. "
2747 "The default value is gamma = (3+sqrt(3))/6, which matches "
2748 "the default 'Gamma Type' = '3rd Order A-stable'.");
2762 const Scalar one = ST::one();
2763 const Scalar zero = ST::zero();
2770 else if (
gammaType_ ==
"2nd Order L-stable") {
2772 gamma_ = as<Scalar>((2 * one - ST::squareroot(2 * one)) / (2 * one));
2781 A(1, 0) = as<Scalar>(one - 2 *
gamma_);
2785 b(0) = as<Scalar>(one / (2 * one));
2786 b(1) = as<Scalar>(one / (2 * one));
2790 c(1) = as<Scalar>(one -
gamma_);
2805 template <
class Scalar>
2812 stepper->setStepperDIRKValues(pl);
2814 if (pl != Teuchos::null) {
2815 stepper->setGammaType(
2816 pl->
get<std::string>(
"Gamma Type",
"3rd Order A-stable"));
2817 stepper->setGamma(pl->
get<
double>(
"gamma", 0.7886751345948128));
2820 if (model != Teuchos::null) {
2821 stepper->setModel(model);
2822 stepper->initialize();
2849 template <
class Scalar>
2871 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2872 bool useEmbedded,
bool zeroInitialGuess,
2878 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2879 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2884 std::ostringstream Description;
2886 <<
"Hammer & Hollingsworth method\n"
2887 <<
"Solving Ordinary Differential Equations I:\n"
2888 <<
"Nonstiff Problems, 2nd Revised Edition\n"
2889 <<
"E. Hairer, S. P. Norsett, and G. Wanner\n"
2890 <<
"Table 7.1, pg 205\n"
2891 <<
"c = [ 0 2/3 ]'\n"
2894 <<
"b = [ 1/4 3/4 ]'";
2895 return Description.str();
2907 const Scalar one = ST::one();
2908 const Scalar zero = ST::zero();
2913 A(1, 0) = as<Scalar>(one / (3 * one));
2914 A(1, 1) = as<Scalar>(one / (3 * one));
2917 b(0) = as<Scalar>(one / (4 * one));
2918 b(1) = as<Scalar>(3 * one / (4 * one));
2922 c(1) = as<Scalar>(2 * one / (3 * one));
2933 template <
class Scalar>
2940 stepper->setStepperDIRKValues(pl);
2942 if (model != Teuchos::null) {
2943 stepper->setModel(model);
2944 stepper->initialize();
2978 template <
class Scalar>
3004 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3005 bool useEmbedded,
bool zeroInitialGuess,
3007 Scalar theta = Scalar(0.5))
3016 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3017 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3024 "'theta' can not be zero, as it makes this stepper explicit. \n"
3025 "Try using the 'RK Forward Euler' stepper.\n");
3035 std::ostringstream Description;
3037 <<
"Non-standard finite-difference methods\n"
3038 <<
"in dynamical systems, P. Kama,\n"
3039 <<
"Dissertation, University of Pretoria, pg. 49.\n"
3040 <<
"Comment: Generalized Implicit Midpoint Method\n"
3041 <<
"c = [ theta ]'\n"
3042 <<
"A = [ theta ]\n"
3044 return Description.str();
3051 pl->template set<double>(
3053 "Valid values are 0 <= theta <= 1, where theta = 0 "
3054 "implies Forward Euler, theta = 1/2 implies implicit midpoint "
3055 "method (default), and theta = 1 implies Backward Euler. "
3056 "For theta != 1/2, this method is first-order accurate, "
3057 "and with theta = 1/2, it is second-order accurate. "
3058 "This method is A-stable, but becomes L-stable with theta=1.");
3091 template <
class Scalar>
3097 stepper->setStepperDIRKValues(pl);
3099 if (pl != Teuchos::null) {
3100 stepper->setTheta(pl->
get<
double>(
"theta", 0.5));
3103 if (model != Teuchos::null) {
3104 stepper->setModel(model);
3105 stepper->initialize();
3138 template <
class Scalar>
3164 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3165 bool useEmbedded,
bool zeroInitialGuess,
3167 Scalar theta = Scalar(0.5))
3176 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3177 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3184 "'theta' can not be zero, as it makes this stepper explicit. \n"
3185 "Try using the 'RK Forward Euler' stepper.\n");
3195 std::ostringstream Description;
3197 <<
"Computer Methods for ODEs and DAEs\n"
3198 <<
"U. M. Ascher and L. R. Petzold\n"
3202 <<
" [ 1-theta theta ]\n"
3203 <<
"b = [ 1-theta theta ]'";
3204 return Description.str();
3211 pl->template set<double>(
3213 "Valid values are 0 < theta <= 1, where theta = 0 "
3214 "implies Forward Euler, theta = 1/2 implies trapezoidal "
3215 "method (default), and theta = 1 implies Backward Euler. "
3216 "For theta != 1/2, this method is first-order accurate, "
3217 "and with theta = 1/2, it is second-order accurate. "
3218 "This method is A-stable, but becomes L-stable with theta=1.");
3233 const Scalar one = ST::one();
3234 const Scalar zero = ST::zero();
3244 A(1, 0) = Teuchos::as<Scalar>(one -
theta_);
3248 b(0) = Teuchos::as<Scalar>(one -
theta_);
3271 template <
class Scalar>
3277 stepper->setStepperDIRKValues(pl);
3279 if (pl != Teuchos::null) {
3280 stepper->setTheta(pl->
get<
double>(
"theta", 0.5));
3283 if (model != Teuchos::null) {
3284 stepper->setModel(model);
3285 stepper->initialize();
3312 template <
class Scalar>
3334 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3335 bool useEmbedded,
bool zeroInitialGuess,
3341 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3342 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3347 std::ostringstream Description;
3349 <<
"Also known as Crank-Nicolson Method.\n"
3353 <<
"b = [ 1/2 1/2 ]'";
3354 return Description.str();
3367 const Scalar one = ST::one();
3368 const Scalar zero = ST::zero();
3369 const Scalar onehalf = ST::one() / (2 * ST::one());
3401 template <
class Scalar>
3410 if (pl != Teuchos::null) {
3412 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
3415 stepperType != stepper->getStepperType() &&
3416 stepperType !=
"RK Crank-Nicolson",
3418 " ParameterList 'Stepper Type' (='" + stepperType
3419 <<
"')\n does not match type for this Stepper (='"
3420 << stepper->getStepperType()
3421 <<
"')\n or one of its aliases ('RK Crank-Nicolson').\n");
3424 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
3427 stepper->setStepperDIRKValues(pl);
3429 if (model != Teuchos::null) {
3430 stepper->setModel(model);
3431 stepper->initialize();
3464 template <
class Scalar>
3486 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3487 bool useEmbedded,
bool zeroInitialGuess,
3493 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3494 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3499 std::ostringstream Description;
3502 <<
"Solving Ordinary Differential Equations II:\n"
3503 <<
"Stiff and Differential-Algebraic Problems,\n"
3504 <<
"2nd Revised Edition\n"
3505 <<
"E. Hairer and G. Wanner\n"
3506 <<
"Table 5.2, pg 72\n"
3507 <<
"Solving Ordinary Differential Equations I:\n"
3508 <<
"Nonstiff Problems, 2nd Revised Edition\n"
3509 <<
"E. Hairer, S. P. Norsett, and G. Wanner\n"
3510 <<
"Table 7.1, pg 205\n"
3514 return Description.str();
3525 const Scalar onehalf = ST::one() / (2 * ST::one());
3526 const Scalar one = ST::one();
3548 template <
class Scalar>
3555 stepper->setStepperDIRKValues(pl);
3557 if (model != Teuchos::null) {
3558 stepper->setModel(model);
3559 stepper->initialize();
3586 template <
class Scalar>
3603 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3604 bool useEmbedded,
bool zeroInitialGuess,
3610 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3611 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3616 std::ostringstream Description;
3618 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3619 "(stage=2, order=2)\n"
3621 <<
"c = [ 1/4 3/4 ]'\n"
3624 <<
"b = [ 1/2 1/2 ]\n"
3626 return Description.str();
3634 const int NumStages = 2;
3635 const int order = 2;
3640 const Scalar one = ST::one();
3641 const Scalar zero = ST::zero();
3642 const Scalar onehalf = one / (2 * one);
3643 const Scalar onefourth = one / (4 * one);
3646 A(0, 0) = A(1, 1) = onefourth;
3651 b(0) = b(1) = onehalf;
3655 c(1) = A(1, 0) + A(1, 1);
3666 template <
class Scalar>
3672 stepper->setStepperDIRKValues(pl);
3674 if (model != Teuchos::null) {
3675 stepper->setModel(model);
3676 stepper->initialize();
3704 template <
class Scalar>
3721 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3722 bool useEmbedded,
bool zeroInitialGuess,
3728 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3729 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3734 std::ostringstream Description;
3736 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3737 "(stage=3, order=2)\n"
3739 <<
"c = [ 1/6 1/2 5/6 ]'\n"
3742 <<
" [ 1/3 1/3 1/6 ]\n"
3743 <<
"b = [ 1/3 1/3 1/3 ]\n"
3745 return Description.str();
3753 const int NumStages = 3;
3754 const int order = 2;
3759 const Scalar one = ST::one();
3760 const Scalar zero = ST::zero();
3761 const Scalar onethird = one / (3 * one);
3762 const Scalar onesixth = one / (6 * one);
3765 A(0, 0) = A(1, 1) = A(2, 2) = onesixth;
3766 A(1, 0) = A(2, 0) = A(2, 1) = onethird;
3767 A(0, 1) = A(0, 2) = A(1, 2) = zero;
3770 b(0) = b(1) = b(2) = onethird;
3774 c(1) = A(1, 0) + A(1, 1);
3775 c(2) = A(2, 0) + A(2, 1) + A(2, 2);
3786 template <
class Scalar>
3792 stepper->setStepperDIRKValues(pl);
3794 if (model != Teuchos::null) {
3795 stepper->setModel(model);
3796 stepper->initialize();
3821 template <
class Scalar>
3838 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3839 bool useEmbedded,
bool zeroInitialGuess,
3845 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3846 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3851 std::ostringstream Description;
3853 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3854 "(stage=2, order=3)\n"
3855 <<
"SSP-Coef = 1 + sqrt( 3 )\n"
3856 <<
"c = [ 1/(3 + sqrt( 3 )) (1/6)(3 + sqrt( 3 )) ] '\n"
3857 <<
"A = [ 1/(3 + sqrt( 3 )) ] \n"
3858 <<
" [ 1/sqrt( 3 ) 1/(3 + sqrt( 3 )) ] \n"
3859 <<
"b = [ 1/2 1/2 ] \n"
3861 return Description.str();
3869 const int NumStages = 2;
3870 const int order = 3;
3871 const Scalar sspcoef = 2.7321;
3876 const Scalar one = ST::one();
3877 const Scalar zero = ST::zero();
3878 const Scalar onehalf = one / (2 * one);
3879 const Scalar rootthree = ST::squareroot(3 * one);
3882 A(0, 0) = A(1, 1) = one / (3 * one + rootthree);
3883 A(1, 0) = one / rootthree;
3887 b(0) = b(1) = onehalf;
3891 c(1) = A(1, 0) + A(1, 1);
3896 this->
tableau_->setTVDCoeff(sspcoef);
3902 template <
class Scalar>
3908 stepper->setStepperDIRKValues(pl);
3910 if (model != Teuchos::null) {
3911 stepper->setModel(model);
3912 stepper->initialize();
3940 template <
class Scalar>
3957 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3958 bool useEmbedded,
bool zeroInitialGuess,
3964 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3965 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3970 std::ostringstream Description;
3972 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3973 "(stage=3, order=3)\n"
3974 <<
"SSP-Coef = 2 + 2 sqrt(2)\n"
3975 <<
"c = [ 1/( 4 + 2 sqrt(2) 1/2 (1/4)(2 + "
3977 <<
"A = [ 1/( 4 + 2 sqrt(2) "
3979 <<
" [ 1/(2 sqrt(2) 1/( 4 + 2 sqrt(2) "
3981 <<
" [ 1/(2 sqrt(2) 1/(2 sqrt(2) 1/( 4 + 2 "
3983 <<
"b = [ 1/3 1/3 1/3 "
3986 return Description.str();
3994 const int NumStages = 3;
3995 const int order = 3;
3996 const Scalar sspcoef = 4.8284;
4001 const Scalar one = ST::one();
4002 const Scalar zero = ST::zero();
4003 const Scalar onethird = one / (3 * one);
4004 const Scalar rootwo = ST::squareroot(2 * one);
4007 A(0, 0) = A(1, 1) = A(2, 2) = one / (4 * one + 2 * rootwo);
4008 A(1, 0) = A(2, 0) = A(2, 1) = one / (2 * rootwo);
4009 A(0, 1) = A(0, 2) = A(1, 2) = zero;
4012 b(0) = b(1) = b(2) = onethird;
4016 c(1) = A(1, 0) + A(1, 1);
4017 c(2) = A(2, 0) + A(2, 1) + A(2, 2);
4022 this->
tableau_->setTVDCoeff(sspcoef);
4028 template <
class Scalar>
4034 stepper->setStepperDIRKValues(pl);
4036 if (model != Teuchos::null) {
4037 stepper->setModel(model);
4038 stepper->initialize();
4065 template <
class Scalar>
4087 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4088 bool useEmbedded,
bool zeroInitialGuess,
4094 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4095 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4100 std::ostringstream Description;
4103 <<
"Solving Ordinary Differential Equations II:\n"
4104 <<
"Stiff and Differential-Algebraic Problems,\n"
4105 <<
"2nd Revised Edition\n"
4106 <<
"E. Hairer and G. Wanner\n"
4107 <<
"Table 5.3, pg 73\n"
4111 return Description.str();
4122 const Scalar one = ST::one();
4123 const Scalar zero = ST::zero();
4132 order, order, emptyBStar,
false));
4138 template <
class Scalar>
4145 stepper->setStepperDIRKValues(pl);
4147 if (model != Teuchos::null) {
4148 stepper->setModel(model);
4149 stepper->initialize();
4178 template <
class Scalar>
4189 this->
setStepperName(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4190 this->
setStepperType(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4201 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4202 bool useEmbedded,
bool zeroInitialGuess,
4205 this->
setStepperName(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4206 this->
setStepperType(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4208 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4209 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4214 std::ostringstream Description;
4217 <<
"Solving Ordinary Differential Equations II:\n"
4218 <<
"Stiff and Differential-Algebraic Problems,\n"
4219 <<
"2nd Revised Edition\n"
4220 <<
"E. Hairer and G. Wanner\n"
4221 <<
"Table 5.9, pg 76\n"
4223 <<
"A = [ 1/2 0 ]\n"
4225 <<
"b = [ 1/2 1/2 ]'";
4226 return Description.str();
4238 const Scalar zero = ST::zero();
4239 const Scalar one = ST::one();
4242 A(0, 0) = as<Scalar>(one / (2 * one));
4244 A(1, 0) = as<Scalar>(one / (2 * one));
4248 b(0) = as<Scalar>(one / (2 * one));
4249 b(1) = as<Scalar>(one / (2 * one));
4259 order, order, emptyBStar,
false));
4260 this->tableau_->setTVD(
true);
4261 this->tableau_->setTVDCoeff(2.0);
4267 template <
class Scalar>
4275 stepper->setStepperDIRKValues(pl);
4277 if (model != Teuchos::null) {
4278 stepper->setModel(model);
4279 stepper->initialize();
4311 template <
class Scalar>
4333 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4334 bool useEmbedded,
bool zeroInitialGuess,
4340 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4341 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4346 std::ostringstream Description;
4349 <<
"Solving Ordinary Differential Equations II:\n"
4350 <<
"Stiff and Differential-Algebraic Problems,\n"
4351 <<
"2nd Revised Edition\n"
4352 <<
"E. Hairer and G. Wanner\n"
4354 <<
"c = [ 1/4 3/4 11/20 1/2 1 ]'\n"
4357 <<
" [ 17/50 -1/25 1/4 ]\n"
4358 <<
" [ 371/1360 -137/2720 15/544 1/4 ]\n"
4359 <<
" [ 25/24 -49/48 125/16 -85/12 1/4 ]\n"
4360 <<
"b = [ 25/24 -49/48 125/16 -85/12 1/4 ]'";
4362 return Description.str();
4374 const Scalar zero = ST::zero();
4375 const Scalar one = ST::one();
4376 const Scalar onequarter = as<Scalar>(one / (4 * one));
4379 A(0, 0) = onequarter;
4385 A(1, 0) = as<Scalar>(one / (2 * one));
4386 A(1, 1) = onequarter;
4391 A(2, 0) = as<Scalar>(17 * one / (50 * one));
4392 A(2, 1) = as<Scalar>(-one / (25 * one));
4393 A(2, 2) = onequarter;
4397 A(3, 0) = as<Scalar>(371 * one / (1360 * one));
4398 A(3, 1) = as<Scalar>(-137 * one / (2720 * one));
4399 A(3, 2) = as<Scalar>(15 * one / (544 * one));
4400 A(3, 3) = onequarter;
4403 A(4, 0) = as<Scalar>(25 * one / (24 * one));
4404 A(4, 1) = as<Scalar>(-49 * one / (48 * one));
4405 A(4, 2) = as<Scalar>(125 * one / (16 * one));
4406 A(4, 3) = as<Scalar>(-85 * one / (12 * one));
4407 A(4, 4) = onequarter;
4410 b(0) = as<Scalar>(25 * one / (24 * one));
4411 b(1) = as<Scalar>(-49 * one / (48 * one));
4412 b(2) = as<Scalar>(125 * one / (16 * one));
4413 b(3) = as<Scalar>(-85 * one / (12 * one));
4427 c(1) = as<Scalar>(3 * one / (4 * one));
4428 c(2) = as<Scalar>(11 * one / (20 * one));
4429 c(3) = as<Scalar>(one / (2 * one));
4441 template <
class Scalar>
4448 stepper->setStepperDIRKValues(pl);
4450 if (model != Teuchos::null) {
4451 stepper->setModel(model);
4452 stepper->initialize();
4483 template <
class Scalar>
4505 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4506 bool useEmbedded,
bool zeroInitialGuess,
4512 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4513 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4518 std::ostringstream Description;
4521 <<
"Solving Ordinary Differential Equations II:\n"
4522 <<
"Stiff and Differential-Algebraic Problems,\n"
4523 <<
"2nd Revised Edition\n"
4524 <<
"E. Hairer and G. Wanner\n"
4526 <<
"gamma = (1/sqrt(3))*cos(pi/18)+1/2\n"
4527 <<
"delta = 1/(6*(2*gamma-1)^2)\n"
4528 <<
"c = [ gamma 1/2 1-gamma ]'\n"
4529 <<
"A = [ gamma ]\n"
4530 <<
" [ 1/2-gamma gamma ]\n"
4531 <<
" [ 2*gamma 1-4*gamma gamma ]\n"
4532 <<
"b = [ delta 1-2*delta delta ]'";
4533 return Description.str();
4545 const Scalar zero = ST::zero();
4546 const Scalar one = ST::one();
4547 const Scalar pi = as<Scalar>(4 * one) * std::atan(one);
4548 const Scalar gamma =
4549 as<Scalar>(one / ST::squareroot(3 * one) * std::cos(pi / (18 * one)) +
4551 const Scalar delta =
4552 as<Scalar>(one / (6 * one * std::pow(2 * gamma - one, 2 * one)));
4559 A(1, 0) = as<Scalar>(one / (2 * one) - gamma);
4563 A(2, 0) = as<Scalar>(2 * gamma);
4564 A(2, 1) = as<Scalar>(one - 4 * gamma);
4569 b(1) = as<Scalar>(one - 2 * delta);
4574 c(1) = as<Scalar>(one / (2 * one));
4575 c(2) = as<Scalar>(one - gamma);
4586 template <
class Scalar>
4593 stepper->setStepperDIRKValues(pl);
4595 if (model != Teuchos::null) {
4596 stepper->setModel(model);
4597 stepper->initialize();
4632 template <
class Scalar>
4654 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4655 bool useEmbedded,
bool zeroInitialGuess,
4661 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4662 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4667 std::ostringstream Description;
4669 <<
"Solving Ordinary Differential Equations II:\n"
4670 <<
"Stiff and Differential-Algebraic Problems,\n"
4671 <<
"2nd Revised Edition\n"
4672 <<
"E. Hairer and G. Wanner\n"
4674 <<
"c = [ (6-sqrt(6))/10 ]\n"
4675 <<
" [ (6+9*sqrt(6))/35 ]\n"
4677 <<
" [ (4-sqrt(6))/10 ]\n"
4678 <<
" [ (4+sqrt(6))/10 ]\n"
4679 <<
"A = [ A1 A2 A3 A4 A5 ]\n"
4680 <<
" A1 = [ (6-sqrt(6))/10 ]\n"
4681 <<
" [ (-6+5*sqrt(6))/14 ]\n"
4682 <<
" [ (888+607*sqrt(6))/2850 ]\n"
4683 <<
" [ (3153-3082*sqrt(6))/14250 ]\n"
4684 <<
" [ (-32583+14638*sqrt(6))/71250 ]\n"
4686 <<
" [ (6-sqrt(6))/10 ]\n"
4687 <<
" [ (126-161*sqrt(6))/1425 ]\n"
4688 <<
" [ (3213+1148*sqrt(6))/28500 ]\n"
4689 <<
" [ (-17199+364*sqrt(6))/142500 ]\n"
4692 <<
" [ (6-sqrt(6))/10 ]\n"
4693 <<
" [ (-267+88*sqrt(6))/500 ]\n"
4694 <<
" [ (1329-544*sqrt(6))/2500 ]\n"
4698 <<
" [ (6-sqrt(6))/10 ]\n"
4699 <<
" [ (-96+131*sqrt(6))/625 ]\n"
4704 <<
" [ (6-sqrt(6))/10 ]\n"
4708 <<
" [ (16-sqrt(6))/36 ]\n"
4709 <<
" [ (16+sqrt(6))/36 ]'";
4710 return Description.str();
4722 const Scalar zero = ST::zero();
4723 const Scalar one = ST::one();
4724 const Scalar sqrt6 = ST::squareroot(as<Scalar>(6 * one));
4725 const Scalar gamma =
4726 as<Scalar>((6 * one - sqrt6) / (10 * one));
4735 A(1, 0) = as<Scalar>((-6 * one + 5 * one * sqrt6) / (14 * one));
4741 A(2, 0) = as<Scalar>((888 * one + 607 * one * sqrt6) / (2850 * one));
4742 A(2, 1) = as<Scalar>((126 * one - 161 * one * sqrt6) / (1425 * one));
4747 A(3, 0) = as<Scalar>((3153 * one - 3082 * one * sqrt6) / (14250 * one));
4748 A(3, 1) = as<Scalar>((3213 * one + 1148 * one * sqrt6) / (28500 * one));
4749 A(3, 2) = as<Scalar>((-267 * one + 88 * one * sqrt6) / (500 * one));
4753 A(4, 0) = as<Scalar>((-32583 * one + 14638 * one * sqrt6) / (71250 * one));
4754 A(4, 1) = as<Scalar>((-17199 * one + 364 * one * sqrt6) / (142500 * one));
4755 A(4, 2) = as<Scalar>((1329 * one - 544 * one * sqrt6) / (2500 * one));
4756 A(4, 3) = as<Scalar>((-96 * one + 131 * sqrt6) / (625 * one));
4762 b(2) = as<Scalar>(one / (9 * one));
4763 b(3) = as<Scalar>((16 * one - sqrt6) / (36 * one));
4764 b(4) = as<Scalar>((16 * one + sqrt6) / (36 * one));
4768 c(1) = as<Scalar>((6 * one + 9 * one * sqrt6) / (35 * one));
4770 c(3) = as<Scalar>((4 * one - sqrt6) / (10 * one));
4771 c(4) = as<Scalar>((4 * one + sqrt6) / (10 * one));
4782 template <
class Scalar>
4789 stepper->setStepperDIRKValues(pl);
4791 if (model != Teuchos::null) {
4792 stepper->setModel(model);
4793 stepper->initialize();
4818 template <
class Scalar>
4840 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4841 bool useEmbedded,
bool zeroInitialGuess,
4847 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4848 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4853 std::ostringstream Description;
4858 <<
"b = [ 1/2 1/2 ]'\n"
4859 <<
"bstar = [ 1 0 ]'";
4860 return Description.str();
4874 const Scalar one = ST::one();
4875 const Scalar zero = ST::zero();
4884 b(0) = as<Scalar>(one / (2 * one));
4885 b(1) = as<Scalar>(one / (2 * one));
4903 template <
class Scalar>
4909 stepper->setStepperDIRKValues(pl);
4911 if (model != Teuchos::null) {
4912 stepper->setModel(model);
4913 stepper->initialize();
4952 template <
class Scalar>
4974 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4975 bool useEmbedded,
bool zeroInitialGuess,
4980 const int orderMin,
const int orderMax,
4985 this->
setTableau(A, b, c, order, orderMin, orderMax, bstar);
4988 this->
tableau_->isImplicit() !=
true, std::logic_error,
4989 "Error - General DIRK did not receive a DIRK Butcher Tableau!\n");
4991 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4992 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4997 std::stringstream Description;
5000 <<
"The format of the Butcher Tableau parameter list is\n"
5001 <<
" <Parameter name=\"A\" type=\"string\" value=\"# # # ;\n"
5004 <<
" <Parameter name=\"b\" type=\"string\" value=\"# # #\"/>\n"
5005 <<
" <Parameter name=\"c\" type=\"string\" value=\"# # #\"/>\n\n"
5006 <<
"Note the number of stages is implicit in the number of entries.\n"
5007 <<
"The number of stages must be consistent.\n"
5009 <<
"Default tableau is 'SDIRK 2 Stage 2nd order':\n"
5010 <<
" Computer Methods for ODEs and DAEs\n"
5011 <<
" U. M. Ascher and L. R. Petzold\n"
5013 <<
" gamma = (2-sqrt(2))/2\n"
5014 <<
" c = [ gamma 1 ]'\n"
5015 <<
" A = [ gamma 0 ]\n"
5016 <<
" [ 1-gamma gamma ]\n"
5017 <<
" b = [ 1-gamma gamma ]'";
5018 return Description.str();
5023 if (this->
tableau_ == Teuchos::null) {
5026 auto t = stepper->getTableau();
5029 t->orderMin(), t->orderMax(), t->bstar()));
5037 const int order,
const int orderMin,
const int orderMax,
5042 this->
getStepperType(), A, b, c, order, orderMin, orderMax, bstar));
5058 std::ostringstream Astream;
5059 Astream.precision(15);
5060 for (
int i = 0; i < A.
numRows(); i++) {
5061 for (
int j = 0; j < A.
numCols() - 1; j++) {
5062 Astream << A(i, j) <<
" ";
5064 Astream << A(i, A.
numCols() - 1);
5065 if (i != A.
numRows() - 1) Astream <<
"; ";
5067 tableauPL->
set<std::string>(
"A", Astream.str());
5069 std::ostringstream bstream;
5070 bstream.precision(15);
5071 for (
int i = 0; i < b.
length() - 1; i++) {
5072 bstream << b(i) <<
" ";
5074 bstream << b(b.
length() - 1);
5075 tableauPL->
set<std::string>(
"b", bstream.str());
5077 std::ostringstream cstream;
5078 cstream.precision(15);
5079 for (
int i = 0; i < c.
length() - 1; i++) {
5080 cstream << c(i) <<
" ";
5082 cstream << c(c.
length() - 1);
5083 tableauPL->
set<std::string>(
"c", cstream.str());
5085 tableauPL->
set<
int>(
"order", this->
tableau_->order());
5087 if (bstar.
length() == 0) {
5088 tableauPL->
set(
"bstar",
"");
5091 std::ostringstream bstarstream;
5092 bstarstream.precision(15);
5093 for (
int i = 0; i < bstar.
length() - 1; i++) {
5094 bstarstream << bstar(i) <<
" ";
5096 bstarstream << bstar(bstar.
length() - 1);
5097 tableauPL->
set<std::string>(
"bstar", bstarstream.str());
5100 pl->
set(
"Tableau", *tableauPL);
5108 template <
class Scalar>
5114 stepper->setStepperDIRKValues(pl);
5116 if (pl != Teuchos::null) {
5118 auto t = stepper->createTableau(pl);
5119 stepper->setTableau(t->A(), t->b(), t->c(), t->order(), t->orderMin(),
5120 t->orderMax(), t->bstar());
5124 stepper->getTableau()->isDIRK() !=
true, std::logic_error,
5125 "Error - General DIRK did not receive a DIRK Butcher Tableau!\n");
5127 if (model != Teuchos::null) {
5128 stepper->setModel(model);
5129 stepper->initialize();
5137 #endif // Tempus_StepperRKButcherTableau_hpp
std::string getDescription() const
StepperERK_3Stage3rdOrderTVD(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperERK_Merson45(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Teuchos::RCP< StepperEDIRK_TrapezoidalRule< Scalar > > createStepperEDIRK_TrapezoidalRule(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
General Implicit Runge-Kutta Butcher Tableau.
StepperERK_3Stage3rdOrder()
Default constructor.
StepperEDIRK_TrapezoidalRule(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperERK_3Stage3rdOrderTVD()
Default constructor.
StepperERK_3Stage3rdOrderHeun(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
RK Implicit 2 Stage 2nd order Lobatto IIIB.
virtual std::string getDefaultICConsistency() const
std::string getStepperType() const
Get the stepper type. The stepper type is used as an identifier for the stepper, and can only be set ...
StepperERK_Ralston()
Default constructor.
Teuchos::RCP< StepperSDIRK_SSPDIRK33< Scalar > > createStepperSDIRK_SSPDIRK33(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
std::string getDescription() const
Explicit Runge-Kutta time stepper.
virtual void setupDefault()
Default setup for constructor.
Strong Stability Preserving Diagonally-Implicit RK Butcher Tableau.
Teuchos::RCP< Teuchos::ParameterList > getValidParametersBasicDIRK() const
StepperSDIRK_SSPDIRK33(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperDIRK_BackwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperSDIRK_3Stage2ndOrder()
Default constructor.
Teuchos::RCP< StepperEDIRK_2Stage3rdOrder< Scalar > > createStepperEDIRK_2Stage3rdOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperERK_SSPERK54(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Teuchos::RCP< StepperSDIRK_5Stage4thOrder< Scalar > > createStepperSDIRK_5Stage4thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperSDIRK_ImplicitMidpoint()
Default constructor.
StepperEDIRK_2StageTheta(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction, Scalar theta=Scalar(0.5))
Backward Euler Runge-Kutta Butcher Tableau.
StepperSDIRK_3Stage4thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperERK_Midpoint()
Default constructor.
Teuchos::RCP< RKButcherTableau< Scalar > > tableau_
T & get(const std::string &name, T def_value)
StepperSDIRK_2Stage2ndOrder()
Default constructor.
Teuchos::RCP< StepperERK_SSPERK54< Scalar > > createStepperERK_SSPERK54(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperSDIRK_ImplicitMidpoint(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
General Explicit Runge-Kutta Butcher Tableau.
std::string getDescription() const
StepperDIRK_General(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction, const Teuchos::SerialDenseMatrix< int, Scalar > &A, const Teuchos::SerialDenseVector< int, Scalar > &b, const Teuchos::SerialDenseVector< int, Scalar > &c, const int order, const int orderMin, const int orderMax, const Teuchos::SerialDenseVector< int, Scalar > &bstar)
Teuchos::RCP< StepperERK_3Stage3rdOrderHeun< Scalar > > createStepperERK_3Stage3rdOrderHeun(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
RK Explicit 5 Stage 3rd order by Kinnmark and Gray.
Teuchos::RCP< StepperERK_Merson45< Scalar > > createStepperERK_Merson45(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< StepperEDIRK_2StageTheta< Scalar > > createStepperEDIRK_2StageTheta(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
StepperSDIRK_SSPDIRK23(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
std::string getDescription() const
StepperSDIRK_3Stage2ndOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
void setStepperName(std::string s)
Set the stepper name.
StepperDIRK_1StageTheta()
Default constructor.
std::string getDescription() const
StepperEDIRK_2Stage3rdOrder()
Default constructor.
Strong Stability Preserving Explicit RK Butcher Tableau.
RK Explicit 4 Stage 3rd order by Runge.
std::string getDescription() const
StepperERK_5Stage3rdOrderKandG(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
std::string gammaTypeDefault_
std::string getDescription() const
StepperEDIRK_2Stage3rdOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
std::string getDescription() const
Teuchos::RCP< StepperERK_3_8Rule< Scalar > > createStepperERK_3_8Rule(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< StepperERK_BogackiShampine32< Scalar > > createStepperERK_BogackiShampine32(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< StepperSDIRK_5Stage5thOrder< Scalar > > createStepperSDIRK_5Stage5thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< StepperERK_3Stage3rdOrder< Scalar > > createStepperERK_3Stage3rdOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
ParameterList & set(std::string const &name, T &&value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
StepperDIRK_2Stage2ndOrderLobattoIIIB(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperERK_5Stage3rdOrderKandG()
Default constructor.
RK Trapezoidal Rule (A.K.A. RK Crank-Nicolson)
Teuchos::RCP< StepperDIRK_2Stage2ndOrderLobattoIIIB< Scalar > > createStepperDIRK_2Stage2ndOrderLobattoIIIB(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< StepperERK_ForwardEuler< Scalar > > createStepperERK_ForwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Teuchos::RCP< StepperSDIRK_21Pair< Scalar > > createStepperSDIRK_21Pair(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperERK_BogackiShampine32()
Default constructor.
bool isInitialized_
True if stepper's member data is initialized.
std::string getDescription() const
std::string getDescription() const
Teuchos::RCP< StepperSDIRK_SSPDIRK23< Scalar > > createStepperSDIRK_SSPDIRK23(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperERK_4Stage3rdOrderRunge(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Teuchos::RCP< StepperERK_3Stage3rdOrderTVD< Scalar > > createStepperERK_3Stage3rdOrderTVD(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
void setGamma(Scalar gamma)
Teuchos::RCP< StepperSDIRK_3Stage4thOrder< Scalar > > createStepperSDIRK_3Stage4thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Explicit RK 3/8th Rule Butcher Tableau.
std::string getDescription() const
StepperSDIRK_2Stage3rdOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction, std::string gammaType="3rd Order A-stable", Scalar gamma=Scalar(0.7886751345948128))
bool isParameter(const std::string &name) const
StepperERK_Midpoint(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
void setTheta(Scalar theta)
Diagonally Implicit Runge-Kutta (DIRK) time stepper.
void setTheta(Scalar theta)
std::string getDescription() const
StepperERK_4Stage4thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperERK_Trapezoidal()
Default constructor.
Strong Stability Preserving Diagonally-Implicit RK Butcher Tableau.
StepperERK_Merson45()
Default constructor.
std::string getDescription() const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
StepperSDIRK_5Stage4thOrder()
Default constructor.
Application Action for StepperRKBase.
Teuchos::RCP< StepperDIRK_1Stage1stOrderRadauIA< Scalar > > createStepperDIRK_1Stage1stOrderRadauIA(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
bool useFSAL_
Use First-Same-As-Last (FSAL) principle.
std::string getDescription() const
virtual void setupDefault()
Default setup for constructor.
Explicit RK Bogacki-Shampine Butcher Tableau.
StepperSDIRK_5Stage5thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
EDIRK 2 Stage Theta Method.
std::string getDescription() const
void setICConsistencyCheck(bool c)
std::string getDescription() const
Teuchos::RCP< StepperSDIRK_3Stage2ndOrder< Scalar > > createStepperSDIRK_3Stage2ndOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< StepperERK_5Stage3rdOrderKandG< Scalar > > createStepperERK_5Stage3rdOrderKandG(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
OrdinalType length() const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
StepperSDIRK_21Pair(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
std::string getDescription() const
Teuchos::RCP< StepperDIRK_BackwardEuler< Scalar > > createStepperDIRK_BackwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperERK_Trapezoidal(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperDIRK_1Stage1stOrderRadauIA(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
std::string getDescription() const
std::string getGammaType() const
Strong Stability Preserving Diagonally-Implicit RK Butcher Tableau.
std::string getDescription() const
Teuchos::RCP< StepperSDIRK_2Stage3rdOrder< Scalar > > createStepperSDIRK_2Stage3rdOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< Teuchos::ParameterList > getValidParametersBasicERK() const
std::string getDescription() const
StepperSDIRK_SSPDIRK22(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperSDIRK_21Pair()
Default constructor.
std::string getDescription() const
StepperSDIRK_2Stage3rdOrder()
Default constructor.
std::string getDescription() const
std::string getDescription() const
StepperDIRK_1Stage1stOrderRadauIA()
Default constructor.
void setTableau(const Teuchos::SerialDenseMatrix< int, Scalar > &A, const Teuchos::SerialDenseVector< int, Scalar > &b, const Teuchos::SerialDenseVector< int, Scalar > &c, const int order, const int orderMin, const int orderMax, const Teuchos::SerialDenseVector< int, Scalar > &bstar=Teuchos::SerialDenseVector< int, Scalar >())
Teuchos::RCP< StepperERK_Midpoint< Scalar > > createStepperERK_Midpoint(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
RK Explicit 3 Stage 3rd order TVD.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
std::string getDescription() const
OrdinalType numCols() const
StepperEDIRK_2StageTheta()
Default constructor.
Teuchos::RCP< StepperSDIRK_SSPDIRK22< Scalar > > createStepperSDIRK_SSPDIRK22(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
StepperERK_ForwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
std::string getDescription() const
std::string getDescription() const
StepperDIRK_General()
Default constructor.
Teuchos::RCP< StepperERK_Trapezoidal< Scalar > > createStepperERK_Trapezoidal(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Forward Euler Runge-Kutta Butcher Tableau.
StepperDIRK_1StageTheta(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction, Scalar theta=Scalar(0.5))
std::string getDescription() const
StepperERK_BogackiShampine32(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Teuchos::RCP< StepperSDIRK_ImplicitMidpoint< Scalar > > createStepperSDIRK_ImplicitMidpoint(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperERK_3Stage3rdOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Teuchos::RCP< StepperERK_General< Scalar > > createStepperERK_General(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperDIRK_BackwardEuler()
Default constructor.
virtual std::string getDescription() const
TypeTo as(const TypeFrom &t)
void setGammaType(std::string gammaType)
StepperERK_3Stage3rdOrderHeun()
Default constructor.
Teuchos::RCP< StepperSDIRK_2Stage2ndOrder< Scalar > > createStepperSDIRK_2Stage2ndOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Explicit RK Merson Butcher Tableau.
std::string getDescription() const
Runge-Kutta 4th order Butcher Tableau.
std::string getDescription() const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
RK Explicit 3 Stage 3rd order.
StepperERK_4Stage4thOrder()
Default constructor.
void setGamma(Scalar gamma)
std::string getDescription() const
StepperSDIRK_5Stage5thOrder()
Default constructor.
void setTableau(const Teuchos::SerialDenseMatrix< int, Scalar > &A, const Teuchos::SerialDenseVector< int, Scalar > &b, const Teuchos::SerialDenseVector< int, Scalar > &c, const int order, const int orderMin, const int orderMax, const Teuchos::SerialDenseVector< int, Scalar > &bstar=Teuchos::SerialDenseVector< int, Scalar >())
RK Implicit 1 Stage 1st order Radau IA.
StepperERK_Ralston(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperSDIRK_3Stage4thOrder()
Default constructor.
virtual void setup(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &wrapperModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Setup for constructor.
StepperSDIRK_5Stage4thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Teuchos::RCP< StepperERK_Ralston< Scalar > > createStepperERK_Ralston(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperDIRK_2Stage2ndOrderLobattoIIIB()
Default constructor.
std::string getDescription() const
virtual void setUseFSAL(bool a)
StepperSDIRK_2Stage2ndOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction, Scalar gamma=Scalar(0.2928932188134524))
StepperERK_ForwardEuler()
Default constructor.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
StepperSDIRK_SSPDIRK32(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, bool zeroInitialGuess, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
StepperERK_3_8Rule(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
std::string getDescription() const
std::string getDescription() const
void setStepperType(std::string s)
Set the stepper type.
StepperEDIRK_TrapezoidalRule()
Default constructor.
RK Explicit 3 Stage 3rd order by Heun.
StepperERK_General(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::SerialDenseMatrix< int, Scalar > &A, const Teuchos::SerialDenseVector< int, Scalar > &b, const Teuchos::SerialDenseVector< int, Scalar > &c, const int order, const int orderMin, const int orderMax, const Teuchos::SerialDenseVector< int, Scalar > &bstar, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction=Teuchos::null)
Teuchos::RCP< StepperERK_4Stage4thOrder< Scalar > > createStepperERK_4Stage4thOrder(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
OrdinalType numRows() const
virtual void setup(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel, bool useFSAL, std::string ICConsistency, bool ICConsistencyCheck, bool useEmbedded, const Teuchos::RCP< StepperRKAppAction< Scalar > > &stepperRKAppAction)
Setup for constructor.
Teuchos::RCP< StepperSDIRK_SSPDIRK32< Scalar > > createStepperSDIRK_SSPDIRK32(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
Teuchos::RCP< StepperDIRK_1StageTheta< Scalar > > createStepperDIRK_1StageTheta(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
void setICConsistency(std::string s)
Strong Stability Preserving Diagonally-Implicit RK Butcher Tableau.
Teuchos::RCP< StepperERK_4Stage3rdOrderRunge< Scalar > > createStepperERK_4Stage3rdOrderRunge(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
StepperERK_4Stage3rdOrderRunge()
Default constructor.
std::string getDescription() const
Teuchos::RCP< StepperDIRK_General< Scalar > > createStepperDIRK_General(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.