/usr/include/Gyoto/GyotoThinDisk.h is in libgyoto4-dev 1.0.2-2ubuntu1.
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 | /**
* \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-2015 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:
GYOTO_OBJECT;
/**
* 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 innerRadius() const ; ///< Get rin_
virtual double innerRadius(std::string const &) const ; ///< Get rin_
virtual void innerRadius(double); ///< Set rin_
virtual void innerRadius(double, std::string const &); ///< Set rin_
virtual double outerRadius() const ; ///< Get rout_
virtual double outerRadius(std::string const &) const ; ///< Get rout_
virtual void outerRadius(double); ///< Set rout_
virtual void outerRadius(double, std::string const &); ///< Set rout_
virtual double thickness() const ; ///< Get thickness_
virtual double thickness(std::string const &) const ; ///< Get thickness_
virtual void thickness(double); ///< Set thickness_
virtual void thickness(double, std::string const&); ///< Set thickness_
virtual int dir() const ; ///< Get dir_
virtual void dir(int); ///< Set dir_
virtual bool corotating() const; /// Get dir_==1
virtual void corotating(bool t); /// Set dir_=t?1:-1
/**
* 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 Impact(Gyoto::Photon* ph, size_t index,
Astrobj::Properties *data=NULL) ;
virtual double emission(double , double, double *, double) const;
};
#endif
|