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