vtf-logo

shells/applications/cylinderElastic/helpers/DetonationPressure.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00004 //
00005 //                                   Fehmi Cirak
00006 //                        California Institute of Technology
00007 //                           (C) 2004 All Rights Reserved
00008 //
00009 // <LicenseText>
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         // Beltman - Shepherd paper eq. A.7
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

Generated on Fri Aug 24 13:00:24 2007 for SFC Thin-Shell Finite Element Solver by  doxygen 1.4.7