def GetIncExpansionCoeffs_Amn(self, m, n): E0, k, theta_0, c = self.E0, self.k, self.theta, self.c eps_m = 2.0 if m==0: eps_m = 1.0 N_mn = GetInt_Sm_mpn_Sm_mpN(c, m, n-m, n-m) A_mn = 2.0* eps_m * pro_ang1(m, n, c, np.cos(theta_0))[0] / N_mn j_nm1 = 1j**((n-1)%4) return E0/k * j_nm1 * A_mn
def GetETMonSurface_expansion(self, etas, ksi_0, phi_0): E_0, k, d, c_0 = self.E0, self.k, self.d, self.c assert phi_0 == 0 theta_0 = np.pi/2 n_eta = len(etas) E_eta = np.zeros(n_eta, dtype=complex) E_ksi = np.zeros(n_eta, dtype=complex) N = self.N_max for i in range(n_eta): eta = etas[i] for m in range(N): for n in range(m, N): A_mn = self.GetIncExpansionCoeffs_Amn(m, n) E_eta[i] += A_mn * 2*(ksi_0**2 - 1)*GetDerivativeRadialFunc(1, m, n, c_0, ksi_0) \ *pro_ang1(m, n, c_0, eta)[0] \ /(d*np.sqrt(ksi_0**2 - eta**2)*np.sqrt(ksi_0**2 - 1)) E_ksi[i] += A_mn * (-2)*(1 - eta**2)*pro_ang1(m, n, c_0, eta)[1] \ *GetRadialFunc(1, m, n, c_0, ksi_0) \ /(d*np.sqrt(ksi_0**2 - eta**2)*np.sqrt(1 - eta**2)) return E_eta, E_ksi
def f(x): return pro_ang1(m+2, m+n+2, c, x)[0]*pro_ang1(m, m+N, c, x)[0]*x
def f(x): return pro_ang1(m+1, m+n+1, c, x)[1]*pro_ang1(m, m+N, c, x)[0]*x*np.sqrt(1 - x**2)
def f(x): return pro_ang1(m, m+n, c, x)[1]*pro_ang1(m, m+N, c, x)[0]*(1 - x**2)
def f(x): return pro_ang1(m, m+n, c, x)[0]*pro_ang1(m, m+N, c, x)[0]
def GetM_mn_o_z_phi(eta, ksi, phi, m, n, c, d): return 2*np.sqrt(-eta**2 + 1)*np.sqrt(ksi**2 - 1)*(-eta*GetRadialFunc(4, m, n, c, ksi)*pro_ang1(m, n, c, eta)[1] + ksi*pro_ang1(m, n, c, eta)[0]*GetDerivativeRadialFunc(4, m, n, c, ksi))*np.sin(phi*m)/(d*(eta**2 - ksi**2))
def GetM_mn_o_z_ksi(eta, ksi, phi, m, n, c, d): return 2*ksi*m*GetRadialFunc(4, m, n, c, ksi)*pro_ang1(m, n, c, eta)[0]*np.cos(phi*m)/(d*np.sqrt(-eta**2 + ksi**2)*np.sqrt(ksi**2 - 1))
def GetM_mn_o_z_eta(eta, ksi, phi, m, n, c, d): return -2*eta*m*GetRadialFunc(4, m, n, c, ksi)*pro_ang1(m, n, c, eta)[0]*np.cos(phi*m)/(d*np.sqrt(-eta**2 + 1)*np.sqrt(-eta**2 + ksi**2))
def GetM_mminus1n_o_minus_phi(eta, ksi, phi, m, n, c, d): return -(eta*(ksi**2 - 1)*pro_ang1(m, n, c, eta)[0]*GetDerivativeRadialFunc(4, m, n, c, ksi) - ksi*(eta**2 - 1)*GetRadialFunc(4, m, n, c, ksi)*pro_ang1(m, n, c, eta)[1])*np.sin(phi*(m - 1))/(d*(eta**2 - ksi**2))
def GetM_mminus1n_o_minus_ksi(eta, ksi, phi, m, n, c, d): return ((1.0-eta**2)*pro_ang1(m, n, c, eta)[1] - eta*m*pro_ang1(m, n, c, eta)[0])*GetRadialFunc(4, m, n, c, ksi)*np.cos(phi*(m - 1))/(d*np.sqrt(-eta**2 + 1)*np.sqrt(-eta**2 + ksi**2))
def GetM_mminus1n_o_minus_eta(eta, ksi, phi, m, n, c, d): return ((1.0 - ksi**2)*GetDerivativeRadialFunc(4, m, n, c, ksi) - ksi*m*GetRadialFunc(4, m, n, c, ksi))*pro_ang1(m, n, c, eta)[0]*np.cos(phi*(m - 1))/(d*np.sqrt(-eta**2 + ksi**2)*np.sqrt(ksi**2 - 1))
def f(x): return pro_ang1(0, n, c, x)[1]*pro_ang1(1, 1+N, c, x)[0]*x*np.sqrt(1 - x**2)