def plot_potential(elt): nelt = len(elt) (N, _) = problem_size(elt) N += (len(elt) - 1) u = np.zeros((N,)) x_tot = np.zeros((N,)) base = 0 for el in elt: order = el['order'] x = np.cos(np.pi * np.arange(order,-1,-1) / order) xelt = el['a'] * (1-x)/2 + el['b'] * (1+x)/2 x_tot[base:base+order+1] = xelt[:]; u[base:base+order+1] = eval_potential(el, xelt) base = base+order+1 return (x_tot, u)
def plane_forcing (elt, l): """ Compute a forcing vector corresponding to the influence of an incident wave of the form exp(l*x) """ z = l/1.0j (N, _) = problem_size(elt) F = np.zeros((N,), dtype='complex_') base = 0 for el in elt: order = el['order'] x = np.cos(np.pi * np.arange(order,-1,-1) / order) xelt = el['a'] * (1-x)/2.0 + el['b'] * (1+x)/2.0 F[base:base+order+1] = -eval_potential(el, xelt) * np.exp(z*xelt) F[base] = 0 F[base+order] = 0 base = base+order return F