1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/**
* \file GyotoBlob.h
* \brief Blob of plasma following a Star orbit, emitting synchrotron,
* with Gaussian time-evolving density and temperature
*
*/
/*
Copyright 2019 Frederic Vincent, Thibaut Paumard
This file is part of Gyoto.
Gyoto is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gyoto is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Gyoto. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GyotoBlob_H_
#define __GyotoBlob_H_
namespace Gyoto{
namespace Astrobj { class Blob; }
}
#include <GyotoMetric.h>
#include <GyotoStar.h>
#include <GyotoKappaDistributionSynchrotronSpectrum.h>
#include <GyotoPowerLawSynchrotronSpectrum.h>
#include <GyotoThermalSynchrotronSpectrum.h>
#ifdef GYOTO_USE_XERCES
#include <GyotoRegister.h>
#endif
#include <string>
/**
* \class Gyoto::Astrobj::Blob
* \brief Blob of plasma following a Star orbit, emitting synchrotron,
* with Gaussian time-evolving density and temperature
*
*/
class Gyoto::Astrobj::Blob :
public Gyoto::Astrobj::Star {
friend class Gyoto::SmartPointer<Gyoto::Astrobj::Blob>;
// Data :
// -----
private:
double numberDensity_cgs_; ///< cgs-unit number density of hotspot
double temperature_; ///< temperature of hotspot
double timeRef_M_; ///< M-unit reference time for Gaussian hotspot evolution
double timeSigma_M_; ///< M-unit temporal sigma for Gaussian hotspot evolution
double magnetizationParameter_; ///< magnetization parameter
double kappaIndex_; ///< hotspot synchrotron kappa-distribution index
SmartPointer<Spectrum::KappaDistributionSynchrotron> spectrumKappaSynch_; // kappa-distribution synchrotron spectrum
SmartPointer<Spectrum::PowerLawSynchrotron> spectrumPLSynch_; // PL-distribution synchrotron spectrum
SmartPointer<Spectrum::ThermalSynchrotron> spectrumThermalSynch_; // Thermal distribution synchrotron spectrum
std::string magneticConfig_; // Magnetic field geometry (toroidal, vertical)
std::string electronDistrib_; // Electron distribution (thermal, kappa)
// Constructors - Destructor
// -------------------------
public:
GYOTO_OBJECT; // This object has a (non-inherited) Property list
/**
* Create Blob object with undefined initial conditions. One needs to
* set the coordinate system, the metric, and the initial position
* and velocity before integrating the orbit. setInititialCondition()
* can be used for that.
*/
Blob(); ///< Default constructor
Blob(const Blob& orig); ///< Copy constructor
virtual Blob * clone() const ;
virtual ~Blob() ; ///< Destructor
public:
void electronDistribution(const std::string &kind);
std::string electronDistribution() const;
virtual std::string className() const ; ///< "Blob"
virtual std::string className_l() const ; ///< "inflate_star"
public:
double numberDensity() const;
double numberDensity(std::string const &unit) const;
void numberDensity(double ne);
void numberDensity(double dens, std::string const &unit);
double temperature() const;
void temperature(double tt);
double timeRef() const;
double timeRef(std::string const &unit) const;
void timeRef(double tt);
void timeRef(double tt, std::string const &unit);
double timeSigma() const;
double timeSigma(std::string const &unit) const;
void timeSigma(double tt);
void timeSigma(double tt, std::string const &unit);
void magnetizationParameter(double rr);
double magnetizationParameter() const;
double kappaIndex() const;
void kappaIndex(double);
void magneticConfiguration(std::string config);
std::string magneticConfiguration() const;
virtual void radiativeQ(double Inu[], double Taunu[],
double const nu_em[], size_t nbnu,
double dsem, state_t const &coord_ph,
double const coord_obj[8]=NULL) const ;
virtual void radiativeQ(double Inu[], double Qnu[], double Unu[],
double Vnu[], Eigen::Matrix4d Onu[],
double const nu_ems[], size_t nbnu, double dsem,
state_t const &coord_ph, double const coord_obj[8]) const;
};
#endif
|