Ejemplo n.º 1
0
def checked_resonances2(elt, neigs=0, tol=1e-6):
    """
    Compute resonances with two densities in order to check convergence.
    If the same answer occurs to within tol, accept the pole as converged.
    Inputs:
      elt   - coarse mesh
      neigs - number of poles desired? (default: 0 -> compute all)
      tol   - absolute estimated error tolerance (default: 1e-6)
              Use tol = 0 to return everything
    """

    (l, V) = compute_resonances(elt, neigs)
    if neigs == 0:
        neigs = len(l)
    N = problem_size(elt)
    dl = np.zeros((neigs,1))
    V = V[0:N,:]

    for k in range(0,neigs):
        dl[k] = errest_resonance(elt, l[k], V[:,k])

    if tol > 0:
        # Filter eigenvalues
        is_good = np.abs(dl) < tol
        l  = l[is_good]
        dl = dl[is_good]
        V  = V[:,is_good]
Ejemplo n.º 2
0
def checked_resonances(elt, neigs=0, tol=1e-6):
    """
    Compute resonances with two densities in order to check convergence.
    If the same answer occurs to within tol, accept the pole as converged.

    Inputs:
        elt   -- coarse mesh
        neigs -- number of poles desired? (default: 0 -> compute all)
        tol   -- match tolerance (default: 1e-6)

    Output:
        l     --

    """

    elt2 = copy.deepcopy(elt)
    for i in range(len(elt)):
        elt2[i]['order'] = int(np.ceil(elt[i]['order'] * 1.5))

    l1 = compute_resonances(elt=elt, neigs=neigs)
    l2 = compute_resonances(elt=elt2, neigs=neigs)

    l = compare_eigs(l2, l1, tol)
    return l