Gyoto
GyotoDefs.h
Go to the documentation of this file.
1 
5 /*
6  Copyright 2011-2015, 2017-2020 Thibaut Paumard & Frédéric Vincent
7 
8  This file is part of Gyoto.
9 
10  Gyoto is free software: you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  Gyoto is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with Gyoto. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #ifndef __GyotoDefs_H_
25 #define __GyotoDefs_H_
26 
27 #include "GyotoConfig.h"
28 #include <float.h>
29 #include <vector>
30 
40 #if !HAVE_SINCOS
41 #define sincos(t, s, c) *s=sin(t); *c=cos(t)
42 #else
43 # ifdef DOXYGEN_RUN
44 # define sincos(t, s, c) (undefined)
45 # endif
46 #endif
47 
48 /* Typedef for various Gyoto data types */
49 namespace Gyoto {
50  typedef std::vector<double> state_t;
51 
52  //\{
75  typedef unsigned int Quantity_t;
77 
78  /* Generic */
79 
80 #define GYOTO_QUANTITY_NONE 0
81 
83 #define GYOTO_QUANTITY_INTENSITY 1<<0
84 #define GYOTO_QUANTITY_EMISSIONTIME 1<<1
86 
90 #define GYOTO_QUANTITY_MIN_DISTANCE 1<<2
91 #define GYOTO_QUANTITY_FIRST_DMIN 1<<3
93 #define GYOTO_QUANTITY_REDSHIFT 1<<4
95 
99 #define GYOTO_QUANTITY_IMPACTCOORDS 1<<5
100 #define GYOTO_QUANTITY_SPECTRUM 1<<6
102 #define GYOTO_QUANTITY_SPECTRUM_STOKES_Q 1<<7
104 #define GYOTO_QUANTITY_SPECTRUM_STOKES_U 1<<8
106 #define GYOTO_QUANTITY_SPECTRUM_STOKES_V 1<<9
108 #define GYOTO_QUANTITY_BINSPECTRUM 1<<10
110 #define GYOTO_QUANTITY_NBCROSSEQPLANE 1<<11
112  /* Astrobj-specific */
114 #define GYOTO_QUANTITY_USER1 1<<31
115 #define GYOTO_QUANTITY_USER2 1<<30
117 #define GYOTO_QUANTITY_USER3 1<<29
119 #define GYOTO_QUANTITY_USER4 1<<28
121 #define GYOTO_QUANTITY_USER5 1<<27
123 #define GYOTO_QUANTITY_SPECTRAL (GYOTO_QUANTITY_SPECTRUM | GYOTO_QUANTITY_SPECTRUM_STOKES_Q | GYOTO_QUANTITY_SPECTRUM_STOKES_U | GYOTO_QUANTITY_SPECTRUM_STOKES_V | GYOTO_QUANTITY_BINSPECTRUM)
125 #define GYOTO_QUANTITY_SPECTRUM_STOKES (GYOTO_QUANTITY_SPECTRUM | GYOTO_QUANTITY_SPECTRUM_STOKES_Q | GYOTO_QUANTITY_SPECTRUM_STOKES_U | GYOTO_QUANTITY_SPECTRUM_STOKES_V)
127  //\}
128 
142  //\{
144  typedef unsigned int Verbosity_t;
145 
147 #define GYOTO_DEFAULT_DEBUG_MODE 0
148 
150 
155 #define GYOTO_QUIET_VERBOSITY 1
156 
158 
164 #define GYOTO_SEVERE_VERBOSITY 3
165 
167 
173 #define GYOTO_WARNING_VERBOSITY GYOTO_SEVERE_VERBOSITY
174 
176 
182 #define GYOTO_DEFAULT_VERBOSITY 5
183 
185 
191 #define GYOTO_INFO_VERBOSITY 10
192 
194 
201 #define GYOTO_DEBUG_VERBOSITY 3000
202 
204 
213 #define GYOTO_QUIET if (Gyoto::verbose() >= GYOTO_QUIET_VERBOSITY) std::cout
214 
216 
221 #define GYOTO_SEVERE if(Gyoto::verbose()>=GYOTO_SEVERE_VERBOSITY) std::cerr<<"SEVERE: "
222 
224 
229 #define GYOTO_WARNING if(Gyoto::verbose()>=GYOTO_SEVERE_VERBOSITY) std::cerr<<"WARNING: "
230 
232 
240 #define GYOTO_MSG if (Gyoto::verbose() >= GYOTO_DEFAULT_VERBOSITY) std::cout
241 
243 
251 #define GYOTO_INFO if (Gyoto::verbose() >= GYOTO_INFO_VERBOSITY) std::cerr<<"INFO: "
252 
254 
261 #define GYOTO_WARNING_UDUNITS(from, to) \
262  GYOTO_WARNING << "unit ignored (trying to convert from \"" << from \
263  << "\" to " \
264  << to \
265  << "\"), you may have more chance recompiling Gyoto with --with-udunits\n"
266 
268 
280 #define GYOTO_DEBUG_EXPR(a) GYOTO_DEBUG << #a << "=" << a << std::endl
281 
283 
294 #define GYOTO_DEBUG_THIS_EXPR(a) GYOTO_DEBUG_THIS << #a << "=" << a << std::endl
295 
297 
313 #define GYOTO_DEBUG_ARRAY(a,n) if (GYOTO_DEBUG_MODE) { \
314  std::cerr << "DEBUG: " << __PRETTY_FUNCTION__ << ": " \
315  << #a << "=[" << a[0] ; \
316  for (size_t _gyoto_debug_array_i=1; _gyoto_debug_array_i < n; \
317  ++_gyoto_debug_array_i) \
318  std::cerr << "," << a[_gyoto_debug_array_i] ; \
319  std::cerr << "]" << std::endl ;}
320 
322 
338 #define GYOTO_DEBUG_THIS_ARRAY(a,n) { \
339  std::cerr << "DEBUG: " << __PRETTY_FUNCTION__ << ": " \
340  << #a << "=[" << a[0] ; \
341  for (size_t _gyoto_debug_array_i=1; _gyoto_debug_array_i < n; \
342  ++_gyoto_debug_array_i) \
343  std::cerr << "," << a[_gyoto_debug_array_i] ; \
344  std::cerr << "]" << std::endl ;}
345 
347 
355 #define GYOTO_DEBUG_THIS std::cerr << "DEBUG: " << __PRETTY_FUNCTION__ << ": "
356 
358 
367 #define GYOTO_DEBUG if (GYOTO_DEBUG_MODE) GYOTO_DEBUG_THIS
368 
370 
374 #define GYOTO_IF_DEBUG if (GYOTO_DEBUG_MODE) {
375 
377 
381 #define GYOTO_ENDIF_DEBUG }
382 
384 #define GYOTO_DEBUG_MODE Gyoto::debug()
385 
386  //\}
387  //\{
400  typedef unsigned int CoordKind_t;
401 #define GYOTO_COORDKIND_UNSPECIFIED 0
402 #define GYOTO_COORDKIND_CARTESIAN 1
403 #define GYOTO_COORDKIND_SPHERICAL 2
404  //\}
405 }
406 
407 //{
412 #define GYOTO_DEFAULT_X_SIZE 1024
413 
414 
421 #define GYOTO_DEFAULT_DELTA 0.01
422 
426 #define GYOTO_DEFAULT_DELTA_MAX DBL_MAX
427 
431 #define GYOTO_DEFAULT_DELTA_MIN DBL_MIN
432 
441 #define GYOTO_DEFAULT_DELTA_MAX_OVER_R 1.
442 
443 #define GYOTO_DEFAULT_ABSTOL 1e-6
444 #define GYOTO_DEFAULT_RELTOL 1e-6
445 #define GYOTO_DEFAULT_NORMTOL 1e-3
446 
450 #define GYOTO_DEFAULT_MAXITER 100000
451 
457 #define GYOTO_T_TOL 1e-4 //1e-7 //1e-4
458 
459 #define GYOTO_KERR_HORIZON_SECURITY 0.01
460 
462 #define GYOTO_SCREEN_DMAX DBL_MAX
463 
464 //For displays with setw and setprecision
466 #define GYOTO_PREC 15
467 #define GYOTO_WIDTH 25
469 
470 /* Plugins Stuff */
472 #ifndef GYOTO_DEFAULT_PLUGINS
473 #define GYOTO_DEFAULT_PLUGINS "stdplug,nowarn:lorene"
474 #endif
475 
476 #ifndef GYOTO_PLUGIN_SFX
477 #define GYOTO_PLUGIN_SFX "so"
478 #endif
479 
480 //\}
481 
482 //\{
486 #define GYOTO_C 299792458.
488 #define GYOTO_C_CGS 2.99792458e10
490 #define GYOTO_C2_CGS 8.98755178736817668096e+20
492 #define GYOTO_C2_CGS_M1 1.1126500560536184087938986e-21
494 #define GYOTO_G 6.67428e-11
496 #define GYOTO_G_CGS 6.67428e-8
498 #define GYOTO_G_OVER_C_SQUARE 7.4261380161175445989e-28
500 #define GYOTO_G_OVER_C_SQUARE_CGS 7.4261380161175445989e-29
502 #define GYOTO_PLANCK 6.62606896e-34
504 #define GYOTO_PLANCK_CGS 6.62606896e-27
506 #define GYOTO_PLANCK_OVER_C_SQUARE 7.3724959997591407964e-51
508 #define GYOTO_BOLTZMANN 1.3806504e-23
510 #define GYOTO_BOLTZMANN_CGS 1.3806504e-16
512 #define GYOTO_STEFANBOLTZMANN_CGS 5.670373e-5
514 #define GYOTO_PLANCK_OVER_BOLTZMANN 4.7992373449498869688e-11
516 #define GYOTO_GAS_CST 8.3144621
518 #define GYOTO_GAS_CST_CGS 8.3144621e7
520 #define GYOTO_AVOGADRO 6.0221413e23
522 #define GYOTO_THOMSON_CGS 6.6524e-25
524 #define GYOTO_ALPHA_F 0.00729927
526 #define GYOTO_PROTON_MASS_CGS 1.67262158e-24
528 #define GYOTO_ELECTRON_MASS_CGS 9.10938188e-28
530 #define GYOTO_ELECTRON_CLASSICAL_RADIUS_CGS 2.8179e-13
532 #define GYOTO_ELEMENTARY_CHARGE_CGS 4.80320427e-10
534 #define GYOTO_EULER_MASCHERONI 0.577216
536 #define GYOTO_ATOMIC_MASS_UNIT_CGS 1.660537781e-24
538 #define GYOTO_INU_CGS_TO_SI 0.001
540 #define GYOTO_JNU_CGS_TO_SI (GYOTO_INU_CGS_TO_SI * 100.)
542 #define GYOTO_ANU_CGS_TO_SI 100.
544 
546 #define GYOTO_SUN_MASS 1.98843e30
547 #define GYOTO_SUN_MASS_CGS 1.98843e33
549 #define GYOTO_SUN_RADIUS 6.955e8
551 #define GYOTO_KPC 3.08568025e19
553 #define GYOTO_ASTRONOMICAL_UNIT 1.49597870700e11
555 #define GYOTO_LIGHT_YEAR 9.4607304725808e15
557 
559 #define GYOTO_RADEG 57.2957795130823
560 #define GYOTO_DEGRAD 0.0174532925199433
562 #define GYOTO_MINRAD 2.908882086657216e-04
564 #define GYOTO_SECRAD 4.848136811095360e-06
566 #define GYOTO_MASRAD 4.848136811095360e-09
568 #define GYOTO_MUASRAD 4.848136811095360e-12
570 
572 #define GYOTO_eV2Hz 2.417989348e+14
573 
574 //\}
575 
576 //\{
580 #define obskind_t unsigned int
582 #define GYOTO_OBSKIND_ATINFINITY 0
584 #define GYOTO_OBSKIND_KEPLERIAN 1
586 #define GYOTO_OBSKIND_ZAMO 2
588 #define GYOTO_OBSKIND_VELOCITYSPECIFIED 3
590 #define GYOTO_OBSKIND_FULLYSPECIFIED 4
592 //\}
593 
595 #define GYOTO_STRINGIFY(a) GYOTO_STRINGIFY_ARGUMENT(a)
596 
598 #define GYOTO_STRINGIFY_ARGUMENT(a) #a
599 
600 #ifndef GYOTO_NO_DEPRECATED
601 #warning Using deprecated method names.\
602  Define GYOTO_NO_DEPRECATED to disable.
603 //\{
612 # define getMetric metric
613 # define setMetric metric
614 # define setScreen screen
615 # define getScreen screen
616 # define getRmax rMax
617 # define setRmax rMax
618 # define getMass mass
619 # define setMass mass
620 # define getCoordKind coordKind
621 # define setCoordKind coordKind
622 # define getKind kind
623 # define setKind kind
624 # define getSpin spin
625 # define setSpin spin
626 # define getIntegKind integKind
627 # define setIntegKind integKind
628 # define getFileName fileName
629 # define setFileName fileName
630 # define getDistance distance
631 # define setDistance distance
632 # define getPALN PALN
633 # define setPALN PALN
634 # define getArgument argument
635 # define setArgument argument
636 # define getInclination inclination
637 # define setInclination inclination
638 # define getAstrobj astrobj
639 # define setAstrobj astrobj
640 # define getSpectrometer spectrometer
641 # define setSpectrometer spectrometer
642 # define getSpectrum spectrum
643 # define setSpectrum spectrum
644 # define getOpacity opacity
645 # define setOpacity opacity
646 # define setDelta delta
647 # define getDelta delta
648 # define setDelta delta
649 # define getDelta delta
650 # define setDangle2 dangle2
651 # define getDangle2 dangle2
652 # define setDangle1 dangle1
653 # define getDangle1 dangle1
654 # define setAnglekind anglekind
655 # define getTmin tMin
656 # define setTmin tMin
657 # define getTime time
658 # define setTime time
659 # define getFreqObs freqObs
660 # define setFreqObs freqObs
661 # define getFieldOfView fieldOfView
662 # define setFieldOfView fieldOfView
663 # define getRadius radius
664 # define setRadius radius
665 # define getLargeRadius largeRadius
666 # define setLargeRadius largeRadius
667 # define getSmallRadius smallRadius
668 # define setSmallRadius smallRadius
669 # define getCentralDensity centralDensity
670 # define setCentralDensity centralDensity
671 # define getDmax dMax
672 # define setDmax dMax
673 # define getTemperature temperature
674 # define setTemperature temperature
675 # define getScaling scaling
676 # define setScaling scaling
677 # define getPatternVelocity patternVelocity
678 # define setPatternVelocity patternVelocity
679 # define getLambda lambda
680 # define setLambda lambda
681 # define getCentralTempOverVirial centralTempOverVirial
682 # define setCentralTempOverVirial centralTempOverVirial
683 # define getBeta beta
684 # define setBeta beta
685 # define getConstant constant
686 # define setConstant constant
687 # define getExponent exponent
688 # define setExponent exponent
689 # define getFlag_radtransf opticallyThin
690 # define setFlag_radtransf opticallyThin
691 # define getNThreads nThreads
692 # define setNThreads nThreads
693 # define getResolution resolution
694 # define setResolution resolution
695 # define getNSamples nSamples
696 # define setNSamples nSamples
697 # define getSpectralOverSampling spectralOversampling
698 # define setSpectralOverSampling spectralOversampling
699 # define setBinSpectrumConverter binSpectrumConverter
700 # define setSpectrumConverter spectrumConverter
701 # define setIntensityConverter intensityConverter
702 # define getSafetyValue safetyValue;
703 # define setSafetyValue safetyValue;
704 # define setInnerRadius innerRadius;
705 # define getInnerRadius innerRadius;
706 # define setOuterRadius outerRadius;
707 # define getOuterRadius outerRadius;
708 # define setThickness thickness;
709 # define getThickness thickness;
710 # define setDir dir;
711 # define getDir dir;
712 # define setBand band;
713 # define setObserverKind observerKind;
714 # define getObserverKind observerKind;
715 //\}
716 #endif
717 
718 #endif
unsigned int Verbosity_t
Type for verbosity levels.
Definition: GyotoDefs.h:144
Compile-time configuration.
unsigned int CoordKind_t
Type for coordinate system kinds.
Definition: GyotoDefs.h:400
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:46
unsigned int Quantity_t
Type for observabke quantities.
Definition: GyotoDefs.h:76