|
47 | 47 | "source": [ |
48 | 48 | "import numpy as np\n", |
49 | 49 | "from devito import (Function, TimeFunction, cos, sin, solve,\n", |
50 | | - " Eq, Operator, configuration, norm)\n", |
| 50 | + " Eq, Operator)\n", |
51 | 51 | "from examples.seismic import TimeAxis, RickerSource, Receiver, demo_model\n", |
52 | 52 | "from matplotlib import pyplot as plt" |
53 | 53 | ] |
|
65 | 65 | "execution_count": 2, |
66 | 66 | "id": "4f545ff1", |
67 | 67 | "metadata": {}, |
68 | | - "outputs": [ |
69 | | - { |
70 | | - "name": "stderr", |
71 | | - "output_type": "stream", |
72 | | - "text": [ |
73 | | - "Operator `pad_vp` ran in 0.01 s\n", |
74 | | - "Operator `pad_epsilon` ran in 0.01 s\n", |
75 | | - "Operator `pad_delta` ran in 0.01 s\n", |
76 | | - "Operator `pad_theta` ran in 0.01 s\n" |
77 | | - ] |
78 | | - } |
79 | | - ], |
| 68 | + "outputs": [], |
80 | 69 | "source": [ |
81 | | - "# NBVAL_IGNORE_OUTPUT \n", |
| 70 | + "# NBVAL_IGNORE_OUTPUT\n", |
82 | 71 | "\n", |
83 | | - "shape = (101,101) # 101x101 grid\n", |
84 | | - "spacing = (10.,10.) # spacing of 10 meters\n", |
85 | | - "origin = (0.,0.) \n", |
| 72 | + "shape = (101,101) # 101x101 grid\n", |
| 73 | + "spacing = (10.,10.) # spacing of 10 meters\n", |
| 74 | + "origin = (0.,0.)\n", |
86 | 75 | "nbl = 0 # number of pad points\n", |
87 | 76 | "\n", |
88 | 77 | "model = demo_model('layers-tti', spacing=spacing, space_order=8,\n", |
89 | 78 | " shape=shape, nbl=nbl, nlayers=1)\n", |
90 | 79 | "\n", |
91 | 80 | "# initialize Thomsem parameters to those used in Mu et al., (2020)\n", |
92 | | - "model.update('vp', np.ones(shape)*3.6) # km/s\n", |
| 81 | + "model.update('vp', np.ones(shape)*3.6) # km/s\n", |
93 | 82 | "model.update('epsilon', np.ones(shape)*0.23)\n", |
94 | 83 | "model.update('delta', np.ones(shape)*0.17)\n", |
95 | | - "model.update('theta', np.ones(shape)*(45.*(np.pi/180.))) # radians" |
| 84 | + "model.update('theta', np.ones(shape)*(45.*(np.pi/180.))) # radians" |
96 | 85 | ] |
97 | 86 | }, |
98 | 87 | { |
|
233 | 222 | "bc += [Eq(pp[t+1,0, z], 0.)]\n", |
234 | 223 | "bc += [Eq(pp[t+1,shape[0]-1+2*nbl, z], 0.)]\n", |
235 | 224 | "\n", |
236 | | - "# set source and receivers\n", |
| 225 | + "# Set source and receivers\n", |
237 | 226 | "src = RickerSource(name='src',grid=model.grid,f0=0.02,npoint=1,time_range=time_range)\n", |
238 | 227 | "src.coordinates.data[:,0] = model.domain_size[0]* .5\n", |
239 | 228 | "src.coordinates.data[:,1] = model.domain_size[0]* .5\n", |
|
243 | 232 | "rec = Receiver(name='rec',grid=model.grid,npoint=shape[0],time_range=time_range)\n", |
244 | 233 | "rec.coordinates.data[:, 0] = np.linspace(model.origin[0],model.domain_size[0], num=model.shape[0])\n", |
245 | 234 | "rec.coordinates.data[:, 1] = 2*spacing[1]\n", |
| 235 | + "\n", |
246 | 236 | "# Create interpolation expression for receivers\n", |
247 | 237 | "rec_term = rec.interpolate(expr=p.forward)\n", |
248 | 238 | "\n", |
249 | 239 | "# Operators\n", |
250 | | - "optime=Operator([update_p] + src_term + rec_term)\n", |
251 | | - "oppres=Operator([update_q] + bc)\n", |
| 240 | + "optime = Operator([update_p] + src_term + rec_term)\n", |
| 241 | + "oppres = Operator([update_q] + bc)\n", |
| 242 | + "\n", |
252 | 243 | "\n", |
253 | | - "# you can print the generated code for both operators by typing print(optime) and print(oppres)" |
| 244 | + "# You can print the generated code for both operators by uncommenting the following lines\n", |
| 245 | + "# print(optime)\n", |
| 246 | + "# print(oppres)" |
254 | 247 | ] |
255 | 248 | }, |
256 | 249 | { |
|
620 | 613 | ], |
621 | 614 | "source": [ |
622 | 615 | "# NBVAL_IGNORE_OUTPUT\n", |
623 | | - "psave =np.empty ((time_range.num,model.grid.shape[0],model.grid.shape[1]))\n", |
| 616 | + "psave =np.empty((time_range.num,model.grid.shape[0], model.grid.shape[1]))\n", |
624 | 617 | "niter_poisson = 1200\n", |
625 | 618 | "\n", |
626 | 619 | "# This is the time loop.\n", |
627 | | - "for step in range(0,time_range.num-2):\n", |
628 | | - " q.data[:,:]=pp.data[(niter_poisson+1)%2,:,:]\n", |
| 620 | + "for step in range(0, time_range.num-2):\n", |
| 621 | + " q.data[:, :]=pp.data[(niter_poisson+1)%2, :, :]\n", |
629 | 622 | " optime(time_m=step, time_M=step, dt=dt)\n", |
630 | | - " pp.data[:,:]=0.\n", |
631 | | - " b.data[:,:]=p.data[(step+1)%3,:,:]\n", |
| 623 | + " pp.data[:, :]=0.\n", |
| 624 | + " b.data[:, :]=p.data[(step+1)%3, :, :]\n", |
632 | 625 | " oppres(time_M = niter_poisson)\n", |
633 | | - " psave[step,:,:]=p.data[(step+1)%3,:,:]" |
| 626 | + " psave[step, :, :]=p.data[(step+1)%3, :, :]" |
634 | 627 | ] |
635 | 628 | }, |
636 | 629 | { |
|
691 | 684 | "fig, axes = plt.subplots(2, 5, figsize=(18, 7), sharex=True)\n", |
692 | 685 | "fig.suptitle(\"Snapshots\", size=14)\n", |
693 | 686 | "for count, ax in enumerate(axes.ravel()):\n", |
694 | | - " snapshot = factor*count\n", |
| 687 | + " snapshot = factor * count\n", |
695 | 688 | " ax.imshow(np.transpose(psave[snapshot,:,:]), cmap=\"seismic\",\n", |
696 | | - " vmin=-amax, vmax=+amax, extent=plt_extent)\n", |
697 | | - " ax.plot(model.domain_size[0]* .5, model.domain_size[1]* .5, \\\n", |
698 | | - " 'red', linestyle='None', marker='*', markersize=8, label=\"Source\")\n", |
| 689 | + " vmin=-amax, vmax=+amax, extent=plt_extent)\n", |
| 690 | + " ax.plot(model.domain_size[0] * 0.5, model.domain_size[1] * 0.5,\n", |
| 691 | + " 'red', linestyle='None', marker='*', markersize=8, label=\"Source\")\n", |
699 | 692 | " ax.grid()\n", |
700 | | - " ax.tick_params('both', length=2, width=0.5, which='major',labelsize=10)\n", |
701 | | - " ax.set_title(\"Wavefield at t=%.2fms\" % (factor*count*dt),fontsize=10)\n", |
| 693 | + " ax.tick_params('both', length=2, width=0.5, which='major', labelsize=10)\n", |
| 694 | + " ax.set_title(f\"Wavefield at t={factor * count * dt:.2f}ms\", fontsize=10)\n", |
702 | 695 | "for ax in axes[1, :]:\n", |
703 | | - " ax.set_xlabel(\"X Coordinate (m)\",fontsize=10)\n", |
| 696 | + " ax.set_xlabel(\"X Coordinate (m)\", fontsize=10)\n", |
704 | 697 | "for ax in axes[:, 0]:\n", |
705 | | - " ax.set_ylabel(\"Z Coordinate (m)\",fontsize=10)" |
| 698 | + " ax.set_ylabel(\"Z Coordinate (m)\", fontsize=10)" |
706 | 699 | ] |
707 | 700 | }, |
708 | 701 | { |
|
0 commit comments