3 ExtendedButcherTableau::ExtendedButcherTableau(
const std::string &mname,
5 unsigned int xorderHat):_name(mname),
11 const std::string & ExtendedButcherTableau::name()
const {
17 unsigned int ExtendedButcherTableau::order()
const{
21 unsigned int ExtendedButcherTableau::orderHat()
const{
27 unsigned int ExtendedButcherTableau::nSteps()
const{
28 return (
unsigned int)_A.size();
34 #if __GNUC__ > 3 && __GNUC_MINOR__ > 6 35 #pragma GCC diagnostic push 36 #pragma GCC diagnostic ignored "-Wshadow" 39 #pragma GCC diagnostic push 40 #pragma GCC diagnostic ignored "-Wshadow" 43 #if defined __INTEL_COMPILER 45 #pragma warning disable 1599 48 #pragma clang diagnostic push 49 #pragma clang diagnostic ignored "-Wshadow" 52 double & ExtendedButcherTableau::A(
unsigned int i,
unsigned int j) {
54 if (i>=(
unsigned int)_A.size()) {
55 unsigned int newSize=i+1;
56 for (
unsigned long ii=0;ii<_A.size();ii++) {
57 _A[ii].resize(newSize,0.0);
59 for (
unsigned int ii=(
unsigned int)_A.size();ii<newSize;ii++) {
60 _A.push_back(std::vector<double>(newSize,0));
63 if (j>=(
unsigned int)_A[i].size()) {
64 unsigned int newSize=j+1;
65 for (
unsigned long ii=0;ii<_A.size();ii++) {
66 _A[ii].resize(newSize,0.0);
74 #if __GNUC__ > 3 && __GNUC_MINOR__ > 6 75 #pragma GCC diagnostic pop 78 #pragma GCC diagnostic pop 81 #if defined __INTEL_COMPILER 85 #pragma clang diagnostic pop 88 double & ExtendedButcherTableau::b(
unsigned int i){
89 if (i>=(
unsigned int)_b.size()) _b.resize(i+1);
93 double & ExtendedButcherTableau::bHat(
unsigned int i){
94 if (i>=(
unsigned int)_bHat.size()) _bHat.resize(i+1);
98 double & ExtendedButcherTableau::c(
unsigned int i){
99 if (i>=(
unsigned int)_c.size()) _c.resize(i+1);
103 const double & ExtendedButcherTableau::A(
unsigned int i,
unsigned int j)
const{
107 const double & ExtendedButcherTableau::b(
unsigned int i)
const{
111 const double & ExtendedButcherTableau::bHat(
unsigned int i)
const{
115 const double & ExtendedButcherTableau::c(
unsigned int i)
const{
120 std::ostream &
operator << (std::ostream & o,
const Genfun::ExtendedButcherTableau & b) {
121 o <<
"Name " << b.name() <<
" of order " << b.order() << std::endl;
122 o <<
"A" << std::endl;
123 for (
unsigned int i=0;i<b.nSteps();i++) {
124 for (
unsigned int j=0;j<b.nSteps();j++) {
125 o << b.A(i,j) <<
" ";
130 o <<
"c" << std::endl;
131 for (
unsigned int j=0;j<b.nSteps();j++) {
132 o << b.c(j) << std::endl;
135 o <<
"b" << std::endl;
136 for (
unsigned int j=0;j<b.nSteps();j++) {
140 o <<
"bHat" << std::endl;
141 for (
unsigned int j=0;j<b.nSteps();j++) {
142 o << b.bHat(j) <<
" ";
152 HeunEulerXtTableau::HeunEulerXtTableau():
153 ExtendedButcherTableau(
"Heun-Euler Embedded Method", 2,1)
170 BogackiShampineXtTableau::BogackiShampineXtTableau():
171 ExtendedButcherTableau(
"Bogacki-Shampine Embedded Method", 3,2)
173 A(0,0); A(0,1); A(0,2); A(0,3);
174 A(1,0)=1/2.0; A(1,1); A(1,2); A(1,3);
175 A(2,0)=0; A(2,1)=3/4.0; A(2,2); A(2,3);
176 A(3,0)=2/9.0; A(3,1)=1/3.0; A(3,2)=4/9.0; A(3,3);
193 FehlbergRK45F2XtTableau::FehlbergRK45F2XtTableau():
194 ExtendedButcherTableau(
"FehlbergRK4(5) method formula 2", 4, 5)
196 A(0,0) ; A(0,1) ; A(0,2) ; A(0,3) ; A(0,4) ; A(0,5);
197 A(1,0)=1/4. ; A(1,1) ; A(1,2) ; A(1,3) ; A(1,4) ; A(1,5);
198 A(2,0)=3/32. ; A(2,1)=9/32. ; A(2,2) ; A(2,3) ; A(2,4) ; A(2,5);
199 A(3,0)=1932/2197. ; A(3,1)=-7020/2197. ; A(3,2)=7296/2197. ; A(3,3) ; A(3,4) ; A(3,5);
200 A(4,0)=439/216. ; A(4,1)=-8. ; A(4,2)=3680/513. ; A(4,3)=-845/4104.; A(4,4) ; A(4,5);
201 A(5,0)=-8/27. ; A(5,1)=2. ; A(5,2)=-3544/2565. ; A(5,3)=1859/4104.; A(5,4)=-11/40.; A(5,5);
220 bHat(3)=28561/56430.;
226 CashKarpXtTableau::CashKarpXtTableau():
227 ExtendedButcherTableau(
"FehlbergRK4(5) method formula 2", 4, 5) {
229 A(0,0) ; A(0,1) ; A(0,2) ; A(0,3) ; A(0,4) ; A(0,5);
230 A(1,0) = 1/5. ; A(1,1) ; A(1,2) ; A(1,3) ; A(1,4) ; A(1,5);
231 A(2,0) = 3/40. ; A(2,1)=9/40. ; A(2,2) ; A(2,3) ; A(2,4) ; A(2,5);
232 A(3,0) = 3/10. ; A(3,1)=-9/10. ; A(3,2)=6/5. ; A(3,3) ; A(3,4) ; A(3,5);
233 A(4,0) = -11/54. ; A(4,1)=5/2. ; A(4,2)=-70/27. ; A(4,3)=35/27. ; A(4,4) ; A(4,5);
234 A(5,0) = 1631/55296.; A(5,1)=175/512.; A(5,2)=575/13824.; A(5,3)=44275/110592.; A(5,4)=253/4096.; A(5,5);
252 bHat(2)=18575/48384.;
253 bHat(3)=13525/55296.;
std::ostream & operator<<(std::ostream &o, const Genfun::ExtendedButcherTableau &b)