Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Chapter 1: Field recording geometries
Simplified viewSource
Simplified viewSource Receiver
Simplified viewSource Receiver
“Reflector”
Simplified viewSource Receiver
“Reflector”
Simplified viewSource Receiver
“Reflector”
Simplified viewSource Receiver
“Reflector”tim
e
Simplified viewSource Receiver
“Reflector”tim
e
Common midpoint (CMP)
Simplified viewSource Receiver
“Reflector”tim
e
Common midpoint (CMP)
Common depth point (CDP)
Simplified viewSource Receiver
“Reflector”tim
e
Common midpoint (CMP)
Offset
Common depth point (CDP)
Simplified viewSource Receiver
“Reflector”tim
e
Common midpoint (CMP)
half-offset(h)
Common depth point (CDP)
Simplified view
Simplified view
2-D seismic survey
Source position
X position
2-D seismic survey
Source position
X position
2-D seismic survey
Source position
X position
Common shot gather
Source position
X positionField profile or common shot
gather
Common geophone gather
Source position
X position Common geophone gather
Common offset section
Source position
X position Constant offset section
Common midpoint gather
Source position
X positionCommon midpoint
gather
Common midpoint gather
Source position
X positionCommon midpoint
gather
Note how we are sampling the same
piece of earth
Different ways to slice it
(y, h = 0, t) zero-offset section
(y, h = hmin, t) near-trace section
(y, h = const, t) constant-offset section
(y, h = hmax, t) far-trace section
(y = const, h, t) common-midpoint gather
(s = const, g, t) field profile (or common-shot gather)
(s, g = const, t) common-geophone gather
(s, g, t = const) time slice
(h, y, t = const) time slice
A diagram of slice names is in Figure 1.1. Figure 1.2 shows three slices from
the data volume. The first mode of display is “engineering drawing mode.” The
second mode of display is on the faces of a cube. But notice that although the
data is displayed on the surface of a cube, the slices themselves are taken from the
interior of the cube. The intersections of slices across one another are shown by
dark lines.
A common-depth-point (CDP) gather is defined by the industry and by common
usage to be the same thing as a common-midpoint (CMP) gather. But in this book
a distinction will be made. A CDP gather is a CMP gather with its time axis
3-D views
Different ways to
view3-D
volumes
3-D survey
Name the views
3-D survey
Name the views
Geophysicists(t,offset)
Geologist(t, midpoint)
(offset,midpoint)
NMO√
t2 − 4h2
v2t - timeh - half-offsetv- velocity
NMO√
t2 − 4h2
v2t - timeh - half-offsetv- velocity Correct and
sum to reduce dimensionality
NMO√
t2 − 4h2
v2t - timeh - half-offsetv- velocity Correct and
sum to reduce dimensionality
Why are we doing multiple sampling of
the media?
NMO: Common Midpoint gather
What we recordz
x position
t
offset
NMO: Common Midpoint gather
What we wantz
x position
t
offset
NMO: Simple geometry
h
z √z2 + h2
Text0 h
NMO: Simple geometry
h
z √z2 + h2
Text0 h
2z
v
2√
z2 + h2
v
NMO: Simple geometry
0 h
2z
v
2√
z2 + h2
v
t(h) = 2√
z2 + h2
v
t(h) =
√4z2
v2+
4h2
v2
t(h) =
√t(0)2 +
4h2
v2
t(0) =
√t(h)2 − 4h2
v2
2-D recording geometries: Split spread
Figure 1.3: A seismic land pro-
file. There is a gap where there
are no receivers near the shot.
You can see events of three dif-
ferent velocities. (Western Geo-
physical). fld-yc02 [ER]
Land data
2-D geometries: Off-end
Figure 1.4: A marine profile off
the Aleutian Islands. (Western
Geophysical). fld-yc20 [ER]
Slow-shooting boat
Fast shooting boat
Why do we care?0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5 6
√0 1 2 3 4 5 6
√7
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
s
s
g
g
receiver number
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5 6
√0 1 2 3 4 5 6
√7
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
Add in “x” coordinate0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5 6
√0 1 2 3 4 5 6
√7
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
s
s
g0
00
4
8 16
8
12
24 32
16
20
40 48
24
g0 4 8 12 16 20 24
0
2
8
12
16
20
24 0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5 6
√0 1 2 3 4 5 6
√7
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
Midpoint24
22 23
20 21 22
18 19 20 21
16 17 18 19 20
14 15 16 17 18 19
12 13 14 15 16 17 18
10 11 12 13 14 15 16 17
8 9 10 11 12 13 14 15 16
6 7 8 9 10 11 12 13 14
4 5 6 7 8 9 10 11 12
2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8
s
s
g
00
4
8
12
16
20
24
g0 4 8 12 16 20 24
0
4
8
12
16
20
24 36
33 35
30 32 34
27 29 31 33
24 26 28 30 32
21 23 25 27 29 31
18 20 22 24 26 28 30
15 17 19 21 23 25 27 29
12 14 16 18 20 22 24 26 28
9 11 13 15 17 19 21 23 25
6 8 10 12 14 16 18 20 22
3 5 7 9 11 13 15 17 19
0 2 4 6 8 10 12 14 16
0 8 16 24 32 40 48
Midpoint24
22 23
20 21 22
18 19 20 21
16 17 18 19 20
14 15 16 17 18 19
12 13 14 15 16 17 18
10 11 12 13 14 15 16 17
8 9 10 11 12 13 14 15 16
6 7 8 9 10 11 12 13 14
4 5 6 7 8 9 10 11 12
2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8
s
s
g
00
4
8
12
16
20
24
g0 4 8 12 16 20 24
0
4
8
12
16
20
24
Alternating sources map to alternating
midpoints
0 8 16 24 32 40 48
36
33 35
30 32 34
27 29 31 33
24 26 28 30 32
21 23 25 27 29 31
18 20 22 24 26 28 30
15 17 19 21 23 25 27 29
12 14 16 18 20 22 24 26 28
9 11 13 15 17 19 21 23 25
6 8 10 12 14 16 18 20 22
3 5 7 9 11 13 15 17 19
0 2 4 6 8 10 12 14 16
Midpoint24
22 23
20 21 22
18 19 20 21
16 17 18 19 20
14 15 16 17 18 19
12 13 14 15 16 17 18
10 11 12 13 14 15 16 17
8 9 10 11 12 13 14 15 16
6 7 8 9 10 11 12 13 14
4 5 6 7 8 9 10 11 12
2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8
s
s
g
00
4
8
12
16
20
24
g0 4 8 12 16 20 24
0
4
8
12
16
20
24
Alternating sources map to alternating
midpoints
0 8 16 24 32 40 48
36
33 35
30 32 34
27 29 31 33
24 26 28 30 32
21 23 25 27 29 31
18 20 22 24 26 28 30
15 17 19 21 23 25 27 29
12 14 16 18 20 22 24 26 28
9 11 13 15 17 19 21 23 25
6 8 10 12 14 16 18 20 22
3 5 7 9 11 13 15 17 19
0 2 4 6 8 10 12 14 16
Alternating midpoints have
alternating initial offsets
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Function declaration
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Define the variable types used in this function
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Output: 3-dimensional array (time. offset, midpoint)
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Number of time samples, offsets, and midpoints
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Number of reflectors we are going to create
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Declare arrays that exist only in this function
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
The amplitude of each reflector as a function of
midpoint
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
The zero offset time (actually time/dt) of each
reflector
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Create a seed to a random number generator
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Set the number of sources to the number of midpoints
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Fill in random zero offset times for each reflector
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Fill in random amplitudes (layer*(1.+dev) ) for each
reflector
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Zero the output
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Loop over each midpoint, offset, and reflector
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Calculate the midpoint for a given the given shot and
offset
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Trickiness to make a better movie (remember sources and midpoints don’t have exactly
the same range)
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
Figure out the time given the offset and the zero offset time for the given reflector
Synthetic marine
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed
real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)iseed= 1992; ns = nydo iz= 1, nz { # 0 < rand01() < 1
depth( iz) = nt * rand01(iseed) # Reflector depthlayer = 2. * rand01(iseed) - 1. # Reflector strengthdo iy= 1, ny { # Impose texture on layer
refl(iz,iy) = layer * (1. + rand01(iseed))}
}call null( data, nt*nh*ny) # erase data spacedo is= 1, ns { # shotsdo ih= 1, nh { # down cable h = (g-s)/2do iz= 1, nz { # Add hyperbola for each layer
iy = (ns-is)+(ih-1) # y = midpointiy = 1 + (iy-ny*(iy/ny)) # periodic with midpointit = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 )if( it <= nt)
data(it,ih,is) = data(it,ih,is) + refl(iz,iy)}}}
return; end
Back
If the time fits within our array add the amplitude
Ratfor to Fortran 90subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)
iseed= 1992; ns = nydo iz= 1, nz { depth( iz) = nt * rand01(iseed) layer = 2. * rand01(iseed) - 1. do iy= 1, ny { refl(iz,iy) = layer * (1. + rand01(iseed)) } }call null( data, nt*nh*ny) do is= 1, ns { do ih= 1, nh { do iz= 1, nz { iy = (ns-is)+(ih-1) iy = 1 + (iy-ny*(iy/ny)) it = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 ) if( it <= nt) data(it,ih,is) = data(it,ih,is) + refl(iz,iy) }}}
return; end
subroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseedreal data( nt,nh,ny), layerreal, allocatable :: refl:,:), depth(:)allocate(refl(nz,nx),depth(nz))iseed= 1992; ns = nydo iz 1=,nz depth( iz) = nt * rand01(iseed) layer = 2. * rand01(iseed) - 1. do iy= 1, ny refl(iz,iy) = layer * (1. + rand01(iseed)) end doend dodata=0do is=1,ns do ih=1,nh do iz=1,nz iy = (ns-is)+(ih-1) iy = 1 + (iy-ny*(iy/ny)) it = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 ) if( it <= nt) data(it,ih,is) = data(it,ih,is) + refl(iz,iy) end do end doend do deallocate(refl,depth)end subroutine synmarine
Ratfor to Csubroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)
iseed= 1992; ns = nydo iz= 1, nz { depth( iz) = nt * rand01(iseed) layer = 2. * rand01(iseed) - 1. do iy= 1, ny { refl(iz,iy) = layer * (1. + rand01(iseed)) } }call null( data, nt*nh*ny) do is= 1, ns { do ih= 1, nh { do iz= 1, nz { iy = (ns-is)+(ih-1) iy = 1 + (iy-ny*(iy/ny)) it = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 ) if( it <= nt) data(it,ih,is) = data(it,ih,is) + refl(iz,iy) }}}
return; end
void synmarine (float ***data, int nt,int nh,int ny, int nz){integer it,ih,iy,is,iz, ns, iseedfloat layerfloat **refl, *depth;refl=(float**) malloc(sizeof(float*)*nx);for(ix=0; ix < nx; ix++) refl[ix]=(float*)malloc(sizeof(float)*nz);depth=(float*) malloc(sizeof(float)*nz);iseed= 1992; ns = ny;for(iz=0; iz < nz; iz++){ depth[iz] = nt * rand01(iseed) ; layer = 2. * rand01(iseed) - 1. ; for(iy=0; iy < ny; iy++) refl[iy][iz] = layer * (1. + rand01(iseed));}for(iy=0; iy < ny; iy++){for(ih=0; ih < nh; ih++){ for(iz=0; iz < nz; iz++) data[iy][ih][iz]=0.;}}}for(is=0; is < ns; is++){ for(ih=0; ih < nh; ih++){ for(iz=0; iz < nz; iz++){ iy = (ns-is)+ih-1; iy = (iy-ny*(iy/ny)) ; it = sqrt( depth[iz]*depth[iz]+ 25.*(ih-1)*(ih-1)); if( it < nt) data[is][ih][is]-data[is][ih][it]( + refl[iy][iz]; }}}for(ix=0; ix < nx; ix++) free(refl[ix]);free(refl); free(depth);}
Ratfor to matlabsubroutine synmarine ( data, nt,nh,ny, nz)integer nt,nh,ny, nz, it,ih,iy,is,iz, ns, iseed real data( nt,nh,ny), layer, rand01temporary real refl(nz,ny), depth(nz)
iseed= 1992; ns = nydo iz= 1, nz { depth( iz) = nt * rand01(iseed) layer = 2. * rand01(iseed) - 1. do iy= 1, ny { refl(iz,iy) = layer * (1. + rand01(iseed)) } }call null( data, nt*nh*ny) do is= 1, ns { do ih= 1, nh { do iz= 1, nz { iy = (ns-is)+(ih-1) iy = 1 + (iy-ny*(iy/ny)) it = 1 + sqrt( depth(iz)**2 + 25.*(ih-1)**2 ) if( it <= nt) data(it,ih,is) = data(it,ih,is) + refl(iz,iy) }}}
return; end
function synmarine(data,nt,nh,ny,nz)refl=zeros(nz,ny)depth(nz)ns=nyfor iz=1:nz depth(iz)=nt*rand(1) layer=2*rand(1)-1.; for iy=1:ny refl(iz,iy)=layer*(1+rand(1)); end enddata=0;for is=1:ns for ih=0:nh for iz=0:nz iy=(ns-is)+ih-1; iy = 1+(iy-ny*(iy/ny)) ; it = 1+sqrt( depth(iz)^2+.25*(ih-1)^2) if( it < nt) data(iy,ih,is)=data(it,ih,is)+refl(iz,iy) end end end end