Problem reproducing SCEC dynamic rupture benchmark TPV205 results on SCEC website



Hi all,
I’m working on reproducing benchmark TPV205. However, the results are different from the SCEC website.
Although the rupture time contours are consistent:
the slip and slip rate history is different.
I would like to take the output at fault-station (4.5 km, -7.5km) as an example:

It is clear that my simulation is lack of the third/fourth pulse compared to the SCEC benchmark results.
The first pulse is the initial rupture front from the nucleation zone. The second one is the secondary rupture front from the free surface. The third pulse comes from the right fault boundary, which is set to be unbreakable.

What could be the problem? I have carefully investigated every parameter and the mesh, but couldn’t be able to trouble-shoot it.
Any suggestions will be greatly appreciated.



Are you using the files from the pylith_benchmarks repository or creating your own?

There are some subtle details in the problem setup that could be leading to small discrepancies.

  1. The problem description is not discretization size independent. For example, the initial fault tractions are not C0 continuous. I believe the results uploaded to the SCEC website are ones where I averaged the stress along the boundaries of the square asperities in an attempt to make the results diescretization size independent.

  2. The edge of the fault is not defined in a discretization size independent manner. The current version of PyLith treats the edge of the fault differently than when the benchmark was originally run. We now mark the buried edges of the fault so slip is forced to zero along the buried edges. I see this is included in your .cfg file already, so it is unlikely to be the source of the problem.

  3. For a while, I maintained a special pylith-scecdynrup branch to implement special behavior required by the SCEC dynamic rupture benchmarks. It has not been kept up to date. The primary differences include implementation of some additional friction models, rupture initiation mechanisms, and preventing fault opening.

Examining the rupture time contours is often helpful to diagnose where the problem originates (near the hypocenter, free surface, or fault edges).


If you did not align the mesh with the fault boundaries and/or asperity boundaries, then that is very likely the problem.


I would focus on the fault traction time histories as they are usually more diagnostic than the slip rate time histories.

I would also use the mesh from the pylith_benchmarks repository. You may need to make some small adjustments to get the journal files to work for your version of CUBIT/Trelis. Different versions of CUBIT/Trelis order the entities differently, so ids of vertices, edges, surfaces, volumes, etc often need to be updated.


Thank you for your advice. I will perform another simulation to see how this will influence the results.


Thanks for your advice. I tried another simulation using exactly the same parameter and mesh files in the pylith_benchmarks repository on two different machines. But they all give similar results to my previous simulations, i.e. with no multiple secondary ruptures observed.

It is possible that current version Pylith deals with the unbreakable fault boundaries in a different way?



We have changed how we deal with the buried edges of faults in recent versions of PyLith. However, given the proper problem setup they should produce identical results.

Which boundary (fault boundary or domain boundary) are you referring to when you say “Effect from the boundary”? What is different at the boundary? If it is the fault boundary, are the fault traction time histories different?

Some other things that come to mind:

  • Your figure doesn’t indicate what resolution you are running.
  • Are all of the domains (PyLith benchmarks repo, your PyLith setup, SPECFEM setup) exactly the same size?
  • Are you using the same artificial viscosity as the PyLith benchmarks repo?


Hi Brad,
Thanks for the prompt reply!
I used the same mesh file and .cfg files as in the repository.

Resolution and Mesh

For Pylith, the mesh is tet4_100m refined from the tet4_200m mesh:

The artificial viscosity is 0.3 same as the repo.
For SPECFEM3D, the mesh is hex8_200m. Since I obtain this resolution yields similar results to the SCEC, I didn’t try to run a 100m simulation using SPECFEM3D.

Effects from the boundary

By the bonudaries, I am referring to the left/right unbreakable fault boundaries.
This is can seen when we put the rupture propagation movie from Pylith and Specfem3D together and compare with the slip-rate histoty at the given fault staion, i.e. the center of the nucleation square.

The first pulse observed in the slip-rate history cuver is the initial rupture from the nucleation. The second one comes from the top free surface. The 3rd and 4th pulses, which are not observed from the Pylith, comes from the left/right boundary respectively.
For Pylith, it seems that rupture from the left/right boundary quickly disappears before it reaches the output station.
The following figure is a snapshot from SCEC website:

Slip rate pulse Arrival time(s) Pylith Pylith SECE Specfem3D
1 0.5 Observed Observed Observed
2 5.6 Observed Observed Observed
3 9.8 Not observed Observed Observed
4 10.8 Not observed Observed Observed


As I have mentioned previously, I would focus on comparing the fault traction time histories near the edges of the fault. Those should help isolate why the rupture is not reflecting off the hard no-slip boundaries at the edges of the fault.