# Geometric Solvers¶

The geometric solvers calculate ionization and/or temperature structure in simple spherical and planar geometries. The systems are discretized into layers and the attenuation of radiation is calculated in each. Sweeps are made through the layers during which the appropriate single zone solver is called in each layer. The sweeps continue until convergence is achieved.

`SlabPln`:
A planar gas distribution with plane parallel radiation incident from one side.
`Slab2Pln`:
A planar gas distribution with plane parallel radiation incident from both sides.
`Slab2Bgnd`:
A planar gas distribution with an isotropic radiation field incident from both sides.
`SphereStromgren`:
A spherically symmetric gas distribution with a point source at the center.
`SphereBgnd`:
A spherically symmetric gas distribution in a uniform background radiation field.

## Positional Arguments¶

All geometric classes share a common set of arguments. The positional (i.e. mandatory) arguments describe the gas distribution.

Args:

Edges (array): Position of discrete elements.

T (array): Temperature in each discrete element.

nH (array): Hydrogen number density in each discrete element.

nHe (array): Helium number density in each discrete element.

rad_src (`PointSource`, `PlaneSource`, or `BackgroundSource`): Radiation sources.

The first argument, Edges, describes the edges of each layer. For slabs, Edges is the distance from one of the illuminated surfaces of the slab to each layer edge. For spheres, Edges is the distance from the center of the sphere to each spherical layer edge. For a system discretized into N layers, Edges is an array with N+1 entries. Most of the time, the first element should be zero and the last the thickness of the slab or radius of the sphere, but this is not required. The next three arguments, T, nH, and nHe, are arrays with N elements and describe the initial temperature and density in each layer. The final required argument(s) should be instances of classes describing sources of radiation.

## Keyword Arguments¶

Many keyword (i.e. optional) arguments are shared among the geometric classes and can be used to change the default solver behaviour.

### Recombination¶

The default solver behaviour is to use case A recombination rates in each discrete element. These keyword arguments alter this behaviour.

Kwargs:

rec_meth (string): How to treat recombinations {`fixed`, `outward`, `radial`, `ray`}

fixed_fcA (float): If rec_meth = `fixed`, constant case A fraction.

If rec_meth = `fixed` a constant case A fraction will be used in each discrete element. The keyword fixed_fcA sets this value. If fixed_fcA is set to `1.0` then case A rates are used throughout and recombination radiation is ignored. If fixed_fcA is set equal to `0.0` then case B rates are used throughout. This is known as the on-the-spot approximation. Setting fixed_fcA to a float between `0.0` and `1.0` will produce results bracketed by case A and case B results.

In spherical geometries, one can also choose to set rec_meth to `outward`, `radial`, or `isotropic`. If this is done, case A recombination rates are used, and recombination radiation is transported through the density field. For rec_meth = `outward`, all recombination radiation is transported radially outward (see [Ritzerveld05]). For rec_meth = `radial`, recombination radiation is transported radially inward and outward. For rec_meth = `isotropic`, recombination radiation is transported isotropically from each layer. The last is the most realistic option.

In planar geometries, one can choose to set rec_meth to `ray`. If this is done, case A rates are used and recombination radiation contributes an isotropic flux from each slab layer which is transported through the density field.

### Other¶

Kwargs:

find_Teq (bool): If `False`, use fixed input T, if `True` solve for equilibrium T (i.e. use `Solve_PCTE` as the single zone solver in each element).

z (float): Redshift, only need if find_Teq = `True`

tol (float): tolerance for all convergence tests

thin (bool): if `True` radiation is not attenuated by passage through absorbing gas.

If the find_Teq keyword is set to `True`, photo collisional thermal equilibrium will be found in each discrete element and the user must provide a redshift, z. If the thin keyword is set to `True`, it is assumed that the radiation is not attenuated by passage through the discrete elements and optically thin values for the photoionization and/or photoheating rates are used. The argument tol is a general slider in which lower values produce longer run times but more accurate results. It is the deviation from unity allowed in the sum of the electron number density over all discrete elements between consecutive iterations.