-
Notifications
You must be signed in to change notification settings - Fork 32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DataPreconditioner
works strange
#213
Comments
What does the muted/filtered data look like compared to the clean one? |
@mloubout here are the gradients (picture titles like 5.0 Hz doesn't mean anything): |
@mloubout I'm sorry, in my previous post I've sent slightly incorrect images. I rechecked the problem and here is the update of information:
|
Before looking at those gradient
|
@mloubout I recheked the preconditionners info from preconditionners notebook example and some some understanding has come. For example Dmr = judiDataMute(q, d_obs, vp=1500f0, t0=-1f0; mode=:reflection, taperwidth=2)
Dmt = judiDataMute(q, d_obs, vp=1500f0, t0=-1f0; mode=:turning, taperwidth=2) Also we have to explicitly pass
I guess I have to only implement muting there as filtration is done using source wavelet filtering. function myloss(dsyn, dobs)
dsyn = Ml_tur*dsyn
fval = .5f0 * norm(dsyn - dobs)^2
adjoint_source = dsyn - dobs
return fval, adjoint_source
end but the problem is that
|
|
@mloubout to set this up do I need to create a geometry with model_dt = get_dt(model0)
ntComp = get_computational_nt(q.geometry,d_obs.geometry,model0)
t_syn = model_dt*(ntComp[1]-1)
src_geom_syn = Geometry(container; key = "source", segy_depth_key = segy_depth_key_src, dt = model_dt, t = t_syn)
rec_geom_syn = Geometry(container; key = "receiver", segy_depth_key = segy_depth_key_rec, dt = model_dt, t = t_syn)
Ml_tur_syn = judiDataMute(src_geom_syn, rec_geom_syn, vp=1500f0, t0=0f0, mode=:turning, taperwidth=2)
function myloss(d_syn, d_obs)
d_syn = Ml_tur_syn*d_syn
fval = .5f0 * norm(d_syn - d_obs)^2
adjoint_source = d_syn - d_obs
return fval, adjoint_source
end and I get an exception:
|
|
@mloubout I have changed this line as you recommended (
|
Looks liek you are trying to use the multi-source preconditioned on a single source shot record |
@mloubout actually I have a 2D seismic line wich consists of a multiple shots. indsrc = 1
function myloss(d_syn, d_obs)
d_syn = Ml_tur_syn[indsrc]*d_syn[:] # process only single shot [indsrc]
fval = .5f0 * norm(d_syn - d_obs)^2
adjoint_source = d_syn - d_obs
return fval, adjoint_source
end
# process only single shot [indsrc]
fval, gradient = fwi_objective(model0, Mr_freq[indsrc]*q[indsrc], Ml_tur[indsrc]*Ml_freq[indsrc]*d_obs[indsrc], options=jopt, misfit=myloss) In this case the error (it seems something should be reshaped):
|
|
@mloubout right, thank you! And is there any solution of sythetic muting for multisource FWI? |
@mloubout I'm thinking about avoiding using F = judiModeling(model0, q.geometry, d_obs.geometry; options=jopt)
J = judiJacobian(F(model0), q)
d0 = F(model0)*q[indsrc]
gradient = J' * Ml_tur * Ml_freq * (d0 - d_obs) Then how to compute the residual? |
The residual is |
@mloubout I tried to compute single shot using |
@mloubout I'm trying to understand the difference between using operators and jopt = JUDI.Options(
subsampling_factor=10,
IC = "fwi",
limit_m = true,
buffer_size = buffer_size,
optimal_checkpointing=false,
free_surface=false,
space_order=8)
F = judiModeling(model0, q.geometry, d_obs.geometry; options=jopt)
J = judiJacobian(F(model0), q)
indsrc = 1
d0 = F(model0)[indsrc]*q[indsrc]
d = d_obs[indsrc]
r = d0 - d
gradient = J'[indsrc] * r and But if I add frequency filtering the gradients becomes different like I showed in the post above: Ml_freq = judiFilter(d_obs.geometry, 0.001, 2f0)
Mr_freq = judiFilter(q.geometry, 0.001, 2f0)
d0 = F(model0)[indsrc]*(Mr_freq[indsrc]*q[indsrc])
d = Ml_freq[indsrc]*d_obs[indsrc]
r = d0 - d
gradient = J'[indsrc] * r and I believe I'm missing something when doing frequency filtering on operators even if I follow the preconditionners example. |
You need to give the filtered source to |
Right! thank you very much! |
Hi,
I'm trying to compute FWI using turning waves and filter source wavelet and data.
I have something similar to that:
I compared the result with:
and with:
Calculated gradient in these three cases stays the same. It looks like
DataPreconditioners
don't work in all of these three situations.It only changes when using linear muter without bandpass filtering:
Maybe I don't understand something?
As a conclusion:
JUDI
v3.3.8
The text was updated successfully, but these errors were encountered: