@@ -13,8 +13,6 @@ function SciMLBase.__solve(prob::NonlinearProblem, alg::SimpleKlement, args...;
13
13
T = eltype (x)
14
14
fx = _get_fx (prob, x)
15
15
16
- singular_tol = eps (T)^ (2 // 3 )
17
-
18
16
abstol, reltol, tc_cache = init_termination_cache (abstol, reltol, fx, x,
19
17
termination_condition)
20
18
@@ -23,42 +21,14 @@ function SciMLBase.__solve(prob::NonlinearProblem, alg::SimpleKlement, args...;
23
21
@bb xo = copy (x)
24
22
@bb d = copy (x)
25
23
26
- J = __init_identity_jacobian (fx, x)
27
- @bb J_cache = similar (J)
24
+ J = one .(x)
28
25
@bb δx² = similar (x)
29
- @bb J_cache2 = similar (J)
30
- @bb F = copy (J)
31
26
32
27
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))
43
29
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
55
31
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
62
32
@bb @. x = xo - δx
63
33
fx = __eval_f (prob, fx, x)
64
34
@@ -67,15 +37,8 @@ function SciMLBase.__solve(prob::NonlinearProblem, alg::SimpleKlement, args...;
67
37
tc_sol != = nothing && return tc_sol
68
38
69
39
@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 )
79
42
80
43
@bb copyto! (fprev, fx)
81
44
@bb copyto! (xo, x)
0 commit comments