![]() |
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.