-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmckenzie.m
More file actions
99 lines (86 loc) · 2.67 KB
/
Copy pathmckenzie.m
File metadata and controls
99 lines (86 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
function [l,Zb,G2b,Zf,G2f]=mckenzie(R,T,F,Te)
% [l,Zb,G2b,Zf,G2f]=MCKENZIE(R,T,F,Te)
%
% This program works without specifying the actual topography!
%
% For a model with an arbitrary number of layers
% (top layer is water or air and bottom layer is mantle halfspace),
% calculates free-air and Bouguer admittances and coherences
% as a function of wavelength, for a given flexural rigidity.
% Note that for a two-layer model, the depth of the compensating
% interface does not matter at all for the coherence.
%
% INPUT:
%
% R density model for N layers and N-1 interfaces in kg/m3
% T depth to N-2 interfaces (first interface is "surface") in km
% F fraction of total load at each of N-1 interface
% Te elastic thickness in km, cannot be a vector
%
% OUTPUT:
%
% l wavelength in m
% Zb Bouguer admittance in mgal/m
% G2b Bouguer coherence-squared
% Zf Free-air admittance in mgal/m
% G2f Free-air coherence-squared
%
% EXAMPLE: Forsyth's Fig. 1
%
% Te=[40 30 20 10 5 0];
% [l,Zb,G2b]=mckenzie([0 2670 2670+670],[0 35],[1 0],Te(4)); % Top loading
% [l,Zb,G2b]=mckenzie([0 2670 2670+670],[0 35],[0 1],Te(4)); % Bottom loading
%
% See FORSYTH, MCKENZIE1, MCKENZIE2, LOADING
%
% Last modified by fjsimons-at-alum.mit.edu, 06/19/2026
defval('R',[1030 2600 2900 3300])
defval('T',[ 0 15 35])
defval('F',[ 0.6 0.4 0])
defval('Te',17)
defval('E',1.4e11);
v=0.25;
g=9.81;
disp(sprintf('E= %5.3g; v= %5.3f',E,v))
G=fralmanac('GravCst');
l=linspace(1,3000,2000)*1000;
k=2*pi./l;
k4=k.^4;
% Standard units
T=T*1000;
Te=Te*1000;
% Flexural Rigidity [Pa*m^3 or N*m]
D=(E*Te.^3)/(12*(1-v^2));
TpG=2*pi*G;
Dk4g=D*k4/g;
DR=diff(R);
[K,ZS]=meshgrid(k,T);
ekz=exp(-K.*ZS);
DRekz=ekz.*repmat(DR(:),1,size(K,2));
% Calculate Z's
Z(1,:)=-TpG*DR(1)./(Dk4g+sum(DR(2:end))).*sum(DRekz(2:end,:),1);
for index=2:size(DR(:),1)
inds=2:length(DR);
inds=inds(inds~=index);
jnds=1:length(DR);
jnds=jnds(jnds~=index);
Z(index,:)=TpG*(sum(DRekz(inds,:),1)-ekz(index,:).*(Dk4g+sum(DR(jnds))));
end
% Convert to mgal/m
Z=Z/1e-5;
% Calculate Y's
Y(1,:)=(Dk4g+sum(DR(2:end)))./(Dk4g+sum(DR))/g/DR(1);
for index=2:size(DR(:),1)
Y(index,:)=-1./(Dk4g+sum(DR))/g;
end
% Calculate Bouguer admittance
Zb=((F(:)'.^2)*(Y.^2.*Z))./((F(:)'.^2)*(Y.^2));
% Calculate Bouguer coherence-squared
G2b=(([F(:)'].^2)*(Y.^2.*Z)).*(([F(:)'].^2)*(Y.^2.*Z))./...
(([F(:)'].^2)*(Y.^2))./(([F(:)'].^2)*(Y.^2.*Z.^2));
% Calculate Free-air admittance in mgal/m
Z=Z+repmat(TpG*DR(1),size(Z))/1e-5;
Zf=((F(:)'.^2)*(Y.^2.*Z))./((F(:)'.^2)*(Y.^2));
% Calculate Free-air coherence-squared
G2f=(([F(:)'].^2)*(Y.^2.*Z)).*(([F(:)'].^2)*(Y.^2.*Z))./...
(([F(:)'].^2)*(Y.^2))./(([F(:)'].^2)*(Y.^2.*Z.^2));