{-# LINE 1 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 2 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 3 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

-- | <http://www.gnu.org/software/gsl/manual/html_node/Ordinary-Differential-Equations.html>

module Bindings.Gsl.OrdinaryDifferentialEquations where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 8 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}


{-# LINE 10 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 12 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 14 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 15 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 16 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
data C'gsl_odeiv2_system = C'gsl_odeiv2_system{
  c'gsl_odeiv2_system'function :: FunPtr (CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr () -> IO CInt),
  c'gsl_odeiv2_system'jacobian :: FunPtr (CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr () -> IO CInt),
  c'gsl_odeiv2_system'dimension :: CSize,
  c'gsl_odeiv2_system'params :: Ptr ()
} deriving (Eq,Show)
p'gsl_odeiv2_system'function p = plusPtr p 0
p'gsl_odeiv2_system'function :: Ptr (C'gsl_odeiv2_system) -> Ptr (FunPtr (CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr () -> IO CInt))
p'gsl_odeiv2_system'jacobian p = plusPtr p 4
p'gsl_odeiv2_system'jacobian :: Ptr (C'gsl_odeiv2_system) -> Ptr (FunPtr (CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr () -> IO CInt))
p'gsl_odeiv2_system'dimension p = plusPtr p 8
p'gsl_odeiv2_system'dimension :: Ptr (C'gsl_odeiv2_system) -> Ptr (CSize)
p'gsl_odeiv2_system'params p = plusPtr p 12
p'gsl_odeiv2_system'params :: Ptr (C'gsl_odeiv2_system) -> Ptr (Ptr ())
instance Storable C'gsl_odeiv2_system where
  sizeOf _ = 16
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 12
    return $ C'gsl_odeiv2_system v0 v1 v2 v3
  poke p (C'gsl_odeiv2_system v0 v1 v2 v3) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 12 v3
    return ()

{-# LINE 17 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

foreign import ccall "gsl_odeiv2_step_alloc" c'gsl_odeiv2_step_alloc
  :: Ptr C'gsl_odeiv2_step_type -> CSize -> IO (Ptr C'gsl_odeiv2_step)
foreign import ccall "&gsl_odeiv2_step_alloc" p'gsl_odeiv2_step_alloc
  :: FunPtr (Ptr C'gsl_odeiv2_step_type -> CSize -> IO (Ptr C'gsl_odeiv2_step))

{-# LINE 19 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_step_reset" c'gsl_odeiv2_step_reset
  :: Ptr C'gsl_odeiv2_step -> IO CInt
foreign import ccall "&gsl_odeiv2_step_reset" p'gsl_odeiv2_step_reset
  :: FunPtr (Ptr C'gsl_odeiv2_step -> IO CInt)

{-# LINE 20 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_step_free" c'gsl_odeiv2_step_free
  :: Ptr C'gsl_odeiv2_step -> IO ()
foreign import ccall "&gsl_odeiv2_step_free" p'gsl_odeiv2_step_free
  :: FunPtr (Ptr C'gsl_odeiv2_step -> IO ())

{-# LINE 21 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_step_name" c'gsl_odeiv2_step_name
  :: Ptr C'gsl_odeiv2_step -> IO CString
foreign import ccall "&gsl_odeiv2_step_name" p'gsl_odeiv2_step_name
  :: FunPtr (Ptr C'gsl_odeiv2_step -> IO CString)

{-# LINE 22 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_step_order" c'gsl_odeiv2_step_order
  :: Ptr C'gsl_odeiv2_step -> IO CUInt
foreign import ccall "&gsl_odeiv2_step_order" p'gsl_odeiv2_step_order
  :: FunPtr (Ptr C'gsl_odeiv2_step -> IO CUInt)

{-# LINE 23 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_step_set_driver" c'gsl_odeiv2_step_set_driver
  :: Ptr C'gsl_odeiv2_step -> Ptr C'gsl_odeiv2_driver -> IO CInt
foreign import ccall "&gsl_odeiv2_step_set_driver" p'gsl_odeiv2_step_set_driver
  :: FunPtr (Ptr C'gsl_odeiv2_step -> Ptr C'gsl_odeiv2_driver -> IO CInt)

{-# LINE 24 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_step_apply" c'gsl_odeiv2_step_apply
  :: Ptr C'gsl_odeiv2_step -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr C'gsl_odeiv2_system -> IO CInt
foreign import ccall "&gsl_odeiv2_step_apply" p'gsl_odeiv2_step_apply
  :: FunPtr (Ptr C'gsl_odeiv2_step -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr C'gsl_odeiv2_system -> IO CInt)

{-# LINE 25 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

foreign import ccall "&gsl_odeiv2_step_rk2" p'gsl_odeiv2_step_rk2
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 27 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_rk4" p'gsl_odeiv2_step_rk4
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 28 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_rkf45" p'gsl_odeiv2_step_rkf45
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 29 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_rkck" p'gsl_odeiv2_step_rkck
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 30 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_rk8pd" p'gsl_odeiv2_step_rk8pd
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 31 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_rk1imp" p'gsl_odeiv2_step_rk1imp
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 32 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_rk2imp" p'gsl_odeiv2_step_rk2imp
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 33 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_rk4imp" p'gsl_odeiv2_step_rk4imp
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 34 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_bsimp" p'gsl_odeiv2_step_bsimp
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 35 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_msadams" p'gsl_odeiv2_step_msadams
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 36 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "&gsl_odeiv2_step_msbdf" p'gsl_odeiv2_step_msbdf
  :: Ptr (Ptr C'gsl_odeiv2_step_type)

{-# LINE 37 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

foreign import ccall "gsl_odeiv2_control_standard_new" c'gsl_odeiv2_control_standard_new
  :: CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_control)
foreign import ccall "&gsl_odeiv2_control_standard_new" p'gsl_odeiv2_control_standard_new
  :: FunPtr (CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_control))

{-# LINE 39 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_y_new" c'gsl_odeiv2_control_y_new
  :: CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_control)
foreign import ccall "&gsl_odeiv2_control_y_new" p'gsl_odeiv2_control_y_new
  :: FunPtr (CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_control))

{-# LINE 40 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_yp_new" c'gsl_odeiv2_control_yp_new
  :: CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_control)
foreign import ccall "&gsl_odeiv2_control_yp_new" p'gsl_odeiv2_control_yp_new
  :: FunPtr (CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_control))

{-# LINE 41 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_scaled_new" c'gsl_odeiv2_control_scaled_new
  :: CDouble -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> CSize -> IO (Ptr C'gsl_odeiv2_control)
foreign import ccall "&gsl_odeiv2_control_scaled_new" p'gsl_odeiv2_control_scaled_new
  :: FunPtr (CDouble -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> CSize -> IO (Ptr C'gsl_odeiv2_control))

{-# LINE 42 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_alloc" c'gsl_odeiv2_control_alloc
  :: Ptr C'gsl_odeiv2_control_type -> IO (Ptr C'gsl_odeiv2_control)
foreign import ccall "&gsl_odeiv2_control_alloc" p'gsl_odeiv2_control_alloc
  :: FunPtr (Ptr C'gsl_odeiv2_control_type -> IO (Ptr C'gsl_odeiv2_control))

{-# LINE 43 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_init" c'gsl_odeiv2_control_init
  :: Ptr C'gsl_odeiv2_control -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
foreign import ccall "&gsl_odeiv2_control_init" p'gsl_odeiv2_control_init
  :: FunPtr (Ptr C'gsl_odeiv2_control -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt)

{-# LINE 44 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_free" c'gsl_odeiv2_control_free
  :: Ptr C'gsl_odeiv2_control -> IO ()
foreign import ccall "&gsl_odeiv2_control_free" p'gsl_odeiv2_control_free
  :: FunPtr (Ptr C'gsl_odeiv2_control -> IO ())

{-# LINE 45 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_hadjust" c'gsl_odeiv2_control_hadjust
  :: Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_step -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr Double -> IO CInt
foreign import ccall "&gsl_odeiv2_control_hadjust" p'gsl_odeiv2_control_hadjust
  :: FunPtr (Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_step -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr Double -> IO CInt)

{-# LINE 46 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_name" c'gsl_odeiv2_control_name
  :: Ptr C'gsl_odeiv2_control -> IO CString
foreign import ccall "&gsl_odeiv2_control_name" p'gsl_odeiv2_control_name
  :: FunPtr (Ptr C'gsl_odeiv2_control -> IO CString)

{-# LINE 47 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_errlevel" c'gsl_odeiv2_control_errlevel
  :: Ptr C'gsl_odeiv2_control -> CDouble -> CDouble -> CDouble -> CSize -> Ptr Double -> IO CInt
foreign import ccall "&gsl_odeiv2_control_errlevel" p'gsl_odeiv2_control_errlevel
  :: FunPtr (Ptr C'gsl_odeiv2_control -> CDouble -> CDouble -> CDouble -> CSize -> Ptr Double -> IO CInt)

{-# LINE 48 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_control_set_driver" c'gsl_odeiv2_control_set_driver
  :: Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_driver -> IO CInt
foreign import ccall "&gsl_odeiv2_control_set_driver" p'gsl_odeiv2_control_set_driver
  :: FunPtr (Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_driver -> IO CInt)

{-# LINE 49 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

c'GSL_ODEIV_HADJ_INC = 1
c'GSL_ODEIV_HADJ_INC :: (Num a) => a

{-# LINE 51 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
c'GSL_ODEIV_HADJ_NIL = 0
c'GSL_ODEIV_HADJ_NIL :: (Num a) => a

{-# LINE 52 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
c'GSL_ODEIV_HADJ_DEC = -1
c'GSL_ODEIV_HADJ_DEC :: (Num a) => a

{-# LINE 53 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

foreign import ccall "gsl_odeiv2_evolve_alloc" c'gsl_odeiv2_evolve_alloc
  :: CSize -> IO (Ptr C'gsl_odeiv2_evolve)
foreign import ccall "&gsl_odeiv2_evolve_alloc" p'gsl_odeiv2_evolve_alloc
  :: FunPtr (CSize -> IO (Ptr C'gsl_odeiv2_evolve))

{-# LINE 55 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_evolve_apply" c'gsl_odeiv2_evolve_apply
  :: Ptr C'gsl_odeiv2_evolve -> Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_step -> Ptr C'gsl_odeiv2_system -> Ptr Double -> CDouble -> Ptr Double -> Ptr CDouble -> IO CInt
foreign import ccall "&gsl_odeiv2_evolve_apply" p'gsl_odeiv2_evolve_apply
  :: FunPtr (Ptr C'gsl_odeiv2_evolve -> Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_step -> Ptr C'gsl_odeiv2_system -> Ptr Double -> CDouble -> Ptr Double -> Ptr CDouble -> IO CInt)

{-# LINE 56 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_evolve_apply_fixed_step" c'gsl_odeiv2_evolve_apply_fixed_step
  :: Ptr C'gsl_odeiv2_evolve -> Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_step -> Ptr C'gsl_odeiv2_system -> Ptr CDouble -> CDouble -> Ptr CDouble -> IO CInt
foreign import ccall "&gsl_odeiv2_evolve_apply_fixed_step" p'gsl_odeiv2_evolve_apply_fixed_step
  :: FunPtr (Ptr C'gsl_odeiv2_evolve -> Ptr C'gsl_odeiv2_control -> Ptr C'gsl_odeiv2_step -> Ptr C'gsl_odeiv2_system -> Ptr CDouble -> CDouble -> Ptr CDouble -> IO CInt)

{-# LINE 57 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_evolve_reset" c'gsl_odeiv2_evolve_reset
  :: Ptr C'gsl_odeiv2_evolve -> IO CInt
foreign import ccall "&gsl_odeiv2_evolve_reset" p'gsl_odeiv2_evolve_reset
  :: FunPtr (Ptr C'gsl_odeiv2_evolve -> IO CInt)

{-# LINE 58 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_evolve_free" c'gsl_odeiv2_evolve_free
  :: Ptr C'gsl_odeiv2_evolve -> IO ()
foreign import ccall "&gsl_odeiv2_evolve_free" p'gsl_odeiv2_evolve_free
  :: FunPtr (Ptr C'gsl_odeiv2_evolve -> IO ())

{-# LINE 59 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_evolve_set_driver" c'gsl_odeiv2_evolve_set_driver
  :: Ptr C'gsl_odeiv2_evolve -> Ptr C'gsl_odeiv2_driver -> IO CInt
foreign import ccall "&gsl_odeiv2_evolve_set_driver" p'gsl_odeiv2_evolve_set_driver
  :: FunPtr (Ptr C'gsl_odeiv2_evolve -> Ptr C'gsl_odeiv2_driver -> IO CInt)

{-# LINE 60 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

foreign import ccall "gsl_odeiv2_driver_alloc_y_new" c'gsl_odeiv2_driver_alloc_y_new
  :: Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_driver)
foreign import ccall "&gsl_odeiv2_driver_alloc_y_new" p'gsl_odeiv2_driver_alloc_y_new
  :: FunPtr (Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_driver))

{-# LINE 62 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_alloc_yp_new" c'gsl_odeiv2_driver_alloc_yp_new
  :: Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_driver)
foreign import ccall "&gsl_odeiv2_driver_alloc_yp_new" p'gsl_odeiv2_driver_alloc_yp_new
  :: FunPtr (Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_driver))

{-# LINE 63 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_alloc_standard_new" c'gsl_odeiv2_driver_alloc_standard_new
  :: Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_driver)
foreign import ccall "&gsl_odeiv2_driver_alloc_standard_new" p'gsl_odeiv2_driver_alloc_standard_new
  :: FunPtr (Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr C'gsl_odeiv2_driver))

{-# LINE 64 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_alloc_scaled_new" c'gsl_odeiv2_driver_alloc_scaled_new
  :: Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> IO (Ptr C'gsl_odeiv2_driver)
foreign import ccall "&gsl_odeiv2_driver_alloc_scaled_new" p'gsl_odeiv2_driver_alloc_scaled_new
  :: FunPtr (Ptr C'gsl_odeiv2_system -> Ptr C'gsl_odeiv2_step_type -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> IO (Ptr C'gsl_odeiv2_driver))

{-# LINE 65 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_set_hmin" c'gsl_odeiv2_driver_set_hmin
  :: Ptr C'gsl_odeiv2_driver -> CDouble -> IO CInt
foreign import ccall "&gsl_odeiv2_driver_set_hmin" p'gsl_odeiv2_driver_set_hmin
  :: FunPtr (Ptr C'gsl_odeiv2_driver -> CDouble -> IO CInt)

{-# LINE 66 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_set_hmax" c'gsl_odeiv2_driver_set_hmax
  :: Ptr C'gsl_odeiv2_driver -> CDouble -> IO CInt
foreign import ccall "&gsl_odeiv2_driver_set_hmax" p'gsl_odeiv2_driver_set_hmax
  :: FunPtr (Ptr C'gsl_odeiv2_driver -> CDouble -> IO CInt)

{-# LINE 67 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_set_nmax" c'gsl_odeiv2_driver_set_nmax
  :: Ptr C'gsl_odeiv2_driver -> CULong -> IO CInt
foreign import ccall "&gsl_odeiv2_driver_set_nmax" p'gsl_odeiv2_driver_set_nmax
  :: FunPtr (Ptr C'gsl_odeiv2_driver -> CULong -> IO CInt)

{-# LINE 68 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_apply" c'gsl_odeiv2_driver_apply
  :: Ptr C'gsl_odeiv2_driver -> Ptr Double -> CDouble -> Ptr CDouble -> IO CInt
foreign import ccall "&gsl_odeiv2_driver_apply" p'gsl_odeiv2_driver_apply
  :: FunPtr (Ptr C'gsl_odeiv2_driver -> Ptr Double -> CDouble -> Ptr CDouble -> IO CInt)

{-# LINE 69 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_apply_fixed_step" c'gsl_odeiv2_driver_apply_fixed_step
  :: Ptr C'gsl_odeiv2_driver -> Ptr Double -> CDouble -> CULong -> Ptr CDouble -> IO CInt
foreign import ccall "&gsl_odeiv2_driver_apply_fixed_step" p'gsl_odeiv2_driver_apply_fixed_step
  :: FunPtr (Ptr C'gsl_odeiv2_driver -> Ptr Double -> CDouble -> CULong -> Ptr CDouble -> IO CInt)

{-# LINE 70 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_reset" c'gsl_odeiv2_driver_reset
  :: Ptr C'gsl_odeiv2_driver -> IO CInt
foreign import ccall "&gsl_odeiv2_driver_reset" p'gsl_odeiv2_driver_reset
  :: FunPtr (Ptr C'gsl_odeiv2_driver -> IO CInt)

{-# LINE 71 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "gsl_odeiv2_driver_free" c'gsl_odeiv2_driver_free
  :: Ptr C'gsl_odeiv2_driver -> IO ()
foreign import ccall "&gsl_odeiv2_driver_free" p'gsl_odeiv2_driver_free
  :: FunPtr (Ptr C'gsl_odeiv2_driver -> IO ())

{-# LINE 72 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

foreign import ccall "inline_GSL_ODEIV_FN_EVAL" c'GSL_ODEIV_FN_EVAL
  :: Ptr C'gsl_odeiv2_system -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt

{-# LINE 75 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
foreign import ccall "inline_GSL_ODEIV_JA_EVAL" c'GSL_ODEIV_JA_EVAL
  :: Ptr C'gsl_odeiv2_system -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt

{-# LINE 77 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}


{-# LINE 79 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 80 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 81 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 82 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
data C'gsl_odeiv2_step = C'gsl_odeiv2_step{
  c'gsl_odeiv2_step'type :: Ptr C'gsl_odeiv2_step_type,
  c'gsl_odeiv2_step'dimension :: CSize,
  c'gsl_odeiv2_step'state :: Ptr ()
} deriving (Eq,Show)
p'gsl_odeiv2_step'type p = plusPtr p 0
p'gsl_odeiv2_step'type :: Ptr (C'gsl_odeiv2_step) -> Ptr (Ptr C'gsl_odeiv2_step_type)
p'gsl_odeiv2_step'dimension p = plusPtr p 4
p'gsl_odeiv2_step'dimension :: Ptr (C'gsl_odeiv2_step) -> Ptr (CSize)
p'gsl_odeiv2_step'state p = plusPtr p 8
p'gsl_odeiv2_step'state :: Ptr (C'gsl_odeiv2_step) -> Ptr (Ptr ())
instance Storable C'gsl_odeiv2_step where
  sizeOf _ = 12
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    return $ C'gsl_odeiv2_step v0 v1 v2
  poke p (C'gsl_odeiv2_step v0 v1 v2) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    return ()

{-# LINE 83 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}


{-# LINE 85 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 86 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 87 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
data C'gsl_odeiv2_control = C'gsl_odeiv2_control{
  c'gsl_odeiv2_control'type :: Ptr C'gsl_odeiv2_control_type,
  c'gsl_odeiv2_control'state :: Ptr ()
} deriving (Eq,Show)
p'gsl_odeiv2_control'type p = plusPtr p 0
p'gsl_odeiv2_control'type :: Ptr (C'gsl_odeiv2_control) -> Ptr (Ptr C'gsl_odeiv2_control_type)
p'gsl_odeiv2_control'state p = plusPtr p 4
p'gsl_odeiv2_control'state :: Ptr (C'gsl_odeiv2_control) -> Ptr (Ptr ())
instance Storable C'gsl_odeiv2_control where
  sizeOf _ = 8
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    return $ C'gsl_odeiv2_control v0 v1
  poke p (C'gsl_odeiv2_control v0 v1) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    return ()

{-# LINE 88 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}


{-# LINE 90 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 91 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 92 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 93 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 94 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 95 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 96 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 97 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 98 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 99 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
data C'gsl_odeiv2_evolve = C'gsl_odeiv2_evolve{
  c'gsl_odeiv2_evolve'dimension :: CSize,
  c'gsl_odeiv2_evolve'y0 :: Ptr CDouble,
  c'gsl_odeiv2_evolve'yerr :: Ptr CDouble,
  c'gsl_odeiv2_evolve'dydt_in :: Ptr CDouble,
  c'gsl_odeiv2_evolve'dydt_out :: Ptr CDouble,
  c'gsl_odeiv2_evolve'last_step :: CDouble,
  c'gsl_odeiv2_evolve'count :: CULong,
  c'gsl_odeiv2_evolve'failed_steps :: CULong,
  c'gsl_odeiv2_evolve'driver :: Ptr C'gsl_odeiv2_driver
} deriving (Eq,Show)
p'gsl_odeiv2_evolve'dimension p = plusPtr p 0
p'gsl_odeiv2_evolve'dimension :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (CSize)
p'gsl_odeiv2_evolve'y0 p = plusPtr p 4
p'gsl_odeiv2_evolve'y0 :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (Ptr CDouble)
p'gsl_odeiv2_evolve'yerr p = plusPtr p 8
p'gsl_odeiv2_evolve'yerr :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (Ptr CDouble)
p'gsl_odeiv2_evolve'dydt_in p = plusPtr p 12
p'gsl_odeiv2_evolve'dydt_in :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (Ptr CDouble)
p'gsl_odeiv2_evolve'dydt_out p = plusPtr p 16
p'gsl_odeiv2_evolve'dydt_out :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (Ptr CDouble)
p'gsl_odeiv2_evolve'last_step p = plusPtr p 20
p'gsl_odeiv2_evolve'last_step :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (CDouble)
p'gsl_odeiv2_evolve'count p = plusPtr p 28
p'gsl_odeiv2_evolve'count :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (CULong)
p'gsl_odeiv2_evolve'failed_steps p = plusPtr p 32
p'gsl_odeiv2_evolve'failed_steps :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (CULong)
p'gsl_odeiv2_evolve'driver p = plusPtr p 36
p'gsl_odeiv2_evolve'driver :: Ptr (C'gsl_odeiv2_evolve) -> Ptr (Ptr C'gsl_odeiv2_driver)
instance Storable C'gsl_odeiv2_evolve where
  sizeOf _ = 40
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 12
    v4 <- peekByteOff p 16
    v5 <- peekByteOff p 20
    v6 <- peekByteOff p 28
    v7 <- peekByteOff p 32
    v8 <- peekByteOff p 36
    return $ C'gsl_odeiv2_evolve v0 v1 v2 v3 v4 v5 v6 v7 v8
  poke p (C'gsl_odeiv2_evolve v0 v1 v2 v3 v4 v5 v6 v7 v8) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 12 v3
    pokeByteOff p 16 v4
    pokeByteOff p 20 v5
    pokeByteOff p 28 v6
    pokeByteOff p 32 v7
    pokeByteOff p 36 v8
    return ()

{-# LINE 100 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}


{-# LINE 102 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 103 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 104 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 105 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 106 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 107 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 108 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 109 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 110 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 111 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
data C'gsl_odeiv2_driver = C'gsl_odeiv2_driver{
  c'gsl_odeiv2_driver'sys :: Ptr C'gsl_odeiv2_system,
  c'gsl_odeiv2_driver's :: Ptr C'gsl_odeiv2_step,
  c'gsl_odeiv2_driver'c :: Ptr C'gsl_odeiv2_control,
  c'gsl_odeiv2_driver'e :: Ptr C'gsl_odeiv2_evolve,
  c'gsl_odeiv2_driver'h :: CDouble,
  c'gsl_odeiv2_driver'hmin :: CDouble,
  c'gsl_odeiv2_driver'hmax :: CDouble,
  c'gsl_odeiv2_driver'n :: CULong,
  c'gsl_odeiv2_driver'nmax :: CULong
} deriving (Eq,Show)
p'gsl_odeiv2_driver'sys p = plusPtr p 0
p'gsl_odeiv2_driver'sys :: Ptr (C'gsl_odeiv2_driver) -> Ptr (Ptr C'gsl_odeiv2_system)
p'gsl_odeiv2_driver's p = plusPtr p 4
p'gsl_odeiv2_driver's :: Ptr (C'gsl_odeiv2_driver) -> Ptr (Ptr C'gsl_odeiv2_step)
p'gsl_odeiv2_driver'c p = plusPtr p 8
p'gsl_odeiv2_driver'c :: Ptr (C'gsl_odeiv2_driver) -> Ptr (Ptr C'gsl_odeiv2_control)
p'gsl_odeiv2_driver'e p = plusPtr p 12
p'gsl_odeiv2_driver'e :: Ptr (C'gsl_odeiv2_driver) -> Ptr (Ptr C'gsl_odeiv2_evolve)
p'gsl_odeiv2_driver'h p = plusPtr p 16
p'gsl_odeiv2_driver'h :: Ptr (C'gsl_odeiv2_driver) -> Ptr (CDouble)
p'gsl_odeiv2_driver'hmin p = plusPtr p 24
p'gsl_odeiv2_driver'hmin :: Ptr (C'gsl_odeiv2_driver) -> Ptr (CDouble)
p'gsl_odeiv2_driver'hmax p = plusPtr p 32
p'gsl_odeiv2_driver'hmax :: Ptr (C'gsl_odeiv2_driver) -> Ptr (CDouble)
p'gsl_odeiv2_driver'n p = plusPtr p 40
p'gsl_odeiv2_driver'n :: Ptr (C'gsl_odeiv2_driver) -> Ptr (CULong)
p'gsl_odeiv2_driver'nmax p = plusPtr p 44
p'gsl_odeiv2_driver'nmax :: Ptr (C'gsl_odeiv2_driver) -> Ptr (CULong)
instance Storable C'gsl_odeiv2_driver where
  sizeOf _ = 48
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 12
    v4 <- peekByteOff p 16
    v5 <- peekByteOff p 24
    v6 <- peekByteOff p 32
    v7 <- peekByteOff p 40
    v8 <- peekByteOff p 44
    return $ C'gsl_odeiv2_driver v0 v1 v2 v3 v4 v5 v6 v7 v8
  poke p (C'gsl_odeiv2_driver v0 v1 v2 v3 v4 v5 v6 v7 v8) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 12 v3
    pokeByteOff p 16 v4
    pokeByteOff p 24 v5
    pokeByteOff p 32 v6
    pokeByteOff p 40 v7
    pokeByteOff p 44 v8
    return ()

{-# LINE 112 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

data C'gsl_odeiv2_step_type = C'gsl_odeiv2_step_type

{-# LINE 114 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}


{-# LINE 116 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 117 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 118 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 119 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 121 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 123 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 124 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}

{-# LINE 125 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}
data C'gsl_odeiv2_control_type = C'gsl_odeiv2_control_type{
  c'gsl_odeiv2_control_type'name :: CString,
  c'gsl_odeiv2_control_type'alloc :: FunPtr (IO (Ptr ())),
  c'gsl_odeiv2_control_type'init :: FunPtr (Ptr ()-> CDouble-> CDouble-> CDouble-> CDouble -> IO CInt),
  c'gsl_odeiv2_control_type'hadjust :: FunPtr (Ptr () -> CSize -> CUInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr Double -> IO CInt),
  c'gsl_odeiv2_control_type'errlevel :: FunPtr (Ptr () -> CDouble -> CDouble -> CDouble -> CSize -> Ptr CDouble -> IO CInt),
  c'gsl_odeiv2_control_type'set_driver :: FunPtr (Ptr () -> Ptr C'gsl_odeiv2_driver -> IO CInt),
  c'gsl_odeiv2_control_type'free :: FunPtr (Ptr () -> IO ())
} deriving (Eq,Show)
p'gsl_odeiv2_control_type'name p = plusPtr p 0
p'gsl_odeiv2_control_type'name :: Ptr (C'gsl_odeiv2_control_type) -> Ptr (CString)
p'gsl_odeiv2_control_type'alloc p = plusPtr p 4
p'gsl_odeiv2_control_type'alloc :: Ptr (C'gsl_odeiv2_control_type) -> Ptr (FunPtr (IO (Ptr ())))
p'gsl_odeiv2_control_type'init p = plusPtr p 8
p'gsl_odeiv2_control_type'init :: Ptr (C'gsl_odeiv2_control_type) -> Ptr (FunPtr (Ptr ()-> CDouble-> CDouble-> CDouble-> CDouble -> IO CInt))
p'gsl_odeiv2_control_type'hadjust p = plusPtr p 12
p'gsl_odeiv2_control_type'hadjust :: Ptr (C'gsl_odeiv2_control_type) -> Ptr (FunPtr (Ptr () -> CSize -> CUInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr Double -> IO CInt))
p'gsl_odeiv2_control_type'errlevel p = plusPtr p 16
p'gsl_odeiv2_control_type'errlevel :: Ptr (C'gsl_odeiv2_control_type) -> Ptr (FunPtr (Ptr () -> CDouble -> CDouble -> CDouble -> CSize -> Ptr CDouble -> IO CInt))
p'gsl_odeiv2_control_type'set_driver p = plusPtr p 20
p'gsl_odeiv2_control_type'set_driver :: Ptr (C'gsl_odeiv2_control_type) -> Ptr (FunPtr (Ptr () -> Ptr C'gsl_odeiv2_driver -> IO CInt))
p'gsl_odeiv2_control_type'free p = plusPtr p 24
p'gsl_odeiv2_control_type'free :: Ptr (C'gsl_odeiv2_control_type) -> Ptr (FunPtr (Ptr () -> IO ()))
instance Storable C'gsl_odeiv2_control_type where
  sizeOf _ = 28
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 12
    v4 <- peekByteOff p 16
    v5 <- peekByteOff p 20
    v6 <- peekByteOff p 24
    return $ C'gsl_odeiv2_control_type v0 v1 v2 v3 v4 v5 v6
  poke p (C'gsl_odeiv2_control_type v0 v1 v2 v3 v4 v5 v6) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 12 v3
    pokeByteOff p 16 v4
    pokeByteOff p 20 v5
    pokeByteOff p 24 v6
    return ()

{-# LINE 126 "src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc" #-}