# Nonzero traction error in spontaneous rupture model

**URL:** <https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703>\
**Category:** PyLith\
**Created:** [July 3, 2019, 9:54pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703 "2019-07-03T21:54:24Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![albarodriguez](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@albarodriguez](https://community.geodynamics.org/u/albarodriguez)\
**Post date:** [July 3, 2019, 9:54pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/1 "2019-07-03T21:54:25Z")

</div>

Hi,

I have modified step13 in hex8 (slip-weakening fault friction in a quasistatic problem) to build a spontaneous rupture model for my own fault. I have encountered an error regarding the tractions on the fault. The fault is planar with a fine mesh. Here’s what pylith is returning:

“terminating with uncaught exception of type std::runtime\_error: WARNING! Fault opening with nonzero traction., v\_fault: 1735, opening: 9.60479e-07, normal traction: -1.05722e-05”

I tried attaching the json file but I get an error saying “new users cannot upload attachments”. I can provide it via email if that would help solve the problem.

Thank you,

Alba

---

<div class="post-metadata">

**Author:** ![baagaard](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/baagaard/32/615_2.png) [@baagaard](https://community.geodynamics.org/u/baagaard)\
**Post date:** [July 3, 2019, 10:17pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/2 "2019-07-03T22:17:20Z")

</div>

You need to adjust the solver tolerances. See the discussion of solver tolerances in the slides of the 2017 CDM tutorial [2-D Subduction Zone: Fault Friction](https://wiki.geodynamics.org/software:pylith:cdm2017).

---

<div class="post-metadata">

**Author:** ![albarodriguez](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@albarodriguez](https://community.geodynamics.org/u/albarodriguez)\
**Post date:** [July 3, 2019, 11:51pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/3 "2019-07-03T23:51:45Z")

</div>

Thank you, Brad.

I have tried using the tolerances recommended in the slides but continue to get the same error. I have also tried increasing the tolerances while respecting the suggestions in the tutorial (keeping ksp\_atol and snes atol larger than zero\_tolerance) with no luck. Increasing the tolerance of the zero\_tolerance\_normal to 10^-3 made it crash much later, yet it still ultimately brought up the same error.

Thank you for your help,  
Alba

---

<div class="post-metadata">

**Author:** ![baagaard](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/baagaard/32/615_2.png) [@baagaard](https://community.geodynamics.org/u/baagaard)\
**Post date:** [August 6, 2019, 4:21pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/4 "2019-08-06T16:21:22Z")

</div>

Solver tolerances of 10^-3 are almost surely too large for a reasonable solution. Can you post the `.cfg` files you are using when the solver tolerances are around 10^-8?

Note: You should keep the `ksp_rtol` and `snes_rtol` values at 10^-20

---

<div class="post-metadata">

**Author:** ![albarodriguez](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@albarodriguez](https://community.geodynamics.org/u/albarodriguez)\
**Post date:** [September 13, 2019, 5:53pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/5 "2019-09-13T17:53:19Z")

</div>

Hi Brad,

I have changed the tolerances to your recommended values (10^-20) and keep getting the same error. I get it with at least three different scripts. I attach the .cfg file for one of them (modified after step13 in hex8). I also attach the pylith.cfg file.

Thanks,

Alba

[elastic\_spontaneous.cfg](https://community.geodynamics.org/uploads/short-url/90mgvqVU1Nj9uRkZkpBUfFrFfyX.cfg) (7.4 KB) [pylithapp.cfg](https://community.geodynamics.org/uploads/short-url/XyCUGino97YQ0MDhmecc6hrvyn.cfg) (2.6 KB)

---

<div class="post-metadata">

**Author:** ![baagaard](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/baagaard/32/615_2.png) [@baagaard](https://community.geodynamics.org/u/baagaard)\
**Post date:** [September 13, 2019, 6:19pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/6 "2019-09-13T18:19:08Z")

</div>

You are using an absolute tolerance of 1.0e-20 for the KSP (linear) solve. This should be 1-2 orders of magnitude smaller than the SNES absolute tolerance (1.0e-9). So try something like `ksp_atol = 1.0e-11`.

---

<div class="post-metadata">

**Author:** ![albarodriguez](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@albarodriguez](https://community.geodynamics.org/u/albarodriguez)\
**Post date:** [September 13, 2019, 6:33pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/7 "2019-09-13T18:33:22Z")

</div>

I tried a range from 10^-6 to 10^-10 for the linear solver and got the same nonzero traction error

---

<div class="post-metadata">

**Author:** ![baagaard](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/baagaard/32/615_2.png) [@baagaard](https://community.geodynamics.org/u/baagaard)\
**Post date:** [September 13, 2019, 6:36pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/8 "2019-09-13T18:36:28Z")

</div>

Please provide the entire log (everything that is normally written to the screen), including the error message.

---

<div class="post-metadata">

**Author:** ![albarodriguez](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@albarodriguez](https://community.geodynamics.org/u/albarodriguez)\
**Post date:** [September 13, 2019, 6:39pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/9 "2019-09-13T18:39:00Z")

</div>

[pylith\_log\_error.txt](https://community.geodynamics.org/uploads/short-url/pPdxjWhx12FJYmHdDy12WIjeDev.txt) (16.0 KB)  
here it goes, thanks

---

<div class="post-metadata">

**Author:** ![baagaard](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/baagaard/32/615_2.png) [@baagaard](https://community.geodynamics.org/u/baagaard)\
**Post date:** [September 13, 2019, 7:11pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/10 "2019-09-13T19:11:12Z")

</div>

The normal traction and opening are still quite small, so I would try increasing the `zero_tolerance_normal` to try to keep the fault closed. Sometimes small asymmetries result in very small amounts of fault opening that are difficult to avoid.

See `examples/2d/subduction/step06.cfg` for an example of how to set `zero_tolerance_normal`.

I would use something like

```auto
[pylithapp.timedependent.interfaces.fault]
# Zero tolerance for locking fault (no slip). Must be larger than ksp tolerance.
zero_tolerance = 1.0e-8
zero_tolerance_normal = 1.0e-6

```

---

<div class="post-metadata">

**Author:** ![albarodriguez](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@albarodriguez](https://community.geodynamics.org/u/albarodriguez)\
**Post date:** [September 13, 2019, 8:16pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/11 "2019-09-13T20:16:16Z")

</div>

I followed the script on step06 and tried the values you suggested and others (while keeping values larger than ksp tolerance) but saw no difference. The updated log error is attached.

[pylith\_log\_error.txt](https://community.geodynamics.org/uploads/short-url/tO6YPq6eAe4zFL9zTOzdC8DQbup.txt) (16.0 KB)

Are the asymmetries a problem from the mesh? I have run other problems (both coseismic only and including post-seismic relaxation) on this mesh with no issues.

---

<div class="post-metadata">

**Author:** ![josimar](https://avatars.discourse-cdn.com/v4/letter/j/cab0a1/32.png) [@josimar](https://community.geodynamics.org/u/josimar)\
**Post date:** [November 21, 2019, 9:45pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/12 "2019-11-21T21:45:57Z")

</div>

Hi @albarodriguez , did you solve this problem ? Could you comment a little on how did you fix it ? Thanks!

---

<div class="post-metadata">

**Author:** ![albarodriguez](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@albarodriguez](https://community.geodynamics.org/u/albarodriguez)\
**Post date:** [November 25, 2019, 5:29pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/13 "2019-11-25T17:29:29Z")

</div>

Hi Josimar,

Brad took a look at it and was able to figure out the issue. The buried edges of the fault were not specified and that is what was causing the ‘opening tractions’ error.

Alba

---

<div class="post-metadata">

**Author:** ![dian.k](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/dian.k/32/2334_2.png) [@dian.k](https://community.geodynamics.org/u/dian.k)\
**Post date:** [June 21, 2024, 9:57am UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/14 "2024-06-21T09:57:26Z")

</div>

Hello @albarodriguez and @baagaard

I have similar error (WARNING! Fault opening with nonzero traction), in modeling non-planar fault. I am interested in the discussion and in the solutions. But I don’t understand clearly with the last solution (related to the buried edges of the fault).

I would like to ask, what do you mean by “the buried edges of the fault were not specified” in this case (example Step 13)?

Thank you

---

<div class="post-metadata">

**Author:** ![baagaard](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/baagaard/32/615_2.png) [@baagaard](https://community.geodynamics.org/u/baagaard)\
**Post date:** [June 21, 2024, 2:19pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/15 "2024-06-21T14:19:20Z")

</div>

Buried fault edges are discussed in [Fault Interface Conditions — PyLith 4.1.2 documentation](https://pylith.readthedocs.io/en/latest/user/physics/faults/index.html#fault-implementation).

When you have a nonplanar fault, slip will induce fault opening because the geometry of the fault surface is incompatible with slip along that surface. The workaround is to increase the zero tolerance for fault opening so that PyLith treats a small amount of opening as zero. If you need to keep increasing the `zero_tolerance_normal` to larger and larger values, it means your fault is too jagged and you need to smooth the fault geometry, refine your mesh, or both.

```auto
[pylithapp.timedependent.interfaces.fault]
# Zero tolerance for locking fault (no slip). Must be larger than ksp tolerance.
zero_tolerance = 1.0e-8
zero_tolerance_normal = 1.0e-6

```

---

<div class="post-metadata">

**Author:** ![dian.k](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/dian.k/32/2334_2.png) [@dian.k](https://community.geodynamics.org/u/dian.k)\
**Post date:** [June 22, 2024, 2:56am UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/16 "2024-06-22T02:56:06Z")

</div>

Thank you @baagaard for the answers and suggestions! I will try them.

Best regards,  
Dian

---

<div class="post-metadata">

**Author:** ![dian.k](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/dian.k/32/2334_2.png) [@dian.k](https://community.geodynamics.org/u/dian.k)\
**Post date:** [October 1, 2024, 9:12am UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/17 "2024-10-01T09:12:51Z")

</div>

Dear @baagaard,

I tried the zero tolerance parameter for nonplanar fault slip, in the specific .cfg file:

```auto
[pylithapp.problem.interfaces.fault]
zero_tolerance = 1.0e-8
zero_tolerance_normal = 1.0e-6

```

and I used these convergence parameter in the pylithapp.cfg:

```auto
# Convergence parameters.
ksp_rtol = 1.0e-20
ksp_atol = 1.0e-12
ksp_max_it = 100
ksp_gmres_restart = 50

# Nonlinear solver monitoring options.
snes_rtol = 1.0e-20
snes_atol = 1.0e-7
snes_max_it = 100
snes_monitor = true
snes_linesearch_monitor = true
#snes_view = true
snes_converged_reason = true
snes_error_if_not_converged = true

```

When I opened the results,  
(1) I saw the fault folded at the tips (blue circle top fig), which I did not modeled. Is it ok to have such folded fault?  
(2) I exaggerated the block’s displacement to 10000, an opening is still observed on some part of the fault (green circle bottom fig). How do I check the opening value at this portion of fault?  
(3) I wonder, can I check/ confirm whether the fault is already slip or not yet, from the traction values on the fault? How do I check it? Kindly advice.

Figures are attached below. The fault specifications are: cohesion 2 MPa, friction 0.5, running 0 to 200 year, axial and shear displacement boundary condition).

Thank you.

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/geodynamics/original/2X/7/76c60b2701595ef93c07cdc74e43dca9c69457d9.jpeg)

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/geodynamics/original/2X/c/cf49a34a5a196759fa42b5087753dc85cfc5648c.jpeg)

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/geodynamics/original/2X/4/4b35a9aab5f16c9b9e6c6262d8b71b5f3c1adbd4.png)

---

<div class="post-metadata">

**Author:** ![baagaard](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/baagaard/32/615_2.png) [@baagaard](https://community.geodynamics.org/u/baagaard)\
**Post date:** [October 1, 2024, 6:45pm UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/18 "2024-10-01T18:45:57Z")

</div>

The faults getting “folded” at the tips looks like it is associated with not specifying the buries edges of the fault. This is necessary to prevent the buried edges of the fault extending arbitrarily one face into the domain. Refer to Figures 6.3 and 6.4 in the PyLith v2.2.2 manual for diagrams related to this issue. A discussion of specifying buried edges in a `.cfg` is included in Section 7.18.7 (excerpt from `step03.cfg`).

A nonplanar fault will generate opening. The amount of opening depends on the curvature and amount of slip. The zero tolerance for opening controls how much opening is considered to be sufficient to create a free surface, that is the two sides are no longer in contact. If the opening is less than the zero tolerance, the code treats the two sides as being in contact and applies the associated physics. If the opening is greater than the zero tolerance, the code treats the two sides as not being in contact and they become free surfaces.

The best way to monitor the amount of slip is to look at the components of slip vector. You can look at the traction components at the same time steps to associate the slip with the effect on the tractions.

---

<div class="post-metadata">

**Author:** ![dian.k](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/dian.k/32/2334_2.png) [@dian.k](https://community.geodynamics.org/u/dian.k)\
**Post date:** [October 2, 2024, 4:00am UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/19 "2024-10-02T04:00:21Z")

</div>

Thank you @baagaard

I will look at the references.

Thanks

---

<div class="post-metadata">

**Author:** ![dian.k](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/dian.k/32/2334_2.png) [@dian.k](https://community.geodynamics.org/u/dian.k)\
**Post date:** [October 11, 2024, 9:38am UTC](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703/20 "2024-10-11T09:38:11Z")

</div>

Dear @baagaard

I have tried with buried edges, and the fault looks good (no folded edge). Thank you.

I found some interesting anomaly feature (shown in circle in the top figure) that only exist in certain friction and cohesion parameter. However, If I ran with a new mesh (finer mesh) the feature diverge into two patches of anomaly which geologically hard to explain (shown in circle in the bottom figure).

I would like to ask, how I differentiate whether the anomaly is due to deformation result or due to an artefact because of parameter modeling/ mesh? Kindly advice. Thank you.

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/geodynamics/original/2X/4/453d8eff379d03a67693fd5569fbc6652be28718.jpeg)

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/geodynamics/original/2X/a/a7af05f1783aa35b622a49c8bea089efe0d21a67.jpeg)

[Next page](https://community.geodynamics.org/t/nonzero-traction-error-in-spontaneous-rupture-model/703.md?page=2)
