Table of Contents
.
Colin Zelts FAST code contains a program (nfd) to compute first arrival times in a square grid by solving the eikonal equation. An m-file wrapper is available in mGstat to easily call nfd
To use nfd form the FAST package the nfd binary must be copied to [MGSTAT_ROOT]/bin/nfd.
Compiling of the FAST codes is non trivial on the Linux platforms tested, using the Makefiles released as part of FAST. The help for compiling fast found here below, was tested on Linux (Redhat and Ubuntu) using goth F77 and the Intel Fortran Compiler (ifort) Download fast.tar.gz and compile 'nfd' using
wget http://terra.rice.edu/department/faculty/zelt/fast.tar.gz
tar xvfz fast.tar.gz
cd fast
find ./pltlib -name '*.f' -exec g77 -c {} \;
find ./fd -name '*.f' -exec g77 -c {} \;
g77 -o nfd main.o model.o time.o findiff.o findiff2d.o stencils.o stencils2d.o misc.o plt.o blkdat.o nopltlib.o
cp nfd [MGSTAT_ROOT]/bin/.
In addition you may need to change fd/fd.par to enabale models larger than nx*ny*nz = 601*100*25. Use for example
parameter(nxmax=601, nymax=100, nzmax=225, ncolour=10,
+ nsources=99)
Then you should be ready to use nfd.
To get rid of the message :FD: finite difference traveltime calculation, during each run of 'nfd' you can comment out lines 92-93 in fd/main.f, such that
write(6,335)
335 format(/'FD: finite difference traveltime calculation')
is changed to
c write(6,335) c335 format(/'FD: finite difference traveltime calculation')
nx=100;ny=120; x=[1:1:nx]; y=[1:1:ny]; v=ones(ny,nx); S=[10 20]; t = fast_fd_2d(x,y,v,S); imagesc(x,y,t);axis image hold on [cs,h]=contour(x,y,t,[25:25:100],'k-'); clabel(cs,h,'labelspacing',100) hold off

fast_fd_2d_traveltime computes the traveltime between a set of Sources
(Sources) and Receivers
(Receivers)
Note that the size of Sources and Recivers MUST be the same. If you are ineterested in calculating the traveltime between all rays between a set of Sources and receivers consider using the section called “fast_fd_2d_traveltime_matrix”
nx=100;ny=120;
x=[1:1:nx];
y=[1:1:ny];
v=ones(ny,nx);
Sources =[2 10 ; 2 80];
Receivers=[10 10;100 80];
t=fast_fd_2d_traveltime(x,y,v,Sources,Receivers)
plot(t);
xlabel('raynumber');ylabel('travel time')
fast_fd_2d_traveltime_matrix computes the traveltime from a number of sources
(Sources) to a number of Receivers
(Receivers)
nx=100;ny=120;
x=[1:1:nx];
y=[1:1:ny];
v=ones(ny,nx);
Sources=[2 10;2 80];
nr=40;
Receivers=[ones(nr,1)*nx-2,linspace(2,ny-1,nr)']
t=fast_fd_2d_traveltime_matrix(x,y,v,Sources,Receivers)
plot(t);
xlabel('raynumber');ylabel('travel time')
fast_fd_2d_clean deletes a large number of files from disk, generated running fast_fd_2d.
To calculate finite frequency and high frequency sensitivity kernel of one set og source and receivers use :
nx=80;ny=70;
x=[1:1:nx];
y=[1:1:ny];
z=1;
v=ones(ny,nx); % Velocity field
S=[4 4]; % Sources
R=[nx-4 ny-4]; % Receiver
T=8; % Dominant period
alpha=1; %
[K,RAY,timeS,timeR,raypath,raylength]=kernel(v,x,y,z,S,R,T,alpha);
subplot(2,2,1);imagesc(x,y,timeS);title('Time from source');axis image
subplot(2,2,2);imagesc(x,y,timeR);title('Time from receiver');axis image
subplot(2,2,3);imagesc(x,y,K);title('Finite Frequency Kernel');axis image
subplot(2,2,4);imagesc(x,y,RAY);title('High frequency kernel');axis image

To calculate finite frequency and high frequency sensitivity kernel of more than one set og source and receivers kernel_multiple should be used, as this is more eficient than calling kernel many times:
nx=80;ny=70;
x=[1:1:nx];
y=[1:1:ny];
z=1;
v=ones(ny,nx); % Velocity field
S=[4 4 ; 4 10 ;4 ny-4]; % Sources
R=[nx-4 ny-4;nx-4 ny-4;nx-4 ny-4]; % Receiver
T=8; % Dominant period
alpha=1; %
[K,RAY,Gk,Gray,timeS,timeR,raypath,raylength]=kernel_multiple(v,x,y,z,S,R,T,alpha);
subplot(1,2,1);imagesc(x,y,reshape(sum(Gk),ny,nx));title('3 finite frequency kernels');caxis([0 1]);axis image
subplot(1,2,2);imagesc(x,y,reshape(sum(Gray),ny,nx));title('3 high frequency kernels');axis image

nx=40;ny=70;
x=[1:1:nx];
y=[1:1:ny];
v=ones(ny,nx);
SR=[4 4 ;nx-4 ny-4];
t = fast_fd_2d(x,y,v,SR);
dt=t(:,:,1)+t(:,:,2);
dt=dt-min(dt(:));
F = munk_fresnel_2d(1,dt);
subplot(1,3,1);imagesc(x,y,t(:,:,1));axis image;title('Source')
subplot(1,3,2);imagesc(x,y,t(:,:,2));axis image;title('Receiver')
subplot(1,3,3);imagesc(x,y,F);axis image;title('Fresnel')

| © 2004-2010 Thomas Mejer Hansen. | This site is hosted by
|