Still using old-fashion Hudson TK plot?

Hudson TK plot (fig. 1) was proposed by Hudson, Pearce, and Rogers, in 1989 to represent moment tensor patterns on a 2D uv-plane. T and k, parameters describing the moment tensor pattern can be calculated from uv. Recently, Tape and Tape (2012) proposed that displaying patterns on a sphere is more natural. I agree. Plotting moment tensor patterns on a lune surface on a sphere is more intuitive than on a TK-plot which actually uses uv as coordinate and the connection of TK to the eigenvalues of the moment tensor is less straightforward.

Fig 1. TK-plot

From now on, I will call the conventional Hudson method as HPR method and the lune surface method as RJ method, since the spherical representation was first used by Riedesel and Jordan (1989). I write a matlab script that is ready to generate a lune mesh on a sphere. See fig. 2.

Fig. 2: lune mesh on a sphere with typical moment tensor marked on the surface, i.e., Isotropic (ISO), LVD (linear vector), CLVD (compensated linear vector dipole).

Matlab Script:

function fig=lunemesh
RR=inv([sqrt(3) 0 -sqrt(3);-1 2 -1; sqrt(2) sqrt(2) sqrt(2)]/sqrt(6));

fig =figure;set(fig,'units','normalized','outerposition',[0 0 1 1]);
[Xout, Yout, Zout, ~]=sphere3d(ones(37),-pi,pi,-pi/2,pi/2,1,1,'off','spline',0);
tmp=RR*[Xout(:)';Yout(:)';Zout(:)'];
Xout(:)=tmp(1,:);Yout(:)=tmp(2,:);Zout(:)=tmp(3,:);
mesh(Xout,Yout,Zout,zeros(size(Xout)));
hold on
Xl=zeros(size(Xout));Yl=Xl;Zl=Xl;

Xl(:,16:22)=Xout(:,16:22);Yl(:,16:22)=Yout(:,16:22);Zl(:,16:22)=Zout(:,16:22);

mesh(Xl,Yl,Zl,ones(size(Xl)),'linewidth',1);
colormap ([.8 .8 .8;0 0 0]);

% add arrow
[hline_x,hhead_x]=arrow3d([0 0 0],[2 0 0],15,'cylinder',[0.1,0.15]);
set(hhead_x,'facecolor','red','edgecolor','black');set(hline_x,'facecolor','black');
[hline_y,hhead_y]=arrow3d([0 0 0],[0 2 0],15,'cylinder',[0.1,0.15]);
set(hhead_y,'facecolor','blue','edgecolor','black');set(hline_y,'facecolor','black');
[hline_z,hhead_z]=arrow3d([0 0 0],[0 0 2],15,'cylinder',[0.1,0.15]);
set(hhead_z,'facecolor','yellow','edgecolor','black');set(hline_z,'facecolor','black');

axis auto
axis equal
axis([-1 1.5 -1 1.5 -0.2 0.1])
axis off

caxis([0 1])
text(2.2, 0, 0,'lambda_1','fontsize',15)
text(0, 2.2, 0,'lambda_2','fontsize',15)
text(0.3, 0.0,1.8, 'lambda_3','fontsize',15)

campos([ 17.7381    7.3697  -17.9197]);
camup([ 0.4829    0.5507    0.6808])
camzoom(1.2)
% add big arc

ISO1=[1,1,1];ISO2=[-1 -1 -1];
ISO1=ISO1/norm(ISO1); ISO2=ISO2/norm(ISO2);

C1=[3,1,1];C2=[-1 -1 -3];
C1=C1/norm(C1);C2=C2/norm(C2);

LVD1=[1,0,0];LVD2=[0 0 -1];
LVD1=LVD1/norm(LVD1); LVD2=LVD2/norm(LVD2);

CLVD1=[2 -1 -1];CLVD2=[1,1,-2];
CLVD1=CLVD1/norm(CLVD1);CLVD2=CLVD2/norm(CLVD2);

Carc=vec2arc(C1,C2);
LVDarc=vec2arc(LVD1,LVD2);
CLVDarc=vec2arc(CLVD1,CLVD2);

plot3(Carc(:,1),Carc(:,2),Carc(:,3),'k.-','linewidth',1.5);
plot3(LVDarc(:,1),LVDarc(:,2),LVDarc(:,3),'r.-','linewidth',1.5);
plot3(CLVDarc(:,1),CLVDarc(:,2),CLVDarc(:,3),'c.-','linewidth',1.5);

plot3(ISO1(1),ISO1(2),ISO1(3),'o', 'MarkerFaceColor','b','MarkerSize',10);
text(ISO1(1)+0.1/sum(ISO1(:)),ISO1(2)+0.1/sum(ISO1(:)),ISO1(3)+0.1/sum(ISO1(:)),'ISO','fontsize',15);
plot3(ISO2(1),ISO2(2),ISO2(3),'o', 'MarkerFaceColor','b','MarkerSize',10);
text(ISO2(1)+0.1/sum(ISO2(:)),ISO2(2)+0.1/sum(ISO2(:)),ISO2(3)+0.1/sum(ISO2(:)),'ISO','fontsize',15);

plot3(C1(1),C1(2),C1(3),'ko', 'MarkerFaceColor','k','MarkerSize',10);
text(C1(1)+0.1/sum(C1(:)),C1(2)+0.1/sum(C1(:)),C1(3)+0.1/sum(C1(:)),'C','fontsize',15);
plot3(C2(1),C2(2),C2(3),'ko', 'MarkerFaceColor','k','MarkerSize',10);
text(C2(1)+0.1/sum(C2(:)),C2(2)+0.1/sum(C2(:)),C2(3)+0.1/sum(C2(:)),'C','fontsize',15);

plot3(LVD1(1),LVD1(2),LVD1(3),'ro', 'MarkerFaceColor','r','MarkerSize',10);
text(LVD1(1)+0.1/sum(LVD1(:)),LVD1(2)+0.1/sum(LVD1(:)),LVD1(3)+0.1/sum(LVD1(:)),'LVD','fontsize',15);
plot3(LVD2(1),LVD2(2),LVD2(3),'ro', 'MarkerFaceColor','r','MarkerSize',10);
text(LVD2(1)+0.1/sum(LVD2(:)),LVD2(2)+0.1/sum(LVD2(:)),LVD2(3)+0.1/sum(LVD2(:)),'LVD','fontsize',15);

plot3(CLVD1(1),CLVD1(2),CLVD1(3),'ro', 'MarkerFaceColor','c','MarkerSize',10);
text(CLVD1(1)+0.1,CLVD1(2)-0.2,CLVD1(3),'CLVD','fontsize',15);
plot3(CLVD2(1),CLVD2(2),CLVD2(3),'ro', 'MarkerFaceColor','c','MarkerSize',10);
text(CLVD2(1)+0.1,CLVD2(2)+0.1,CLVD2(3),'CLVD','fontsize',15);

Two third party functions: sphere3d and arrow3d are from matlab file exchange.

function vec2arc was missing. Now I added here. It is to calculate the arc line defined by two vectors.

function garc=vec2arc(A,B)

theta=acos(dot(A,B));
% normal, binormal, and tangent vectors at point A
N=A; BN=cross(A,B);
T=cross(BN,N); T=T/norm(T);

n=20; t=linspace(0,theta,n)';
N=repmat(N,n,1); T=repmat(T,n,1);
t=repmat(t,1,3);
garc=N.*cos(t)+T.*sin(t);

References:
Hudson, J.A., Pearce, R.G. & Rogers, R.M., 1989. Source time plot for
inversion of the moment tensor, J. geophys. Res., 94(B1), 765–774.
Riedesel, M.A. & Jordan, T.H., 1989. Display and assessment of seismic
moment tensors, Bull. seism. Soc. Am., 79(1), 85–100.
Tape, W. & Tape, C., 2012. A geometric setting for moment tensors,
Geophys. J. Int., in press, doi:10.1111/j.1365-246X.2012.05491.x

Leave a Reply

Your email address will not be published. Required fields are marked *