public  subroutine dopri5_integrate(x0, y0, t0, t_final, u_func, v_func, params, path_x, path_y, times, n_points, n_accepted, n_rejected, success)  
    
    Integrate streamline using DOPRI5 method with adaptive step size
    Arguments
        
    
      
        | Type | Intent | Optional | Attributes |  | Name |  | 
    
        
            | real(kind=wp), | intent(in) |  |  | :: | x0 |  | 
        
            | real(kind=wp), | intent(in) |  |  | :: | y0 |  | 
        
            | real(kind=wp), | intent(in) |  |  | :: | t0 |  | 
        
            | real(kind=wp), | intent(in) |  |  | :: | t_final |  | 
        
            | 
    private  function u_func(x, y)  
    Arguments
    
      
        | Type | Intent | Optional | Attributes |  | Name |  |  
            | real(kind=wp), | intent(in) |  |  | :: | x |  |  
            | real(kind=wp), | intent(in) |  |  | :: | y |  |  
    Return Value
    real(kind=wp)
     | 
        
            | 
    private  function v_func(x, y)  
    Arguments
    
      
        | Type | Intent | Optional | Attributes |  | Name |  |  
            | real(kind=wp), | intent(in) |  |  | :: | x |  |  
            | real(kind=wp), | intent(in) |  |  | :: | y |  |  
    Return Value
    real(kind=wp)
     | 
        
            | type(integration_params_t), | intent(in) |  |  | :: | params |  | 
        
            | real(kind=wp), | intent(out), |  | allocatable | :: | path_x(:) |  | 
        
            | real(kind=wp), | intent(out), |  | allocatable | :: | path_y(:) |  | 
        
            | real(kind=wp), | intent(out), |  | allocatable | :: | times(:) |  | 
        
            | integer, | intent(out) |  |  | :: | n_points |  | 
        
            | integer, | intent(out) |  |  | :: | n_accepted |  | 
        
            | integer, | intent(out) |  |  | :: | n_rejected |  | 
        
            | logical, | intent(out) |  |  | :: | success |  |