adjtomo / seisflows

An automated workflow tool for full waveform inversion and adjoint tomography
http://seisflows.readthedocs.org
BSD 2-Clause "Simplified" License
183 stars 124 forks source link

Some issues when using full waveform inversion #226

Open zuoxuan-de opened 3 weeks ago

zuoxuan-de commented 3 weeks ago

I'm trying to use specfem3d for some full waveform inversion tasks, but I have some usage questions that I would like your help with. Here are my questions: 1. Can I have each gun with its own different observing system when I do the inversion. 2. Will the other functional modules in it work properly, such as multi-scale inversion, regularization, etc.

bch0w commented 3 weeks ago

Hi @zuoxuan-de, thanks for reaching out. I am not sure I fully understand your questions but I've tried to answer below:

Can I have each gun with its own different observing system when I do the inversion

Do you mean can each source have it's own set of stations? If so, then yes, this is dictated by the data availability. If each source has it's own set of waveforms then that will limit which observations are used. At the moment you will need to use one general STATIONS file that contains all stations used in your inversion.

Will the other functional modules in it work properly, such as multi-scale inversion, regularization, etc.

Can you please elaborate? If you mean whether multiple sources with different station configurations will still work in SeisFlows? Then yes that shouldnt be as problem

Let me know if I misunderstood!

zuoxuan-de commented 2 weeks ago

Hi @zuoxuan-de, thanks for reaching out. I am not sure I fully understand your questions but I've tried to answer below:

Can I have each gun with its own different observing system when I do the inversion

Do you mean can each source have it's own set of stations? If so, then yes, this is dictated by the data availability. If each source has it's own set of waveforms then that will limit which observations are used. At the moment you will need to use one general STATIONS file that contains all stations used in your inversion.

Will the other functional modules in it work properly, such as multi-scale inversion, regularization, etc.

Can you please elaborate? If you mean whether multiple sources with different station configurations will still work in SeisFlows? Then yes that shouldnt be as problem

Let me know if I misunderstood!

Thank you very much for your reply, and I apologize for the difficulty in understanding my previous question, which I will expand on specifically below. The first question is what you understand, but I don't understand some details, can I understand it like this: in the forward simulation of the initial model, we use a file that contains all the stations, called station 1, and the file of the stations that we got which seismic data before is a relatively independent observing system, called station 2 (different from station 1 but belongs to station 1), but with a uniform numbering ( For example, if Station 1 is 1.2.3.4.5, Station 2 may be 3.4.5), and in addition for the above Stations 1 and 2, must the adjoint stations and stations be the same? The second question may not be very clear in my presentation, first of all I couldn't find the relevant documents to introduce the use of the full waveform inversion part, but I encountered the problems of Poisson's ratio out of range caused by model update and the objective function value may encounter local extreme values and can't be decreased when I performed general full waveform inversion, so I tried to use the functions of the modules such as multi-scale full waveform inversion and regularization to reduce the influence of the local extreme values. I see these inversion parameter files in the SPECFEM3D code file src/inverse_problem_for_model>input_output>input_output_mod.f90 in the subroutine read_inver_file, but I'm not sure if these can be used, or the how to use them. These are my questions, thank you for your reply. Have a nice day.

bch0w commented 2 weeks ago

Hi @zuoxuan-de, thanks for elaborating on your questions

The first question is what you understand, but I don't understand some details, can I understand it like this: in the forward simulation of the initial model, we use a file that contains all the stations, called station 1, and the file of the stations that we got which seismic data before is a relatively independent observing system, called station 2 (different from station 1 but belongs to station 1), but with a uniform numbering ( For example, if Station 1 is 1.2.3.4.5, Station 2 may be 3.4.5), and in addition for the above Stations 1 and 2, must the adjoint stations and stations be the same?

Okay I think I understand, you only need one STATIONS file that contains all stations that you will be using. In your example, this is the file you call Station 1, which contains 1, 2, 3, 4, 5. SeisFlows is smart enough to determine which stations to ignore based on data availability. Because there is no corresponding data for some sources, the adjoint stations for some of these will be zero, which effectively ignores stations that don't record certain sources.

The second question may not be very clear in my presentation, first of all I couldn't find the relevant documents to introduce the use of the full waveform inversion part, but I encountered the problems of Poisson's ratio out of range caused by model update and the objective function value may encounter local extreme values and can't be decreased when I performed general full waveform inversion

The Poisson's ratio error means your model has become unphysical and likely your inversion problem is not well defined. You will need stronger regularization (you can control smoothing with the parameters smooth_h and smooth_v in SeisFlows), or to re-define your problem.

so I tried to use the functions of the modules such as multi-scale full waveform inversion and regularization to reduce the influence of the local extreme values. I see these inversion parameter files in the SPECFEM3D code file src/inverse_problem_for_model>input_output>input_output_mod.f90 in the subroutine read_inver_file, but I'm not sure if these can be used, or the how to use them.

This SPECFEM inversion code is not used by SeisFlows. SeisFlows internally handles these tasks and only uses SPECFEM for forward and adjoint simulations, smoothing, and kernel summation.

Hope that helps