I definitely understand nothing about what this all is supposed to do. At 1st glance: are you sure about calling
&F0($t1,@c);
...
&F0(($t2+$step/2),( @c + (&k1($t2)/2)));
? What (how many) arguments do you think F0 receives in each case?
Further, k2_1 calls k1. Just for sake of symmetry, I wonder if it should have been k1_1. Have you tested/debugged each subroutine/section, so they work as expected, instead of typing this huge and complex code to observe final results? And I suspect other monks' advice about code and PBP will follow.