Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

TestProblem5.h

Go to the documentation of this file.
00001 // Copyright (C) 2004 Johan Hoffman and Anders Logg.
00002 // Licensed under the GNU GPL Version 2.
00003 
00004 #include <cmath>
00005 #include <dolfin.h>
00006 
00007 using namespace dolfin;
00008 
00009 class TestProblem5 : public ODE
00010 {
00011 public:
00012   
00013   TestProblem5() : ODE(6)
00014   {
00015     dolfin_info("The Chemical Akzo-Nobel problem.");
00016 
00017     // Final time
00018     T = 180;
00019 
00020     // Parameters
00021     k1  = 18.7;
00022     k2  = 0.58;
00023     k3  = 0.09;
00024     k4  = 0.42;
00025     K   = 34.4;
00026     klA = 3.3;
00027     Ks  = 115.83;
00028     p   = 0.9;
00029     H   = 737.0;
00030 
00031     // Compute sparsity
00032     sparse();
00033   }
00034 
00035   real u0(unsigned int i)
00036   {
00037     switch (i) {
00038     case 0:
00039       return 0.444;
00040     case 1:
00041       return 0.00123;
00042     case 2:
00043       return 0.0;
00044     case 3:
00045       return 0.007;
00046     case 4:
00047       return 0.0;
00048     default:
00049       return 0.36;
00050     }
00051   }
00052 
00053   real f(const Vector& u, real t, unsigned int i)
00054   {
00055     switch (i) {
00056     case 0:
00057       return -2.0*r1(u) + r2(u) - r3(u) - r4(u);
00058     case 1:
00059       return -0.5*r1(u) - r4(u) - 0.5*r5(u) + F(u);
00060     case 2:
00061       return r1(u) - r2(u) + r3(u);
00062     case 3:
00063       return -r2(u) + r3(u) - 2.0*r4(u);
00064     case 4:
00065       return r2(u) - r3(u) + r5(u);
00066     default:
00067       return Ks*u(0)*u(3) - u(5);
00068     }
00069   }
00070 
00071 private:
00072 
00073   real r1(const Vector& u)
00074   {
00075     return k1*pow(u(0),4.0)*sqrt(u(1));
00076   }
00077   
00078   real r2(const Vector& u)
00079   {
00080     return k2*u(2)*u(3);
00081   }
00082 
00083   real r3(const Vector& u)
00084   {
00085     return (k2/K)*u(0)*u(4);
00086   }
00087 
00088   real r4(const Vector& u)
00089   {
00090     return k3*u(0)*pow(u(3),2.0);
00091   }
00092 
00093   real r5(const Vector& u)
00094   {
00095     return k4*pow(u(5),2.0)*sqrt(u(1));
00096   }
00097 
00098   real F(const Vector& u)
00099   {
00100     return klA * (p/H - u(1));
00101   }
00102 
00103   real k1, k2, k3, k4, K, klA, Ks, p, H;
00104 
00105 };


Documentation automatically generated with Doxygen on 10 Sep 2004.