3838
3939jacobian_autodiff (f, x, odefun) = (ForwardDiff. derivative (f,x),1 )
4040function jacobian_autodiff (f, x:: AbstractArray , odefun)
41- if DiffEqBase. has_colorvec (odefun)
42- colorvec = odefun. colorvec
43- sparsity = odefun. jac_prototype
44- jac_prototype = nothing
45- else
46- colorvec = 1 : length (x)
47- sparsity = nothing
48- jac_prototype = odefun. jac_prototype
49- end
41+ colorvec = DiffEqBase. has_colorvec (odefun) ? odefun. colorvec : 1 : length (x)
42+ sparsity = odefun. sparsity
43+ jac_prototype = odefun. jac_prototype
5044 maxcolor = maximum (colorvec)
5145 chunksize = getsize (default_chunk_size (maxcolor))
5246 num_of_chunks = Int (ceil (maxcolor / chunksize))
@@ -71,22 +65,15 @@ jacobian_finitediff(f, x, diff_type, dir, colorvec, sparsity, jac_prototype) =
7165jacobian_finitediff (f, x:: AbstractArray , diff_type, dir, colorvec, sparsity, jac_prototype) =
7266 (FiniteDiff. finite_difference_jacobian (f, x, diff_type, eltype (x), diff_type== Val{:forward } ? f (x) : similar (x),
7367 dir = dir, colorvec = colorvec, sparsity = sparsity, jac_prototype = jac_prototype),_nfcount (maximum (colorvec),diff_type))
74-
7568function jacobian (f, x, integrator)
7669 alg = unwrap_alg (integrator, true )
7770 local tmp
7871 if alg_autodiff (alg)
7972 J, tmp = jacobian_autodiff (f, x, integrator. f)
8073 else
81- if DiffEqBase. has_colorvec (integrator. f)
82- colorvec = integrator. f. colorvec
83- sparsity = integrator. f. jac_prototype
84- jac_prototype = nothing
85- else
86- colorvec = 1 : length (x)
87- sparsity = nothing
88- jac_prototype = integrator. f. jac_prototype
89- end
74+ colorvec = DiffEqBase. has_colorvec (integrator. f) ? integrator. f. colorvec : 1 : length (x)
75+ sparsity = integrator. f. sparsity
76+ jac_prototype = integrator. f. jac_prototype
9077 dir = diffdir (integrator)
9178 J, tmp = jacobian_finitediff (f, x, alg. diff_type, dir, colorvec, sparsity, jac_prototype)
9279 end
9683
9784jacobian_finitediff_forward! (J,f,x,jac_config,forwardcache,integrator,colorvec)=
9885 (FiniteDiff. finite_difference_jacobian! (J,f,x,jac_config,forwardcache,
99- dir= diffdir (integrator),colorvec= colorvec,sparsity= integrator. f. jac_prototype );maximum (colorvec))
86+ dir= diffdir (integrator),colorvec= colorvec,sparsity= integrator. f. sparsity );maximum (colorvec))
10087jacobian_finitediff! (J,f,x,jac_config,integrator,colorvec)=
10188 (FiniteDiff. finite_difference_jacobian! (J,f,x,jac_config,
102- dir= diffdir (integrator),colorvec= colorvec,sparsity= integrator. f. jac_prototype );2 * maximum (colorvec))
89+ dir= diffdir (integrator),colorvec= colorvec,sparsity= integrator. f. sparsity );2 * maximum (colorvec))
10390
10491function jacobian! (J:: AbstractMatrix{<:Number} , f, x:: AbstractArray{<:Number} , fx:: AbstractArray{<:Number} , integrator:: DiffEqBase.DEIntegrator , jac_config)
10592 alg = unwrap_alg (integrator, true )
125112function DiffEqBase. build_jac_config (alg:: Union{OrdinaryDiffEqAlgorithm,DAEAlgorithm} ,f,uf,du1,uprev,u,tmp,du2,:: Val{transform} = Val (true )) where transform
126113 if ! DiffEqBase. has_jac (f) && ((! transform && ! DiffEqBase. has_Wfact (f)) || (transform && ! DiffEqBase. has_Wfact_t (f)))
127114 if alg_autodiff (alg)
128- if DiffEqBase. has_colorvec (f)
129- colorvec = f. colorvec
130- sparsity = f. jac_prototype
131- else
132- colorvec = 1 : length (uprev)
133- sparsity = nothing
134- end
115+ colorvec = DiffEqBase. has_colorvec (f) ? f. colorvec : 1 : length (uprev)
116+ sparsity = f. sparsity
117+ jac_prototype = f. jac_prototype
135118 jac_config = ForwardColorJacCache (uf,uprev,colorvec= colorvec,sparsity= sparsity)
136119 else
137120 if alg. diff_type != Val{:complex }
0 commit comments