SMILE  v2.5
Schwarzschild Modelling Interactive expLoratory Environment
Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
smile::CPotentialComposite Class Reference

A composite potential which consists of several other potential types, plus a possible black hole and a rotating reference frame. More...

#include <potential.h>

Inheritance diagram for smile::CPotentialComposite:
Inheritance graph
[legend]
Collaboration diagram for smile::CPotentialComposite:
Collaboration graph
[legend]

Public Member Functions

 CPotentialComposite (const std::vector< const CPotential * > &_components, double _Mbh=0)
 construct the composite potential from the provided list of components, and optionally a central black hole. More...
 
virtual CPotentialclone () const
 Return a pointer to a copy of this instance of potential. More...
 
virtual POTENTIALTYPE PotentialType () const
 enumerable potential type
 
virtual const char * PotentialName () const
 string representation of potential type
 
virtual SYMMETRYTYPE symmetry () const
 returns symmetry type of this potential
 
virtual double Rho (double X, double Y, double Z, double t=0) const
 returns density at given coordinates, this should obviously be overriden in derivative classes
 
virtual double Phi (double X, double Y, double Z, double t=0) const
 Return potential at a given spatial point (possibly a time-varying one). More...
 
virtual void Force (const double xyz[N_DIM], const double t, double *force, double *forceDeriv=NULL) const
 Compute forces and, optionally, force derivatives at a given point. More...
 
size_t size () const
 return the number of potential components
 
const CPotentialcomponent (size_t index) const
 return the pointer to the given component
 
virtual double Mass (const double r) const
 returns mass inside given radius (approximately! not necessary to integrate density over sphere, just a rough estimate used e.g. in choosing radial nodes of Schwarzschild grid)
 
- Public Member Functions inherited from smile::CDensity
virtual double totalMass () const
 returns estimated M(r=infinity) or -1 if mass is infinite
 
double getRadiusByMass (const double m) const
 solves for Mass(r)=m
 
void getRadiiByMass (const vectord &masses, vectord *radii) const
 solves for Mass(r)=m for an array of sorted values of m (more efficient than doing it one-by-one)
 
bool checkMassMonotonic () const
 safety measure: check (roughly) that mass is increasing with radius
 
bool checkDensityNonzero () const
 another safety measure: check that density doesn't drop to zero along any of three axes (important to assess spherical-harmonic approximation quality)
 
virtual double getGamma () const
 returns inner density slope estimate (only used in BSE potential expansion for the automatic selection of shape parameter Alpha)
 

Static Public Member Functions

static const char * myName ()
 

Private Attributes

std::vector< const CPotential * > components
 list of components (each one represented by an instance of CPotential derivative class)
 
const double Mbh
 mass of central black hole(s)
 

Additional Inherited Members

- Public Types inherited from smile::CDensity
enum  POTENTIALTYPE {
  PT_UNKNOWN, PT_DIRECT, PT_COMPOSITE, PT_COEFS,
  PT_NB, PT_BSE, PT_BSECOMPACT, PT_SPLINE,
  PT_CYLSPLINE, PT_LOG, PT_HARMONIC, PT_SCALEFREE,
  PT_SCALEFREESH, PT_SPHERICAL, PT_DEHNEN, PT_MIYAMOTONAGAI,
  PT_FERRERS, PT_PLUMMER, PT_ISOCHRONE, PT_PERFECTELLIPSOID,
  PT_NFW, PT_SERSIC, PT_EXPDISK, PT_ELLIPSOIDAL,
  PT_MGE
}
 list of all existing types of density or density/potential models, each of them implemented in its own class More...
 
enum  SYMMETRYTYPE {
  ST_NONE = 0, ST_REFLECTION = 1, ST_PLANESYM = 2, ST_ZROTSYM = 4,
  ST_SPHSYM = 8, ST_TRIAXIAL = ST_REFLECTION | ST_PLANESYM, ST_AXISYMMETRIC = ST_TRIAXIAL | ST_ZROTSYM, ST_SPHERICAL = ST_AXISYMMETRIC | ST_SPHSYM,
  ST_DEFAULT = ST_TRIAXIAL
}
 Type of symmetry. More...
 

Detailed Description

A composite potential which consists of several other potential types, plus a possible black hole and a rotating reference frame.

Constructor & Destructor Documentation

smile::CPotentialComposite::CPotentialComposite ( const std::vector< const CPotential * > &  _components,
double  _Mbh = 0 
)

construct the composite potential from the provided list of components, and optionally a central black hole.

Parameters
[in]_componentscontains the array of pointers to potential components (may be an empty list). It may be an empty array, but should not contain NULL pointers. The supplied potentials are cloned in the constructor and subsequently the cloned instances are deleted in the destructor.
[in]_Mbhis the mass of central black hole (may be zero).

Member Function Documentation

virtual CPotential* smile::CPotentialComposite::clone ( ) const
inlinevirtual

Return a pointer to a copy of this instance of potential.

A standard copy constructor or assignment is disabled because of different amount of data needed to be copied in different derived classes).

Implements smile::CPotential.

void smile::CPotentialComposite::Force ( const double  xyz[N_DIM],
const double  t,
double *  force,
double *  forceDeriv = NULL 
) const
virtual

Compute forces and, optionally, force derivatives at a given point.

Parameters
[in]xyz- coordinates of the point to compute forces (array of 3 numbers)
[in]t- time to compute forces (matters only if potential is time-dependent)
[out]force- computed values of -d Phi/d x_i; output array must exist and contain N_DIM values.
[out]forceDeriv- if not NULL, then also compute the second derivatives of potential (which is a symmetric matrix of size N_DIM^2, thus the array must be of size N_DIM*(N_DIM+1)/2 ): first 3 values contain $ -d^2 \Phi/d x_i^2 $, second three contain mixed derivatives $ -d^2 \Phi/d x_1 d x_2, -d^2 \Phi/d x_2 d x_3, -d^2 \Phi/d x_3 d x_1 $.

Implements smile::CPotential.

double smile::CPotentialComposite::Phi ( double  X,
double  Y,
double  Z,
double  t = 0 
) const
virtual

Return potential at a given spatial point (possibly a time-varying one).

Implements smile::CPotential.


The documentation for this class was generated from the following files: