Paleocurrent/dip direction reconstruction

Gplates don’t have a feature to automatically retrieve the direction of paleocurrents.
So I found an inefficient way to do this.
(if someone know an easier way or found a mistake in this one, please, let me know and I update de post).


I create a line on the plate where I get my field measurements.

I think of this line as a boat course (an orthodrome course, or great circle, not loxodrome, or rhumb line), and use an iterative course calculator to retrieve the direction (azimuth) of this line at the present and in the reconstructed map.

The difference between these two angles is the plate rotation in relation to the geographical North. As all my measurements are in the same plate, they rotate the same amount, and it is the value I have to add to all my measurements to get the paleocurrets.


First, load the rotation model and all other file you need (.rot, .gpml, etc.)

Set time as 0.00 (present) in the upper panel.

Create a line on the plate you take your measurements:

Click on “Digitalisation” and “Digitalise Polyline Geometry”, or just press L.

Create two points close to the place you take your field measurements, to minimize the error from the geoid model.

Click at “Create Feature…” at the right panel.

Assign “Feature Type” as “UnclassifiedFeature”; Click Next.

Assign the PlateID where your measurement is.

Check the boxes “Distant Past” and “Distant Future”.

Name your line.

Set the Time (past) of your reconstruction in the upper panel.

At the left panel, click on “Feature Inspection” and “Choose Feature”, or just press F.

Click on the line in its new position.

At right panel, click on “Edit Feature”, or Ctrl+E.

Go to the “View Coordinate” panel and copy the lat and lon of the two points at the “Present Day” column, and the lat and lon of the two points in the “Reconstructed” column.

Access: Geodetic Calculators

Choose WGS84 Ellipsoid type (this is the geoid model used by GPlates), and Coodenate Reference System: Geographic (remember that above about 89 degrees latitude the values may not be accurate).

Feed the form with the lat and lon of the two points from the “Present Day” column.

Keep the “Forward Azimuth” degrees value.

Do the same with lat and lon values of the two points in the from the “Reconstructed” column and Keep the “Forward Azimuth.”

The Forward Azimuth of the Reconstructed points minus the Forward Azimuth of the Present Day points is de value in degrees you have to add to your field measurements to get the reconstructed direction or paleocurrent.

Suggestion: It would be amazing if Gplates had a “slipface direction” or “azimuth direction” for any feature. This is important for paleocurrent and even palaeontological taphonomic studies.

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_azimuth = math.degrees(paleo_direction_azimuth)