9 #ifndef Tempus_StepperRKButcherTableau_hpp
10 #define Tempus_StepperRKButcherTableau_hpp
14 #pragma clang system_header
17 #include "Tempus_config.hpp"
18 #include "Tempus_StepperExplicitRK.hpp"
19 #include "Tempus_StepperDIRK.hpp"
40 template <
class Scalar>
61 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
68 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
69 useEmbedded, stepperRKAppAction);
74 std::ostringstream Description;
79 return Description.str();
109 template <
class Scalar>
117 if (pl != Teuchos::null) {
119 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
122 stepperType != stepper->getStepperType() && stepperType !=
"RK1",
124 " ParameterList 'Stepper Type' (='"
125 << stepperType <<
"')\n"
126 <<
" does not match type for this Stepper (='"
127 << stepper->getStepperType()
128 <<
"')\n or one of its aliases ('RK1').\n");
131 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
134 stepper->setStepperRKValues(pl);
136 if (model != Teuchos::null) {
137 stepper->setModel(model);
138 stepper->initialize();
163 template <
class Scalar>
184 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
191 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
192 useEmbedded, stepperRKAppAction);
197 std::ostringstream Description;
199 <<
"\"The\" Runge-Kutta Method (explicit):\n"
200 <<
"Solving Ordinary Differential Equations I:\n"
201 <<
"Nonstiff Problems, 2nd Revised Edition\n"
202 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
203 <<
"Table 1.2, pg 138\n"
204 <<
"c = [ 0 1/2 1/2 1 ]'\n"
209 <<
"b = [ 1/6 1/3 1/3 1/6 ]'";
210 return Description.str();
216 const Scalar one = ST::one();
217 const Scalar zero = ST::zero();
218 const Scalar onehalf = one / (2 * one);
219 const Scalar onesixth = one / (6 * one);
220 const Scalar onethird = one / (3 * one);
266 template <
class Scalar>
273 stepper->setStepperRKValues(pl);
275 if (model != Teuchos::null) {
276 stepper->setModel(model);
277 stepper->initialize();
307 template <
class Scalar>
328 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
335 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
336 useEmbedded, stepperRKAppAction);
341 std::ostringstream Description;
343 <<
"P. Bogacki and L.F. Shampine.\n"
344 <<
"A 3(2) pair of Runge–Kutta formulas.\n"
345 <<
"Applied Mathematics Letters, 2(4):321 – 325, 1989.\n"
346 <<
"c = [ 0 1/2 3/4 1 ]'\n"
350 <<
" [ 2/9 1/3 4/9 0 ]\n"
351 <<
"b = [ 2/9 1/3 4/9 0 ]'\n"
352 <<
"bstar = [ 7/24 1/4 1/3 1/8 ]'";
353 return Description.str();
373 const Scalar one = ST::one();
374 const Scalar zero = ST::zero();
375 const Scalar onehalf = one / (2 * one);
376 const Scalar onethird = one / (3 * one);
377 const Scalar threefourths = (3 * one) / (4 * one);
378 const Scalar twoninths = (2 * one) / (9 * one);
379 const Scalar fourninths = (4 * one) / (9 * one);
391 A(2, 1) = threefourths;
396 A(3, 2) = fourninths;
412 bstar(0) = as<Scalar>(7 * one / (24 * one));
413 bstar(1) = as<Scalar>(1 * one / (4 * one));
414 bstar(2) = as<Scalar>(1 * one / (3 * one));
415 bstar(3) = as<Scalar>(1 * one / (8 * one));
425 template <
class Scalar>
432 stepper->setStepperRKValues(pl);
434 if (model != Teuchos::null) {
435 stepper->setModel(model);
436 stepper->initialize();
468 template <
class Scalar>
489 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
496 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
497 useEmbedded, stepperRKAppAction);
502 std::ostringstream Description;
504 <<
"Solving Ordinary Differential Equations I:\n"
505 <<
"Nonstiff Problems, 2nd Revised Edition\n"
506 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
507 <<
"Table 4.1, pg 167\n"
508 <<
"c = [ 0 1/3 1/3 1/2 1 ]'\n"
511 <<
" [ 1/6 1/6 0 ]\n"
512 <<
" [ 1/8 0 3/8 0 ]\n"
513 <<
" [ 1/2 0 -3/2 2 0 ]\n"
514 <<
"b = [ 1/6 0 0 2/3 1/6 ]'\n"
515 <<
"bstar = [ 1/10 0 3/10 2/5 1/5 ]'";
516 return Description.str();
530 const Scalar one = ST::one();
531 const Scalar zero = ST::zero();
534 A(1, 0) = as<Scalar>(one / (3 * one));
536 A(2, 0) = as<Scalar>(one / (6 * one));
537 A(2, 1) = as<Scalar>(one / (6 * one));
539 A(3, 0) = as<Scalar>(one / (8 * one));
540 A(3, 2) = as<Scalar>(3 * one / (8 * one));
542 A(4, 0) = as<Scalar>(one / (2 * one));
543 A(4, 2) = as<Scalar>(-3 * one / (2 * one));
547 b(0) = as<Scalar>(one / (6 * one));
548 b(3) = as<Scalar>(2 * one / (3 * one));
549 b(4) = as<Scalar>(one / (6 * one));
553 c(1) = as<Scalar>(1 * one / (3 * one));
554 c(2) = as<Scalar>(1 * one / (3 * one));
555 c(3) = as<Scalar>(1 * one / (2 * one));
559 bstar(0) = as<Scalar>(1 * one / (10 * one));
560 bstar(2) = as<Scalar>(3 * one / (10 * one));
561 bstar(3) = as<Scalar>(2 * one / (5 * one));
562 bstar(4) = as<Scalar>(1 * one / (5 * one));
572 template <
class Scalar>
578 stepper->setStepperRKValues(pl);
580 if (model != Teuchos::null) {
581 stepper->setModel(model);
582 stepper->initialize();
611 template <
class Scalar>
627 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
634 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
635 useEmbedded, stepperRKAppAction);
640 std::ostringstream Description;
642 <<
"Solving Ordinary Differential Equations I:\n"
643 <<
"Nonstiff Problems, 2nd Revised Edition\n"
644 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
645 <<
"Table 1.2, pg 138\n"
646 <<
"c = [ 0 1/3 2/3 1 ]'\n"
651 <<
"b = [ 1/8 3/8 3/8 1/8 ]'";
652 return Description.str();
665 const Scalar one = ST::one();
666 const Scalar zero = ST::zero();
667 const Scalar onethird = as<Scalar>(one / (3 * one));
668 const Scalar twothirds = as<Scalar>(2 * one / (3 * one));
669 const Scalar oneeighth = as<Scalar>(one / (8 * one));
670 const Scalar threeeighths = as<Scalar>(3 * one / (8 * one));
711 template <
class Scalar>
717 stepper->setStepperRKValues(pl);
719 if (model != Teuchos::null) {
720 stepper->setModel(model);
721 stepper->initialize();
750 template <
class Scalar>
772 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
779 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
780 useEmbedded, stepperRKAppAction);
785 std::ostringstream Description;
787 <<
"Solving Ordinary Differential Equations I:\n"
788 <<
"Nonstiff Problems, 2nd Revised Edition\n"
789 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
790 <<
"Table 1.1, pg 135\n"
791 <<
"c = [ 0 1/2 1 1 ]'\n"
796 <<
"b = [ 1/6 2/3 0 1/6 ]'";
797 return Description.str();
809 const Scalar one = ST::one();
810 const Scalar onehalf = one / (2 * one);
811 const Scalar onesixth = one / (6 * one);
812 const Scalar twothirds = 2 * one / (3 * one);
813 const Scalar zero = ST::zero();
854 template <
class Scalar>
861 stepper->setStepperRKValues(pl);
863 if (model != Teuchos::null) {
864 stepper->setModel(model);
865 stepper->initialize();
893 template <
class Scalar>
904 this->
setStepperName(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
905 this->
setStepperType(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
915 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
919 this->
setStepperName(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
920 this->
setStepperType(
"RK Explicit 5 Stage 3rd order by Kinnmark and Gray");
922 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
923 useEmbedded, stepperRKAppAction);
928 std::ostringstream Description;
930 <<
"Kinnmark & Gray 5 stage, 3rd order scheme \n"
931 <<
"Modified by P. Ullrich. From the prim_advance_mod.F90 \n"
932 <<
"routine in the HOMME atmosphere model code.\n"
933 <<
"c = [ 0 1/5 1/5 1/3 2/3 ]'\n"
937 <<
" [ 0 0 1/3 0 ]\n"
938 <<
" [ 0 0 0 2/3 0 ]\n"
939 <<
"b = [ 1/4 0 0 0 3/4 ]'";
940 return Description.str();
952 const Scalar one = ST::one();
953 const Scalar onefifth = one / (5 * one);
954 const Scalar onefourth = one / (4 * one);
955 const Scalar onethird = one / (3 * one);
956 const Scalar twothirds = 2 * one / (3 * one);
957 const Scalar threefourths = 3 * one / (4 * one);
958 const Scalar zero = ST::zero();
1010 template <
class Scalar>
1017 stepper->setStepperRKValues(pl);
1019 if (model != Teuchos::null) {
1020 stepper->setModel(model);
1021 stepper->initialize();
1045 template <
class Scalar>
1066 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1073 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1074 useEmbedded, stepperRKAppAction);
1079 std::ostringstream Description;
1081 <<
"c = [ 0 1/2 1 ]'\n"
1085 <<
"b = [ 1/6 4/6 1/6 ]'";
1086 return Description.str();
1093 const Scalar one = ST::one();
1094 const Scalar two = Teuchos::as<Scalar>(2 * one);
1095 const Scalar zero = ST::zero();
1096 const Scalar onehalf = one / (2 * one);
1097 const Scalar onesixth = one / (6 * one);
1098 const Scalar foursixth = 4 * one / (6 * one);
1135 template <
class Scalar>
1142 stepper->setStepperRKValues(pl);
1144 if (model != Teuchos::null) {
1145 stepper->setModel(model);
1146 stepper->initialize();
1181 template <
class Scalar>
1202 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1209 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1210 useEmbedded, stepperRKAppAction);
1215 std::ostringstream Description;
1217 <<
"This Stepper is known as 'RK Explicit 3 Stage 3rd order "
1218 "TVD' or 'SSPERK33'.\n"
1219 <<
"Sigal Gottlieb and Chi-Wang Shu\n"
1220 <<
"`Total Variation Diminishing Runge-Kutta Schemes'\n"
1221 <<
"Mathematics of Computation\n"
1222 <<
"Volume 67, Number 221, January 1998, pp. 73-85\n"
1223 <<
"c = [ 0 1 1/2 ]'\n"
1226 <<
" [ 1/4 1/4 0 ]\n"
1227 <<
"b = [ 1/6 1/6 4/6 ]'\n"
1228 <<
"This is also written in the following set of updates.\n"
1229 <<
"u1 = u^n + dt L(u^n)\n"
1230 <<
"u2 = 3 u^n/4 + u1/4 + dt L(u1)/4\n"
1231 <<
"u^(n+1) = u^n/3 + 2 u2/2 + 2 dt L(u2)/3";
1232 return Description.str();
1240 const Scalar one = ST::one();
1241 const Scalar zero = ST::zero();
1242 const Scalar onehalf = one / (2 * one);
1243 const Scalar onefourth = one / (4 * one);
1244 const Scalar onesixth = one / (6 * one);
1245 const Scalar foursixth = 4 * one / (6 * one);
1260 A(2, 0) = onefourth;
1261 A(2, 1) = onefourth;
1275 bstar(0) = as<Scalar>(0.291485418878409);
1276 bstar(1) = as<Scalar>(0.291485418878409);
1277 bstar(2) = as<Scalar>(0.417029162243181);
1290 template <
class Scalar>
1299 if (pl != Teuchos::null) {
1301 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
1304 stepperType != stepper->getStepperType() && stepperType !=
"SSPERK33" &&
1305 stepperType !=
"SSPRK3",
1307 " ParameterList 'Stepper Type' (='"
1309 <<
"')\n does not match type for this Stepper (='"
1310 << stepper->getStepperType()
1311 <<
"')\n or one of its aliases ('SSPERK33' or 'SSPRK3').\n");
1314 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
1317 stepper->setStepperRKValues(pl);
1319 if (model != Teuchos::null) {
1320 stepper->setModel(model);
1321 stepper->initialize();
1349 template <
class Scalar>
1370 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1377 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1378 useEmbedded, stepperRKAppAction);
1383 std::ostringstream Description;
1385 <<
"Solving Ordinary Differential Equations I:\n"
1386 <<
"Nonstiff Problems, 2nd Revised Edition\n"
1387 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
1388 <<
"Table 1.1, pg 135\n"
1389 <<
"c = [ 0 1/3 2/3 ]'\n"
1393 <<
"b = [ 1/4 0 3/4 ]'";
1394 return Description.str();
1401 const Scalar one = ST::one();
1402 const Scalar zero = ST::zero();
1403 const Scalar onethird = one / (3 * one);
1404 const Scalar twothirds = 2 * one / (3 * one);
1405 const Scalar onefourth = one / (4 * one);
1406 const Scalar threefourths = 3 * one / (4 * one);
1421 A(2, 1) = twothirds;
1427 b(2) = threefourths;
1443 template <
class Scalar>
1450 stepper->setStepperRKValues(pl);
1452 if (model != Teuchos::null) {
1453 stepper->setModel(model);
1454 stepper->initialize();
1481 template <
class Scalar>
1502 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1509 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1510 useEmbedded, stepperRKAppAction);
1515 std::ostringstream Description;
1517 <<
"Solving Ordinary Differential Equations I:\n"
1518 <<
"Nonstiff Problems, 2nd Revised Edition\n"
1519 <<
"E. Hairer, S.P. Norsett, G. Wanner\n"
1520 <<
"Table 1.1, pg 135\n"
1521 <<
"c = [ 0 1/2 ]'\n"
1525 return Description.str();
1532 const Scalar one = ST::one();
1533 const Scalar zero = ST::zero();
1534 const Scalar onehalf = one / (2 * one);
1564 template <
class Scalar>
1570 stepper->setStepperRKValues(pl);
1572 if (model != Teuchos::null) {
1573 stepper->setModel(model);
1574 stepper->initialize();
1597 template <
class Scalar>
1618 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1625 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1626 useEmbedded, stepperRKAppAction);
1631 std::ostringstream Description;
1633 <<
"This Stepper is known as 'RK Explicit Ralston' or 'RK2'.\n"
1634 <<
"c = [ 0 2/3 ]'\n"
1637 <<
"b = [ 1/4 3/4 ]'";
1638 return Description.str();
1645 const Scalar one = ST::one();
1646 const Scalar zero = ST::zero();
1648 const int NumStages = 2;
1649 const int order = 2;
1658 A(1, 0) = (2 * one) / (3 * one);
1661 b(0) = (1 * one) / (4 * one);
1662 b(1) = (3 * one) / (4 * one);
1666 c(1) = (2 * one) / (3 * one);
1677 template <
class Scalar>
1685 if (pl != Teuchos::null) {
1687 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
1690 stepperType != stepper->getStepperType() && stepperType !=
"RK2",
1692 " ParameterList 'Stepper Type' (='"
1694 <<
"')\n does not match type for this Stepper (='"
1695 << stepper->getStepperType()
1696 <<
"')\n or one of its aliases ('RK2').\n");
1699 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
1702 stepper->setStepperRKValues(pl);
1704 if (model != Teuchos::null) {
1705 stepper->setModel(model);
1706 stepper->initialize();
1730 template <
class Scalar>
1751 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1758 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1759 useEmbedded, stepperRKAppAction);
1764 std::ostringstream Description;
1766 <<
"This Stepper is known as 'RK Explicit Trapezoidal' or "
1767 "'Heuns Method' or 'SSPERK22'.\n"
1771 <<
"b = [ 1/2 1/2 ]\n"
1772 <<
"bstart = [ 3/4 1/4 ]'";
1773 return Description.str();
1781 const Scalar one = ST::one();
1782 const Scalar zero = ST::zero();
1783 const Scalar onehalf = one / (2 * one);
1806 bstar(0) = as<Scalar>(3 * one / (4 * one));
1807 bstar(1) = as<Scalar>(1 * one / (4 * one));
1820 template <
class Scalar>
1828 if (pl != Teuchos::null) {
1830 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
1833 stepperType != stepper->getStepperType() &&
1834 stepperType !=
"Heuns Method" && stepperType !=
"SSPERK22" &&
1835 stepperType !=
"SSPRK2",
1837 " ParameterList 'Stepper Type' (='"
1839 <<
"')\n does not match type for this Stepper (='"
1840 << stepper->getStepperType()
1841 <<
"')\n or one of its aliases ('Heuns Method' or 'SSPERK22' or "
1845 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
1848 stepper->setStepperRKValues(pl);
1850 if (model != Teuchos::null) {
1851 stepper->setModel(model);
1852 stepper->initialize();
1875 template <
class Scalar>
1891 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
1898 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
1899 useEmbedded, stepperRKAppAction);
1904 std::ostringstream Description;
1907 <<
"Strong Stability Preserving Explicit RK (stage=5, order=4)\n"
1909 return Description.str();
1917 const int NumStages = 5;
1918 const int order = 4;
1919 const Scalar sspcoef = 1.5082;
1924 const Scalar zero = ST::zero();
1927 A(0, 0) = A(0, 1) = A(0, 2) = A(0, 3) = A(0, 4) = zero;
1929 A(1, 0) = as<Scalar>(0.391752226571889);
1930 A(1, 1) = A(1, 2) = A(1, 3) = A(0, 4) = zero;
1932 A(2, 0) = as<Scalar>(0.217669096261169);
1933 A(2, 1) = as<Scalar>(0.368410593050372);
1934 A(2, 2) = A(2, 3) = A(2, 4) = zero;
1936 A(3, 0) = as<Scalar>(0.082692086657811);
1937 A(3, 1) = as<Scalar>(0.139958502191896);
1938 A(3, 2) = as<Scalar>(0.251891774271693);
1939 A(3, 3) = A(2, 4) = zero;
1941 A(4, 0) = as<Scalar>(0.067966283637115);
1942 A(4, 1) = as<Scalar>(0.115034698504632);
1943 A(4, 2) = as<Scalar>(0.207034898597385);
1944 A(4, 3) = as<Scalar>(0.544974750228520);
1948 b(0) = as<Scalar>(0.146811876084786);
1949 b(1) = as<Scalar>(0.248482909444976);
1950 b(2) = as<Scalar>(0.104258830331980);
1951 b(3) = as<Scalar>(0.274438900901350);
1952 b(4) = as<Scalar>(0.226007483236908);
1957 c(2) = A(2, 0) + A(2, 1);
1958 c(3) = A(3, 0) + A(3, 1) + A(3, 2);
1959 c(4) = A(4, 0) + A(4, 1) + A(4, 2) + A(4, 3);
1962 bstar(0) = as<Scalar>(0.130649104813131);
1963 bstar(1) = as<Scalar>(0.317716031201302);
1964 bstar(2) = as<Scalar>(0.000000869337261);
1965 bstar(3) = as<Scalar>(0.304581512634772);
1966 bstar(4) = as<Scalar>(0.247052482013534);
1971 this->
tableau_->setTVDCoeff(sspcoef);
1977 template <
class Scalar>
1983 stepper->setStepperRKValues(pl);
1985 if (model != Teuchos::null) {
1986 stepper->setModel(model);
1987 stepper->initialize();
2023 template <
class Scalar>
2039 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2043 const int orderMin,
const int orderMax,
2050 this->
setTableau(A, b, c, order, orderMin, orderMax, bstar);
2053 this->
tableau_->isImplicit() ==
true, std::logic_error,
2054 "Error - General ERK received an implicit Butcher Tableau!\n");
2056 this->
setup(appModel, useFSAL, ICConsistency, ICConsistencyCheck,
2057 useEmbedded, stepperRKAppAction);
2062 std::stringstream Description;
2065 <<
"The format of the Butcher Tableau parameter list is\n"
2066 <<
" <Parameter name=\"A\" type=\"string\" value=\"# # # ;\n"
2069 <<
" <Parameter name=\"b\" type=\"string\" value=\"# # #\"/>\n"
2070 <<
" <Parameter name=\"c\" type=\"string\" value=\"# # #\"/>\n\n"
2071 <<
"Note the number of stages is implicit in the number of entries.\n"
2072 <<
"The number of stages must be consistent.\n"
2074 <<
"Default tableau is RK4 (order=4):\n"
2075 <<
"c = [ 0 1/2 1/2 1 ]'\n"
2080 <<
"b = [ 1/6 1/3 1/3 1/6 ]'";
2081 return Description.str();
2086 if (this->
tableau_ == Teuchos::null) {
2089 auto t = stepper->getTableau();
2092 t->orderMin(), t->orderMax(), t->bstar()));
2099 const int order,
const int orderMin,
const int orderMax,
2104 this->
getStepperType(), A, b, c, order, orderMin, orderMax, bstar));
2122 std::ostringstream Astream;
2123 Astream.precision(15);
2124 for (
int i = 0; i < A.
numRows(); i++) {
2125 for (
int j = 0; j < A.
numCols() - 1; j++) {
2126 Astream << A(i, j) <<
" ";
2128 Astream << A(i, A.
numCols() - 1);
2129 if (i != A.
numRows() - 1) Astream <<
"; ";
2131 tableauPL->
set<std::string>(
"A", Astream.str());
2133 std::ostringstream bstream;
2134 bstream.precision(15);
2135 for (
int i = 0; i < b.
length() - 1; i++) {
2136 bstream << b(i) <<
" ";
2138 bstream << b(b.
length() - 1);
2139 tableauPL->
set<std::string>(
"b", bstream.str());
2141 std::ostringstream cstream;
2142 cstream.precision(15);
2143 for (
int i = 0; i < c.
length() - 1; i++) {
2144 cstream << c(i) <<
" ";
2146 cstream << c(c.
length() - 1);
2147 tableauPL->
set<std::string>(
"c", cstream.str());
2149 tableauPL->
set<
int>(
"order", this->
tableau_->order());
2151 if (bstar.
length() == 0) {
2152 tableauPL->
set(
"bstar",
"");
2155 std::ostringstream bstarstream;
2156 bstarstream.precision(15);
2157 for (
int i = 0; i < bstar.
length() - 1; i++) {
2158 bstarstream << bstar(i) <<
" ";
2160 bstarstream << bstar(bstar.
length() - 1);
2161 tableauPL->
set<std::string>(
"bstar", bstarstream.str());
2164 pl->
set(
"Tableau", *tableauPL);
2172 template <
class Scalar>
2178 stepper->setStepperRKValues(pl);
2180 if (pl != Teuchos::null) {
2182 auto t = stepper->createTableau(pl);
2183 stepper->setTableau(t->A(), t->b(), t->c(), t->order(), t->orderMin(),
2184 t->orderMax(), t->bstar());
2188 stepper->getTableau()->isImplicit() ==
true, std::logic_error,
2189 "Error - General ERK received an implicit Butcher Tableau!\n");
2191 if (model != Teuchos::null) {
2192 stepper->setModel(model);
2193 stepper->initialize();
2215 template <
class Scalar>
2237 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2238 bool useEmbedded,
bool zeroInitialGuess,
2244 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2245 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2250 std::ostringstream Description;
2255 return Description.str();
2262 const Scalar sspcoef = std::numeric_limits<Scalar>::max();
2269 A(0, 0) = ST::one();
2282 this->
tableau_->setTVDCoeff(sspcoef);
2288 template <
class Scalar>
2295 stepper->setStepperDIRKValues(pl);
2297 if (model != Teuchos::null) {
2298 stepper->setModel(model);
2299 stepper->initialize();
2330 template <
class Scalar>
2341 const Scalar one = ST::one();
2343 Teuchos::as<Scalar>((2 * one - ST::squareroot(2 * one)) / (2 * one));
2358 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2359 bool useEmbedded,
bool zeroInitialGuess,
2361 Scalar gamma = Scalar(0.2928932188134524))
2364 const Scalar one = ST::one();
2366 Teuchos::as<Scalar>((2 * one - ST::squareroot(2 * one)) / (2 * one));
2372 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2373 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2387 std::ostringstream Description;
2389 <<
"Computer Methods for ODEs and DAEs\n"
2390 <<
"U. M. Ascher and L. R. Petzold\n"
2392 <<
"gamma = (2+-sqrt(2))/2\n"
2393 <<
"c = [ gamma 1 ]'\n"
2394 <<
"A = [ gamma 0 ]\n"
2395 <<
" [ 1-gamma gamma ]\n"
2396 <<
"b = [ 1-gamma gamma ]'";
2397 return Description.str();
2403 pl->template set<double>(
2405 "The default value is gamma = (2-sqrt(2))/2. "
2406 "This will produce an L-stable 2nd order method with the stage "
2407 "times within the timestep. Other values of gamma will still "
2408 "produce an L-stable scheme, but will only be 1st order accurate.");
2422 const Scalar one = ST::one();
2423 const Scalar zero = ST::zero();
2428 A(1, 0) = Teuchos::as<Scalar>(one -
gamma_);
2432 b(0) = Teuchos::as<Scalar>(one -
gamma_);
2453 template <
class Scalar>
2460 stepper->setStepperDIRKValues(pl);
2462 if (pl != Teuchos::null)
2463 stepper->setGamma(pl->
get<
double>(
"gamma", 0.2928932188134524));
2465 if (model != Teuchos::null) {
2466 stepper->setModel(model);
2467 stepper->initialize();
2501 template <
class Scalar>
2523 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2524 bool useEmbedded,
bool zeroInitialGuess,
2530 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2531 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2536 std::ostringstream Description;
2538 <<
"Implicit-explicit Runge-Kutta schemes and applications to\n"
2539 <<
"hyperbolic systems with relaxation\n"
2540 <<
"L Pareschi, G Russo\n"
2541 <<
"Journal of Scientific computing, 2005 - Springer\n"
2543 <<
"gamma = 1/(2+sqrt(2))\n"
2544 <<
"c = [ gamma (1-gamma) 1/2 ]'\n"
2545 <<
"A = [ gamma 0 0 ]\n"
2546 <<
" [ 1-2gamma gamma 0 ]\n"
2547 <<
" [ 1/2-gamma 0 gamma ]\n"
2548 <<
"b = [ 1/6 1/6 2/3 ]'";
2549 return Description.str();
2557 const int NumStages = 3;
2558 const int order = 2;
2559 const Scalar sspcoef = 1.0529;
2563 const Scalar one = ST::one();
2564 const Scalar zero = ST::zero();
2565 const Scalar gamma = as<Scalar>(one - (one / ST::squareroot(2 * one)));
2568 A(0, 0) = A(1, 1) = A(2, 2) = gamma;
2569 A(0, 1) = A(0, 2) = A(1, 2) = A(2, 1) = zero;
2570 A(1, 0) = as<Scalar>(one - 2 * gamma);
2571 A(2, 0) = as<Scalar>((one / (2. * one)) - gamma);
2574 b(0) = b(1) = (one / (6 * one));
2575 b(2) = (2 * one) / (3 * one);
2580 c(2) = one / (2 * one);
2585 this->
tableau_->setTVDCoeff(sspcoef);
2591 template <
class Scalar>
2598 stepper->setStepperDIRKValues(pl);
2600 if (model != Teuchos::null) {
2601 stepper->setModel(model);
2602 stepper->initialize();
2637 template <
class Scalar>
2649 const Scalar one = ST::one();
2650 gammaDefault_ = as<Scalar>((3 * one + ST::squareroot(3 * one)) / (6 * one));
2667 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2668 bool useEmbedded,
bool zeroInitialGuess,
2670 std::string gammaType =
"3rd Order A-stable",
2671 Scalar gamma = Scalar(0.7886751345948128))
2675 const Scalar one = ST::one();
2676 gammaDefault_ = as<Scalar>((3 * one + ST::squareroot(3 * one)) / (6 * one));
2684 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2685 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2691 !(gammaType ==
"3rd Order A-stable" ||
2692 gammaType ==
"2nd Order L-stable" || gammaType ==
"gamma"),
2694 "gammaType needs to be '3rd Order A-stable', '2nd Order L-stable' "
2717 std::ostringstream Description;
2719 <<
"Solving Ordinary Differential Equations I:\n"
2720 <<
"Nonstiff Problems, 2nd Revised Edition\n"
2721 <<
"E. Hairer, S. P. Norsett, and G. Wanner\n"
2722 <<
"Table 7.2, pg 207\n"
2723 <<
"gamma = (3+sqrt(3))/6 -> 3rd order and A-stable\n"
2724 <<
"gamma = (2-sqrt(2))/2 -> 2nd order and L-stable\n"
2725 <<
"c = [ gamma 1-gamma ]'\n"
2726 <<
"A = [ gamma 0 ]\n"
2727 <<
" [ 1-2*gamma gamma ]\n"
2728 <<
"b = [ 1/2 1/2 ]'";
2729 return Description.str();
2736 pl->template set<std::string>(
2738 "Valid values are '3rd Order A-stable' ((3+sqrt(3))/6.), "
2739 "'2nd Order L-stable' ((2-sqrt(2))/2) and 'gamma' (user defined). "
2740 "The default value is '3rd Order A-stable'.");
2741 pl->template set<double>(
2743 "Equal to (3+sqrt(3))/6 if 'Gamma Type' = '3rd Order A-stable', or "
2744 "(2-sqrt(2))/2 if 'Gamma Type' = '2nd Order L-stable', or "
2745 "user-defined gamma value if 'Gamma Type = 'gamma'. "
2746 "The default value is gamma = (3+sqrt(3))/6, which matches "
2747 "the default 'Gamma Type' = '3rd Order A-stable'.");
2761 const Scalar one = ST::one();
2762 const Scalar zero = ST::zero();
2769 else if (
gammaType_ ==
"2nd Order L-stable") {
2771 gamma_ = as<Scalar>((2 * one - ST::squareroot(2 * one)) / (2 * one));
2780 A(1, 0) = as<Scalar>(one - 2 *
gamma_);
2784 b(0) = as<Scalar>(one / (2 * one));
2785 b(1) = as<Scalar>(one / (2 * one));
2789 c(1) = as<Scalar>(one -
gamma_);
2804 template <
class Scalar>
2811 stepper->setStepperDIRKValues(pl);
2813 if (pl != Teuchos::null) {
2814 stepper->setGammaType(
2815 pl->
get<std::string>(
"Gamma Type",
"3rd Order A-stable"));
2816 stepper->setGamma(pl->
get<
double>(
"gamma", 0.7886751345948128));
2819 if (model != Teuchos::null) {
2820 stepper->setModel(model);
2821 stepper->initialize();
2848 template <
class Scalar>
2870 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
2871 bool useEmbedded,
bool zeroInitialGuess,
2877 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
2878 useEmbedded, zeroInitialGuess, stepperRKAppAction);
2883 std::ostringstream Description;
2885 <<
"Hammer & Hollingsworth method\n"
2886 <<
"Solving Ordinary Differential Equations I:\n"
2887 <<
"Nonstiff Problems, 2nd Revised Edition\n"
2888 <<
"E. Hairer, S. P. Norsett, and G. Wanner\n"
2889 <<
"Table 7.1, pg 205\n"
2890 <<
"c = [ 0 2/3 ]'\n"
2893 <<
"b = [ 1/4 3/4 ]'";
2894 return Description.str();
2906 const Scalar one = ST::one();
2907 const Scalar zero = ST::zero();
2912 A(1, 0) = as<Scalar>(one / (3 * one));
2913 A(1, 1) = as<Scalar>(one / (3 * one));
2916 b(0) = as<Scalar>(one / (4 * one));
2917 b(1) = as<Scalar>(3 * one / (4 * one));
2921 c(1) = as<Scalar>(2 * one / (3 * one));
2932 template <
class Scalar>
2939 stepper->setStepperDIRKValues(pl);
2941 if (model != Teuchos::null) {
2942 stepper->setModel(model);
2943 stepper->initialize();
2977 template <
class Scalar>
3003 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3004 bool useEmbedded,
bool zeroInitialGuess,
3006 Scalar theta = Scalar(0.5))
3015 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3016 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3023 "'theta' can not be zero, as it makes this stepper explicit. \n"
3024 "Try using the 'RK Forward Euler' stepper.\n");
3034 std::ostringstream Description;
3036 <<
"Non-standard finite-difference methods\n"
3037 <<
"in dynamical systems, P. Kama,\n"
3038 <<
"Dissertation, University of Pretoria, pg. 49.\n"
3039 <<
"Comment: Generalized Implicit Midpoint Method\n"
3040 <<
"c = [ theta ]'\n"
3041 <<
"A = [ theta ]\n"
3043 return Description.str();
3050 pl->template set<double>(
3052 "Valid values are 0 <= theta <= 1, where theta = 0 "
3053 "implies Forward Euler, theta = 1/2 implies implicit midpoint "
3054 "method (default), and theta = 1 implies Backward Euler. "
3055 "For theta != 1/2, this method is first-order accurate, "
3056 "and with theta = 1/2, it is second-order accurate. "
3057 "This method is A-stable, but becomes L-stable with theta=1.");
3090 template <
class Scalar>
3096 stepper->setStepperDIRKValues(pl);
3098 if (pl != Teuchos::null) {
3099 stepper->setTheta(pl->
get<
double>(
"theta", 0.5));
3102 if (model != Teuchos::null) {
3103 stepper->setModel(model);
3104 stepper->initialize();
3137 template <
class Scalar>
3163 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3164 bool useEmbedded,
bool zeroInitialGuess,
3166 Scalar theta = Scalar(0.5))
3175 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3176 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3183 "'theta' can not be zero, as it makes this stepper explicit. \n"
3184 "Try using the 'RK Forward Euler' stepper.\n");
3194 std::ostringstream Description;
3196 <<
"Computer Methods for ODEs and DAEs\n"
3197 <<
"U. M. Ascher and L. R. Petzold\n"
3201 <<
" [ 1-theta theta ]\n"
3202 <<
"b = [ 1-theta theta ]'";
3203 return Description.str();
3210 pl->template set<double>(
3212 "Valid values are 0 < theta <= 1, where theta = 0 "
3213 "implies Forward Euler, theta = 1/2 implies trapezoidal "
3214 "method (default), and theta = 1 implies Backward Euler. "
3215 "For theta != 1/2, this method is first-order accurate, "
3216 "and with theta = 1/2, it is second-order accurate. "
3217 "This method is A-stable, but becomes L-stable with theta=1.");
3232 const Scalar one = ST::one();
3233 const Scalar zero = ST::zero();
3243 A(1, 0) = Teuchos::as<Scalar>(one -
theta_);
3247 b(0) = Teuchos::as<Scalar>(one -
theta_);
3270 template <
class Scalar>
3276 stepper->setStepperDIRKValues(pl);
3278 if (pl != Teuchos::null) {
3279 stepper->setTheta(pl->
get<
double>(
"theta", 0.5));
3282 if (model != Teuchos::null) {
3283 stepper->setModel(model);
3284 stepper->initialize();
3311 template <
class Scalar>
3333 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3334 bool useEmbedded,
bool zeroInitialGuess,
3340 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3341 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3346 std::ostringstream Description;
3348 <<
"Also known as Crank-Nicolson Method.\n"
3352 <<
"b = [ 1/2 1/2 ]'";
3353 return Description.str();
3366 const Scalar one = ST::one();
3367 const Scalar zero = ST::zero();
3368 const Scalar onehalf = ST::one() / (2 * ST::one());
3400 template <
class Scalar>
3409 if (pl != Teuchos::null) {
3411 pl->
get<std::string>(
"Stepper Type", stepper->getStepperType());
3414 stepperType != stepper->getStepperType() &&
3415 stepperType !=
"RK Crank-Nicolson",
3417 " ParameterList 'Stepper Type' (='" + stepperType
3418 <<
"')\n does not match type for this Stepper (='"
3419 << stepper->getStepperType()
3420 <<
"')\n or one of its aliases ('RK Crank-Nicolson').\n");
3423 pl->
set<std::string>(
"Stepper Type", stepper->getStepperType());
3426 stepper->setStepperDIRKValues(pl);
3428 if (model != Teuchos::null) {
3429 stepper->setModel(model);
3430 stepper->initialize();
3463 template <
class Scalar>
3485 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3486 bool useEmbedded,
bool zeroInitialGuess,
3492 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3493 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3498 std::ostringstream Description;
3501 <<
"Solving Ordinary Differential Equations II:\n"
3502 <<
"Stiff and Differential-Algebraic Problems,\n"
3503 <<
"2nd Revised Edition\n"
3504 <<
"E. Hairer and G. Wanner\n"
3505 <<
"Table 5.2, pg 72\n"
3506 <<
"Solving Ordinary Differential Equations I:\n"
3507 <<
"Nonstiff Problems, 2nd Revised Edition\n"
3508 <<
"E. Hairer, S. P. Norsett, and G. Wanner\n"
3509 <<
"Table 7.1, pg 205\n"
3513 return Description.str();
3524 const Scalar onehalf = ST::one() / (2 * ST::one());
3525 const Scalar one = ST::one();
3547 template <
class Scalar>
3554 stepper->setStepperDIRKValues(pl);
3556 if (model != Teuchos::null) {
3557 stepper->setModel(model);
3558 stepper->initialize();
3585 template <
class Scalar>
3602 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3603 bool useEmbedded,
bool zeroInitialGuess,
3609 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3610 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3615 std::ostringstream Description;
3617 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3618 "(stage=2, order=2)\n"
3620 <<
"c = [ 1/4 3/4 ]'\n"
3623 <<
"b = [ 1/2 1/2 ]\n"
3625 return Description.str();
3633 const int NumStages = 2;
3634 const int order = 2;
3639 const Scalar one = ST::one();
3640 const Scalar zero = ST::zero();
3641 const Scalar onehalf = one / (2 * one);
3642 const Scalar onefourth = one / (4 * one);
3645 A(0, 0) = A(1, 1) = onefourth;
3650 b(0) = b(1) = onehalf;
3654 c(1) = A(1, 0) + A(1, 1);
3665 template <
class Scalar>
3671 stepper->setStepperDIRKValues(pl);
3673 if (model != Teuchos::null) {
3674 stepper->setModel(model);
3675 stepper->initialize();
3703 template <
class Scalar>
3720 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3721 bool useEmbedded,
bool zeroInitialGuess,
3727 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3728 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3733 std::ostringstream Description;
3735 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3736 "(stage=3, order=2)\n"
3738 <<
"c = [ 1/6 1/2 5/6 ]'\n"
3741 <<
" [ 1/3 1/3 1/6 ]\n"
3742 <<
"b = [ 1/3 1/3 1/3 ]\n"
3744 return Description.str();
3752 const int NumStages = 3;
3753 const int order = 2;
3758 const Scalar one = ST::one();
3759 const Scalar zero = ST::zero();
3760 const Scalar onethird = one / (3 * one);
3761 const Scalar onesixth = one / (6 * one);
3764 A(0, 0) = A(1, 1) = A(2, 2) = onesixth;
3765 A(1, 0) = A(2, 0) = A(2, 1) = onethird;
3766 A(0, 1) = A(0, 2) = A(1, 2) = zero;
3769 b(0) = b(1) = b(2) = onethird;
3773 c(1) = A(1, 0) + A(1, 1);
3774 c(2) = A(2, 0) + A(2, 1) + A(2, 2);
3785 template <
class Scalar>
3791 stepper->setStepperDIRKValues(pl);
3793 if (model != Teuchos::null) {
3794 stepper->setModel(model);
3795 stepper->initialize();
3820 template <
class Scalar>
3837 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3838 bool useEmbedded,
bool zeroInitialGuess,
3844 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3845 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3850 std::ostringstream Description;
3852 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3853 "(stage=2, order=3)\n"
3854 <<
"SSP-Coef = 1 + sqrt( 3 )\n"
3855 <<
"c = [ 1/(3 + sqrt( 3 )) (1/6)(3 + sqrt( 3 )) ] '\n"
3856 <<
"A = [ 1/(3 + sqrt( 3 )) ] \n"
3857 <<
" [ 1/sqrt( 3 ) 1/(3 + sqrt( 3 )) ] \n"
3858 <<
"b = [ 1/2 1/2 ] \n"
3860 return Description.str();
3868 const int NumStages = 2;
3869 const int order = 3;
3870 const Scalar sspcoef = 2.7321;
3875 const Scalar one = ST::one();
3876 const Scalar zero = ST::zero();
3877 const Scalar onehalf = one / (2 * one);
3878 const Scalar rootthree = ST::squareroot(3 * one);
3881 A(0, 0) = A(1, 1) = one / (3 * one + rootthree);
3882 A(1, 0) = one / rootthree;
3886 b(0) = b(1) = onehalf;
3890 c(1) = A(1, 0) + A(1, 1);
3895 this->
tableau_->setTVDCoeff(sspcoef);
3901 template <
class Scalar>
3907 stepper->setStepperDIRKValues(pl);
3909 if (model != Teuchos::null) {
3910 stepper->setModel(model);
3911 stepper->initialize();
3939 template <
class Scalar>
3956 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
3957 bool useEmbedded,
bool zeroInitialGuess,
3963 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
3964 useEmbedded, zeroInitialGuess, stepperRKAppAction);
3969 std::ostringstream Description;
3971 <<
"Strong Stability Preserving Diagonally-Implicit RK "
3972 "(stage=3, order=3)\n"
3973 <<
"SSP-Coef = 2 + 2 sqrt(2)\n"
3974 <<
"c = [ 1/( 4 + 2 sqrt(2) 1/2 (1/4)(2 + "
3976 <<
"A = [ 1/( 4 + 2 sqrt(2) "
3978 <<
" [ 1/(2 sqrt(2) 1/( 4 + 2 sqrt(2) "
3980 <<
" [ 1/(2 sqrt(2) 1/(2 sqrt(2) 1/( 4 + 2 "
3982 <<
"b = [ 1/3 1/3 1/3 "
3985 return Description.str();
3993 const int NumStages = 3;
3994 const int order = 3;
3995 const Scalar sspcoef = 4.8284;
4000 const Scalar one = ST::one();
4001 const Scalar zero = ST::zero();
4002 const Scalar onethird = one / (3 * one);
4003 const Scalar rootwo = ST::squareroot(2 * one);
4006 A(0, 0) = A(1, 1) = A(2, 2) = one / (4 * one + 2 * rootwo);
4007 A(1, 0) = A(2, 0) = A(2, 1) = one / (2 * rootwo);
4008 A(0, 1) = A(0, 2) = A(1, 2) = zero;
4011 b(0) = b(1) = b(2) = onethird;
4015 c(1) = A(1, 0) + A(1, 1);
4016 c(2) = A(2, 0) + A(2, 1) + A(2, 2);
4021 this->
tableau_->setTVDCoeff(sspcoef);
4027 template <
class Scalar>
4033 stepper->setStepperDIRKValues(pl);
4035 if (model != Teuchos::null) {
4036 stepper->setModel(model);
4037 stepper->initialize();
4064 template <
class Scalar>
4086 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4087 bool useEmbedded,
bool zeroInitialGuess,
4093 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4094 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4099 std::ostringstream Description;
4102 <<
"Solving Ordinary Differential Equations II:\n"
4103 <<
"Stiff and Differential-Algebraic Problems,\n"
4104 <<
"2nd Revised Edition\n"
4105 <<
"E. Hairer and G. Wanner\n"
4106 <<
"Table 5.3, pg 73\n"
4110 return Description.str();
4121 const Scalar one = ST::one();
4122 const Scalar zero = ST::zero();
4131 order, order, emptyBStar,
false));
4137 template <
class Scalar>
4144 stepper->setStepperDIRKValues(pl);
4146 if (model != Teuchos::null) {
4147 stepper->setModel(model);
4148 stepper->initialize();
4177 template <
class Scalar>
4188 this->
setStepperName(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4189 this->
setStepperType(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4200 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4201 bool useEmbedded,
bool zeroInitialGuess,
4204 this->
setStepperName(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4205 this->
setStepperType(
"RK Implicit 2 Stage 2nd order Lobatto IIIB");
4207 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4208 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4213 std::ostringstream Description;
4216 <<
"Solving Ordinary Differential Equations II:\n"
4217 <<
"Stiff and Differential-Algebraic Problems,\n"
4218 <<
"2nd Revised Edition\n"
4219 <<
"E. Hairer and G. Wanner\n"
4220 <<
"Table 5.9, pg 76\n"
4222 <<
"A = [ 1/2 0 ]\n"
4224 <<
"b = [ 1/2 1/2 ]'";
4225 return Description.str();
4237 const Scalar zero = ST::zero();
4238 const Scalar one = ST::one();
4241 A(0, 0) = as<Scalar>(one / (2 * one));
4243 A(1, 0) = as<Scalar>(one / (2 * one));
4247 b(0) = as<Scalar>(one / (2 * one));
4248 b(1) = as<Scalar>(one / (2 * one));
4258 order, order, emptyBStar,
false));
4259 this->tableau_->setTVD(
true);
4260 this->tableau_->setTVDCoeff(2.0);
4266 template <
class Scalar>
4274 stepper->setStepperDIRKValues(pl);
4276 if (model != Teuchos::null) {
4277 stepper->setModel(model);
4278 stepper->initialize();
4310 template <
class Scalar>
4332 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4333 bool useEmbedded,
bool zeroInitialGuess,
4339 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4340 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4345 std::ostringstream Description;
4348 <<
"Solving Ordinary Differential Equations II:\n"
4349 <<
"Stiff and Differential-Algebraic Problems,\n"
4350 <<
"2nd Revised Edition\n"
4351 <<
"E. Hairer and G. Wanner\n"
4353 <<
"c = [ 1/4 3/4 11/20 1/2 1 ]'\n"
4356 <<
" [ 17/50 -1/25 1/4 ]\n"
4357 <<
" [ 371/1360 -137/2720 15/544 1/4 ]\n"
4358 <<
" [ 25/24 -49/48 125/16 -85/12 1/4 ]\n"
4359 <<
"b = [ 25/24 -49/48 125/16 -85/12 1/4 ]'";
4361 return Description.str();
4373 const Scalar zero = ST::zero();
4374 const Scalar one = ST::one();
4375 const Scalar onequarter = as<Scalar>(one / (4 * one));
4378 A(0, 0) = onequarter;
4384 A(1, 0) = as<Scalar>(one / (2 * one));
4385 A(1, 1) = onequarter;
4390 A(2, 0) = as<Scalar>(17 * one / (50 * one));
4391 A(2, 1) = as<Scalar>(-one / (25 * one));
4392 A(2, 2) = onequarter;
4396 A(3, 0) = as<Scalar>(371 * one / (1360 * one));
4397 A(3, 1) = as<Scalar>(-137 * one / (2720 * one));
4398 A(3, 2) = as<Scalar>(15 * one / (544 * one));
4399 A(3, 3) = onequarter;
4402 A(4, 0) = as<Scalar>(25 * one / (24 * one));
4403 A(4, 1) = as<Scalar>(-49 * one / (48 * one));
4404 A(4, 2) = as<Scalar>(125 * one / (16 * one));
4405 A(4, 3) = as<Scalar>(-85 * one / (12 * one));
4406 A(4, 4) = onequarter;
4409 b(0) = as<Scalar>(25 * one / (24 * one));
4410 b(1) = as<Scalar>(-49 * one / (48 * one));
4411 b(2) = as<Scalar>(125 * one / (16 * one));
4412 b(3) = as<Scalar>(-85 * one / (12 * one));
4426 c(1) = as<Scalar>(3 * one / (4 * one));
4427 c(2) = as<Scalar>(11 * one / (20 * one));
4428 c(3) = as<Scalar>(one / (2 * one));
4440 template <
class Scalar>
4447 stepper->setStepperDIRKValues(pl);
4449 if (model != Teuchos::null) {
4450 stepper->setModel(model);
4451 stepper->initialize();
4482 template <
class Scalar>
4504 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4505 bool useEmbedded,
bool zeroInitialGuess,
4511 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4512 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4517 std::ostringstream Description;
4520 <<
"Solving Ordinary Differential Equations II:\n"
4521 <<
"Stiff and Differential-Algebraic Problems,\n"
4522 <<
"2nd Revised Edition\n"
4523 <<
"E. Hairer and G. Wanner\n"
4525 <<
"gamma = (1/sqrt(3))*cos(pi/18)+1/2\n"
4526 <<
"delta = 1/(6*(2*gamma-1)^2)\n"
4527 <<
"c = [ gamma 1/2 1-gamma ]'\n"
4528 <<
"A = [ gamma ]\n"
4529 <<
" [ 1/2-gamma gamma ]\n"
4530 <<
" [ 2*gamma 1-4*gamma gamma ]\n"
4531 <<
"b = [ delta 1-2*delta delta ]'";
4532 return Description.str();
4544 const Scalar zero = ST::zero();
4545 const Scalar one = ST::one();
4546 const Scalar pi = as<Scalar>(4 * one) * std::atan(one);
4547 const Scalar gamma =
4548 as<Scalar>(one / ST::squareroot(3 * one) * std::cos(pi / (18 * one)) +
4550 const Scalar delta =
4551 as<Scalar>(one / (6 * one * std::pow(2 * gamma - one, 2 * one)));
4558 A(1, 0) = as<Scalar>(one / (2 * one) - gamma);
4562 A(2, 0) = as<Scalar>(2 * gamma);
4563 A(2, 1) = as<Scalar>(one - 4 * gamma);
4568 b(1) = as<Scalar>(one - 2 * delta);
4573 c(1) = as<Scalar>(one / (2 * one));
4574 c(2) = as<Scalar>(one - gamma);
4585 template <
class Scalar>
4592 stepper->setStepperDIRKValues(pl);
4594 if (model != Teuchos::null) {
4595 stepper->setModel(model);
4596 stepper->initialize();
4631 template <
class Scalar>
4653 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4654 bool useEmbedded,
bool zeroInitialGuess,
4660 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4661 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4666 std::ostringstream Description;
4668 <<
"Solving Ordinary Differential Equations II:\n"
4669 <<
"Stiff and Differential-Algebraic Problems,\n"
4670 <<
"2nd Revised Edition\n"
4671 <<
"E. Hairer and G. Wanner\n"
4673 <<
"c = [ (6-sqrt(6))/10 ]\n"
4674 <<
" [ (6+9*sqrt(6))/35 ]\n"
4676 <<
" [ (4-sqrt(6))/10 ]\n"
4677 <<
" [ (4+sqrt(6))/10 ]\n"
4678 <<
"A = [ A1 A2 A3 A4 A5 ]\n"
4679 <<
" A1 = [ (6-sqrt(6))/10 ]\n"
4680 <<
" [ (-6+5*sqrt(6))/14 ]\n"
4681 <<
" [ (888+607*sqrt(6))/2850 ]\n"
4682 <<
" [ (3153-3082*sqrt(6))/14250 ]\n"
4683 <<
" [ (-32583+14638*sqrt(6))/71250 ]\n"
4685 <<
" [ (6-sqrt(6))/10 ]\n"
4686 <<
" [ (126-161*sqrt(6))/1425 ]\n"
4687 <<
" [ (3213+1148*sqrt(6))/28500 ]\n"
4688 <<
" [ (-17199+364*sqrt(6))/142500 ]\n"
4691 <<
" [ (6-sqrt(6))/10 ]\n"
4692 <<
" [ (-267+88*sqrt(6))/500 ]\n"
4693 <<
" [ (1329-544*sqrt(6))/2500 ]\n"
4697 <<
" [ (6-sqrt(6))/10 ]\n"
4698 <<
" [ (-96+131*sqrt(6))/625 ]\n"
4703 <<
" [ (6-sqrt(6))/10 ]\n"
4707 <<
" [ (16-sqrt(6))/36 ]\n"
4708 <<
" [ (16+sqrt(6))/36 ]'";
4709 return Description.str();
4721 const Scalar zero = ST::zero();
4722 const Scalar one = ST::one();
4723 const Scalar sqrt6 = ST::squareroot(as<Scalar>(6 * one));
4724 const Scalar gamma =
4725 as<Scalar>((6 * one - sqrt6) / (10 * one));
4734 A(1, 0) = as<Scalar>((-6 * one + 5 * one * sqrt6) / (14 * one));
4740 A(2, 0) = as<Scalar>((888 * one + 607 * one * sqrt6) / (2850 * one));
4741 A(2, 1) = as<Scalar>((126 * one - 161 * one * sqrt6) / (1425 * one));
4746 A(3, 0) = as<Scalar>((3153 * one - 3082 * one * sqrt6) / (14250 * one));
4747 A(3, 1) = as<Scalar>((3213 * one + 1148 * one * sqrt6) / (28500 * one));
4748 A(3, 2) = as<Scalar>((-267 * one + 88 * one * sqrt6) / (500 * one));
4752 A(4, 0) = as<Scalar>((-32583 * one + 14638 * one * sqrt6) / (71250 * one));
4753 A(4, 1) = as<Scalar>((-17199 * one + 364 * one * sqrt6) / (142500 * one));
4754 A(4, 2) = as<Scalar>((1329 * one - 544 * one * sqrt6) / (2500 * one));
4755 A(4, 3) = as<Scalar>((-96 * one + 131 * sqrt6) / (625 * one));
4761 b(2) = as<Scalar>(one / (9 * one));
4762 b(3) = as<Scalar>((16 * one - sqrt6) / (36 * one));
4763 b(4) = as<Scalar>((16 * one + sqrt6) / (36 * one));
4767 c(1) = as<Scalar>((6 * one + 9 * one * sqrt6) / (35 * one));
4769 c(3) = as<Scalar>((4 * one - sqrt6) / (10 * one));
4770 c(4) = as<Scalar>((4 * one + sqrt6) / (10 * one));
4781 template <
class Scalar>
4788 stepper->setStepperDIRKValues(pl);
4790 if (model != Teuchos::null) {
4791 stepper->setModel(model);
4792 stepper->initialize();
4817 template <
class Scalar>
4839 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4840 bool useEmbedded,
bool zeroInitialGuess,
4846 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4847 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4852 std::ostringstream Description;
4857 <<
"b = [ 1/2 1/2 ]'\n"
4858 <<
"bstar = [ 1 0 ]'";
4859 return Description.str();
4873 const Scalar one = ST::one();
4874 const Scalar zero = ST::zero();
4883 b(0) = as<Scalar>(one / (2 * one));
4884 b(1) = as<Scalar>(one / (2 * one));
4902 template <
class Scalar>
4908 stepper->setStepperDIRKValues(pl);
4910 if (model != Teuchos::null) {
4911 stepper->setModel(model);
4912 stepper->initialize();
4951 template <
class Scalar>
4973 bool useFSAL, std::string ICConsistency,
bool ICConsistencyCheck,
4974 bool useEmbedded,
bool zeroInitialGuess,
4979 const int orderMin,
const int orderMax,
4984 this->
setTableau(A, b, c, order, orderMin, orderMax, bstar);
4987 this->
tableau_->isImplicit() !=
true, std::logic_error,
4988 "Error - General DIRK did not receive a DIRK Butcher Tableau!\n");
4990 this->
setup(appModel, solver, useFSAL, ICConsistency, ICConsistencyCheck,
4991 useEmbedded, zeroInitialGuess, stepperRKAppAction);
4996 std::stringstream Description;
4999 <<
"The format of the Butcher Tableau parameter list is\n"
5000 <<
" <Parameter name=\"A\" type=\"string\" value=\"# # # ;\n"
5003 <<
" <Parameter name=\"b\" type=\"string\" value=\"# # #\"/>\n"
5004 <<
" <Parameter name=\"c\" type=\"string\" value=\"# # #\"/>\n\n"
5005 <<
"Note the number of stages is implicit in the number of entries.\n"
5006 <<
"The number of stages must be consistent.\n"
5008 <<
"Default tableau is 'SDIRK 2 Stage 2nd order':\n"
5009 <<
" Computer Methods for ODEs and DAEs\n"
5010 <<
" U. M. Ascher and L. R. Petzold\n"
5012 <<
" gamma = (2-sqrt(2))/2\n"
5013 <<
" c = [ gamma 1 ]'\n"
5014 <<
" A = [ gamma 0 ]\n"
5015 <<
" [ 1-gamma gamma ]\n"
5016 <<
" b = [ 1-gamma gamma ]'";
5017 return Description.str();
5022 if (this->
tableau_ == Teuchos::null) {
5025 auto t = stepper->getTableau();
5028 t->orderMin(), t->orderMax(), t->bstar()));
5036 const int order,
const int orderMin,
const int orderMax,
5041 this->
getStepperType(), A, b, c, order, orderMin, orderMax, bstar));
5057 std::ostringstream Astream;
5058 Astream.precision(15);
5059 for (
int i = 0; i < A.
numRows(); i++) {
5060 for (
int j = 0; j < A.
numCols() - 1; j++) {
5061 Astream << A(i, j) <<
" ";
5063 Astream << A(i, A.
numCols() - 1);
5064 if (i != A.
numRows() - 1) Astream <<
"; ";
5066 tableauPL->
set<std::string>(
"A", Astream.str());
5068 std::ostringstream bstream;
5069 bstream.precision(15);
5070 for (
int i = 0; i < b.
length() - 1; i++) {
5071 bstream << b(i) <<
" ";
5073 bstream << b(b.
length() - 1);
5074 tableauPL->
set<std::string>(
"b", bstream.str());
5076 std::ostringstream cstream;
5077 cstream.precision(15);
5078 for (
int i = 0; i < c.
length() - 1; i++) {
5079 cstream << c(i) <<
" ";
5081 cstream << c(c.
length() - 1);
5082 tableauPL->
set<std::string>(
"c", cstream.str());
5084 tableauPL->
set<
int>(
"order", this->
tableau_->order());
5086 if (bstar.
length() == 0) {
5087 tableauPL->
set(
"bstar",
"");
5090 std::ostringstream bstarstream;
5091 bstarstream.precision(15);
5092 for (
int i = 0; i < bstar.
length() - 1; i++) {
5093 bstarstream << bstar(i) <<
" ";
5095 bstarstream << bstar(bstar.
length() - 1);
5096 tableauPL->
set<std::string>(
"bstar", bstarstream.str());
5099 pl->
set(
"Tableau", *tableauPL);
5107 template <
class Scalar>
5113 stepper->setStepperDIRKValues(pl);
5115 if (pl != Teuchos::null) {
5117 auto t = stepper->createTableau(pl);
5118 stepper->setTableau(t->A(), t->b(), t->c(), t->order(), t->orderMin(),
5119 t->orderMax(), t->bstar());
5123 stepper->getTableau()->isDIRK() !=
true, std::logic_error,
5124 "Error - General DIRK did not receive a DIRK Butcher Tableau!\n");
5126 if (model != Teuchos::null) {
5127 stepper->setModel(model);
5128 stepper->initialize();
5136 #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)
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
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.
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.