+ All Categories
Home > Documents > [email protected] weilib: wave-equation imaging Paul Sava.

[email protected] weilib: wave-equation imaging Paul Sava.

Date post: 21-Dec-2015
Category:
View: 218 times
Download: 1 times
Share this document with a friend
Popular Tags:
39
[email protected]. edu weilib: wave-equation imaging Paul Sava
Transcript

[email protected]

weilib: wave-equation imaging

Paul Sava

[email protected]

My goal

• Quick introduction to the library

• Not much about the imaging science

• Ask the right questions

[email protected]

Library goals

• Flexible research– Code recycling – Efficiency vs. flexibility

• Cluster access– Parallelization with MPI, OMP

• Large problems– 3-D data

[email protected]

Characteristics

• Programming– Fortran 90– OO

• Problem types– Shot-receiver migration– Shot-profile migration

• Versions

[email protected]

Linear operators

dm L

call operator_init(…)

stat=operator(adj,add,m,d)

m d L

[email protected]

WE imaging

dm L• Large datasets (m,d)

– Data partition

• Complicated operators (L)– Operator partition

[email protected]

The problem

DATA (d)

IMA

GE

(m

)

dm *L

z

[email protected]

Cluster distribution

MPI

z

ii dm *L

[email protected]

Outline

• Overview

• Objects– Partitioning– I/O

• Operators– WE migration– WE MVA

• Examples

[email protected]

WEI initialization

call sep_init()

call weipar_init()

call weipar_report()

call weitag_init()

call weipro_init()

call weipro_bcast()

[email protected]

WEI objects & procedures

• Objects– Data– Image– Slowness– Wavefield

• Procedures– file tag– dimensions– I/O– MPI communication

[email protected]

WEI data object

type wedata

character(len=128) :: tag

character(len=128) :: from

integer :: bites,esize

type(axis) :: amx,amy,ahx,ahy,aw

complex, pointer :: bin(:,:,:,:,:)

end type wedata

[email protected]

WEI data object

DD%tag=wtag%D

call weiD_init(DD)

call weiD_report(DD)

call weiD_allocate(DD)

call weiD_read(DD)

call weiD_write(DD)

call weiD_mpisprd(DD)

call weiD_mpigthr(DD)

[email protected]

WEI migration workflow

data

slowness

image

image

image

image

slowness

slowness

slowness

slowness

data

data

data

data

imageNode 2

Node 4

Node 3

Node 1MPI

MPI

[email protected]

WEI workflow example

call weiS_mpicopy(SS)

call weiR_mpizero(RR)

call weiD_mpisprd(DD)

call weimigof(…)

call weiR_mpisumm(RR)

[email protected]

I/O blocking

z

[email protected]

I/O blocking example

do iwb=1,nwb

call weiD_read(bW,iwb)

do izb=1,nzb

call weiR_read(RR,izb)

call weiS_read(SS,izb)

call weiR_write(RR,izb)

end do

end do

[email protected]

Shared memory parallelization

OMP

z

[email protected]

Shared memory parallelization

!$OMP PARALLEL

!$OMP DO &

!$OMP$ PRIVATE(iws,izs,ith)

do iws=1,nws

ith=omp_get_thread_num()+1

do izs=1,nzs

end do

end do

!$OMP END DO

!$OMP END PARALLEL

[email protected]

Outline

• Overview

• Objects– Partitioning– I/O

• Operators– WE migration– WE MVA

• Examples

[email protected]

WE migration

extr

apol

atio

n

imaging

depth

frequencyDATA (d)

IMA

GE

(m

)

[email protected]

Extrapolation

zikzzz

zeWW

depth

frequency

Wz

Wz+z 00

0ss

ds

dkkk

s

zzz

[email protected]

Imaging

depth

frequency

Wz+z

Rz+z

zzzz RW

[email protected]

zssds

dki

zik

zzzs

z

z eeWW

000

WE migration

zzzz RW

[email protected]

WCop: wavefield continuation operator

• Single reference slowness• Multi reference slowness

– Wavefield interpolation

zssds

dki

zik

zzzs

z

z eeWW

000

zzzz RW

[email protected]

SLop: slowness selection operator

• Min/Mean/Median• Lloyd

zssds

dki

zik

zzzs

z

z eeWW

000

zzzz RW

[email protected]

FKop: phase-shift operator

• Common-azimuth• Narrow-azimuth • Full prestack

zssds

dki

zik

zzzs

z

z eeWW

000

zzzz RW

[email protected]

FXop: finite-difference operator

• Phase-shift• Split-step Fourier• Generalized Screen Propagator

zssds

dki

zik

zzzs

z

z eeWW

000

zzzz RW

[email protected]

IGop: imaging operator

• Offset• Ray parameter

zssds

dki

zik

zzzs

z

z eeWW

000

zzzz RW

[email protected]

Outline

• Overview

• Objects– Partitioning– I/O

• Operators– WE migration– WE MVA

• Examples

[email protected]

WE MVA

zsds

dki

zik

zzzs

z

z eeWW

00

zs

ds

dkiWW

s

zzzzz

0

10

szds

dkiWW

s

z 0

0

[email protected]

SCop: scattering operator

zsds

dki

zik

zzzs

z

z eeWW

00

szds

dkiWW

s

z 0

0

[email protected]

Outline

• Overview

• Objects– Partitioning– I/O

• Operators– WE migration– WE MVA

• Examples

[email protected]

WEI datuming (survey sinking)

f-x operator

Slowness operator

f-k operator

Continuation operator

stat = weidtm(adj,add, D, U,SLop=weiop_slo1,

WCop=weiop_mwc1,FKop=weiop_wem3,

FXop=weiop_ssf3)

call weidtm_init(SLin=weiop_slo1_init,

WCin=weiop_mwc1_init,FKin=weiop_wem3_init,FXin=weiop_ssf3_init)

[email protected]

WEI migration: example 1

stat = weimig(adj,add, R, D,SLop=weiop_slo1,WCop=weiop_mwc1,FKop=weiop_wem3,FXop=weiop_ssf3,IGop=weiop_pcig)

Imaging operator

call weimig_init(SLin=weiop_slo1_init,

WCin=weiop_mwc1_init,FKin=weiop_wem3_init,FXin=weiop_ssf3_init,IGin=weiop_pcig_init)

[email protected]

WEI migration: example 2

stat = weimig(adj,add, R, D,SLop=weiop_sllN,WCop=weiop_mwcN,FKop=weiop_cam3,FXop=weiop_ssf3,IGop=weiop_hcig)

call weimig_init(SLin=weiop_sllN_init,

WCin=weiop_mwcN_init,FKin=weiop_cam3_init,FXin=weiop_ssf3_init,IGin=weiop_hcig_init)

[email protected]

WEI MVA

stat = weimva(adj,add, dS,dR,SLop=weiop_sllN,SCop=weiop_bor1,WCop=weiop_mwcN,FKop=weiop_wem3,FXop=weiop_ssf3,IGop=weiop_hcig)

Scattering operator

call weimva_init(SLin=weiop_sllN_init,SCin=weiop_bor1_init,

WCin=weiop_mwcN_init,FKin=weiop_wem3_init,FXin=weiop_ssf3_init,IGin=weiop_hcig_init)

[email protected]

Summary

• Flexible, reusable f90 code

• Cluster ready (MPI,OMP)

• Standard operator interface

• Applications– WE datuming– WE migration– WE MVA

[email protected]

Resources ([email protected])

• Developers– Paul, Bob

• Manual– Marie

• Users– Biondo, Antoine, Morgan, Brad, Nick, Alejandro


Recommended