1# Low-level C API for libCEED 2 3module C 4 5using CEnum, Libdl 6 7# Get the path to the libCEED dynamic library, configured during the build step 8# of the LibCEED.jl package. 9const depsfile = joinpath(@__DIR__, "..", "deps", "deps.jl") 10if !isfile(depsfile) 11 error("LibCEED.jl not properly installed. Please run Pkg.build(\"LibCEED\")") 12end 13include(depsfile) 14 15include(joinpath(@__DIR__, "generated", "libceed_common.jl")) 16include(joinpath(@__DIR__, "generated", "libceed_api.jl")) 17 18const CEED_STRIDES_BACKEND = Ref{Ptr{CeedInt}}() 19const CEED_BASIS_COLLOCATED = Ref{CeedBasis}() 20const CEED_VECTOR_ACTIVE = Ref{CeedVector}() 21const CEED_VECTOR_NONE = Ref{CeedVector}() 22const CEED_ELEMRESTRICTION_NONE = Ref{CeedElemRestriction}() 23const CEED_QFUNCTION_NONE = Ref{CeedQFunction}() 24const CEED_REQUEST_IMMEDIATE = Ref{CeedRequest}() 25const CEED_REQUEST_ORDERED = Ref{CeedRequest}() 26 27function __init__() 28 global libceed_handle = dlopen(libceed) 29 # some global variables 30 CEED_STRIDES_BACKEND[] = cglobal((:CEED_STRIDES_BACKEND, libceed)) 31 CEED_BASIS_COLLOCATED[] = 32 unsafe_load(cglobal((:CEED_BASIS_COLLOCATED, libceed), CeedBasis)) 33 CEED_VECTOR_ACTIVE[] = unsafe_load(cglobal((:CEED_VECTOR_ACTIVE, libceed), CeedVector)) 34 CEED_VECTOR_NONE[] = unsafe_load(cglobal((:CEED_VECTOR_NONE, libceed), CeedVector)) 35 CEED_ELEMRESTRICTION_NONE[] = 36 unsafe_load(cglobal((:CEED_ELEMRESTRICTION_NONE, libceed), CeedElemRestriction)) 37 CEED_QFUNCTION_NONE[] = 38 unsafe_load(cglobal((:CEED_QFUNCTION_NONE, libceed), CeedQFunction)) 39 CEED_REQUEST_IMMEDIATE[] = 40 unsafe_load(cglobal((:CEED_REQUEST_IMMEDIATE, libceed), Ptr{CeedRequest})) 41 CEED_REQUEST_ORDERED[] = 42 unsafe_load(cglobal((:CEED_REQUEST_ORDERED, libceed), Ptr{CeedRequest})) 43end 44 45end # module 46