Confusion with pygplates.RotationModel.get_rotation()

Hello everyone:

May I ask for your help so I may better understand pygplates.RotationModel.get_rotation()?

From what I understand, when I find the relative stage pole and the angle of rotation of plate A relative to plate B from time_1 to time_2, I should have the same value for the stage pole and the same magnitude (different sign) for the angle of rotation of plate B relative to plate A from time_1 to time_2.

However, the result I got from the pygplates.RotationModel.get_rotation() is not quite what I expected. I used pygplates.RotationModel.get_rotation() function to write a function named ‘find_finite_rotation_pole_for_a_pair_of_GDUs(rotation_model, moving_plate_id, fixed_plate_id, reconstruction_time, interval, reference_frame)’.

Below is the result when I tried to find the stage rotation pole of 10752 relative to 10911 and vice versa with the same time and the same reference frame:

fixed_plate_id
10752
moving_plate_id
10911
Euler_pole,angle_rads
(0.621123, 0.703395, 0.345605) -0.003916917173304894
lat,lon,angle_degrees
20.218719836272662 48.55434933895832 -0.22442282273268285

fixed_plate_id
10911
moving_plate_id
10752
Euler_pole,angle_rads
(-0.280809, 0.516842, 0.808715) 0.003916917173304894
lat,lon,angle_degrees
53.97058598010591 118.51598731086054 0.22442282273268285

The magnitude of the rotation angle is the same; however, the coordinates of the pole are different.

Will you please help me better understand this issue?

Best,

Hi Lavie,

While that does apply to a total rotation (ie, a rotation relative to present day) it doesn’t necessarily apply to a stage rotation (ie, a rotation between two non-zero times).

This is a bit of a tricky area, so it’s not easy to get an intuitive understanding in which case I usually just revert to the maths. But first I’ll try a hand-wavy argument… So you’re suggesting that a stage rotation from time t1 to t2 of plate B relative to A should be the reverse (eg, same pole but negated angle) of plate A relative to B (over same time t1 to t2). But actually you need to swap the times, not the plates. So it’s actually the reverse of the stage rotation from time t2 to t1 (of same plate B relative to A). Going backward in time is the reverse of going forward in time. Now if t1 is present day then your stage rotation becomes a total rotation, and then you can actually swap the plates (instead of swapping the times) as you are suggesting. Present day is kind of special that way. If you rotate plate B away from plate A from present day to time t, that’s also the reverse of rotating plate A away from plate B (also from present day to time t).

Ok, that explanation wasn’t very intuitive, I’ll revert to the maths :grimacing:

The following is based on this section of the pyGPlates docs. So you can have a look there for more background.

So, what we’re now saying is, reversing the plates in a total rotation also reverses the rotation (eg, same pole but negated angle)…

R(0 → t, A → B) = reverse(R(0 → t, B → A))

…but reversing the plates in a stage rotation does not reverse the rotation (unless t1 = 0)…

R(t1 → t2, A → B) != reverse(R(t1 → t2, B → A))

We can prove the second case by expanding out both sides of the equation (see relative stage rotation)…

Left side…

R(t1 -> t2, A -> B) = R(0 -> t2, A -> B) * R(t1 -> 0, A -> B)
                    = R(0 -> t2, A -> B) * reverse(R(0 -> t1, A -> B))

Right side…

reverse(R(t1 -> t2, B -> A)) = reverse(R(0 -> t2, B -> A) * reverse(R(0 -> t1, B -> A)))
                             # Using reverse(X*Y) = reverse(Y) * reverse(X) we get...
                             = reverse(reverse(R(0 -> t1, B -> A))) * reverse(R(0 -> t2, B -> A))
                             = R(0 -> t1, B -> A)) * reverse(R(0 -> t2, B -> A))
                             = reverse(R(0 -> t1, A -> B)) * R(0 -> t2, A -> B))

…and therefore left and right sides look similar but are not equal, and so reversing plates A and B in a stage rotation does not reverse the stage rotation…

R(t1 -> t2, A -> B) != reverse(R(t1 -> t2, B -> A))

Gosh, I got a bit carried away. I’ll just leave it there :slight_smile:

Regards,
John

Dear John:

I sincerely appreciate for your time and your detailed explanation, as usual :slight_smile:

The math is very helpful; I honestly do prefer to see the math.

Thank you very much.

Best,