/usr/include/Gyoto/GyotoDynamicalDisk3D.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 156 157 158 159 | /**
* \file GyotoDynamicalDisk3D.h
* \brief A geometrically thick, optically thin disk, evolving dynamically,
* with black body emission.
*
* The disk is described by a set of FITS files for a set of different times
*/
/*
Copyright 2011-2015 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 __GyotoDynamicalDisk3D_H_
#define __GyotoDynamicalDisk3D_H_
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
namespace Gyoto{
namespace Astrobj { class DynamicalDisk3D; }
}
#include <GyotoDisk3D.h>
#include <GyotoBlackBodySpectrum.h>
/**
* \class Gyoto::Astrobj::DynamicalDisk3D
* \brief Geometrically thick optically thin disk
* read from a set of FITS files.
*
* This class describes a PatternDiskBB that evolves dynamically.
* It is described by a set of FITS files for different times.
* Its emission is blackbody.
*
* The disk is assumed to be described by a regular,
* constant in time, grid.
*
* The metric must be Kerr in BL coordinates.
*
*/
class Gyoto::Astrobj::DynamicalDisk3D : public Astrobj::Disk3D {
friend class Gyoto::SmartPointer<Gyoto::Astrobj::DynamicalDisk3D>;
protected:
SmartPointer<Spectrum::BlackBody> spectrumBB_; ///< disk black body
///< emission law
private:
bool temperature_; ///< 1 if temperature is given in fits data file, 0 if emission coef is directly given
char* dirname_; ///< FITS files directory
double tinit_; ///< Time of the first FITS file
double dt_; ///< Time increment between two FITS (assumed constant)
int nb_times_; ///< Number of times
double PLindex_; ///< power law index such that density_elec(E) ∝ E<SUP>-p</SUP>
bool novel_; ///< put to true if velocity of emitting particle is not provided
double floortemperature_; ///< if non-zero, emission and absorption are 0 for temperatures below this floor, emission=blackbody and absorption is infty for temperatures above (this is a kind of fake optically thick case, when the emitting surface is inside the grid, not at the boundary of the grid)
/**
* An array of arrays of dimensionality double[nr_][nz_][nphi_][nnu_].
* In FITS format, the first dimension is nu, the second phi, the third
* z, the last r. It contains emission coef, or a closely related quantity.
*/
double ** emission_array_;
/**
* An array of arrays of dimensionality double[nr_][nz_][nphi_][nnu_].
* In FITS format, the first dimension is nu, the second phi, the third
* z, the last r. It contains absorption coef, or a closely related quantity.
*/
double ** absorption_array_;
/**
* An array of arrays of dimensionality double[nr_][nz_][nphi_][3].
* In FITS format, the second dimension is phi, and the third r.
* The first plane in the first FITS dimention is dphi/dt,
* the second dz/dt, the third dr/dt.
*/
double ** velocity_array_; ///< velocity(r, z, phi)
// Constructors - Destructor
// -------------------------
public:
GYOTO_OBJECT;
DynamicalDisk3D(); ///< Standard constructor
DynamicalDisk3D(const DynamicalDisk3D& ) ;///< Copy constructor
virtual DynamicalDisk3D* clone () const; ///< Cloner
virtual ~DynamicalDisk3D() ; ///< Destructor
// Accessors
// ---------
public:
using Generic::metric;
void metric(SmartPointer<Metric::Generic> gg);
void file(std::string const &f);
std::string file() const;
void tinit(double t);
double tinit()const;
void dt(double t);
double dt()const;
void PLindex(double t);
double PLindex()const;
void floorTemperature(double t);
double floorTemperature()const;
void temperature(bool t);
bool temperature() const;
void withVelocity(bool t);
bool withVelocity() const;
// Stuff
// -----
/// Compute emission at one grid date.
double emission1date(double nu_em, double dsem,
double c_ph[8], double c_obj[8]) const;
using Disk3D::emission;
/// Interpolate emission between grid dates.
virtual double emission(double nu_em, double dsem,
double c_ph[8], double c_obj[8]=NULL) const;
/// Compute transmission at one grid date.
double transmission1date(double nu_em, double dsem,
double c_ph[8], double c_obj[8]) const;
/// Interpolate transmission between grid dates.
double transmission(double nu_em, double dsem,
double c_obj[8]) const;
void getVelocity(double const pos[4], double vel[4]);
double const * getVelocity() const;
protected:
/// Set underlying Disk3D pointers to a specific date slice.
/**
* \param iq Index of the date slice.
*/
void copyQuantities(int iq) ;
};
#endif
|