keurfonluu / evodcinv

Inversion of dispersion curves using Evolutionary Algorithms
BSD 3-Clause "New" or "Revised" License
77 stars 31 forks source link

Poisson's ratio #21

Open avinash07guddu opened 12 months ago

avinash07guddu commented 12 months ago

Hello I am a postdoc trying to use this software, thanks very much for making it available. Is there a way to prescribe a range of Poisson's ratio (for example, 0.25 to 0.35) in the configuration options ? Is there a way to tie Vp to Vs based on some empirical relationship ? Thanks.

keurfonluu commented 12 months ago

Hi @avinash07guddu,

You can pass a third argument in model.add that corresponds to the search boundaries for the Poisson's ratio:

model = EarthModel()
model.add(Layer([0.001, 0.1], [0.1, 3.0]), [0.25, 0.35])

No, Vp is mechanically linked to Vs and the Poisson's ratio. I am not sure why you would like to link Vp and Vs using another relationship (unless it's the Vp/Vs ratio).

avinash07guddu commented 12 months ago

thanks very much, i will add the poisson's ratio range in the configuration options. yes, i meant linking Vp and Vs using Vp/Vs ratio. there are some empirical relationships that define Vp as a function of Vs. usually Vp/Vs ratio increases with decreasing Vs. for example, this paper https://link.springer.com/article/10.1007/s10950-007-9061-3 that way, we can reduce the number of unknowns by half which still accounting for some basic relationship because usually on crustal scale, dispersion curves don't depend that much on Vp.

On an unrelated note, does the res object also store the synthetic dispersion curves ? I did print(res.__dir__()) I got - ['xs', 'models', 'misfits', 'global_misfits', 'maxiter', 'popsize'] I am seeing the population of models and misfits but not the synthetic dispersion values.

Also, I am trying to jointly invert multiple modes. I was wondering if you have an example. I tried the following, it seems to work, but I haven't checked the synthetics yet.

curves = [Curve(period0, velocity0, 0, "rayleigh", "phase"),Curve(period1, velocity1, 1, "rayleigh", "phase")]

Also, I was wondering if there is any additional library required for running the code in parallel. I tried "workers": 4, because my laptop has a 4-core processor, it roughly took the same amount of time. Sorry, new to Python.

Thanks very much for your help.

keurfonluu commented 12 months ago

You can fix the Poisson's ratio by providing a constant value instead of a search boundary. For instance, for Vp/Vs=2, you can set the third argument to 0.33 for all layers (or different constant values for each layer if you want Vp/Vs decreasing with depth).

No, the calculated dispersion curves are not stored because we usually want to plot smooth dispersion curves against the sparse data fitted, so the dispersion curves are usually recalculated when we want to plot the results (which is fine, since the forward modeling is usually fast).

It's running in parallel by default, so if you have 4 cores, it's using 4 cores. Use "workers" : 1 to run it with a single core.

79seismo commented 8 months ago

Hi, how does Poisson's ratio fit into the inversion? Don't we invert only for the Vs structure?

keurfonluu commented 8 months ago

Dispersion curves are mainly sensitive to Vs, but we still need Vp and densities to calculate the dispersion curves. Since dispersion curves are the less sensitive to the density, density is determined by an empirical law (Nafe-Drake by default, but can be customized as well). Vp is determined using the Poisson's ratio as it has more physical meaning than Vp/Vs ratio (rocks usually have a Poisson's ratio between 0.1 and 0.4).

If you don't want to invert for Vp, as said here, you can fix the search boundaries of the Poisson's ratio to a constant value.