diracPoints=src_locations, diracTags=src_tags) wl = Ricker(frq) m = whereNegative(Function(domain).getX()[DIM - 1] - reflector_at) v_p = v_p_bottom * m + v_p_top * (1 - m) sw = SonicWave(domain, v_p, source_tag=src_tags[0], wavelet=wl, absorption_zone=absorption_zone, lumping=True) locEW = Locator(domain, rcvEW_locations) tracerEW = SimpleSEGYWriter(receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval) if DIM == 3: locNS = Locator(domain, rcvNS_locations) tracerNS = SimpleSEGYWriter(receiver_group=rgNS, source=src_loc_2D, sampling_interval=sampling_interval) if not tracerEW.obspy_available(): print( "\nWARNING: obspy not available, SEGY files will not be written\n") elif getMPISizeWorld() > 1: print( "\nWARNING: SEGY files cannot be written with multiple processes\n" )
ne_z, l0=width_x, l1=width_y, l2=(-depth, 0), diracPoints=src_locations, diracTags=src_tags) q = wherePositive( #suppress the x-component on the x boundary whereZero(domain.getX()[0]) * [1, 0, 0] + #logical or #suppress the y-component on the y boundary at the source whereZero(domain.getX()[1]) * [0, 1, 0]) # set up reciever locations locEW = Locator(domain, rcvEW_locations) tracerEW_x = SimpleSEGYWriter(receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval, text='x-displacement - east-west line') tracerEW_z = SimpleSEGYWriter(receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval, text='z-displacement - east-west line') if DIM == 3: locNS = Locator(domain, rcvNS_locations) tracerEW_y = SimpleSEGYWriter(receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval, text='x-displacement - east-west line') tracerNS_x = SimpleSEGYWriter(receiver_group=rgNS, source=src_loc_2D, sampling_interval=sampling_interval, text='x-displacement - north-south line')
wl, src_tags[0], source_vector=src_dir, eps=vareps, gamma=gamma, delta=delta, rho=rho, absorption_zone=300 * U.m, absorption_cut=1e-2, lumping=True, ) locEW = Locator(domain, rcvEW_locations) tracerEW_x = SimpleSEGYWriter( receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval, text="x-displacement - east-west line", ) tracerEW_z = SimpleSEGYWriter( receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval, text="z-displacement - east-west line", ) if DIM == 3: locNS = Locator(domain, rcvNS_locations) tracerEW_y = SimpleSEGYWriter( receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval, text="x-displacement - east-west line",
V_P = V_P * (1-m) + v_P[l] * m V_S = V_S * (1-m) + v_S[l] * m Delta = Delta * (1-m) + delta[l]* m Eps = Eps * (1-m) + eps[l] * m Tilt = Tilt * (1-m) + tilt[l] * m Rho = Rho * (1-m) + rho[l] * m z_top-=layers[l] sw=TTIWave(domain, V_P, V_S, wl, src_tags[0], source_vector = src_dir, eps=Eps, delta=Delta, rho=Rho, theta=Tilt, absorption_zone=absorption_zone, absorption_cut=1e-2, lumping=lumping) srclog=Locator(domain, [ (r , depth) for r in receiver_line ] ) grploc=[ (x[0], 0.) for x in srclog.getX() ] tracer_x=SimpleSEGYWriter(receiver_group=grploc, source=srcloc, sampling_interval=sampling_interval, text='x-displacement') tracer_z=SimpleSEGYWriter(receiver_group=grploc, source=srcloc, sampling_interval=sampling_interval, text='z-displacement') if not tracer_x.obspy_available(): print("\nWARNING: obspy not available, SEGY files will not be written\n") elif getMPISizeWorld() > 1: print("\nWARNING: SEGY files cannot be written with multiple processes\n") t=0. mkDir('output') n=0 k_out=0 print("calculation starts @ %s"%(time.asctime(),)) while t < t_end: t,u = sw.update(t+sampling_interval) tracer_x.addRecord(srclog(u[0]))
# print("ne_x = ", ne_x) print("ne_z = ", ne_z) print("h_x = ", width_x / ne_x) print("h_z = ", depth / ne_z) print("dt = ", sw.getTimeStepSize() * 1000, "msec") print("width_x = ", width_x) print("depth = ", depth) print("number receivers = ", numRcvPerLine) print("receiver spacing = ", receiver_line[1] - receiver_line[0]) print("sampling time = ", sampling_interval * 1000, "msec") print("source @ ", src_locations[0]) # loc = Locator(domain, rcv_locations) tracerP = SimpleSEGYWriter(receiver_group=rg, source=src_loc_2D, sampling_interval=sampling_interval, text='P') tracerQ = SimpleSEGYWriter(receiver_group=rg, source=src_loc_2D, sampling_interval=sampling_interval, text='Q') if not tracerP.obspy_available(): print( "\nWARNING: obspy not available, SEGY files will not be written\n") elif getMPISizeWorld() > 1: print( "\nWARNING: SEGY files cannot be written with multiple processes\n" ) t = 0.
wl, src_tags[0], source_vector=src_dir, eps=Eps, delta=Delta, rho=Rho, theta=Tilt, absorption_zone=absorption_zone, absorption_cut=1e-2, lumping=lumping) srclog = Locator(domain, [(r, depth) for r in receiver_line]) grploc = [(x[0], 0.) for x in srclog.getX()] tracer_x = SimpleSEGYWriter(receiver_group=grploc, source=srcloc, sampling_interval=sampling_interval, text='x-displacement') tracer_z = SimpleSEGYWriter(receiver_group=grploc, source=srcloc, sampling_interval=sampling_interval, text='z-displacement') if not tracer_x.obspy_available(): print( "\nWARNING: obspy not available, SEGY files will not be written\n") elif getMPISizeWorld() > 1: print( "\nWARNING: SEGY files cannot be written with multiple processes\n" ) t = 0.
# print some info: # print("ne_x = ", ne_x) print("ne_z = ", ne_z) print("h_x = ", width_x/ne_x) print("h_z = ", depth/ne_z) print("dt = ", sw.getTimeStepSize()*1000, "msec") print("width_x = ", width_x) print("depth = ", depth) print("number receivers = ", numRcvPerLine) print("receiver spacing = ", receiver_line[1]-receiver_line[0]) print("sampling time = ", sampling_interval*1000,"msec") print("source @ ", src_locations[0]) # loc=Locator(domain,rcv_locations) tracerP=SimpleSEGYWriter(receiver_group=rg, source=src_loc_2D, sampling_interval=sampling_interval, text='P') tracerQ=SimpleSEGYWriter(receiver_group=rg, source=src_loc_2D, sampling_interval=sampling_interval, text='Q') if not tracerP.obspy_available(): print("\nWARNING: obspy not available, SEGY files will not be written\n") elif getMPISizeWorld() > 1: print("\nWARNING: SEGY files cannot be written with multiple processes\n") t=0. OUT_DIR="out%sm%smus"%(int(width_x/ne_x),int(sw.getTimeStepSize()*1000000)) mkDir(OUT_DIR) n=0 k=0 timer1=time.time() while t < t_end: t,u = sw.update(t+sampling_interval)
# order = 5 if DIM == 2: domain=Rectangle(order, ceil(ne_z*width_x/depth),ne_z,l0=width_x,l1=depth, diracPoints=src_locations, diracTags=src_tags) else: domain=Brick(order, ceil(ne_z*width_x/depth),ceil(ne_z*width_y/depth),ne_z,l0=width_x,l1=width_y,l2=depth, diracPoints=src_locations, diracTags=src_tags) wl=Ricker(frq) m=whereNegative(Function(domain).getX()[DIM-1]-reflector_at) v_p=v_p_bottom*m+v_p_top*(1-m) sw=SonicWave(domain, v_p, source_tag=src_tags[0], wavelet=wl, absorption_zone=absorption_zone, lumping=True) locEW=Locator(domain,rcvEW_locations) tracerEW=SimpleSEGYWriter(receiver_group=rgEW, source=src_loc_2D, sampling_interval=sampling_interval) if DIM==3: locNS=Locator(domain,rcvNS_locations) tracerNS=SimpleSEGYWriter(receiver_group=rgNS, source=src_loc_2D, sampling_interval=sampling_interval) if not tracerEW.obspy_available(): print("\nWARNING: obspy not available, SEGY files will not be written\n") elif getMPISizeWorld() > 1: print("\nWARNING: SEGY files cannot be written with multiple processes\n") t=0. mkDir('tmp') n=0 while t < t_end: t,p = sw.update(t+sampling_interval) tracerEW.addRecord(locEW(p))