Exemple #1
0
def isic_freq(u, v, model, **kwargs):
    """
    Inverse scattering imaging condition

    Parameters
    ----------
    u: TimeFunction or Tuple
        Forward wavefield (tuple of fields for TTI or dft)
    v: TimeFunction or Tuple
        Adjoint wavefield (tuple of fields for TTI)
    model: Model
        Model structure
    """
    freq = kwargs.get('freq')
    # Subsampled dft time axis
    time = model.grid.time_dim
    dt = time.spacing
    tsave, factor = sub_time(time, kwargs.get('factor'))
    expr = 0
    for uu, vv in zip(u, v):
        ufr, ufi = uu
        # Frequencies
        nfreq = freq.shape[0]
        f = Function(name='f',
                     dimensions=(ufr.dimensions[0], ),
                     shape=(nfreq, ))
        f.data[:] = freq[:]
        omega_t = 2 * np.pi * f * tsave * factor * dt
        # Gradient weighting is (2*np.pi*f)**2/nt
        w = (2 * np.pi * f)**2 / time.symbolic_max
        expr += (w * (ufr * cos(omega_t) - ufi * sin(omega_t)) * vv * model.m -
                 factor / time.symbolic_max *
                 (grads(ufr * cos(omega_t) - ufi * sin(omega_t), so_fact=2).T *
                  grads(vv, so_fact=2)))
    return expr
Exemple #2
0
def inner_grad(u, v):
    """
    Inner product of the gradient of two Function.

    Parameters
    ----------
    u: TimeFunction or Function
        First wavefield
    v: TimeFunction or Function
        Second wavefield
    """
    return sum([a*b for a, b in zip(grads(u, so_fact=2), grads(v, so_fact=2))])
Exemple #3
0
def isic_time(u, v, model, **kwargs):
    """
    Inverse scattering imaging condition

    Parameters
    ----------
    u: TimeFunction or Tuple
        Forward wavefield (tuple of fields for TTI or dft)
    v: TimeFunction or Tuple
        Adjoint wavefield (tuple of fields for TTI)
    model: Model
        Model structure
    """
    w = -u[0].indices[0].spacing * model.irho
    return w * sum(
        uu * vv.dt2 * model.m + grads(uu, so_fact=2).T * grads(vv, so_fact=2)
        for uu, vv in zip(u, v))
Exemple #4
0
def isic_src(model, u, **kwargs):
    """
    ISIC source for linearized modeling

    Parameters
    ----------
    u: TimeFunction or Tuple
        Forward wavefield (tuple of fields for TTI or dft)
    model: Model
        Model containing the perturbation dm
    """
    m, dm, irho = model.m, model.dm, model.irho
    dus = []
    for uu in u:
        du_aux = divs(dm * irho * grads(uu, so_fact=2), so_fact=2)
        dus.append(dm * irho * uu.dt2 * m - du_aux)
    if model.is_tti:
        return (-dus[0], -dus[1])
    return -dus[0]