next up previous print clean
Next: Blocky models Up: NULL SPACE AND INTERVAL Previous: NULL SPACE AND INTERVAL

Balancing good data with bad

Choosing the size of $\bold \epsilon$ chooses the stiffness of the curve that connects regions of good data. Our first test cases gave solutions that we interpreted to be too stiff at early times and too flexible at later times. This leads to two possible ways to deal with the problem. One way modifies the model shaping and the other modifies the data fitting. The program below weakens the data fitting weight with time. This has the same effect as stiffening the model shaping with time.

 
clapp
clapp
Figure 1
Raw CMP gather (left), Semblance scan (middle), and semblance value used for weighting function (right). (Clapp)


view burn build edit restore

 
stiff
stiff
Figure 2
Observed RMS velocity and that predicted by a stiff model with $\epsilon=4$. (Clapp)


view burn build edit restore

 
flex
flex
Figure 3
Observed RMS velocity and that predicted by a flexible model with $\epsilon=.25$ (Clapp)


view burn build edit restore

 

module vrms2int_mod {                # Transform from RMS to interval velocity
  use causint
  use cgstep_mod
  use solver_mod
contains
  subroutine vrms2int( niter, eps, weight, vrms, vint) {
    integer,            intent( in)     :: niter     # iterations
    real,               intent( in)     :: eps       # scaling parameter
    real, dimension(:), intent( in out) :: vrms      # RMS velocity    
    real, dimension(:), intent( out)    :: vint      # interval velocity
    real, dimension(:), pointer         :: weight    # data weighting
    integer                             :: st,it,nt  
    logical, dimension( size( vint))    :: mask
    real,    dimension( size( vrms))    :: dat 
    nt = size( vrms)
    do it= 1, nt {
       dat( it) = vrms( it) * vrms( it) * it
       weight( it) = weight( it)*(1./it)           # decrease weight with time 
       }
    mask = .false.;   mask( 1) = .true.            # constrain first point
    vint = 0.     ;   vint( 1) = dat( 1)
    call solver_prec( causint_lop, cgstep, x= vint, dat= dat, niter= niter, 
                      known= mask, x0= vint, wt= weight, 
                      prec=causint_lop, eps= eps, nprec= nt)
    call cgstep_close()
    st = causint_lop( .false., .false., vint, dat)
    do it= 1, nt
       vrms( it) = sqrt( dat( it)/it)
    vint = sqrt( vint)
    }
}


next up previous print clean
Next: Blocky models Up: NULL SPACE AND INTERVAL Previous: NULL SPACE AND INTERVAL
Stanford Exploration Project
2/27/1998