Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for multidimensional root finding example #49

Closed
wants to merge 13 commits into from
Closed
1 change: 0 additions & 1 deletion deps/build.jl
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,3 @@ provides(Sources, URI("http://ftp.gnu.org/gnu/gsl/gsl-1.16.tar.gz"), libgsl)
provides(BuildProcess, Autotools(libtarget = "libgsl.la"), libgsl)

@BinDeps.install Dict(:libgsl => :libgsl)

14 changes: 8 additions & 6 deletions examples/35_Multidimensional_Root_Finding.jl
Original file line number Diff line number Diff line change
@@ -1,31 +1,33 @@
@unix_only Libdl.dlopen_e("/usr/lib/libgslcblas.so.0", Libdl.RTLD_GLOBAL)

#Adapted from the GSL multiroot test
using GSL

#vector_alloc
v0 = Cdouble[1.0, 5.0, 2.0, 1.5, -1.0]

n = length(v0)
v = ccall((:gsl_vector_alloc, :libgsl), Ptr{gsl_vector}, (Csize_t,), n)
v = ccall((:gsl_vector_alloc, GSL.libgsl), Ptr{gsl_vector}, (Csize_t,), n)

# #vector_set
for i=1:n
ccall((:gsl_vector_set, :libgsl), Void, (Ptr{gsl_vector}, Csize_t, Cdouble), v, i-1, v0[i])
ccall((:gsl_vector_set, GSL.libgsl), Void, (Ptr{gsl_vector}, Csize_t, Cdouble), v, i-1, v0[i])
end

dnewton_ptr_ptr = cglobal((:gsl_multiroot_fsolver_dnewton, :libgsl), Ptr{GSL.gsl_multiroot_fsolver_type})
dnewton_ptr_ptr = cglobal((:gsl_multiroot_fsolver_dnewton, GSL.libgsl), Ptr{GSL.gsl_multiroot_fsolver_type})
dnewton_ptr = unsafe_load(dnewton_ptr_ptr)
dnewton_solver = GSL.multiroot_fsolver_alloc(dnewton_ptr, n)

gsl_multiroot_fsolver_set_ptr_ptr = cglobal((:gsl_multiroot_fsolver_set, :libgsl), Ptr{Ptr{GSL.gsl_multiroot_fsolver}})
gsl_multiroot_fsolver_set_ptr_ptr = cglobal((:gsl_multiroot_fsolver_set, GSL.libgsl), Ptr{Ptr{GSL.gsl_multiroot_fsolver}})
gsl_multiroot_fsolver_set_ptr = unsafe_load(gsl_multiroot_fsolver_set_ptr_ptr)

#vector_get
for i=1:5
@assert v0[i] == ccall((:gsl_vector_get, :libgsl), Cdouble, (Ptr{gsl_vector}, Csize_t), v, i-1)
@assert v0[i] == ccall((:gsl_vector_get, GSL.libgsl), Cdouble, (Ptr{gsl_vector}, Csize_t), v, i-1)
end

function gsl_vector_ptr(x::Ptr{gsl_vector}, n)
return pointer_to_array(ccall((:gsl_vector_ptr, :libgsl), Ptr{Cdouble}, (Ptr{gsl_vector}, Csize_t), x, 0), n)
return pointer_to_array(ccall((:gsl_vector_ptr, GSL.libgsl), Ptr{Cdouble}, (Ptr{gsl_vector}, Csize_t), x, 0), n)
end

function function_callback(x::Ptr{gsl_vector}, jlfunc::Function, f::Ptr{gsl_vector})
Expand Down