Krang api
Krang.AbstractCameraKrang.AbstractGeometryKrang.AbstractMaterialKrang.AbstractMetricKrang.AbstractPixelKrang.AbstractScreenKrang.ConeGeometryKrang.ElectronSynchrotronPowerLawPolarizationKrang.IntensityCameraKrang.IntensityPixelKrang.IntensityScreenKrang.KerrKrang.MeshKrang.SlowLightIntensityCameraKrang.SlowLightIntensityPixelKrang.SlowLightIntensityScreenKrang.UnionGeometryKrang.GθKrang.IrKrang.Ir_infKrang.Ir_sKrang.ItKrang.It_infKrang.It_w_I0_termsKrang.IϕKrang.Iϕ_infKrang.Iϕ_w_I0_termsKrang._isreal2Krang.emission_azimuthKrang.emission_coordinatesKrang.emission_coordinates_fast_lightKrang.emission_inclinationKrang.emission_radiusKrang.get_radial_rootsKrang.horizonKrang.jac_bl_d_zamo_uKrang.jac_bl_u_zamo_dKrang.jac_fluid_u_zamo_dKrang.jac_zamo_d_bl_uKrang.jac_zamo_u_bl_dKrang.metric_ddKrang.metric_uuKrang.mino_timeKrang.p_bl_dKrang.penrose_walkerKrang.r_potentialKrang.radial_inf_integrals_case2Krang.radial_inf_integrals_case3Krang.radial_inf_integrals_case4Krang.radial_integralsKrang.radial_w_I0_terms_integrals_case2Krang.radial_w_I0_terms_integrals_case3Krang.radial_w_I0_terms_integrals_case4Krang.regularized_PiKrang.screen_polarizationKrang.synchrotronIntensityKrang.synchrotronPolarizationKrang.αKrang.αboundaryKrang.βKrang.βboundaryKrang.ηKrang.θ_potentialKrang.λ
Raytracing Functions
Krang.emission_radius Function
emission_radius(
pix::Krang.AbstractPixel,
θs,
isindir,
n
) -> Tuple{Any, Any, Any, Any, Bool}Emission radius for point originating at inclination θs whose nth order image appears at the screen coordinate (α, β). Returns 0 if the emission coordinates do not exist for that screen coordinate.
Arguments
pix: Pixel informationθs: Emission inclinationisindir: Is emission to observer direct or indirectn: Image index
emission_radius(
pix::Krang.AbstractPixel,
τ
) -> Tuple{Any, Any, Any, Bool}Emission radius for point originating at at Mino time τ whose image appears at the screen coordinate (α, β). Returns 0 if the emission coordinates do not exist for that screen coordinate.
Arguments
-pix : Pixel information
τ: Mino time
Krang.emission_inclination Function
emission_inclination(pix::Krang.AbstractPixel, rs, νr)Emission inclination for point originating at inclination rs whose nth order image appears at screen coordinate (α, β).
Arguments
pix: Pixel informationrs: Emission radiusνr: Sign of radial velocity direction at emission. This is always positive for case 3 and case 4 geodesics.
emission_inclination(
pix::Krang.AbstractPixel,
τ
) -> NTuple{6, Any}Emission inclination for point at Mino time τ whose image appears at screen coordinate (α, β).
Arguments
pix: Pixel informationτ: Mino Time
Krang.emission_coordinates_fast_light Function
emission_coordinates_fast_light(
pix::Krang.AbstractPixel,
θs,
isindir,
n
) -> Tuple{Any, Any, Any, Any, Any, Bool}Emission radius and azimuthal angle for point originating at inclination θs whose nth order image appears at the screen coordinate (α, β) for an observer located at inclination θo.
Arguments
pix: Pixel informationθs: Emission Inclinationisindir: Whether emission to observer is direct or indirectn: Image index
Krang.emission_coordinates Function
emission_coordinates(
pix::Krang.AbstractPixel,
θs,
isindir,
n
) -> Tuple{Any, Any, Any, Any, Any, Any, Bool}Emission radius and azimuthal angle for point originating at inclination θs whose nth order image appears at the screen coordinate (α, β) for an observer located at inclination θo.
Arguments
pix: Pixel informationθs: Emission Inclinationisindir: Whether emission to observer is direct or indirectn: Image index
emission_coordinates(
pix::Krang.AbstractPixel,
τ
) -> Tuple{Any, Any, Any, Any, Any, Any, Bool}Raytrace a point that appears at the screen coordinate (α, β) for an observer located at inclination θo
Arguments
pix: Pixel informationτ: Mino Time
Krang.mino_time Function
mino_time(pix, rs, isindir) -> AnyMino time of trajectory between an observer at infinity and point at radius rs
Arguments
pix: Pixel informationrs: Emission radiusisindir: Is the path direct or indirect?
mino_time(pix::Krang.AbstractPixel, θs, isindir, n) -> AnyMino time of trajectory between two inclinations for a given screen coordinate
Arguments
pix: Pixel informationθs: Emission inclinationisindir: Is the path direct or indirect?n: nth image in orde of amount of minotime traversed
Metric Functions
Krang.Kerr Type
struct Kerr{T} <: Krang.AbstractMetricKerr Metric in Boyer Lindquist Coordinates
mass: M = massspin: a = J/M, where J is the angular momentum and M is the mass of the blackhole.
Krang.metric_uu Function
metric_uu(metric::Krang.AbstractMetric, args...) -> AnyReturns the inverse metric in some representation (usually as an nxn matrix).
metric_uu(metric::Kerr{T}, r, θ) -> AnyInverse Kerr metric in Boyer Lindquist (BL) coordinates.
metric_uu(metric::Kerr{T}, coordinates) -> AnyInverse Kerr metric in Boyer Lindquist (BL) coordinates.
Arguments
metric: Kerr metriccoordinates: Coordinates (t, r, θ, ϕ)
Krang.metric_dd Function
metric_dd(metric::Krang.AbstractMetric, args...) -> AnyReturns the metric in some representation (usually as an nxn matrix).
metric_dd(metric::Kerr{T}, r, θ) -> AnyKerr metric in Boyer Lindquist (BL) coordinates.
metric_dd(metric::Kerr{T}, coordinates) -> AnyKerr metric in Boyer Lindquist (BL) coordinates.
Arguments
metric: Kerr metriccoordinates: Coordinates (t, r, θ, ϕ)
Krang.λ Function
λ(_::Kerr, α, θo) -> AnyEnergy reduced azimuthal angular momentum
Arguments
metric: Kerrα: Horizontal Bardeen screen coordinateθo: Observer inclination
Krang.η Function
η(metric::Kerr, α, β, θo) -> AnyEnergy reduced Carter integral
Arguments
metric: Kerrα: Horizontal Bardeen screen coordinateβ: Bardeen vertical coordinateθo: Observer inclination
Radial Integrals
Krang.r_potential Function
r_potential(metric::Kerr{T}, η, λ, r) -> AnyRadial potential of spacetime
Arguments
metric: Kerr{T} metricη: Reduced Carter constantλ: Reduced azimuthal angular momentumr: Boyer Lindquist radius
Krang.get_radial_roots Function
get_radial_roots(metric::Kerr{T}, η, λ) -> NTuple{4, Any}Returns roots of
Arguments
metric: Kerr{T} metricη: Reduced Carter constantλ: Reduced azimuthal angular momentum
Krang.Ir Function
Ir(pix::Krang.AbstractPixel, νr::Bool, rs) -> AnyReturns the antiderivative r_potential(x) for an implementation of
Arguments
pix: Pixel informationνr: Sign of radial velocity direction at emission. This is always positive for case 3 and case 4 geodesics.rs: Emission radius
Angular Integrals
Krang.θ_potential Function
θ_potential(metric::Kerr{T}, η, λ, θ) -> AnyTheta potential of a Kerr blackhole
Arguments
metric: Kerr{T} metricη: Reduced Carter constantλ: Reduced azimuthal angular momentumθ: Boyer Lindquist inclination
Krang.Gθ Function
Gθ(
pix::Krang.AbstractPixel,
θs,
isindir,
n
) -> Tuple{Any, Any, Any, Any, Any, Bool}Returns the antiderivative θ_potential(x) for an implementation of
Arguments
pix: Pixel informationθs: Emission inclinationisindir: Is the path direct or indirect?n: nth image ordered by minotime
Screen Coordinates
Krang.α Function
α(_::Kerr, λ, θo) -> AnyHorizontal Bardeen Screen Coordinate
Arguments
metric: Kerrα: Horizontal Bardeen screen coordinateθo: Observer inclination
Krang.β Function
β(metric::Kerr, λ, η, θo) -> AnyVertical Bardeen Screen Coordinate
Arguments
metric: Kerrλ: Energy reduced Azimuthal angular momentulη: Energy reduced Carter integralθo: Observer inclination
Krang.αboundary Function
αboundary(metric::Kerr, θs) -> AnyDefines a horizontal boundary on the assmyptotic observer's screen that emission that from θs must fall within.
Arguments
metric: Kerr metricθs: Emission Inclination
Krang.βboundary Function
βboundary(metric::Kerr{T}, α, θo, θs) -> AnyDefines a vertical boundary on the assmyptotic observer's screen that emission that from θs must fall within.
Arguments
metric: Kerr{T} metricα: Horizontal Bardeen screen coordinateθo: Observer inclinationθs: Emission Inclination
Polarization Functions
Krang.p_bl_d Function
p_bl_d(
metric::Kerr{T},
r,
θ,
η,
λ,
νr::Bool,
νθ::Bool
) -> AnyReturns the momentum form in the Boyer-Lindquist basis.Krang.jac_bl_u_zamo_d Function
jac_bl_u_zamo_d(metric::Kerr{T}, r, θ) -> AnyJacobian which converts ZAMO vector to a Boyer-Lindquist basis
Krang.jac_zamo_u_bl_d Function
jac_zamo_u_bl_d(metric::Kerr{T}, r, θ) -> AnyJacobian which converts Boyer-Lindquist vector to a ZAMO basis
Krang.jac_bl_d_zamo_u Function
jac_bl_d_zamo_u(metric::Kerr{T}, r, θ) -> AnyJacobian which converts ZAMO covector to a Boyer-Lindquist basis
Krang.jac_zamo_d_bl_u Function
jac_zamo_d_bl_u(metric::Kerr{T}, r, θ) -> AnyReturns the Jacobian which converts a Boyer-Lindquist covector to ZAMO basis.
Krang.jac_fluid_u_zamo_d Function
jac_fluid_u_zamo_d(_::Kerr{T}, β, θ, φ) -> AnyJacobian which expreases ZAMO vector in the fluid frame
Krang.screen_polarization Function
screen_polarization(
metric::Kerr{T},
κ::Complex,
θ,
α,
β
) -> Tuple{Any, Any}Returns the screen polarization associated with a killing spinor κ as seen seen by an assymptotic observer.
Krang.penrose_walker Function
penrose_walker(
metric::Kerr{T},
r,
θ,
p_u::AbstractVector,
f_u::AbstractVector
) -> Tuple{Any, Any}Returns the Penrose walker constant for a photon with momentum p_u emitted from a fluid particle with momentum f_u.
Krang.synchrotronIntensity Function
synchrotronIntensity(
metric::Kerr{T},
α,
β,
ri,
θs,
θo,
magfield::StaticArraysCore.SArray{Tuple{3}, T, 1, 3},
βfluid::StaticArraysCore.SArray{Tuple{3}, T, 1, 3},
νr::Bool,
θsign::Bool
) -> Tuple{Any, Any, Any}Calculates the intensity of a photon emitted from a fluid particle with momentum f_u and observed by an asymptotic observer.
Krang.synchrotronPolarization Function
synchrotronPolarization(
metric::Kerr{T},
α,
β,
ri,
θs,
θo,
magfield::StaticArraysCore.SArray{Tuple{3}, T, 1, 3},
βfluid::StaticArraysCore.SArray{Tuple{3}, T, 1, 3},
νr::Bool,
θsign::Bool
) -> NTuple{4, Any}Calculates the polarization of a photon emitted from a fluid particle with momentum f_u and observed by an asymptotic observer.
Raytracing API Related Functions
Krang.ElectronSynchrotronPowerLawPolarization Type
struct ElectronSynchrotronPowerLawPolarization <: Krang.AbstractMaterialLinear polarization material from https://doi.org/10.3847/1538-4357/abf117
Krang.UnionGeometry Type
struct UnionGeometry{G1, G2} <: Krang.AbstractGeometryGeometry that is comprised of the union of two geometries.
Misc
Krang._isreal2 Function
_isreal2(num::Complex{T}) -> AnyChecks if a complex number is real to some tolerance
Krang.regularized_Pi Function
regularized_Pi(n, ϕ, k) -> AnyRegularized elliptic integral of the third kind
Arguments
n: Parameterϕ: Argumentsk: Parameter
Krang.radial_inf_integrals_case4 Function
radial_inf_integrals_case4(
metric::Kerr{T},
roots::NTuple{4, T} where T
) -> NTuple{4, Any}Returns the radial integrals for the case where there are no real roots in the radial potential
Krang.It_w_I0_terms Function
It_w_I0_terms(
metric::Kerr{T},
rs,
τ,
roots::NTuple{4, T} where T,
λ,
νr
) -> AnyReturns the antiderivative
See r_potential(x) for an implementation of
Arguments
metric: Kerr{T} metricroots: Radial rootsλ: Reduced azimuthal angular momentumνr: Radial emission direction (Only necessary for case 1&2 geodesics)
Krang.Ir_inf Function
Ir_inf(metric::Kerr{T}, roots) -> AnyReturns the antiderivative r_potential(x) for an implementation of
Arguments
metric: Kerr{T} metricroots: Roots of the radial potential
Krang.emission_azimuth Function
emission_azimuth(
pix::Krang.AbstractPixel,
θs,
rs,
τ,
νr,
isindir,
n
) -> AnyEmission azimuth for point at Mino time τ whose image appears at screen coordinate (α, β).
Arguments
pix: Pixel informationθs: Emission Inclinationrs:Emission radiusτ: Mino Timeνr: Sign of radial velocity direction at emission. This is always positive for case 3 and case 4 geodesics.
Krang.ConeGeometry Type
struct ConeGeometry{T, A} <: Krang.AbstractGeometryCone Geometry with half opening angle opening_angle.
Krang.Iϕ Function
Iϕ(pix::Krang.AbstractPixel, rs, τ, νr) -> AnyReturns the antiderivative r_potential(x) for an implementation of
Arguments
pix: SlowLightIntensityPixelrs: Emission radiusτ: Mino timeνr: Sign of radial velocity direction at emission. This is always positive for case 3 and case 4 geodesics.
Krang.SlowLightIntensityCamera Type
struct SlowLightIntensityCamera{T, A} <: Krang.AbstractCameraObserver sitting at radial infinity. The frame of this observer is alligned with the Boyer-Lindquist frame.
Krang.Iϕ_w_I0_terms Function
Iϕ_w_I0_terms(metric::Kerr{T}, rs, τ, roots, νr, λ) -> AnyReturns the antiderivative
See r_potential(x) for an implementation of
Arguments
metric: Kerr{T} metricτ: Minotimeroots: Radial rootsνr: Radial emission direction (Only necessary for case 1&2 geodesics)λ: Reduced azimuthal angular momentum
Krang.SlowLightIntensityPixel Type
struct SlowLightIntensityPixel{T} <: Krang.AbstractPixel{T}Intensity Pixel Type.
Krang.Iϕ_inf Function
Iϕ_inf(metric::Kerr{T}, roots, λ) -> AnyReturns the antiderivative
See r_potential(x) for an implementation of
Arguments
metric: Kerr{T} metricroots: Radial rootsλ: Reduced azimuthal angular momentum
Krang.radial_inf_integrals_case3 Function
radial_inf_integrals_case3(
metric::Kerr{T},
roots::NTuple{4, T} where T
) -> NTuple{4, Any}Returns the radial integrals for the case where there are two real roots in the radial potential
Krang.radial_w_I0_terms_integrals_case2 Function
radial_w_I0_terms_integrals_case2(
metric::Kerr{T},
rs,
roots::NTuple{4, T} where T,
τ,
νr
) -> TupleReturns the radial integrals for the case where there are four real roots in the radial potential, with roots outside the horizon.
Krang.SlowLightIntensityScreen Type
struct SlowLightIntensityScreen{T, A<:(AbstractMatrix)} <: Krang.AbstractScreenScreen made of Intensity Pixels.
Krang.radial_w_I0_terms_integrals_case4 Function
radial_w_I0_terms_integrals_case4(
metric::Kerr{T},
rs,
roots::NTuple{4, T} where T,
τ
) -> NTuple{4, Any}Returns the radial integrals for the case where there are no real roots in the radial potential
Krang.radial_integrals Function
radial_integrals(
pix::Krang.AbstractPixel,
rs,
τ,
νr
) -> NTuple{5, Any}Return the radial integrals
pix: SlowLightIntensityPixelrs: Emission radiusτ: Mino timeνr: Sign of radial velocity direction at emission. This is always positive for case 3 and case 4 geodesics.
Krang.IntensityScreen Type
struct IntensityScreen{T, A<:(AbstractMatrix)} <: Krang.AbstractScreenScreen made of Intensity Pixels.
Krang.It Function
It(pix::Krang.AbstractPixel, rs, τ, νr) -> AnyReturns the antiderivative r_potential(x) for an implementation of
Arguments
pix: SlowLightIntensityPixelrs: Emission radiusτ: Mino timeνr: Sign of radial velocity direction at emission. This is always positive for case 3 and case 4 geodesics.
Krang.IntensityPixel Type
struct IntensityPixel{T} <: Krang.AbstractPixel{T}Intensity Pixel Type. Each Pixel is associated with a single ray, and caches some information about the ray.
Krang.radial_w_I0_terms_integrals_case3 Function
radial_w_I0_terms_integrals_case3(
metric::Kerr{T},
rs,
roots::NTuple{4, T} where T,
τ
) -> NTuple{4, Any}Returns the radial integrals for the case where there are two real roots in the radial potential
Krang.IntensityCamera Type
struct IntensityCamera{T, A} <: Krang.AbstractCameraObserver sitting at radial infinity. The frame of this observer is alligned with the Boyer-Lindquist frame.
Krang.Ir_s Function
Ir_s(metric::Kerr{T}, rs, roots, νr) -> AnyReturns the antiderivative r_potential(x) for an implementation of
Arguments
metric: Kerr{T} metricrs: Emission radiusroots: Roots of the radial potentialνr: Radial emission direction (Only necessary for case 1&2 geodesics)
Krang.radial_inf_integrals_case2 Function
radial_inf_integrals_case2(
metric::Kerr{T},
roots::NTuple{4, T} where T
) -> NTuple{4, Any}Returns the radial integrals for the case where there are four real roots in the radial potential, with roots outside the horizon.
Krang.It_inf Function
It_inf(
metric::Kerr{T},
roots::NTuple{4, T} where T,
λ
) -> AnyReturns the antiderivative
See r_potential(x) for an implementation of
Arguments
metric: Kerr{T} metricroots: Radial rootsλ: Reduced azimuthal angular momentum