Program sfeikonal_surf | Fast marching eikonal solver (3-D) and record the traveltimes on the surface. 
[SYNOPSIS]
sfeikonal_surf < vel.rsf > time.rsf shotfile=shots.rsf vel=y order=2 sweep=n br1=d1 br2=d2 br3=d3 plane1=n plane2=n plane3=n b1=plane[2]? n1: (int) (br1/d1+0.5) b2=plane[1]? n2: (int) (br2/d2+0.5) b3=plane[0]? n3: (int) (br3/d3+0.5) zshot=0. yshot=o2 + 0.5*(n2-1)*d2 xshot=o3 + 0.5*(n3-1)*d3
[COMMENTS]
It supports massive 3D ray tracing for ML purposes.

[PARAMETERS]
int     | b1 | =plane[2]? n1: (int) (br1/d1+0.5) |   | 	
int     | b2 | =plane[1]? n2: (int) (br2/d2+0.5) |   | 	
int     | b3 | =plane[0]? n3: (int) (br3/d3+0.5) |   | 	Constant-velocity box around the source (in samples) 
float   | br1 | =d1 |   | 	
float   | br2 | =d2 |   | 	
float   | br3 | =d3 |   | 	Constant-velocity box around the source (in physical dimensions) 
int     | order | =2 |  [1,2] | 	Accuracy order 
bool    | plane1 | =n |  [y/n] | 	
bool    | plane2 | =n |  [y/n] | 	
bool    | plane3 | =n |  [y/n] | 	plane-wave source 
string  | shotfile | = |   | 	File with shot locations (n2=number of shots, n1=3) (auxiliary input file name)
bool    | sweep | =n |  [y/n] | 	if y, use fast sweeping instead of fast marching 
bool    | vel | =y |  [y/n] | 	if y, the input is velocity; n, slowness squared 
float   | xshot | =o3 + 0.5*(n3-1)*d3 |   | 	
float   | yshot | =o2 + 0.5*(n2-1)*d2 |   | 	
float   | zshot | =0. |   | 	Shot location (used if no shotfile) 
[DIRECTORY]
user/chenyk
