Skip to content

Sign convention for ZRT seismograms #77

@liamtoney

Description

@liamtoney

Hi Lion, I'm using Syngine to compute force source Green's functions. I'm requesting displacement seismograms in ZRT. I was assuming the convention to be:

  • Z positive up
  • R positive away from source
  • T positive 90° clockwise from the line pointing from source to receiver

I built a sandbox to test this by applying unit forces in the up, south, and east directions at a source due west of a receiver:

forces

Given my sign convention above, the first two waveform panels make sense. But in the last one, there's a negative first motion for a force in the direction from source to receiver. This suggests that radial is defined to be positive towards the source. Am I missing something, is this in fact the convention, or is this perhaps a bug?

Please click here for the code I used to produce the plots.
import matplotlib.pyplot as plt
import obspy
from obspy import UTCDateTime

BASE_URL = 'https://service.iris.edu/irisws/syngine/1/query?'
MODEL = 'iasp91_2s'
T0 = -20  # [s]
GF_DURATION = 40  # [s]


def get_syngine_waveforms(
    station_lat, station_lon, source_lat, source_lon, source_depth, origin_time, forces,
):
    url = BASE_URL + '&'.join(
        [
            'format=miniseed',
            'components=ZRT',
            'units=displacement',
            'model=' + MODEL,
            'origintime=' + origin_time.format_iris_web_service(),
            'starttime=' + (origin_time + T0).format_iris_web_service(),
            'endtime=' + (origin_time + GF_DURATION).format_iris_web_service(),
            'receiverlatitude=' + str(station_lat),
            'receiverlongitude=' + str(station_lon),
            'sourcelatitude=' + str(source_lat),
            'sourcelongitude=' + str(source_lon),
            'sourcedepthinmeters=' + str(source_depth),
            'sourceforce=' + ','.join([str(force) for force in forces]),
        ]
    )

    return obspy.read(url)


STATION_LAT = 0  # [deg.]
STATION_LON = 0.01  # [deg.]

SOURCE_LAT = 0  # [deg.]
SOURCE_LON = 0  # [deg.]

SOURCE_DEPTH = 0  # [m]

# [Newtons] f_r, f_theta, f_phi (r is positive upwards, theta is positive to the south,
# and phi is positive to the east)
UP = (1, 0, 0)
SOUTH = (0, 1, 0)
EAST = (0, 0, 1)

# Plot "station map"
fig, ax = plt.subplots()
ax.scatter(
    SOURCE_LON, SOURCE_LAT, color='green', label='Source',
)
ax.scatter(
    STATION_LON, STATION_LAT, color='red', label='Station',
)
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.legend()
ax.set_title(f'Source depth = {SOURCE_DEPTH:g} m')
fig.tight_layout()
fig.show()

# Grab and plot waveforms
for forces in UP, SOUTH, EAST:
    st = get_syngine_waveforms(
        station_lat=STATION_LAT,
        station_lon=STATION_LON,
        source_lat=SOURCE_LAT,
        source_lon=SOURCE_LON,
        source_depth=SOURCE_DEPTH,
        origin_time=UTCDateTime(2016, 5, 22, 7, 57, 34),
        forces=forces,
    )
    fig = plt.figure()
    st.plot(fig=fig, equal_scale=True)
    fig.suptitle(f'$f_r$, $f_\\theta$, $f_\\phi$ = {forces}')
    fig.tight_layout()
    fig.show()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions