I'm writing RadauIIA (for now, fixed order 5 with 3 points) method for ODE 
BVP (basically, collocation method). In the process, I construct an overall 
non-linear equation that needs to be solved. It takes "mega-vector" x[j] as 
an argument. However, internally it is more convenient to reshape it to 
y[m,i,n] where m is the index of original ODE vector, i is the index of the 
collocation point on time element (or layer) and n is time element index. 
Also, some inputs to the method (ODE RHS function and BVP function) expect 
z[m]-kind vector. So far I chose to pass a @view of the "mega-vector" to 
them.

The alternatives for reshaping and @view would be:

   - Use the inline function or a macro that maps the indices between 
   mega-vector and arrays (I've tried it, didn't see any difference in 
   performance or memory allocation, but @code_warntype has less "red" spots)
   - Copy relevant pieces of mega-vector into preallocated arrays of 
   desired shape. This can also be an alternative for @view.

Is there some kind of rule of thumb where which one would be preferable? 
And are there any high costs associated with @view and reshape?

Reply via email to