00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 #ifndef DETONATIONPRESSURE_H
00014 #define DETONATIONPRESSURE_H
00015 #include <cmath>
00016 
00017 
00018 namespace cylExp {
00019     struct DetonationPressure;
00020     struct PressurePulse;
00021 }
00022 
00023 
00024 struct DetonationPressure {
00025     
00026     double operator()(double time, double x, double y, double z) const 
00027         {
00028         
00029 
00030         const double p1 = 1.0e5;
00031         const double p2 = 3.33e6*0.95;
00032         const double p3 = 1.165e6;
00033         const double vcj = 2375.0;
00034         
00035         const double zbegin = 1.690;
00036         
00037         time += (zbegin/vcj);
00038         z += zbegin;
00039 
00040         double tcj = (z)/vcj;
00041         double T = tcj/3.0;
00042 
00043         const double initialPressure = p1;
00044 
00045         if (time>tcj) {
00046             double pressure = (p2-p3)*std::exp((tcj-time)/T)+p3;
00047             return pressure-initialPressure;
00048         } else {
00049             return p1-initialPressure;
00050         }
00051 
00052         return 0.0; 
00053     }   
00054 };
00055 
00056 #endif