Beispiel #1
0
def generate_shotdata_i(src_coordinates, rec_coordinates, param, true_model):
    """ Inversion crime alert! Here the worker is creating the
        'observed' data using the real model. For a real case
        the worker would be reading seismic data from disk.
    """

    # Geometry
    geometry = AcquisitionGeometry(true_model,
                                   rec_coordinates,
                                   src_coordinates,
                                   param['t0'],
                                   param['tn'],
                                   src_type='Ricker',
                                   f0=param['f0'])
    geometry.resample(param['dt'])

    # Set up solver.
    solver = AcousticWaveSolver(true_model,
                                geometry,
                                space_order=param['space_order'])

    # Generate synthetic receiver data from true model.
    true_d, _, _ = solver.forward(m=true_model.m)

    return true_d.data
Beispiel #2
0
def my_task(part, param, dobs, src_coor, rec_coor):

    error = 0.
    model_part = get_true_model(part * (1 / 1000.), param)

    tstart = time.time()
    # Geometry
    source_locations = numpy.empty((1, 2))
    geometry = AcquisitionGeometry(model_part,
                                   rec_coordinates,
                                   source_locations,
                                   param['t0'],
                                   param['tn'],
                                   src_type='Ricker',
                                   f0=param['f0'])
    geometry.resample(param['dt'])
    #print(geometry.nt)

    # Set up solver.
    solver = AcousticWaveSolver(model_part,
                                geometry,
                                space_order=param['space_order'])
    #print("{:>30}: {:>8}".format('solver',sizeof_fmt(sys.getsizeof(solver))))

    tracemalloc.start()
    start = tracemalloc.take_snapshot()
    prev = start
    for i in range(len(dobs[0][0])):
        dcalc = generate_shotdata_i(numpy.array([src_coor[i]]), geometry,
                                    solver, model_part)
        res = get_value(dcalc, dobs[:, :, i])
        error += res
        trace_leak(start, prev)
    #print("{:>30}: {:>8}".format('dcalc',sizeof_fmt(sys.getsizeof(dcalc))))
    #print("{:>30}: {:>8}".format('res',sizeof_fmt(sys.getsizeof(res))))
    #print("{:>30}: {:>8}".format('error',sizeof_fmt(sys.getsizeof(error))))
    clear_cache()

    dcalc = None
    del dcalc

    print("Forward modeling took {}".format(time.time() - tstart))
    return (error, )
time_range = TimeAxis(start=t0, stop=tn, step=dt)


label0=0    # the first source
src_coordinates = np.empty((1, 2))
src_coordinates.data[0,0] = geo['src_coordinates'][label0,0]
src_coordinates.data[0,1] = 500-geo['src_coordinates'][label0,1]
rec_coordinates = np.empty((nreceivers, 2))
rec_coordinates[:, 0] = geo['rec_coordinates'][label_left[edge_num]:label_right[edge_num],0] # can be replaced as [:,51:102]...
rec_coordinates[:, 1] = 500-geo['rec_coordinates'][label_left[edge_num]:label_right[edge_num],1] # for the origin point is at top left


# Geometry

geometry = AcquisitionGeometry(model, rec_coordinates, src_coordinates, t0, tn, f0=f0, src_type='Ricker')
geometry.resample(dt)

#print(geometry.time_axis.num)
# all source locations
source_locations = np.empty((nshots, 2), dtype=np.float32)
source_locations[:, 0] = geo['src_coordinates'][:,0]
source_locations[:, 1] = 500 - geo['src_coordinates'][:,1] # for the origin point is at top left


from examples.seismic.acoustic import AcousticWaveSolver

solver = AcousticWaveSolver(model, geometry, space_order=4)

from devito import Function, TimeFunction
from examples.seismic import Receiver