/usr/include/Gyoto/GyotoThinDisk.h is in libgyoto2-dev 0.2.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | /**
* \file GyotoThinDisk.h
* \brief Geometrically thin disks and rings
*
* Gyoto::Astrobj::ThinDisk is a class to represent geometrically
* thin, optically thick or thin disks or rings in the equatorial
* plane of the object. It therefore assumes the metric has an
* equatorial plane, which orresponds to z==0 in a Cartesian
* coordinate system or to theta==M_PI/2 in a sperical coordinate
* system.
*
* This calls is not abstract and can be used as is (it keeps the
* very simplistic Generic::emission() and Generci::transmission()),
* but it is also a base class to develop classes with more complex
* emission laws.
*
*/
/*
Copyright 2011 Thibaut Paumard, Frederic Vincent
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 __GyotoThinDisk_H_
#define __GyotoThinDisk_H_
namespace Gyoto{
namespace Astrobj { class ThinDisk; }
}
#include <GyotoMetric.h>
#include <GyotoAstrobj.h>
#include <GyotoSpectrum.h>
#include <GyotoFunctors.h>
#ifdef GYOTO_USE_XERCES
#include <GyotoRegister.h>
#endif
#include <string>
/**
* \class Gyoto::Astrobj::ThinDisk
* \brief Geometrically thin disks and rings
\code
<InnerRadius> rin_ </InnerRadius>
<OuterRadius> rout_ </OuterRadius>
<CounterRotating/>
\endcode
* ThinDisk::setParameter() also takes care of calling
* Generic::setParameter().
*/
class Gyoto::Astrobj::ThinDisk :
public Gyoto::Astrobj::Generic,
public Gyoto::Functor::Double_constDoubleArray
{
friend class Gyoto::SmartPointer<Gyoto::Astrobj::ThinDisk>;
// Data :
// -----
protected:
double rin_ ; ///< disk inner radius in geometrical units
double rout_ ; ///< disk outer radius in geometrical units
/**
* Geometrical thickness in geometrical units. Used only in the
* optically thin regime (flag_radtransf_==1). Should be <<
* rin_. Default: 1e-3.
*/
double thickness_; ///< disk thickness
int dir_; ///< 1 for corotating (default), -1 for counterrotating.
// Constructors - Destructor
// -------------------------
public:
/**
* Create direct ThinDisk object. When initializing a derived class,
* always set kind.
*/
ThinDisk(std::string kind="ThinDisk"); ///< Default constructor
ThinDisk(const ThinDisk& orig); ///< Copy constructor
virtual ThinDisk* clone () const ;
virtual ~ThinDisk() ; ///< Destructor
// Accessors
// ---------
public:
virtual double getInnerRadius() const ; ///< Get rin_
virtual double getInnerRadius(std::string unit) const ; ///< Get rin_
virtual void setInnerRadius(double); ///< Set rin_
virtual void setInnerRadius(double, std::string unit); ///< Set rin_
virtual double getOuterRadius() const ; ///< Get rout_
virtual double getOuterRadius(std::string unit) const ; ///< Get rout_
virtual void setOuterRadius(double); ///< Set rout_
virtual void setOuterRadius(double, std::string unit); ///< Set rout_
virtual double getThickness() const ; ///< Get thickness_
virtual double getThickness(std::string unit) const ; ///< Get thickness_
virtual void setThickness(double); ///< Set thickness_
virtual void setThickness(double, std::string unit); ///< Set thickness_
virtual int getDir() const ; ///< Get dir_
virtual void setDir(int); ///< Set dir_
/**
* A function which changes sign on the equatorial plane.
*/
virtual double operator()(double const coord[]) ; ///< theta-pi/2 or z
virtual double projectedRadius(double const coord[]) const ;
///< Projected radius of position coord on the equatorial plane
virtual double sphericalPhi(double const coord[]) const;
///< Longitude
/// Get fluid 4-velocity at point.
/**
* Fill vel with the 4-vector velocity of the fluid at 4-position
* pos. getVelocity() should work at some distance from the
* equatorial plane. The default implementation calls
* Metric::Generic::circularVelocity().
*
* \param[in] pos 4-position at which to compute velocity;
* \param[out] vel 4-velocity at pos.
*/
virtual void getVelocity(double const pos[4], double vel[4]) ;
public:
virtual int setParameter(std::string name,
std::string content,
std::string unit) ;
#ifdef GYOTO_USE_XERCES
/**
* The sub-classes implementations of the
* Astrobj::Generic::fillElement() method should call
* Astrobj::ThinDisk::fillElement() to fill the common bits.
*/
virtual void fillElement(FactoryMessenger *fmp) const ;
///< Fill the generic XML bits
#endif
public:
virtual int Impact(Gyoto::Photon* ph, size_t index,
Astrobj::Properties *data=NULL) ;
};
#endif
|