SPECFEM / specfem2d

SPECFEM2D simulates forward and adjoint seismic wave propagation in two-dimensional acoustic, (an)elastic, poroelastic or coupled acoustic-(an)elastic-poroelastic media, with Convolution PML absorbing conditions.
https://specfem.org
GNU General Public License v3.0
203 stars 147 forks source link

Reciprocity test for viscoelastic simulations #1081

Open rmodrak opened 4 years ago

rmodrak commented 4 years ago

I think that in a 1D medium, we would expect identical sets of waveforms from geometries A and B, following from reciprocity and translational/rotational invariance. I am using a force source and stopping simulations before any boundary reflections reach the receivers. It's hard to tell from the schematic, but in the numerical experiments, the A receivers/B source are slightly below the free surface.

geometry

Indeed, for P_SV simulations without attenuation, SPECFEM2D produces very similar responses:

test_reciprocity_noattenuation

But with attenuation, there are large differences on the X component:

test_reciprocity_attenuation

danielpeter commented 4 years ago

Ryan,

after testing it with a similar example, I find that the reciprocity is actually well preserved. in your issue raised above about the reciprocity, I think it’s mostly an issue with comparing the right seismograms. the reciprocity in space would be:

G_nm (x1; x2) = G_mn (x2; x1)

which is easy to check for a source in vertical direction and vertical components G_zz(B1; A0) = G_zz(A0; B1). in your plots, not sure what component you use for the source (likely z-direction), but make sure you flip the source direction as well to match for example:

G_xz(B1; A0) = G_zx(A0; B1)

thus, change source from A0 to B1, change anglesource in DATA/SOURCE (e.g. to -90 to point in x-direction), and compare x-component seismogram B1 with source at A0 (G_xz(B1;A0)) with z-component seismogram A0 when rotated source is at B1 (G_zx(A0;B1)).

when testing this, you will find that the reciprocity holds with and without attenuation (bulk and/or shear attenuation) turned on. thus, the code produces the correct results. the only component which is off is the almost zero component (for example X-component for seismogram at A0 when vertical source is at B0 and vice versa) due to numerical artifacts.

best, daniel

rmodrak commented 4 years ago

Daniel,

I used a force source rather than a moment tensor, which is important for reciprocity. I don't recall which component, but I'll check as soon as I return from travel. I admit to still being at a loss understanding the underlying issues here. It is of course possible I made a sign error. Will update soon.

Thanks very much for looking this.

-Ryan