patch_shape_comparison.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import expansion
  2. import patch_size
  3. import potentials
  4. import numpy as np
  5. from parameters import ModelParams
  6. import functions as fn
  7. import matplotlib.pyplot as plt
  8. import scipy.special as sps
  9. def point_to_gauss_map(sigma_m, a_bar, lbd, params: ModelParams):
  10. return (sigma_m * fn.coefficient_Cim(2, params.kappaR) / fn.coefficient_Cpm(2, params.kappaR)
  11. * np.sinh(lbd) / (lbd * fn.sph_bessel_i(2, lbd)) * a_bar ** 2)
  12. def point_to_cap_map(sigma_m, a_bar, theta0, params: ModelParams):
  13. return (sigma_m * 10 * fn.coefficient_Cim(2, params.kappaR) / fn.coefficient_Cpm(2, params.kappaR) *
  14. a_bar ** 2 / (sps.eval_legendre(1, theta0) - sps.eval_legendre(3, theta0))) / 1.7537
  15. def point_to_cap_map2(sigma_1, lbd, theta0):
  16. return (10 * sigma_1 * lbd * fn.sph_bessel_i(2, lbd) /
  17. (np.sinh(lbd) * (sps.eval_legendre(1, theta0) - sps.eval_legendre(3, theta0)))) / 1.7537
  18. if __name__ == '__main__':
  19. target_patch_size = 0.9
  20. params = ModelParams(R=150, kappaR=3)
  21. sigma_m = 0.001
  22. def fn1(x):
  23. return expansion.MappedExpansionQuad(a_bar=x, kappaR=params.kappaR, sigma_m=sigma_m, l_max=30)
  24. def fn2(x):
  25. return expansion.GaussianCharges(lambda_k=x, omega_k=np.array([[0, 0], [np.pi, 0]]), sigma1=0.001, l_max=30)
  26. def fn3(x):
  27. return expansion.SphericalCap(theta0_k=x, sigma1=0.001, l_max=50, omega_k=np.array([[0, 0], [np.pi, 0]]))
  28. a_bar = patch_size.inverse_potential_patch_size(target_patch_size, fn1, 0.5, params)
  29. lbd = patch_size.inverse_potential_patch_size(target_patch_size, fn2, 5, params)
  30. theta0 = patch_size.inverse_potential_patch_size(target_patch_size, fn3, 0.5, params)
  31. ex_point = expansion.MappedExpansionQuad(a_bar=a_bar, kappaR=params.kappaR, sigma_m=sigma_m, l_max=30)
  32. gauss_sigma = point_to_gauss_map(sigma_m, a_bar, lbd, params)
  33. ex_gauss = expansion.GaussianCharges(lambda_k=lbd, omega_k=np.array([[0, 0], [np.pi, 0]]), sigma1=gauss_sigma, l_max=30)
  34. cap_sigma = point_to_cap_map(sigma_m, a_bar, theta0, params)
  35. # cap_sigma = point_to_cap_map2(gauss_sigma, lbd, theta0)
  36. ex_cap = expansion.SphericalCap(theta0_k=theta0, sigma1=cap_sigma, omega_k=np.array([[0, 0], [np.pi, 0]]), l_max=50)
  37. theta = np.linspace(0, np.pi, 1000)
  38. phi = 0.
  39. dist = 1
  40. potential1 = potentials.charged_shell_potential(theta, phi, dist, ex_point, params, print_idx=3)
  41. potential2 = potentials.charged_shell_potential(theta, phi, dist, ex_gauss, params, print_idx=2)
  42. potential3 = potentials.charged_shell_potential(theta, phi, dist, ex_cap, params, print_idx=6)
  43. # print(potential.shape)
  44. # print(potential)
  45. plt.plot(theta, potential1.T)
  46. plt.plot(theta, potential2.T)
  47. plt.plot(theta, potential3.T)
  48. plt.show()