Gyoto
GyotoScenery.h
Go to the documentation of this file.
1
8/*
9 Copyright 2011-2016, 2018-2019 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 __GyotoScenery_H_
28#define __GyotoScenery_H_
29
30namespace Gyoto{
31 class Scenery;
32}
33
34#include <GyotoDefs.h>
35#include <GyotoSmartPointer.h>
36#include <GyotoObject.h>
37#include <GyotoAstrobj.h>
38#include <GyotoMetric.h>
39#include <GyotoScreen.h>
40#include <GyotoPhoton.h>
41#include <GyotoConverters.h>
42
43#ifdef HAVE_MPI
44#include "GyotoFactory.h"
45#include <boost/mpi/environment.hpp>
46#include <boost/mpi/communicator.hpp>
47#endif
48
49
163: public Gyoto::SmartPointee,
164 public Gyoto::Object
165{
166 friend class Gyoto::SmartPointer<Gyoto::Scenery>;
167
168
169 // Data :
170 // -----
171 protected:
172
177
178
182 double delta_; // default integration step for the photons
183
185
192
199
206
208
209# ifdef HAVE_UDUNITS
211 Gyoto::SmartPointer<Gyoto::Units::Converter> intensity_converter_;
213 Gyoto::SmartPointer<Gyoto::Units::Converter> spectrum_converter_;
215 Gyoto::SmartPointer<Gyoto::Units::Converter> binspectrum_converter_;
216# endif
217
218 public:
220# ifdef HAVE_MPI
222
226 boost::mpi::communicator * mpi_team_;
227# endif
229 static bool am_worker;
230
232
252 void mpiSpawn(int nbchildren);
253
256
258
261 void mpiClone();
262
264 enum mpi_tag {give_task, read_scenery, terminate,
265 raytrace, raytrace_done, ready,
266 impactcoords, noimpactcoords};
267
269 void mpiTask(mpi_tag &tag);
270
272
276 static void mpiWorker();
277
278 // Constructors - Destructor
279 // -------------------------
280 public:
282 GYOTO_WORLDLINE;
284 Scenery (const Scenery& o);
285 Scenery * clone() const;
286
288
293
294 ~Scenery();
295
296 // Mutators / assignment
297 // ---------------------
298 public:
299 // Accessors
300 // ---------
307
317
318
320 SmartPointer<Photon> clonePhoton(size_t i, size_t j);
321 SmartPointer<Photon> clonePhoton(double a, double d);
323
324 double delta() const ;
325 double delta(const std::string &unit) const ;
326 void delta(double);
327 void delta(double, const std::string &unit);
328
329 void initCoord(std::vector<double> c);
330 std::vector<double> initCoord() const;
331
332
334
338
340
344 void requestedQuantitiesString(std::string const &squant) ;
345
348
350 std::string requestedQuantitiesString() const ;
351
353
356 size_t getScalarQuantitiesCount(Quantity_t *q=NULL) const ;
357
359
363
365 double tMin() const ;
367 double tMin(const std::string &unit) const ;
369 void tMin(double);
371 void tMin(double, const std::string &unit);
372
373 void adaptive (bool mode) ;
374 bool adaptive () const ;
375
377 void integrator(std::string type);
379 std::string integrator() const;
380
382 double deltaMin() const;
384 void deltaMin(double h1);
385
387 double deltaMax() const;
388
390 void deltaMax(double h1);
391
393 double deltaMaxOverR() const;
395 void deltaMaxOverR(double t);
396
398 void absTol(double);
400 double absTol()const;
402 void relTol(double);
404 double relTol()const;
405
406 void secondary (bool sec) ;
407 bool secondary () const ;
408
409 void parallelTransport (bool pt) ;
410 bool parallelTransport () const ;
411
412 void maxiter (size_t miter) ;
413 size_t maxiter () const ;
414
415 void nThreads(size_t);
416 size_t nThreads() const ;
417
418 void nProcesses(size_t);
419 size_t nProcesses() const ;
420
422 void intensityConverter(std::string unit);
424 void spectrumConverter(std::string unit);
426 void binSpectrumConverter(std::string unit);
427
429
434
435 // Worker:
436 public:
438
488#ifdef GYOTO_SWIGIMPORTED
489 Coord2dSet & ij,
490#else
492#endif
494 double * impactcoords=NULL);
495
497
504 void operator() (size_t i, size_t j, Astrobj::Properties *data,
505 double * impactcoords = NULL, Photon * ph = NULL);
506
508
515 void operator() (double alpha, double delta, Astrobj::Properties *data,
516 Photon * ph = NULL);
517
518#ifdef GYOTO_USE_XERCES
519 public:
520 // Override fillProperty() to issue InitCoord only if it was set
521 void fillProperty(FactoryMessenger *fmp, Property const &p) const ;
522 // Override fillElement to fill metric, screen and astrobj first
526
527#endif
528
529};
530
531#endif
Astronomical objects (light emitters)
#define size_t
If not defined in <sys/types.h>.
Definition: GyotoConfig.h:390
GYOTO converters.
Gyoto ubiquitous macros and typedefs.
Base class for metric description.
Introspectable objects.
#define GYOTO_OBJECT_THREAD_SAFETY
Declare virtual bool isThreadSafe() const.
Definition: GyotoObject.h:99
#define GYOTO_OBJECT
Declare class::properties and class::getProperties()
Definition: GyotoObject.h:84
A single light ray.
Description of the observer screen.
Reference-counting pointers.
Observable properties of an Astronomical object.
Definition: GyotoAstrobj.h:654
Factory / SmartPointee::Subcontractor_t interface.
Definition: GyotoFactoryMessenger.h:92
Object with properties.
Definition: GyotoObject.h:152
A null geodesic transporting light.
Definition: GyotoPhoton.h:56
Property that can be set and got using standard methods.
Definition: GyotoProperty.h:608
Ray-tracing scene.
Definition: GyotoScenery.h:165
void delta(double)
set default step in geometrical units
size_t nThreads() const
Get nthreads_;.
Scenery * clone() const
Cloner.
void tMin(double, const std::string &unit)
Set ph_.tmin_ in specified unit.
double relTol() const
Passed to ph_.
SmartPointer< Metric::Generic > metric() const
Get ph_.Worldline::metric_.
void mpiTerminate()
Terminate worker processes.
bool adaptive() const
Get ph_.adaptive_.
void secondary(bool sec)
Set ph_.secondary_.
void adaptive(bool mode)
Set ph_.adaptive_.
void requestedQuantitiesString(std::string const &squant)
Set Scenery::quantities_ from string.
void operator()(size_t i, size_t j, Astrobj::Properties *data, double *impactcoords=NULL, Photon *ph=NULL)
Ray-trace a single pixel in Scenery::screen_.
void deltaMax(double h1)
Passed to ph_.
bool parallelTransport() const
Get ph_.parallel_transport_.
void astrobj(SmartPointer< Astrobj::Generic >)
Set ph_.obj_.
Scenery(const Scenery &o)
Copy constructor.
int nprocesses_
Number of parallel processes to use in rayTrace()
Definition: GyotoScenery.h:207
SmartPointer< Photon > clonePhoton() const
Clone the internal Photon.
void nThreads(size_t)
Set nthreads_;.
void deltaMaxOverR(double t)
Passed to ph_.
void screen(SmartPointer< Screen >)
Set Scenery::screen_.
std::string integrator() const
Passed to ph_.
double deltaMaxOverR() const
Passed to ph_.
SmartPointer< Photon > clonePhoton(double a, double d)
Clone the internal Photon.
double absTol() const
Passed to ph_.
Scenery()
Set everything to defaults.
double delta_
Definition: GyotoScenery.h:182
void relTol(double)
Passed to ph_.
void fillElement(FactoryMessenger *fmp) const
Fill the XML element for this Object.
static void mpiWorker()
Become an MPI worker.
void binSpectrumConverter(std::string unit)
Set Scenery::binspectrum_converter_.
void delta(double, const std::string &unit)
set default step in specified units
size_t nthreads_
Number of parallel threads to use in rayTrace()
Definition: GyotoScenery.h:205
size_t maxiter() const
Get ph_.maxiter_.
void mpiSpawn(int nbchildren)
Spawn gyoto-mpi-worker processes.
void mpiClone()
Send a copy of self to the mpi workers.
void absTol(double)
Passed to ph_.
void setPropertyConverters(Gyoto::Astrobj::Properties *prop)
Copy converters to Astrobj::Properties instance.
std::string requestedQuantitiesString() const
Get a string representation of Scenery::quantities_.
Quantity_t getRequestedQuantities() const
Get Scenery::quantities_.
SmartPointer< Astrobj::Generic > astrobj() const
Get ph_.obj_.
void nProcesses(size_t)
Set nprocesses_;.
static SmartPointer< Scenery > Subcontractor(Gyoto::FactoryMessenger *)
Instanciate Scenery from an XML description.
void fillProperty(FactoryMessenger *fmp, Property const &p) const
Output a single Property to XML.
void updatePhoton()
Update values in cached Photon.
mpi_tag
Tags that may be sent to communicate with workers using MPI_Send()
Definition: GyotoScenery.h:264
static bool am_worker
True in instance of gyoto-mpi-worker, otherwise false.
Definition: GyotoScenery.h:229
SmartPointer< Screen > screen() const
Get Scenery::screen_.
double tMin(const std::string &unit) const
Get ph_.tmin_ in specified unit.
double deltaMin() const
Passed to ph_.
Gyoto::Photon ph_
Template Photon.
Definition: GyotoScenery.h:198
double delta() const
Get default step in geometrical units.
SmartPointer< Photon > clonePhoton(size_t i, size_t j)
Clone the internal Photon.
Scenery(SmartPointer< Metric::Generic >, SmartPointer< Screen >, SmartPointer< Astrobj::Generic >)
Constructor setting Scenery::gg_, Scenery::screen_, and Scenery::obj_.
bool secondary() const
Get ph_.secondary_.
void intensityConverter(std::string unit)
Set Scenery::intensity_converter_.
void integrator(std::string type)
Passed to ph_.
double tMin() const
Get ph_.tmin_.
void spectrumConverter(std::string unit)
Set Scenery::spectrum_converter_.
void setRequestedQuantities(Quantity_t quant)
Set Scenery::quantities_.
double delta(const std::string &unit) const
Get default step in specified units.
double deltaMax() const
Passed to ph_.
void parallelTransport(bool pt)
Set ph_.parallel_transport_.
void tMin(double)
Set ph_.tmin_.
size_t nProcesses() const
Get nprocesses_;.
void maxiter(size_t miter)
Set ph_.maxiter_.
SmartPointer< Screen > screen_
Definition: GyotoScenery.h:176
size_t getSpectralQuantitiesCount(Quantity_t *q=NULL) const
Get number of requested quantities of spectral nature.
Gyoto::Quantity_t quantities_
Quantities to compute.
Definition: GyotoScenery.h:191
void deltaMin(double h1)
Passed to ph_.
void rayTrace(Screen::Coord2dSet &ij, Astrobj::Properties *data, double *impactcoords=NULL)
Perform ray-tracing.
void mpiTask(mpi_tag &tag)
Send a tag to workers.
void metric(SmartPointer< Metric::Generic >)
Set Scenery::gg_.
size_t getScalarQuantitiesCount(Quantity_t *q=NULL) const
Get number of requested quantities of scalar nature.
Class to specify a set of points on the Screen.
Definition: GyotoScreen.h:669
Can be pointed to by a SmartPointer.
Definition: GyotoSmartPointer.h:81
Pointers performing reference counting.
Definition: GyotoSmartPointer.h:135
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
unsigned int Quantity_t
Type for observabke quantities.
Definition: GyotoDefs.h:76