@@ -327,13 +327,13 @@ def srcillumination_allshots(self, savewav: bool = False) -> None:
327327 self .src_wavefield .append (src_wav )
328328 self .src_illumination += src_ill
329329
330- def _born_oneshot (self , isrc : int , dm : NDArray ) -> NDArray :
330+ def _born_oneshot (self , solver : AcousticWaveSolver , dm : NDArray ) -> NDArray :
331331 """Born modelling for one shot
332332
333333 Parameters
334334 ----------
335- isrc : :obj:`int `
336- Index of source to model
335+ solver : :obj:`AcousticWaveSolver `
336+ Devito's solver object.
337337 dm : :obj:`np.ndarray`
338338 Model perturbation
339339
@@ -343,31 +343,19 @@ def _born_oneshot(self, isrc: int, dm: NDArray) -> NDArray:
343343 Data
344344
345345 """
346- # create geometry for single source
347- geometry = AcquisitionGeometry (
348- self .model ,
349- self .geometry .rec_positions ,
350- self .geometry .src_positions [isrc , :],
351- self .geometry .t0 ,
352- self .geometry .tn ,
353- f0 = self .geometry .f0 ,
354- src_type = self .geometry .src_type ,
355- )
356346
357347 # set perturbation
358348 dmext = np .zeros (self .model .grid .shape , dtype = np .float32 )
359349 dmext [self .model .nbl : - self .model .nbl , self .model .nbl : - self .model .nbl ] = dm
360350
361351 # assign source location to source object with custom wavelet
362352 if hasattr (self , "wav" ):
363- self .wav .coordinates .data [0 , :] = self .geometry .src_positions [isrc , :]
353+ self .wav .coordinates .data [0 , :] = solver .geometry .src_positions [:]
364354
365- # solve
366- solver = AcousticWaveSolver (self .model , geometry , space_order = self .space_order )
367355 d = solver .jacobian (dmext , src = None if not hasattr (self , "wav" ) else self .wav )[
368356 0
369357 ]
370- d = d .resample (geometry .dt ).data [:][: geometry .nt ].T
358+ d = d .resample (solver . geometry .dt ).data [:][: solver . geometry .nt ].T
371359 return d
372360
373361 def _born_allshots (self , dm : NDArray ) -> NDArray :
@@ -384,11 +372,26 @@ def _born_allshots(self, dm: NDArray) -> NDArray:
384372 Data for all shots
385373
386374 """
375+ # create geometry for single source
376+ geometry = AcquisitionGeometry (
377+ self .model ,
378+ self .geometry .rec_positions ,
379+ self .geometry .src_positions [0 , :],
380+ self .geometry .t0 ,
381+ self .geometry .tn ,
382+ f0 = self .geometry .f0 ,
383+ src_type = self .geometry .src_type ,
384+ )
385+
386+ # solve
387+ solver = AcousticWaveSolver (self .model , geometry , space_order = self .space_order )
388+
387389 nsrc = self .geometry .src_positions .shape [0 ]
388390 dtot = []
389391
390392 for isrc in range (nsrc ):
391- d = self ._born_oneshot (isrc , dm )
393+ solver .geometry .src_positions = self .geometry .src_positions [isrc , :]
394+ d = self ._born_oneshot (solver , dm )
392395 dtot .append (d )
393396 dtot = np .array (dtot ).reshape (nsrc , d .shape [0 ], d .shape [1 ])
394397 return dtot
0 commit comments