@@ -13,8 +13,6 @@ function SciMLBase.__solve(prob::NonlinearProblem, alg::SimpleKlement, args...;
1313 T = eltype (x)
1414 fx = _get_fx (prob, x)
1515
16- singular_tol = eps (T)^ (2 // 3 )
17-
1816 abstol, reltol, tc_cache = init_termination_cache (abstol, reltol, fx, x,
1917 termination_condition)
2018
@@ -23,42 +21,14 @@ function SciMLBase.__solve(prob::NonlinearProblem, alg::SimpleKlement, args...;
2321 @bb xo = copy (x)
2422 @bb d = copy (x)
2523
26- J = __init_identity_jacobian (fx, x)
27- @bb J_cache = similar (J)
24+ J = one .(x)
2825 @bb δx² = similar (x)
29- @bb J_cache2 = similar (J)
30- @bb F = copy (J)
3126
3227 for _ in 1 : maxiters
33- if x isa Number
34- J < singular_tol && (J = __init_identity_jacobian!! (J))
35- F_ = J
36- else
37- @bb copyto! (F, J)
38- if setindex_trait (F) === CanSetindex ()
39- F_ = lu! (F; check = false )
40- else
41- F_ = lu (F; check = false )
42- end
28+ any (iszero, J) && (J = __init_identity_jacobian!! (J))
4329
44- # Singularity test
45- if ! issuccess (F_)
46- J = __init_identity_jacobian!! (J)
47- @bb copyto! (F, J)
48- if setindex_trait (J) === CanSetindex ()
49- F_ = lu! (F; check = false )
50- else
51- F_ = lu (F; check = false )
52- end
53- end
54- end
30+ @bb @. δx = fprev / J
5531
56- @bb copyto! (δx, fprev)
57- if setindex_trait (δx) === CanSetindex ()
58- ldiv! (F_, _vec (δx))
59- else
60- δx = _restructure (δx, F_ \ _vec (δx))
61- end
6232 @bb @. x = xo - δx
6333 fx = __eval_f (prob, fx, x)
6434
@@ -67,15 +37,8 @@ function SciMLBase.__solve(prob::NonlinearProblem, alg::SimpleKlement, args...;
6737 tc_sol != = nothing && return tc_sol
6838
6939 @bb δx .*= - 1
70- @bb J_cache .= transpose (J) .^ 2
71- @bb @. δx² = δx^ 2
72- @bb d = J_cache × vec (δx²)
73- @bb δx² = J × vec (δx)
74- @bb @. fprev = (fx - fprev - δx²) / ifelse (iszero (d), singular_tol, d)
75- @bb J_cache = vec (fprev) × transpose (_vec (δx))
76- @bb @. J_cache *= J
77- @bb J_cache2 = J_cache × J
78- @bb @. J += J_cache2
40+ @bb @. δx² = δx^ 2 * J^ 2
41+ @bb @. J += (fx - fprev - J * δx) / ifelse (iszero (δx²), T (1e-5 ), δx²) * δx * (J^ 2 )
7942
8043 @bb copyto! (fprev, fx)
8144 @bb copyto! (xo, x)
0 commit comments