Source code for kerrpy.universe

from .utils.attr_dict import AttrDict

from numpy import cos, arccos, sqrt


[docs]class Universe:
[docs] def __init__(self, spin=0.999, innerDiskRadius=9, outerDiskRadius=20): self._spin = spin self.spinSquared = spin * spin self.accretionDisk = AttrDict(innerRadius=innerDiskRadius, outerRadius=outerDiskRadius) self.cameras = set() self.update()
[docs] def update(self): # Compute radius of trapped photons' orbits self.r1, self.r2 = self.computeTrappedOrbits() # Compute necessary constants for the origin algorithm. See (A.13) self.b1, self.b2 = self.computeBConstants() # Compute horizon radius self.horizonRadius = self.computeHorizonRadius() # Propagate the changes to all cameras for camera in self.cameras: camera._update()
[docs] def computeTrappedOrbits(self): # Interval over the radius of trapped photons' orbits run. See (A.6) r1 = 2. * (1. + cos((2. / 3.) * arccos(-self.spin))) r2 = 2. * (1. + cos((2. / 3.) * arccos(+self.spin))) return r1, r2
def _b0(self, r): a = self.spin a2 = self.spinSquared return -(r**3. - 3. * (r**2.) + a2 * r + a2) / (a * (r - 1.))
[docs] def computeBConstants(self): # Necessary constants for the origin algorithm. See (A.13) b1 = self._b0(self.r2) b2 = self._b0(self.r1) return b1, b2
[docs] def computeHorizonRadius(self): return 1 + sqrt(1 - self.spinSquared)
@property def spin(self): return self._spin @spin.setter def spin(self, value): # Set new spin value and its square self._spin = value self.spinSquared = value * value # Update Universe properties self.update()
universe = Universe()