@@ -129,27 +129,39 @@ const dualcache = DiffCache
129129Returns the `Dual` or normal cache array stored in `dc` based on the type of `u`.
130130"""
131131function get_tmp (dc:: DiffCache , u:: T ) where {T <: ForwardDiff.Dual }
132- nelem = div (sizeof (T), sizeof (eltype (dc. dual_du))) * length (dc. du)
133- if nelem > length (dc. dual_du)
134- enlargediffcache! (dc, nelem)
132+ if isbitstype (T)
133+ nelem = div (sizeof (T), sizeof (eltype (dc. dual_du))) * length (dc. du)
134+ if nelem > length (dc. dual_du)
135+ enlargediffcache! (dc, nelem)
136+ end
137+ _restructure (dc. du, reinterpret (T, view (dc. dual_du, 1 : nelem)))
138+ else
139+ _restructure (dc. du, zeros (T, size (dc. du)))
135140 end
136- _restructure (dc. du, reinterpret (T, view (dc. dual_du, 1 : nelem)))
137141end
138142
139143function get_tmp (dc:: DiffCache , :: Type{T} ) where {T <: ForwardDiff.Dual }
140- nelem = div (sizeof (T), sizeof (eltype (dc. dual_du))) * length (dc. du)
141- if nelem > length (dc. dual_du)
142- enlargediffcache! (dc, nelem)
144+ if isbitstype (T)
145+ nelem = div (sizeof (T), sizeof (eltype (dc. dual_du))) * length (dc. du)
146+ if nelem > length (dc. dual_du)
147+ enlargediffcache! (dc, nelem)
148+ end
149+ _restructure (dc. du, reinterpret (T, view (dc. dual_du, 1 : nelem)))
150+ else
151+ _restructure (dc. du, zeros (T, size (dc. du)))
143152 end
144- _restructure (dc. du, reinterpret (T, view (dc. dual_du, 1 : nelem)))
145153end
146154
147155function get_tmp (dc:: DiffCache , u:: AbstractArray{T} ) where {T <: ForwardDiff.Dual }
148- nelem = div (sizeof (T), sizeof (eltype (dc. dual_du))) * length (dc. du)
149- if nelem > length (dc. dual_du)
150- enlargediffcache! (dc, nelem)
156+ if isbitstype (T)
157+ nelem = div (sizeof (T), sizeof (eltype (dc. dual_du))) * length (dc. du)
158+ if nelem > length (dc. dual_du)
159+ enlargediffcache! (dc, nelem)
160+ end
161+ _restructure (dc. du, reinterpret (T, view (dc. dual_du, 1 : nelem)))
162+ else
163+ _restructure (dc. du, zeros (T, size (dc. du)))
151164 end
152- _restructure (dc. du, reinterpret (T, view (dc. dual_du, 1 : nelem)))
153165end
154166
155167function get_tmp (dc:: DiffCache , u:: Union{Number, AbstractArray} )
0 commit comments