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 time += 0.0038;
00031 double timeShifted = time-0.00304575;
00032
00033 double positionShifted = 1.5;
00034 positionShifted += 0.76;
00035
00036 const double p1 = 80.0e3;
00037 const double p2 = 2.6e6;
00038 const double p3 = 0.75e6;
00039 const double vcj = 2365.0;
00040
00041 double tcj = (z+positionShifted)/vcj;
00042 double T = tcj/3.0;
00043
00044 const double initialPressure = p1;
00045
00046 if (timeShifted>tcj) {
00047 double pressure = (p2-p3)*std::exp((tcj-timeShifted)/T)+p3;
00048 return pressure-initialPressure;
00049 } else {
00050 return 0.0;
00051 }
00052
00053 }
00054 };
00055
00056
00057 struct PressurePulse {
00058
00059 double operator()(double time, double x, double y, double z) const
00060 {
00061 const double p2 = 2.6e6;
00062 const double vcj = 2365.0;
00063
00064 double tcj = (z)/vcj;
00065
00066 if (time>tcj) {
00067 return -p2;
00068 } else {
00069 return 0.0;
00070 }
00071 }
00072 };
00073
00074 #endif