Skip to content

ipole, radiative transfer, and you

George N. Wong edited this page Nov 21, 2019 · 2 revisions

ipole

ipole is a "observer-to-emitter" radiative transfer code that produces polarized images from iharm3d-format GRMHD fluid dump files. It does this by first tracing the paths of light (geodesics) from a specified camera position towards the black hole through the fluid data in the computational domain. After, it takes these geodesic paths and integrates the equations of (polarized) radiative transfer forwards along the geodesics through the fluid to the camera. Some details of the implementation are provided below.

the camera

The camera in ipole is located at a user-specified position in real space, denoted by the contravariant 4-position Xcam[4] = { xt, xr, xh, xp } where each component is given in "internal geodesic coordinates", most likely FMKS. To aid the user in translating between conventional KS (or BL) coordinates and the internal coordinate system, ipole accepts (expects) to be given the camera location in terms of KS radius (in M := GM/c2), inclination (in degrees), and azimuth (also in degrees). Note that at large radius, these three quantities are equivalent to their BL counterparts up to an arbitrary definitional constant offset in azimuth.

The ipole camera is implemented as a pinhole camera. In practice, this means that the geodesics corresponding to each camera "pixel" all intersect at Xcam but have slightly different headings, written in terms of the contravariant 4-wavectors Kcon[4]. These headings are equally separated in the local orthonormal frame and span a range on the sky at the camera corresponding to the fov parameter. More concretely: Given an input target "field of view" at the black hole DX in units of M, ipole calculates the corresponding field of view fov = arctan[ DX / rcam ] where rcam is the distance between the camera and the black hole in units of M.

One has several choices to make in choosing a basis for the orthonormal frame at the camera. The following is conventional in radiative transfer codes and is motivated by several considerations. Hereafter, we use Vtetradcon to express the contravariant components of the 4-vector Vcon in the tetrad basis.

Tetrads are completely specified by four linearly independent vectors. For simplicity, we choose the camera frame to be the normal observer frame. We then orient the image plane of the camera to be normal to a vector which has zero impact parameter with respect to the black hole. The final two directions are chosen so that the image is "upright" with respect to the black hole, and so the vertical image axis will be parallel to the projection of the black hole spin axis on the image.

In the tetrad basis, we choose that ktetradcon ~ ( 1, 0, 0, 1 ) will represent the wavevector of a photon that is normal to the image plane. In particular, the 3rd contravariant component is aligned along the outward zero-impact-parameter direction. The second and third components are the conventional image x and y coordinates, which are perpendicular and parallel to the projection of the black hole spin axis respectively.

Conversion between the tetrad and internal coordinate bases is facilitated by Econ[a][mu] and its covariant analog which can be contracted into (for example) vectors given in the tetrad basis. In Einstein notation, this corresponds to

vμ = Eμa vtetrada

where a indexes the tetrad basis.

We construct Econ by orthonormalizing the four basis vectors specified above. In order to ensure that ( 1, 0, 0, 1 ) maps to a vector with kcov[3] = 0, i.e., a zero-impact-parameter vector, the first two components set in Econ are (before being orthonormalized, and represented below in order)

Econ[0][mu] <- Gcon[mu][nu] (-1, 0, 0, 0)   /* sign chosen such that routines enforce handedness and direction */
Econ[3][mu] <- Gcon[mu][nu] (1, 1, 0, 0)
Econ[1][mu] <- (0, 1, 0, 0)

which ensures

ktetradcon[a] ~ ( 1, 0, 0, 1 ) 
=> kcon[mu] ~ Econ[0][mu] + Econ[3][mu] 
=> kcov[3] = gcov[3][mu] kcon[mu] = gcov[3][mu] Econ[0][mu] + gcov[3][mu] Ecov[3][mu] = 0
Clone this wiki locally