Skip to content

Commit e563466

Browse files
fix: handle initial parameters in codegen
1 parent 73fb137 commit e563466

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

src/systems/index_cache.jl

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,12 @@ function reorder_parameters(ic::IndexCache, ps; drop_missing = false)
510510
(BasicSymbolic[unwrap(variable(:DEF))
511511
for _ in 1:(ic.tunable_buffer_size.length)],)
512512
end
513+
initials_buf = if ic.initials_buffer_size.length == 0
514+
()
515+
else
516+
(BasicSymbolic[unwrap(variable(:DEF))
517+
for _ in 1:(ic.initials_buffer_size.length)],)
518+
end
513519

514520
disc_buf = Tuple(BasicSymbolic[unwrap(variable(:DEF))
515521
for _ in 1:(sum(x -> x.length, temp))]
@@ -531,6 +537,13 @@ function reorder_parameters(ic::IndexCache, ps; drop_missing = false)
531537
else
532538
param_buf[1][i] = unwrap.(collect(p))
533539
end
540+
elseif haskey(ic.initials_idx, p)
541+
i = ic.initials_idx[p]
542+
if i isa Int
543+
initials_buf[1][i] = unwrap(p)
544+
else
545+
initials_buf[1][i] = unwrap.(collect(p))
546+
end
534547
elseif haskey(ic.constant_idx, p)
535548
i, j = ic.constant_idx[p]
536549
const_buf[i][j] = p
@@ -543,7 +556,8 @@ function reorder_parameters(ic::IndexCache, ps; drop_missing = false)
543556
end
544557

545558
result = broadcast.(
546-
unwrap, (param_buf..., disc_buf..., const_buf..., nonnumeric_buf...))
559+
unwrap, (
560+
param_buf..., initials_buf..., disc_buf..., const_buf..., nonnumeric_buf...))
547561
if drop_missing
548562
result = map(result) do buf
549563
filter(buf) do sym
@@ -566,6 +580,11 @@ function iterated_buffer_index(ic::IndexCache, ind::ParameterIndex)
566580
elseif ic.tunable_buffer_size.length > 0
567581
idx += 1
568582
end
583+
if ind.portion isa SciMLStructures.Initials
584+
return idx + 1
585+
elseif ic.initials_buffer_size.length > 0
586+
idx += 1
587+
end
569588
if ind.portion isa SciMLStructures.Discrete
570589
return idx + ind.idx[1]
571590
elseif !isempty(ic.discrete_buffer_sizes)
@@ -587,6 +606,8 @@ function get_buffer_template(ic::IndexCache, pidx::ParameterIndex)
587606

588607
if portion isa SciMLStructures.Tunable
589608
return ic.tunable_buffer_size
609+
elseif portion isa SciMLStructures.Initials
610+
return ic.initials_buffer_size
590611
elseif portion isa SciMLStructures.Discrete
591612
return ic.discrete_buffer_sizes[idx[1]][1]
592613
elseif portion isa SciMLStructures.Constants

0 commit comments

Comments
 (0)