Tried using both expv and expv_timestep from ExponentialUtilities.jl. Used the below codes:
EXPV: u0 = 100*ones(62500);t_end= 1e-3;
@time U = expv(t_end, Jacobianmat, u0; tol=1e-15);
RESULT: expv gives correct results only until a t_end value of 1e-9 seconds, beyond which the values are 0 everywhere, but i need results till a time-span of atleast 1e-3 seconds.
Note: The max values in the jacobian are of the order 1e12, the minimum nonzero values are 1e-3 and i want to solve the problem till a span of 1e-3 seconds (a large time-span considering the fastest dynamics are 9 orders faster than the slowest dynamics)
EXPV_TIMESTEP: u0 = 100*ones(62500);ts= (10.0).^Array(-10:0.5:-3);
@time U = expv_timestep(ts, Jacobianmat, u0; adaptive=true, tol=1e-7,verbose=true)
RESULT: expv_timestep gives more accurate solutions but the ‘dt’ value was not adaptive (although i set adaptive= true) and the ‘dt’ value was always around 1e-10 seconds (I simulated for about 2-3 days and i only got until 1e-6 seconds. CVODE_BDF did much better and was able to solve until 200e-6 seconds within 20 hours of simulation time. However CVODE_BDF too became unstable later on)
Will update the results of adaptive exponential RK methods exprb32 and exprb43 soon.
Also, I did not want to try fixed time step exponential methods such as exponential RK and exponential propagation iterative methods because I want the results over a large timespan.