Skip to content

Commit 9996868

Browse files
authored
Merge pull request geodynamics#5686 from bangerth/hack-spd-2
Better document the SPD safety factor.
2 parents 9b4c832 + d3b2c50 commit 9996868

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

source/simulator/newton.cc

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,13 @@ namespace aspect
220220
"When stabilizing the Newton matrix, we can encounter situations where the coefficient inside the elliptic (top-left) "
221221
"block becomes negative or zero. This coefficient has the form $1+x$ where $x$ can sometimes be smaller than $-1$. In "
222222
"this case, the top-left block of the matrix is no longer positive definite, and both preconditioners and iterative "
223-
"solvers may fail. To prevent this, the stabilization computes an $\\alpha$ so that $1+\\alpha x$ is never negative. "
224-
"This $\\alpha$ is chosen as $1$ if $x\\ge -1$, and $\\alpha=-\\frac 1x$ otherwise. (Note that this always leads to "
225-
"$0\\le \\alpha \\le 1$.) On the other hand, we also want to stay away from $1+\\alpha x=0$, and so modify the choice of "
226-
"$\\alpha$ to be $1$ if $x\\ge -c$, and $\\alpha=-\\frac cx$ with a $c$ between zero and one. This way, if $c<1$, we are "
227-
"assured that $1-\\alpha x>c$, i.e., bounded away from zero.");
223+
"solvers may fail. To prevent this, the stabilization computes an $\\alpha$ so that $1+\\alpha x$ is never negative "
224+
"and so that always "
225+
"$0\\le \\alpha \\le 1$. On the other hand, we also want to stay away from $1+\\alpha x=0$, and so modify the choice of "
226+
"$\\alpha$ by a factor $c$ between zero and one so that if $c<1$, we are "
227+
"assured that $1+\\alpha x>0$, i.e., bounded away from zero. If $c=1$, we allow $1+\\alpha x=0$, i.e., an "
228+
"unsafe situation. If $c=0$, then $\\alpha$ is always set to zero which guarantees the desired property that "
229+
"$1+\\alpha x=1>0$, but at the cost of a diminished convergence rate of the Newton method.");
228230

229231
prm.declare_entry ("Use Eisenstat Walker method for Picard iterations", "false",
230232
Patterns::Bool(),

0 commit comments

Comments
 (0)