Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

Commit c9a56148 authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

First working Rosenbrock method implementation finished, part 2.

parent 31bfafa2
#include "time/RosenbrockMethod.h"
namespace AMDiS {
void RosenbrockMethod::createData()
{
a.resize(stages);
for (int i = 0; i < stages; i++) {
a[i].resize(stages);
for (int j = 0; j < stages; j++)
a[i][j] = 0.0;
}
c.resize(stages);
for (int i = 0; i < stages; i++) {
c[i].resize(stages);
for (int j = 0; j < stages; j++)
c[i][j] = 0.0;
}
m1.resize(stages);
m2.resize(stages);
for (int i = 0; i < stages; i++) {
m1[i] = 0.0;
m2[i] = 0.0;
}
}
Ros2::Ros2()
{
order = 2;
stages = 2;
gamma = 1.707106781186547;
createData();
a[1][0] = 5.857864376269050e-01;
c[0][0] = 5.857864376269050e-01;
c[1][0] = 1.171572875253810e+00;
c[1][1] = 5.857864376269050e-01;
m1[0] = 8.786796564403575e-01;
m1[1] = 2.928932188134525e-01;
m2[0] = 5.857864376269050e-01;
}
Rowda3::Rowda3()
{
order = 3;
stages = 3;
gamma = 4.358665215084590e-01;
createData();
a[1][0] = 1.605996252195329e+00;
a[2][0] = 1.605996252195329e+00;
c[0][0] = 2.294280360279042e+00;
c[1][0] = -8.874044410657833e-01;
c[1][1] = 2.294280360279042e+00;
c[2][0] = -2.398747971635036e+01;
c[2][1] = -5.263722371562129e+00;
c[2][2] = 2.294280360279042e+00;
m1[0] = 2.236727045296590e+00;
m1[1] = 2.250067730969644e+00;
m1[2] = -2.092514044390320e-01;
m2[0] = 2.059356167645940e+00;
m2[1] = 1.694014319346528e-01;
}
Ros3p::Ros3p()
{
order = 3;
stages = 3;
gamma = 7.886751345948129e-01;
createData();
a[1][0] = 1.267949192431123e+00;
a[2][0] = 1.267949192431123e+00;
c[0][0] = 1.267949192431123e+00;
c[1][0] = 1.607695154586739e+00;
c[1][1] = 1.267949192431123e+00;
c[2][0] = 3.462101615137755e+00;
c[2][1] = 1.732050807568877e+00;
c[2][2] = 1.267949192431123e+00;
m1[0] = 2.0;
m1[1] = 5.773502691896258e-01;
m1[2] = 4.226497308103742e-01;
m2[0] = 2.113248654051871e+00;
m2[1] = 1.0;
m2[2] = 4.226497308103742e-01;
}
Rodasp::Rodasp()
{
order = 4;
stages = 6;
gamma = 2.5e-01;
createData();
a[1][0] = 3.0;
a[2][0] = 1.831036793486759e+00;
a[2][1] = 4.955183967433795e-01;
a[3][0] = 2.304376582692669e+00;
a[3][1] = -5.249275245743001e-02;
a[3][2] = -1.176798761832782e+00;
a[4][0] = -7.170454962423025e+00;
a[4][1] = -4.741636671481786e+00;
a[4][2] = -1.631002631330971e+01;
a[4][3] = -1.062004044111401e+00;
a[5][0] = -7.170454962423025e+00;
a[5][1] = -4.741636671481785e+00;
a[5][2] = -1.631002631330971e+01;
a[5][3] = -1.062004044111401e+00;
a[5][4] = 1.0;
c[0][0] = 4.0;
c[1][0] = 1.200000000000000e+01;
c[1][1] = 4.0;
c[2][0] = 8.791795173947035e+00;
c[2][1] = 2.207865586973518e+00;
c[2][2] = 4.0;
c[3][0] = -1.081793056857153e+01;
c[3][1] = -6.780270611428266e+00;
c[3][2] = -1.953485944642410e+01;
c[3][3] = 4.0;
c[4][0] = -3.419095006749677e+01;
c[4][1] = -1.549671153725963e+01;
c[4][2] = -5.474760875964130e+01;
c[4][3] = -1.416005392148534e+01;
c[4][4] = 4.0;
c[5][0] = -3.462605830930533e+01;
c[5][1] = -1.530084976114473e+01;
c[5][2] = -5.699955578662667e+01;
c[5][3] = -1.840807009793095e+01;
c[5][4] = 5.714285714285717e+00;
c[5][5] = 4.0;
m1[0] = -7.170454962423026e+00;
m1[1] = -4.741636671481786e+00;
m1[2] = -1.631002631330971e+01;
m1[3] = -1.062004044111401e+00;
m1[4] = 1.0;
m1[5] = 1.0;
m2[0] = -7.170454962423026e+00;
m2[1] = -4.741636671481786e+00;
m2[2] = -1.631002631330971e+01;
m2[3] = -1.062004044111401e+00;
m2[4] = 1.0;
}
}
// ============================================================================
// == ==
// == AMDiS - Adaptive multidimensional simulations ==
// == ==
// ============================================================================
// == ==
// == TU Dresden ==
// == ==
// == Institut fr Wissenschaftliches Rechnen ==
// == Zellescher Weg 12-14 ==
// == 01069 Dresden ==
// == germany ==
// == ==
// ============================================================================
// == ==
// == https://gforge.zih.tu-dresden.de/projects/amdis/ ==
// == ==
// ============================================================================
/** \file RosenbrochMethod.h */
#ifndef AMDIS_ROSENBROCKMETHOD_H
#define AMDIS_ROSENBROCKMETHOD_H
#include "AMDiS_fwd.h"
#include "CreatorInterface.h"
namespace AMDiS {
class RosenbrockMethod
{
public:
RosenbrockMethod() {}
virtual ~RosenbrockMethod() {}
inline int getOrder()
{
return order;
}
inline int getStages()
{
return stages;
}
inline double getGamma()
{
return gamma;
}
inline double getA(int i, int j)
{
return a[i][j];
}
inline double getC(int i, int j)
{
return c[i][j];
}
inline double getM1(int i)
{
return m1[i];
}
inline double getM2(int i)
{
return m2[i];
}
protected:
void createData();
protected:
int order;
int stages;
double gamma;
std::vector<std::vector<double> > a;
std::vector<std::vector<double> > c;
std::vector<double> m1;
std::vector<double> m2;
};
class RosenbrockMethodCreator : public CreatorInterface<RosenbrockMethod>
{
public:
RosenbrockMethodCreator()
{}
};
class Ros2 : public RosenbrockMethod
{
public:
class Creator : public RosenbrockMethodCreator
{
public:
Creator() : RosenbrockMethodCreator() {}
~Creator() {}
RosenbrockMethod* create()
{
return new Ros2();
}
};
Ros2();
~Ros2() {}
};
class Rowda3 : public RosenbrockMethod
{
public:
class Creator : public RosenbrockMethodCreator
{
public:
Creator() : RosenbrockMethodCreator() {}
~Creator() {}
RosenbrockMethod* create()
{
return new Rowda3();
}
};
Rowda3();
~Rowda3() {}
};
class Ros3p : public RosenbrockMethod
{
public:
class Creator : public RosenbrockMethodCreator
{
public:
Creator() : RosenbrockMethodCreator() {}
~Creator() {}
RosenbrockMethod* create()
{
return new Ros3p();
}
};
Ros3p();
~Ros3p() {}
};
class Rodasp : public RosenbrockMethod
{
public:
class Creator : public RosenbrockMethodCreator
{
public:
Creator() : RosenbrockMethodCreator() {}
~Creator() {}
RosenbrockMethod* create()
{
return new Rodasp();
}
};
Rodasp();
~Rodasp() {}
};
}
#endif // AMDIS_ROSENBROCKMETHOD_H
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment