The SKIRT project
advanced radiative transfer for astrophysics
Public Member Functions | Protected Member Functions | Private Attributes | List of all members
CellSnapshot Class Reference

#include <CellSnapshot.hpp>

Inheritance diagram for CellSnapshot:
Inheritance graph
[legend]

Public Member Functions

 ~CellSnapshot ()
 
double density (int m) const override
 
double density (Position bfr) const override
 
Box extent () const override
 
Position generatePosition () const override
 
Position generatePosition (int m) const override
 
void getEntities (EntityCollection &entities, Position bfr) const override
 
void getEntities (EntityCollection &entities, Position bfr, Direction bfk) const override
 
double mass () const override
 
int numEntities () const override
 
Position position (int m) const override
 
void readAndClose () override
 
double volume (int m) const override
 
- Public Member Functions inherited from Snapshot
 Snapshot ()
 
virtual ~Snapshot ()
 
double age (int m) const
 
double age (Position bfr) const
 
double currentMass (int m) const
 
double currentMass (Position bfr) const
 
virtual double density (int m) const =0
 
virtual double density (Position bfr) const =0
 
virtual Box extent () const =0
 
virtual Position generatePosition () const =0
 
virtual Position generatePosition (int m) const =0
 
virtual void getEntities (EntityCollection &entities, Position bfr) const =0
 
virtual void getEntities (EntityCollection &entities, Position bfr, Direction bfk) const =0
 
bool hasAge () const
 
bool hasCurrentMass () const
 
bool hasInitialMass () const
 
bool hasMagneticField () const
 
bool hasMetallicity () const
 
bool hasParameters () const
 
bool hasTemperature () const
 
bool hasVelocity () const
 
bool hasVelocityDispersion () const
 
bool holdsNumber () const
 
void importBox ()
 
void importCurrentMass ()
 
void importMagneticField ()
 
void importMass ()
 
void importMassDensity ()
 
void importMetallicity ()
 
void importNumber ()
 
void importNumberDensity ()
 
void importParameters (const vector< SnapshotParameter > &parameters)
 
void importPosition ()
 
void importSize ()
 
void importTemperature ()
 
void importVelocity ()
 
void importVelocityDispersion ()
 
double initialMass (int m) const
 
double initialMass (Position bfr) const
 
Vec magneticField (int m) const
 
Vec magneticField (Position bfr) const
 
virtual double mass () const =0
 
double metallicity (int m) const
 
double metallicity (Position bfr) const
 
virtual int numEntities () const =0
 
void open (const SimulationItem *item, string filename, string description)
 
void parameters (int m, Array &params) const
 
void parameters (Position bfr, Array &params) const
 
virtual Position position (int m) const =0
 
virtual void readAndClose ()
 
void setMassDensityPolicy (double multiplier, double maxTemperature, bool useMetallicity)
 
void setNeedGetEntities ()
 
double SigmaX () const
 
double SigmaY () const
 
double SigmaZ () const
 
double temperature (int m) const
 
double temperature (Position bfr) const
 
void useColumns (string columns)
 
Vec velocity (int m) const
 
Vec velocity (Position bfr) const
 
double velocityDispersion (int m) const
 
double velocityDispersion (Position bfr) const
 
double volume () const
 
virtual double volume (int m) const =0
 

Protected Member Functions

int nearestEntity (Position bfr) const override
 
const Arrayproperties (int m) const override
 
- Protected Member Functions inherited from Snapshot
int ageIndex () const
 
int boxIndex () const
 
int currentMassIndex () const
 
int densityIndex () const
 
bool hasMassDensityPolicy () const
 
TextInFileinfile ()
 
int initialMassIndex () const
 
Loglog () const
 
void logMassStatistics (int numIgnored, double totalOriginalMass, double totalMetallicMass, double totalEffectiveMass)
 
int magneticFieldIndex () const
 
int massIndex () const
 
double maxTemperature () const
 
int metallicityIndex () const
 
double multiplier () const
 
virtual int nearestEntity (Position bfr) const =0
 
bool needGetEntities () const
 
int numParameters () const
 
int parametersIndex () const
 
int positionIndex () const
 
virtual const Arrayproperties (int m) const =0
 
Randomrandom () const
 
void setContext (const SimulationItem *item)
 
int sizeIndex () const
 
int temperatureIndex () const
 
Unitsunits () const
 
bool useMetallicity () const
 
bool useTemperatureCutoff () const
 
int velocityDispersionIndex () const
 
int velocityIndex () const
 

Private Attributes

Array _cumrhov
 
CellGrid * _grid
 
double _mass
 
vector< Array_propv
 
Array _rhov
 

Detailed Description

A CellSnapshot object represents the data in a Cartesian mesh-based snapshot imported from a column text file. Each line in the text file represents a cuboidal cell lined up with the coordinate axes, specifying the coordinates of the lower-left and upper-right corners of the cell along with properties such as the density in the cell. The intention is for the cells to define a partition of the spatial domain, and usually they will, however this is not enforced. When two or more cells overlap at a given position, the properties for that position will be taken from the cell that is listed first in the imported file. When no cells overlap a given position, the density at that position is considered to be zero. To avoid thin slices of zero density between cells, the coordinates for common walls or corners in neighboring cells should be identical.

This class is an alternative to the AdaptiveMeshSnapshot class, which requires listing cells in Morton order. This can be hard to accomplish, especially when extracting a particular subdomain from a larger mesh. In contrast, the CellSnapshot class allows cells to be listed in arbitrary order and allows the spatial partition to be imperfect. For example, the outer border of the domain can be ragged, with some cells extending farther out than others.

This class is based on the Snapshot class; it uses the facilities offered there to configure and read the snapshot data, and it implements all functions in the general Snapshot public interface. If the snapshot configuration requires the ability to determine the density at a given spatial position, an effort is made to accelerate the search for the cell containing that position even for a large number of cells.

Constructor & Destructor Documentation

◆ ~CellSnapshot()

CellSnapshot::~CellSnapshot ( )

The destructor deletes the search data structure, if it was constructed.

Member Function Documentation

◆ density() [1/2]

double CellSnapshot::density ( int  m) const
overridevirtual

This function returns the mass density associated with the cell with index m. If no density policy has been set or no mass information is being imported, or if the index is out of range, the behavior is undefined.

Implements Snapshot.

◆ density() [2/2]

double CellSnapshot::density ( Position  bfr) const
overridevirtual

This function returns the mass density of the cell containing the specified point \({\bf{r}}\). If the point is not inside any cell, the function returns zero. If no density policy has been set or no mass information is being imported, the behavior is undefined.

Implements Snapshot.

◆ extent()

Box CellSnapshot::extent ( ) const
overridevirtual

This function returns the bounding box lined up with the coordinate axes surrounding all cells.

Implements Snapshot.

◆ generatePosition() [1/2]

Position CellSnapshot::generatePosition ( ) const
overridevirtual

This function returns a random position within the spatial domain of the snapshot, drawn from the mass density distribution represented by the snapshot. The function first selects a random cell from the discrete probability distribution formed by the respective cell masses, and then generates a random position within that cell. If no density policy has been set or no mass information is being imported, the behavior is undefined.

Implements Snapshot.

◆ generatePosition() [2/2]

Position CellSnapshot::generatePosition ( int  m) const
overridevirtual

This function returns a random position drawn uniformly from the cell with index m. If the index is out of range, the behavior is undefined.

Implements Snapshot.

◆ getEntities() [1/2]

void CellSnapshot::getEntities ( EntityCollection entities,
Position  bfr 
) const
overridevirtual

This function sets the specified entity collection to the cell containing the specified point \({\bf{r}}\), or to the empty collection if the point is outside the domain or if there are no cells in the snapshot. If the search data structures were not created, invoking this function causes undefined behavior.

Implements Snapshot.

◆ getEntities() [2/2]

void CellSnapshot::getEntities ( EntityCollection entities,
Position  bfr,
Direction  bfk 
) const
overridevirtual

This function replaces the contents of the specified entity collection by the set of cells that overlap the specified path with starting point \({\bf{r}}\) and direction \({\bf{k}}\). The weight of a cell is given by the length of the path segment inside the cell. If the path does not overlap any cells, the collection will be empty. If the search data structures were not created, invoking this function causes undefined behavior.

Implements Snapshot.

◆ mass()

double CellSnapshot::mass ( ) const
overridevirtual

This function returns the total mass represented by the snapshot, in other words the sum of the masses of all cells. If no density policy has been set or no mass information is being imported, the behavior is undefined.

Implements Snapshot.

◆ nearestEntity()

int CellSnapshot::nearestEntity ( Position  bfr) const
overrideprotectedvirtual

This function returns the index \(0\le m \le N_\mathrm{ent}-1\) of the cell containing the specified point \({\bf{r}}\), or -1 if the point is outside the domain, if there are no cells in the snapshot, or if the search data structures were not created.

Implements Snapshot.

◆ numEntities()

int CellSnapshot::numEntities ( ) const
overridevirtual

This function returns the number of cells in the snapshot.

Implements Snapshot.

◆ position()

Position CellSnapshot::position ( int  m) const
overridevirtual

This function returns the position of the center of the cell with index m. If the index is out of range, the behavior is undefined.

Implements Snapshot.

◆ properties()

const Array & CellSnapshot::properties ( int  m) const
overrideprotectedvirtual

This function returns a reference to an array containing the imported properties (in column order) for the cell with index \(0\le m \le N_\mathrm{ent}-1\). If the index is out of range, the behavior is undefined.

Implements Snapshot.

◆ readAndClose()

void CellSnapshot::readAndClose ( )
overridevirtual

This function reads the snapshot data from the input file, honoring the options set through the configuration functions, stores the data for later use, and closes the file by calling the base class Snapshot::readAndClose() function.

Cells with an associated temperature above the cutoff temperature (if one has been configured) are assigned a density value of zero, so that they have zero mass regardless of the imported mass/density properties. Note that we cannot simply ignore these cells because an empty cell may overlap and thus hide (a portion of) a nonempty cell later in the list.

The function also logs some statistical information about the import. If the snapshot configuration requires the ability to determine the density at a given spatial position, this function builds a data structure that accelerates the search for the appropriate cell.

Reimplemented from Snapshot.

◆ volume()

double CellSnapshot::volume ( int  m) const
overridevirtual

This function returns the volume of the cell with index m. If the index is out of range, the behavior is undefined.

Implements Snapshot.


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