Paleocurrent/dip direction reconstruction

That’s a pretty inventive solution for using GPlates :+1:

For pyGPlates users out there this could be done with something like…

Use pygplates.LocalCartesian to convert your direction into a pygplates.Vector3D - for example to convert an azimuth direction at a specific latitude/longitude location to its equivalent 3D vector (in global x/y/z space). Then rotate that 3D vector using the reconstruction rotation in the form of a pygplates.FiniteRotation (obtained from a pygplates.RotationModel). Then convert back again to a paleo-direction using pygplates.LocalCartesian to convert the rotated 3D vector and the rotated location back to a paleo-azimuth.

The following example shows how to do this:

import math
import pygplates

# Initial location.
lat, lon = 10, 20
# Initial direction - azimuth is angle clockwise (East-wise) from North
direction_azimuth = 90  # East
# Plate ID to reconstruct with (or assign plate ID using pygplates.PlatePartitioner).
plate_id =  701
# Time to reconstruct to.
time = 100

rotation_model = pygplates.RotationModel(...)
rotation = rotation_model.get_rotation(time, plate_id)

# Initial location and direction.
location = pygplates.PointOnSphere(lat, lon)
cartesian = pygplates.LocalCartesian(location)
direction_vector = cartesian.from_magnitude_azimuth_inclination_to_geocentric(
    (1, math.radians(direction_azimuth), 0))

# Paleo location and direction.
paleo_location = rotation * location
paleo_direction_vector = rotation * direction_vector

# Extract paleo direction azimuth from paleo direction vector and location.
paleo_cartesian = pygplates.LocalCartesian(paleo_location)
_, paleo_direction_azimuth, _ = paleo_cartesian.from_geocentric_to_magnitude_azimuth_inclination(
    paleo_direction_vector)
paleo_direction_azimuth = math.degrees(paleo_direction_azimuth)