@@ -34,19 +34,26 @@ struct OverrideInitData{IProb, UIProb, IProbMap, IProbPmap, M}
34
34
Additional metadata required by the creator of the initialization.
35
35
"""
36
36
metadata:: M
37
+ """
38
+ If this flag is `Val{true}`, `update_initializeprob!` is treated as an out-of-place
39
+ function which returns the updated `initializeprob`.
40
+ """
41
+ is_update_oop:: Union{Type{Val{true}}, Type{Val{false}}}
37
42
38
43
function OverrideInitData (initprob:: I , update_initprob!:: J , initprobmap:: K ,
39
- initprobpmap:: L , metadata:: M ) where {I, J, K, L, M}
44
+ initprobpmap:: L , metadata:: M , is_update_oop ) where {I, J, K, L, M}
40
45
@assert initprob isa
41
46
Union{SCCNonlinearProblem, NonlinearProblem, NonlinearLeastSquaresProblem}
42
47
return new {I, J, K, L, M} (
43
- initprob, update_initprob!, initprobmap, initprobpmap, metadata)
48
+ initprob, update_initprob!, initprobmap, initprobpmap, metadata, is_update_oop )
44
49
end
45
50
end
46
51
47
52
function OverrideInitData (
48
- initprob, update_initprob!, initprobmap, initprobpmap; metadata = nothing )
49
- OverrideInitData (initprob, update_initprob!, initprobmap, initprobpmap, metadata)
53
+ initprob, update_initprob!, initprobmap, initprobpmap;
54
+ metadata = nothing , is_update_oop = Val{false })
55
+ OverrideInitData (
56
+ initprob, update_initprob!, initprobmap, initprobpmap, metadata, is_update_oop)
50
57
end
51
58
52
59
"""
@@ -244,7 +251,11 @@ function get_initial_values(prob, valp, f, alg::OverrideInit,
244
251
initprob = initdata. initializeprob
245
252
246
253
if initdata. update_initializeprob! != = nothing
247
- initdata. update_initializeprob! (initprob, valp)
254
+ if initdata. is_update_oop == Val{true }
255
+ initprob = initdata. update_initializeprob! (initprob, valp)
256
+ else
257
+ initdata. update_initializeprob! (initprob, valp)
258
+ end
248
259
end
249
260
250
261
if is_trivial_initialization (initdata)
0 commit comments