Dynamic rupture simulation runs entirely but produces NaNs and zeros in fault output

Dear Pylith developers,

I’m using pylith 2.2.2 built from source.

I’m running a dynamic rupture simulation on a planar fault. Absorbing boundary conditions, prescribed initial stress within the domain + stress perturbation on the fault to trigger the rupture. I’m using a custom friction law that I implemented (exponential decay with slip). I’ve ran other simulations with this law before and there were no issues, so I don’t think the problem is there (or not entirely there).

My simulation starts normal and then at a seemingly random time the fault output becomes zero for every node for slip and slip rate and NaN for stress components. This happens over several timesteps (there are several files with partially numerical output). I don’t see anything unusual in the log file for the transition pointand the simulation completes. Just with zeros and NaN output for the rest of it. Do you have any ideas on what the problem might be? Anything I can monitor to figure it out?
Attached is a plot of slip rate output for two different friction laws (the problematic one on the right).

I’m running the same simulation on different fault lengths and the “truncation” moment happens at different times. The same simulation with a different failure law (also custom) completes fine.


The symptoms you describe are consistent with a time step that is just slightly too large and the solution blows up. Try reducing your time step by 30-50%. It will take the simulation longer to run, but it will likely run.

Thank you Brad!
This worked. The simulation runs now. The results became much noisier though (even if I compare the beginning where both time steps worked). Do you know why that would be the case? My new time step is half the old one.

There are many sources of introducing numerical noise. It could be related to your friction model and parameters, initial conditions, discretization, or a combination of all three. A “noisy” solution suggests inadequate resolution. A friction model with an exponential decrease in slip will likely need a finer resolution mesh, because the friction is decreasing faster resulting in a smaller cohesive zone. You can check your simulation output to see how many cells are within the cohesive zone (you want 3-4 at a minimum).

Thank you!

My process zone is adequately resolved (30+ elements at the beginning of the simulation) The question was why a non-noisy solution with a larger time step became noisy after time step reduction? My initial conditions, mesh and everything else is the same, the only thing that changed was the time step.

You will need to examine your results carefully. Clearly something is different between the two simulations. I would examine the time histories of slip and stress on the fault very carefully to understand where they diverge.

Thank you Brad!
I found a workaround: a time step 0.9 of the original one both runs entirely and produces a non-noisy solution, but it would still be great to understand why time step reduction led to noise. It was only the time step that changed. The solutions diverge right away. Attached is a slip rate plot: right - 0.5 of original time step, left - 0.9 of original timestep.

I would look at individual time series near the hypocenter to identify how the smaller time step is affecting the solution.