Program Listing for File TimeDependentAdvectionField.h

Return to documentation for file (include/crpropa/advectionField/TimeDependentAdvectionField.h)

#ifndef CRPROPA_TIMEDEPENDENTADVECTIONFIELD_H
#define CRPROPA_TIMEDEPENDENTADVECTIONFIELD_H

#include "crpropa/advectionField/AdvectionField.h"

#include <string>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <sstream>

#include "crpropa/Vector3.h"
#include "crpropa/Referenced.h"
#include "crpropa/Units.h"

namespace crpropa {

class OneDimensionalTimeDependentShock: public AdvectionField {
        double v_sh; // shock speed assuming xsh = vsh * t + xsh_0
        double v1; // speed behind the shock in lab frame
        double v0; // undisturbed speed in lab frame
        double l_sh; // shock width
    double x_sh0; // shock position at t = 0
        double t_sh0; // time the shock starts to propagate, before: vsh=0
public:
        OneDimensionalTimeDependentShock(double v_sh, double v1, double v0, double l_sh);

        Vector3d getField(const Vector3d &position, const double &time=0) const;
        double getDivergence(const Vector3d &position, const double &time=0) const;

        void setShockSpeed(double v_sh);
        void setSpeeds(double v1, double v0);
        void setShockWidth(double l_sh);
        void setShockPosition(double x_sh0);
        void setShockTime(double t_sh0);

    double getVshock() const;
    double getV1() const;
    double getV0() const;
    double getShockWidth() const;
    double getShockPosition(double time) const;
    double getShockTime() const;
};

class SedovTaylorBlastWave: public AdvectionField {
        double E0;          // energy of the explosion
        double rho0;    // initial density
        double l_sh;    // shock width
public:
        SedovTaylorBlastWave(double E0, double rho0, double l_sh);
        Vector3d getField(const Vector3d &position, const double &time=0) const;
        double getDivergence(const Vector3d &position, const double &time=0) const;

        void setShockWidth(double l_sh);
        void setEnergy(double E0);
        void setDensity(double rho0);

        double getShockRadius(double time) const;
    double getShockSpeed(double time) const;
    double getShockWidth() const;
    double getEnergy() const;
    double getDensity() const;
};

} // namespace crpropa

#endif // CRPROPA_TIMEDEPENDENTADVECTIONFIELD_H