Skip to content
Snippets Groups Projects
Commit 7b4790fd authored by Elias Pipping's avatar Elias Pipping Committed by Elias Pipping
Browse files

Add identity function

parent 9ee6858e
No related branches found
No related tags found
No related merge requests found
...@@ -12,6 +12,15 @@ class NiceFunction : public VirtualFunction<double, double> { ...@@ -12,6 +12,15 @@ class NiceFunction : public VirtualFunction<double, double> {
virtual double rightDifferential(const double s) const = 0; virtual double rightDifferential(const double s) const = 0;
}; };
class Identity : public NiceFunction {
public:
void virtual evaluate(const double& x, double& y) const { y = x; }
double virtual leftDifferential(const double s) const { return 1; }
double virtual rightDifferential(const double s) const { return 1; }
};
class SampleFunction : public NiceFunction { class SampleFunction : public NiceFunction {
public: public:
void virtual evaluate(const double& x, double& y) const { void virtual evaluate(const double& x, double& y) const {
......
...@@ -28,6 +28,41 @@ double functionTester(Dune::SampleFunctional<dim> J, ...@@ -28,6 +28,41 @@ double functionTester(Dune::SampleFunctional<dim> J,
return final; return final;
} }
void testIdentity() {
int const dim = 2;
typedef Dune::SampleFunctional<dim> Functional;
Functional::SmallMatrix A;
A[0][0] = 3;
A[0][1] = 1.5;
A[1][0] = 1.5;
A[1][1] = 4;
Functional::SmallVector b;
b[0] = 1;
b[1] = 2;
Dune::Identity f;
Functional J(A, b, Dune::MyNonlinearity<dim>(f));
Functional::SmallVector start = b;
start *= 17;
double const ret1 = functionTester(J, start, 6);
// Something random
start[0] = 279;
start[1] = -96;
double const ret2 = functionTester(J, start, 10);
assert(std::abs(ret1 - ret2) < 1e-5);
start[0] = 0;
start[1] = 0;
double const ret3 = functionTester(J, start, 3);
assert(std::abs(ret1 - ret3) < 1e-5);
}
void testSampleFunction() { void testSampleFunction() {
int const dim = 2; int const dim = 2;
typedef Dune::SampleFunctional<dim> Functional; typedef Dune::SampleFunctional<dim> Functional;
...@@ -331,6 +366,8 @@ void testSampleFunction2() { ...@@ -331,6 +366,8 @@ void testSampleFunction2() {
int main() { int main() {
try { try {
testIdentity();
std::cout << std::endl << std::endl << std::endl;
testSampleFunction(); testSampleFunction();
std::cout << std::endl << std::endl << std::endl; std::cout << std::endl << std::endl << std::endl;
testSampleFunctionNonsmooth(); testSampleFunctionNonsmooth();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment