Gyoto
GyotoPatternDisk.h
Go to the documentation of this file.
1 
8 /*
9  Copyright 2011 Frederic Vincent, Thibaut Paumard
10 
11  This file is part of Gyoto.
12 
13  Gyoto is free software: you can redistribute it and/or modify
14  it under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  Gyoto is distributed in the hope that it will be useful,
19  but WITHOUT ANY WARRANTY; without even the implied warranty of
20  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  GNU General Public License for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with Gyoto. If not, see <http://www.gnu.org/licenses/>.
25  */
26 
27 #ifndef __GyotoPatternDisk_H_
28 #define __GyotoPatternDisk_H_
29 
30 #include <iostream>
31 #include <fstream>
32 #include <iomanip>
33 
34 namespace Gyoto{
35  namespace Astrobj { class PatternDisk; }
36 }
37 
38 //#include <GyotoMetric.h>
39 #include <GyotoThinDisk.h>
40 
52  friend class Gyoto::SmartPointer<Gyoto::Astrobj::PatternDisk>;
53  private:
54  std::string filename_;
55 
60  double * emission_;
61 
62  double * opacity_;
63 
69  double * velocity_;
70 
74  double * radius_;
75 
80  double Omega_;
81 
86  double t0_;
87 
88  double dnu_;
89  double nu0_;
91 
92  double dphi_;
93  double phimin_;
95  double phimax_;
96 
102 
103  double dr_;
105 
106 
107  // Constructors - Destructor
108  // -------------------------
109  public:
110  PatternDisk();
111 
112  PatternDisk(const PatternDisk& ) ;
113  virtual PatternDisk* clone () const;
114 
115  virtual ~PatternDisk() ;
116 
117  // Accessors
118  // ---------
119  public:
121  virtual void setInnerRadius(double);
123  virtual void setOuterRadius(double);
124 
128  virtual void patternVelocity(double);
129  virtual double patternVelocity();
130 
131 #ifdef GYOTO_USE_CFITSIO
132  virtual void fitsRead(std::string filename_);
134 
136  virtual void fitsWrite(std::string filename_);
137 #endif
138 
140 
147  void setEmission(double * pattern);
148 
150 
157  void setVelocity(double * pattern);
158 
160 
167  void radius(double * pattern);
168 
170 
186  virtual void copyIntensity(double const * const pattern = NULL,
187  size_t const naxes[3] = NULL);
188 
189  virtual double const * getIntensity() const;
190  virtual void getIntensityNaxes( size_t naxes[3] ) const ;
191 
206  virtual void copyOpacity(double const * const pattern = NULL,
207  size_t const naxes[3] = NULL);
208  virtual double const * opacity() const;
209 
211 
223  virtual void copyVelocity(double const * const pattern = NULL,
224  size_t const naxes[2] = NULL);
225  virtual double const * getVelocity() const;
226 
228 
240  virtual void copyGridRadius(double const * const pattern = NULL,
241  size_t nr = 0 );
242  virtual double const * getGridRadius() const;
243 
244  virtual void repeatPhi(size_t n);
245  virtual size_t repeatPhi() const;
246 
247  virtual void nu0(double freq);
248  virtual double nu0() const;
249 
250  virtual void dnu(double dfreq);
251  virtual double dnu() const;
252 
253  void phimin(double phimin);
254  double phimin() const;
255 
256  void phimax(double phimax);
257  double phimax() const;
258 
259  virtual int setParameter(std::string name,
260  std::string content,
261  std::string unit);
262 
263  protected:
264  void getIndices(size_t i[3], double const co[4], double nu=0.) const ;
266 
267  public:
268  using ThinDisk::emission;
269  virtual double emission(double nu_em, double dsem,
270  double c_ph[8], double c_obj[8]) const;
271  virtual double transmission(double nu_em, double dsem, double coord[8]) const;
272 
273  virtual void getVelocity(double const pos[4], double vel[4]) ;
274 
275  public:
276 #ifdef GYOTO_USE_XERCES
277  virtual void fillElement(FactoryMessenger *fmp) const ;
278  virtual void setParameters(FactoryMessenger *fmp);
279 #endif
280 
281 };
282 
283 #endif
double nu0_
Lowest frequency provided in PatternDisk::emission_ in Hz.
Definition: GyotoPatternDisk.h:89
Pointers performing reference counting.
Definition: GyotoSmartPointer.h:51
virtual void getIntensityNaxes(size_t naxes[3]) const
Get PatternDisk::nnu_, PatternDisk::nphi_, and PatternDisk::nr_.
virtual void copyOpacity(double const *const pattern=NULL, size_t const naxes[3]=NULL)
Set PatternDisk::opacity_.
virtual void setOuterRadius(double)
Set rout_.
double * velocity_
velocity(r, φ)
Definition: GyotoPatternDisk.h:69
double Omega_
Pattern angular velocity.
Definition: GyotoPatternDisk.h:80
void setVelocity(double *pattern)
Set PatternDisk::velocity__.
virtual double emission(double nu_em, double dsem, double coord_ph[8], double coord_obj[8]=NULL) const
Specific intensity Iν
size_t nnu_
Number of frequencies provided in PatternDisk::emission_.
Definition: GyotoPatternDisk.h:90
#define size_t
If not defined in .
Definition: GyotoConfig.h:305
virtual void copyGridRadius(double const *const pattern=NULL, size_t nr=0)
Set PatternDisk::radius_.
virtual double emission(double nu_em, double dsem, double c_ph[8], double c_obj[8]) const
Specific intensity Iν
double phimin_
Minimum φ in grid.
Definition: GyotoPatternDisk.h:93
size_t nr_
Number of rows in the patternGrid size in the r direction.
Definition: GyotoPatternDisk.h:104
virtual double patternVelocity()
Get PatternDisk::Omega_.
virtual void copyIntensity(double const *const pattern=NULL, size_t const naxes[3]=NULL)
Set PatternDisk::emission_.
void getIndices(size_t i[3], double const co[4], double nu=0.) const
Get emission_ cell corresponding to position co[4].
virtual double const * opacity() const
Get PatternDisk::opacity_.
virtual size_t repeatPhi() const
Get PatternDisk::repeat_phi_.
double * radius_
Radius vector.
Definition: GyotoPatternDisk.h:74
virtual double const * getVelocity() const
Get PatternDisk::velocity_.
double dnu_
Frequency scale of PatternDisk::emission_ in Hz.
Definition: GyotoPatternDisk.h:88
double phimax() const
Get PatternDisk::phimax_.
std::string filename_
Optional FITS file name containing the arrays.
Definition: GyotoPatternDisk.h:54
virtual void setOuterRadius(double)
Set rout_.
void radius(double *pattern)
Set PatternDisk::radius_.
virtual double const * getGridRadius() const
Get PatternDisk::radius_.
Geometrically thin disks and rings.
Definition: GyotoThinDisk.h:68
Geometrically thin disk read from FITS file.
Definition: GyotoPatternDisk.h:51
double * opacity_
Same dimenstions as emission, or NULL.
Definition: GyotoPatternDisk.h:62
Geometrically thin disks and rings.
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:42
virtual void setParameters(FactoryMessenger *fmp)
Main loop in Subcontractor_t function.
virtual int setParameter(std::string name, std::string content, std::string unit)
Set parameter by name.
virtual void fillElement(FactoryMessenger *fmp) const
Fill the generic XML bits.
virtual PatternDisk * clone() const
Cloner.
double phimin() const
Get PatternDisk::phimin_.
virtual void setInnerRadius(double)
Set rin_.
size_t repeat_phi_
Number of times the pattern should be repeated to cover [0, 2Π].
Definition: GyotoPatternDisk.h:101
virtual double const * getIntensity() const
Get PatternDisk::emission_.
virtual void copyVelocity(double const *const pattern=NULL, size_t const naxes[2]=NULL)
Set PatternDisk::velocity_.
double dr_
Radius step.
Definition: GyotoPatternDisk.h:103
double t0_
Date for which i=0 corresponds to phi=0.
Definition: GyotoPatternDisk.h:86
double * emission_
Iν(ν, r, φ)
Definition: GyotoPatternDisk.h:60
size_t nphi_
Grid size in the φ direction.
Definition: GyotoPatternDisk.h:94
virtual double nu0() const
Get PatternDisk::nu0_.
double phimax_
Maximum φ in grid.
Definition: GyotoPatternDisk.h:95
double dphi_
δφ between two grid columns
Definition: GyotoPatternDisk.h:92
virtual void setInnerRadius(double)
Set rin_.
virtual double transmission(double nu_em, double dsem, double coord[8]) const
Transmission: exp( αν * dsem )
virtual double dnu() const
Get PatternDisk::dnu_.
void setEmission(double *pattern)
Set PatternDisk::emission_.