Skip to content

Update seafloor gridding for mid-ocean ridges that are topological lines#412

Merged
jcannon-gplates merged 5 commits into
masterfrom
364-update-oceans-build_all_MOR_seedpoints-to-work-better-with-topological-lines
Jun 25, 2026
Merged

Update seafloor gridding for mid-ocean ridges that are topological lines#412
jcannon-gplates merged 5 commits into
masterfrom
364-update-oceans-build_all_MOR_seedpoints-to-work-better-with-topological-lines

Conversation

@jcannon-gplates

Copy link
Copy Markdown
Contributor

Update seafloor gridding for mid-ocean ridges that are topological lines

See #364 for a description of why this was needed. Closes #364.

This comment was written with Claude's help. However, the code is all-human (that'll soon change though).

Summary

  • Switch MOR seed-point generation to calculate_plate_boundary_statistics — replaces
    the old separate_ridge_transform_segments-based approach with PyGPlates 1.0's
    calculate_plate_boundary_statistics. MOR features no longer need pre-computed spreading
    properties (left/right plate IDs in the feature data); spreading rates are now derived
    directly from left- and right-plate velocities relative to the ridge velocity at each
    uniformly-spaced boundary point.

  • Support asymmetric spreading — each MOR boundary point produces two seed points: one
    shifted into the left plate and one into the right plate, each carrying its own
    independently computed spreading rate. The old code assumed symmetric spreading (the same
    rate was assigned to both sides).

  • Suppress anomalous spreading rates caused by missing rotations near MOR appearance
    time
    — MOR velocity is calculated over the interval [time + 1, time]. If the MOR
    feature lacks rotations at time + 1 (which can happen when a MOR only has rotations
    spanning its active lifetime), the computed velocity can be spuriously large. A new
    _could_mor_have_anomalous_velocity() helper detects this condition per MOR shared
    sub-segment and sets the spreading rate to NaN for all its points rather than writing bad
    values to the grid.

  • Return NaN spreading rate (not drop the point) when no left/right plate exists — if
    a boundary point has no resolved left or right plate (e.g. a gap in plate/network coverage),
    the shifted seed point is still emitted but its spreading rate is set to NaN instead of the
    point being silently discarded. This preserves the point for age-grid reconstruction while
    clearly marking the spreading rate as unknown.

  • Shift seed points using the boundary normal — the rotation pole used to displace a
    boundary point into its plate is now computed from the cross product of the boundary point
    and the boundary normal, rather than from the plate velocity vector. The boundary normal is
    always perpendicular to the boundary point and well-defined, so the previous
    is_zero_magnitude() guard and the post-shift topology containment check are no longer
    needed.

jcannon-gplates and others added 5 commits June 25, 2026 16:08
Previously mid-ocean ridge features needed spreading properties as
outlined in #190. Now we use plate boundary statistics provided by
pyGPlates 1.0 to calculate spreading rates from left/right plate
velocities as covered in #364.
Anchors shifted points in their respective left/right plates, and no
longer need to test if shifted point within left/right plate.
This is due to plate ID(s) not existing in rotation tree at 'time + 1'
which can happen when MOR only has rotations for the times that it
exists (however 'time-of-appearance + 1' used for its velocity at
'time=time-of-appearance' then has no rotation).
@jcannon-gplates jcannon-gplates added this to the release 2.1 milestone Jun 25, 2026
@jcannon-gplates jcannon-gplates self-assigned this Jun 25, 2026
@jcannon-gplates jcannon-gplates merged commit 005a675 into master Jun 25, 2026
16 checks passed
@jcannon-gplates jcannon-gplates deleted the 364-update-oceans-build_all_MOR_seedpoints-to-work-better-with-topological-lines branch June 25, 2026 06:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update oceans.build_all_MOR_seedpoints to work better with topological lines.

1 participant