xref: /libCEED/julia/LibCEED.jl/src/C.jl (revision ca94c3ddc8f82b7d93a79f9e4812e99b8be840ff)
1# Low-level C API for libCEED
2
3module C
4
5using Libdl, libCEED_jll, Preferences
6using libCEED_jll: libceed, libceed_handle
7
8const CeedScalar =
9    @load_preference("CeedScalar", "Float64") == "Float64" ? Float64 : Float32
10const UINT_MAX = typemax(Cuint)
11include(joinpath(@__DIR__, "generated", "libceed_bindings.jl"))
12
13const CEED_STRIDES_BACKEND = Ref{Ptr{CeedInt}}()
14const CEED_BASIS_NONE = Ref{CeedBasis}()
15const CEED_VECTOR_ACTIVE = Ref{CeedVector}()
16const CEED_VECTOR_NONE = Ref{CeedVector}()
17const CEED_ELEMRESTRICTION_NONE = Ref{CeedElemRestriction}()
18const CEED_QFUNCTION_NONE = Ref{CeedQFunction}()
19const CEED_REQUEST_IMMEDIATE = Ref{CeedRequest}()
20const CEED_REQUEST_ORDERED = Ref{CeedRequest}()
21
22function __init__()
23    # some global variables
24    CEED_STRIDES_BACKEND[] = cglobal((:CEED_STRIDES_BACKEND, libceed))
25    CEED_BASIS_NONE[] = unsafe_load(cglobal((:CEED_BASIS_COLLOCATED, libceed), CeedBasis))
26    CEED_VECTOR_ACTIVE[] = unsafe_load(cglobal((:CEED_VECTOR_ACTIVE, libceed), CeedVector))
27    CEED_VECTOR_NONE[] = unsafe_load(cglobal((:CEED_VECTOR_NONE, libceed), CeedVector))
28    CEED_ELEMRESTRICTION_NONE[] =
29        unsafe_load(cglobal((:CEED_ELEMRESTRICTION_NONE, libceed), CeedElemRestriction))
30    CEED_QFUNCTION_NONE[] =
31        unsafe_load(cglobal((:CEED_QFUNCTION_NONE, libceed), CeedQFunction))
32    CEED_REQUEST_IMMEDIATE[] =
33        unsafe_load(cglobal((:CEED_REQUEST_IMMEDIATE, libceed), Ptr{CeedRequest}))
34    CEED_REQUEST_ORDERED[] =
35        unsafe_load(cglobal((:CEED_REQUEST_ORDERED, libceed), Ptr{CeedRequest}))
36end
37
38end # module
39