@@ -8,7 +8,7 @@ function remove_node!(integrator::DiffEqBase.DEIntegrator, I...)
8
8
remove_node! (c, I... )
9
9
end
10
10
end
11
- deleteat_non_user_cache ! (integrator, idxs ) # required to do noise correctly
11
+ remove_node_non_user_cache ! (integrator, I ) # required to do noise correctly
12
12
end
13
13
14
14
function add_node! (integrator:: DiffEqBase.DEIntegrator , x, I... )
@@ -18,14 +18,14 @@ function add_node!(integrator::DiffEqBase.DEIntegrator, x, I...)
18
18
idx_start = getindices (integrator. u, last_idx)[end ] + 1
19
19
idxs = idx_start: idx_start+ add_len- 1
20
20
for c in full_cache (integrator)
21
- add_node! (c, similar (x, eltype (c)), I... )
21
+ add_node! (c, fill! ( similar (x, eltype (c)), 0 ), I... )
22
22
end
23
23
if DiffEqBase. is_diagonal_noise (integrator. sol. prob)
24
24
for c in DiffEqBase. ratenoise_cache (integrator)
25
- add_node! (c, similar (x, eltype (c)), I... )
25
+ add_node! (c, fill! ( similar (x, eltype (c)), 0 ), I... )
26
26
end
27
27
end
28
- addat_non_user_cache ! (integrator, idxs) # required to do noise correctly
28
+ add_node_non_user_cache ! (integrator, idxs, x, I ... ) # required to do noise correctly
29
29
end
30
30
31
31
function add_node! (integrator:: DiffEqBase.DEIntegrator , x)
@@ -34,17 +34,164 @@ function add_node!(integrator::DiffEqBase.DEIntegrator, x)
34
34
last_idx = length (integrator. u. nodes)
35
35
idx_start = getindices (integrator. u, last_idx)[end ] + 1
36
36
idxs = idx_start: idx_start+ add_len- 1
37
- @show idxs
38
37
for c in full_cache (integrator)
39
- add_node! (c, similar (x, eltype (c)))
38
+ add_node! (c, fill! ( similar (x, eltype (c)), 0 ))
40
39
end
41
40
if DiffEqBase. is_diagonal_noise (integrator. sol. prob)
42
41
for c in DiffEqBase. ratenoise_cache (integrator)
43
- add_node! (c, similar (x, eltype (c)))
42
+ add_node! (c, fill! ( similar (x, eltype (c)), 0 ))
44
43
end
45
44
end
46
- addat_non_user_cache ! (integrator, idxs) # required to do noise correctly
45
+ add_node_non_user_cache ! (integrator, idxs, fill! ( similar (x, eltype (x)), 0 ) ) # required to do noise correctly
47
46
end
48
47
49
48
50
49
reshape (m:: AbstractMultiScaleArray , i:: Int... ) = m
50
+
51
+ function remove_node_non_user_cache! (integrator:: DiffEqBase.AbstractODEIntegrator ,node)
52
+ i = length (integrator. u)
53
+ resize_non_user_cache! (integrator,integrator. cache,i)
54
+ end
55
+ function remove_node_non_user_cache! (integrator:: DiffEqBase.AbstractSDEIntegrator ,node)
56
+ if DiffEqBase. is_diagonal_noise (integrator. sol. prob)
57
+ remove_node_noise! (integrator,node)
58
+ for c in rand_cache (integrator)
59
+ remove_node! (c,node... )
60
+ end
61
+ end
62
+ end
63
+
64
+ function remove_node_noise! (integrator,node)
65
+ for c in integrator. W. S₁
66
+ remove_node! (c[2 ],node... )
67
+ if DiffEqBase. alg_needs_extra_process (integrator. alg)
68
+ remove_node! (c[3 ],node... )
69
+ end
70
+ end
71
+ for c in integrator. W. S₂
72
+ remove_node! (c[2 ],node... )
73
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
74
+ remove_node! (c[3 ],node... )
75
+ end
76
+ end
77
+ remove_node! (integrator. W. dW,node... )
78
+ remove_node! (integrator. W. dWtilde,node... )
79
+ remove_node! (integrator. W. dWtmp,node... )
80
+ remove_node! (integrator. W. curW,node... )
81
+
82
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
83
+ remove_node! (integrator. W. curZ,node... )
84
+ remove_node! (integrator. W. dZtmp,node... )
85
+ remove_node! (integrator. W. dZtilde,node... )
86
+ remove_node! (integrator. W. dZ,node... )
87
+ end
88
+ end
89
+
90
+ function add_node_non_user_cache! (integrator:: DiffEqBase.AbstractODEIntegrator ,idxs,x)
91
+ i = length (integrator. u)
92
+ resize_non_user_cache! (integrator,integrator. cache,i)
93
+ end
94
+ function add_node_non_user_cache! (integrator:: DiffEqBase.AbstractODEIntegrator ,idxs,x,node... )
95
+ i = length (integrator. u)
96
+ resize_non_user_cache! (integrator,integrator. cache,i)
97
+ end
98
+ function add_node_non_user_cache! (integrator:: DiffEqBase.AbstractSDEIntegrator ,idxs,x,node... )
99
+ if DiffEqBase. is_diagonal_noise (integrator. sol. prob)
100
+ add_node_noise! (integrator,idxs,x,node... )
101
+ for c in rand_cache (integrator)
102
+ add_node! (c,copy (x),node... )
103
+ end
104
+ end
105
+ end
106
+ function add_node_non_user_cache! (integrator:: DiffEqBase.AbstractSDEIntegrator ,idxs,x)
107
+ if DiffEqBase. is_diagonal_noise (integrator. sol. prob)
108
+ add_node_noise! (integrator,idxs,x)
109
+ for c in rand_cache (integrator)
110
+ add_node! (c,copy (x))
111
+ end
112
+ end
113
+ end
114
+
115
+ function add_node_noise! (integrator,idxs,x,node... )
116
+ for c in integrator. W. S₁
117
+ add_node! (c[2 ],copy (x),node... )
118
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
119
+ add_node! (c[3 ],copy (x),node... )
120
+ end
121
+ StochasticDiffEq. fill_new_noise_caches! (integrator,c,c[1 ],idxs)
122
+ end
123
+ for c in integrator. W. S₂
124
+ add_node! (c[2 ],copy (x),node... )
125
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
126
+ add_node! (c[3 ],copy (x),node... )
127
+ end
128
+ StochasticDiffEq. fill_new_noise_caches! (integrator,c,c[1 ],idxs)
129
+ end
130
+
131
+ add_node! (integrator. W. dW,copy (x),node... )
132
+ integrator. W. dW[idxs] .= zero (eltype (integrator. u))
133
+ add_node! (integrator. W. curW,copy (x),node... )
134
+ integrator. W. curW[idxs] .= zero (eltype (integrator. u))
135
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
136
+ add_node! (integrator. W. dZ,copy (x),node... )
137
+ integrator. W. dZ[idxs] .= zero (eltype (integrator. u))
138
+ add_node! (integrator. W. curZ,copy (x),node... )
139
+ integrator. W. curZ[idxs] .= zero (eltype (integrator. u))
140
+ end
141
+
142
+ i = length (integrator. u)
143
+ add_node! (integrator. W. dWtilde,copy (x),node... )
144
+ add_node! (integrator. W. dWtmp,copy (x),node... )
145
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
146
+ add_node! (integrator. W. dZtmp,copy (x),node... )
147
+ add_node! (integrator. W. dZtilde,copy (x),node... )
148
+ end
149
+
150
+ # fill in rands
151
+ fill! (@view (integrator. W. curW[idxs]),zero (eltype (integrator. u)))
152
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
153
+ fill! (@view (integrator. W. curZ[idxs]),zero (eltype (integrator. u)))
154
+ end
155
+ end
156
+
157
+ function add_node_noise! (integrator,idxs,x)
158
+ for c in integrator. W. S₁
159
+ add_node! (c[2 ],copy (x))
160
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
161
+ add_node! (c[3 ],copy (x))
162
+ end
163
+ StochasticDiffEq. fill_new_noise_caches! (integrator,c,c[1 ],idxs)
164
+ end
165
+ for c in integrator. W. S₂
166
+ add_node! (c[2 ],copy (x))
167
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
168
+ add_node! (c[3 ],copy (x))
169
+ end
170
+ StochasticDiffEq. fill_new_noise_caches! (integrator,c,c[1 ],idxs)
171
+ end
172
+
173
+ add_node! (integrator. W. dW,copy (x))
174
+ integrator. W. dW[idxs] .= zero (eltype (integrator. u))
175
+ add_node! (integrator. W. curW,copy (x))
176
+ integrator. W. curW[idxs] .= zero (eltype (integrator. u))
177
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
178
+ add_node! (integrator. W. dZ,copy (x))
179
+ integrator. W. dZ[idxs] .= zero (eltype (integrator. u))
180
+ add_node! (integrator. W. curZ,copy (x))
181
+ integrator. W. curZ[idxs] .= zero (eltype (integrator. u))
182
+ end
183
+
184
+ i = length (integrator. u)
185
+ add_node! (integrator. W. dWtilde,copy (x))
186
+ add_node! (integrator. W. dWtmp,copy (x))
187
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
188
+ add_node! (integrator. W. dZtmp,copy (x))
189
+ add_node! (integrator. W. dZtilde,copy (x))
190
+ end
191
+
192
+ # fill in rands
193
+ fill! (@view (integrator. W. curW[idxs]),zero (eltype (integrator. u)))
194
+ if StochasticDiffEq. alg_needs_extra_process (integrator. alg)
195
+ fill! (@view (integrator. W. curZ[idxs]),zero (eltype (integrator. u)))
196
+ end
197
+ end
0 commit comments