Advertisement
Guest User

Untitled

a guest
Mar 8th, 2021
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1.  
  2. # Parameter (E, L, Q) generation for Kerr spacetime
  3. #
  4. # Example:
  5. #
  6. # (c) 2018-2021 m4r35n357@gmail.com (Ian Smith), for licencing see the LICENCE file
  7.  
  8. import os
  9. import math
  10. #import std/strutils
  11. import dual
  12.  
  13. type Parameters = tuple[r_min: float, r_max: float, theta_max: float, m: float, mu2: float, a: float, a2:float, E: float, L: float, Q: float]
  14.  
  15. type Vector3 = tuple[a: float, b: float, c: float]
  16.  
  17. type Matrix3x3 = tuple[a: float, b: float, c: float, d: float, e: float, f: float, g: float, h: float, i: float]
  18.  
  19. func invert(m: Matrix3x3): Matrix3x3 =
  20. let
  21. c: Matrix3x3 = ((m.e * m.i - m.f * m.h), -(m.d * m.i - m.f * m.g), (m.d * m.h - m.e * m.g),
  22. -(m.b * m.i - m.c * m.h), (m.a * m.i - m.c * m.g), -(m.a * m.h - m.b * m.g),
  23. (m.b * m.f - m.c * m.e), -(m.a * m.f - m.c * m.d), (m.a * m.e - m.b * m.d))
  24. d: float = m.a * c.a + m.b * c.b + m.c * c.c
  25. assert(d != 0.0);
  26. return (c.a / d, c.d / d, c.g / d,
  27. c.b / d, c.e / d, c.h / d,
  28. c.c / d, c.f / d, c.i / d)
  29.  
  30. func mv_mult(m: Matrix3x3, v: Vector3): Vector3 =
  31. return (m.a * v.a + m.b * v.b + m.c * v.c,
  32. m.d * v.a + m.e * v.b + m.f * v.c,
  33. m.g * v.a + m.h * v.b + m.i * v.c)
  34.  
  35. func R(p: Parameters, r: float, E: Dual, L: Dual, Q: Dual): Dual =
  36. let
  37. r2: float = r * r
  38. delta: float = r2 - 2.0 * p.m * r + p.a2
  39. P: Dual = E * (r2 + p.a2) - L * p.a)
  40. K: Dual = (L - E * p.a) * (L - E * p.a) + Q
  41. P * P - delta * (p.mu2 * r2 + K)
  42.  
  43. func dR_dr(p: Parameters, r: float, E: Dual, L: Dual, Q: Dual): Dual =
  44. let
  45. r2: float = r * r
  46. delta: float = r2 - 2.0 * p.m * r + p.a2
  47. P: Dual = E * (r2 + p.a2) - L * p.a)
  48. K: Dual = (L - E * p.a) * (L - E * p.a) + Q
  49. 4.0 * E * r * P - (2.0 * r - 2.0 * p.m) * (p.mu2 * r2 + K) - 2.0 * p.mu2 * r * delta
  50.  
  51. func THETA(p: Parameters, float theta, E: Dual, L: Dual, Q: Dual): Dual =
  52. let
  53. cth2: float = cos(theta) * cos(theta)
  54. sth2: float = 1.0 - cth2
  55. Q - cth2 * ((p.mu2 - E * E) * p.a2 + L * L / sth2)
  56.  
  57. proc plot(p: Parameters) =
  58. echo p.q_r * sin(p.q_phi), " ", p.q_r * cos(p.q_phi), " ", 0.0, " ", t, " ", 10.0 * log10(if e >= 1e-36 : e else: 1e-36)
  59.  
  60. proc generate(p: Parameters):
  61. echo "Generate"
  62.  
  63. let
  64. args: seq[string] = commandLineParams()
  65. var
  66. p: Parameters = (parseFloat(args[1]), parseFloat(args[2]), parseFloat(args[3]), 1.0, 0.0, 0.0)
  67. generate(p)
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement