Chapter 1: Field recording geometries

Preview:

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

Recommended