~njansson/dolfin/hpc

« back to all changes in this revision

Viewing changes to demo/ode/lorenz/main.cpp

  • Committer: Johannes Ring
  • Date: 2008-03-05 22:43:06 UTC
  • Revision ID: johannr@simula.no-20080305224306-2npsdyhfdpl2esji
The BIG commit!

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (C) 2003-2007 Anders Logg.
 
2
// Licensed under the GNU LGPL Version 2.1.
 
3
//
 
4
// First added:  2003-07-02
 
5
// Last changed: 2007-05-02
 
6
 
 
7
#include <stdio.h>
 
8
#include <dolfin.h>
 
9
 
 
10
using namespace dolfin;
 
11
 
 
12
class Lorenz : public ODE
 
13
{
 
14
public:
 
15
 
 
16
  Lorenz() : ODE(3, 50)
 
17
  {
 
18
    // Parameters
 
19
    s = 10.0;
 
20
    b = 8.0 / 3.0;
 
21
    r = 28.0;
 
22
  }
 
23
  
 
24
  void u0(uBlasVector& u)
 
25
  {
 
26
    u(0) = 1.0;
 
27
    u(1) = 0.0;
 
28
    u(2) = 0.0;
 
29
  }
 
30
 
 
31
  void f(const uBlasVector& u, real t, uBlasVector& y)
 
32
  {
 
33
    y(0) = s*(u(1) - u(0));
 
34
    y(1) = r*u(0) - u(1) - u(0)*u(2);
 
35
    y(2) = u(0)*u(1) - b*u(2);
 
36
  }
 
37
 
 
38
  void J(const uBlasVector& x, uBlasVector& y, const uBlasVector& u, real t)
 
39
  {
 
40
    y(0) = s*(x(1) - x(0));
 
41
    y(1) = (r - u(2))*x(0) - x(1) - u(0)*x(2);
 
42
    y(2) = u(1)*x(0) + u(0)*x(1) - b*x(2);
 
43
  }
 
44
 
 
45
private:
 
46
 
 
47
  // Parameters
 
48
  real s;
 
49
  real b;
 
50
  real r;
 
51
 
 
52
};
 
53
 
 
54
int main()
 
55
{
 
56
  dolfin_set("ODE number of samples", 500);
 
57
  dolfin_set("ODE initial time step", 0.01);
 
58
  dolfin_set("ODE fixed time step", true);
 
59
  dolfin_set("ODE nonlinear solver", "newton");
 
60
  dolfin_set("ODE method", "cg");
 
61
  dolfin_set("ODE order", 5);
 
62
  dolfin_set("ODE discrete tolerance", 1e-12);
 
63
  dolfin_set("ODE save solution", true);
 
64
 
 
65
  Lorenz lorenz;
 
66
  lorenz.solve();
 
67
  
 
68
  return 0;
 
69
}