diff --git a/Project.toml b/Project.toml index 4928151..77f1318 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "T8code" uuid = "d0cc0030-9a40-4274-8435-baadcfd54fa1" authors = ["Johannes Markert "] -version = "0.9.1" +version = "0.9.2" [deps] CEnum = "fa961155-64e5-5f13-b03f-caf6b980ea82" @@ -22,4 +22,4 @@ Preferences = "1.2.1" Reexport = "0.2, 1.0" UUIDs = "1" julia = "1.10" -t8code_jll = "=4.0.6" +t8code_jll = "=4.0.7" diff --git a/dev/Artifacts.toml b/dev/Artifacts.toml index 4b3f888..1acacf3 100644 --- a/dev/Artifacts.toml +++ b/dev/Artifacts.toml @@ -1,11 +1,11 @@ [[t8code]] arch = "x86_64" -git-tree-sha1 = "593b8ed41f90aa10d015d6ef2032441fda382f32" +git-tree-sha1 = "22c9c74032be408f80b485c3a7aee80dfe69b777" lazy = true libc = "glibc" mpi = "mpich" os = "linux" [[t8code.download]] - sha256 = "0413dac63e9bba5c9b27c9a7850377b7946860956db538290849c47acd3a130d" - url = "https://github.com/JuliaBinaryWrappers/t8code_jll.jl/releases/download/t8code-v3.0.1+0/t8code.v3.0.1.x86_64-linux-gnu-mpi+mpich.tar.gz" + sha256 = "111c1ed11d8cced1b9a620630d270201b2a0a0a08d4e9fff14205bd758311b98" + url = "https://github.com/JuliaBinaryWrappers/t8code_jll.jl/releases/download/t8code-v4.0.7+0/t8code.v4.0.7.x86_64-linux-gnu-mpi+mpich.tar.gz" diff --git a/dev/fixes.sh b/dev/fixes.sh index 770ad32..313b9e8 100755 --- a/dev/fixes.sh +++ b/dev/fixes.sh @@ -37,5 +37,9 @@ sed -i -z 's/\nstruct t8_forest.*stats_computed::Cint\nend/\n# This struct is no # Fix forest type sed -i "s/forest::Cint/forest::t8_forest_t/" "${LIB_JL}" +# Fix scheme type +sed -i "s/scheme::Ptr{Cint}/scheme::Ptr{t8_scheme_c}/" "${LIB_JL}" +sed -i "s/t8_scheme_new_default()::Ptr{Cint}/t8_scheme_new_default()::Ptr{t8_scheme_c}/" "${LIB_JL}" + # Rename remaining MPI macros sed -i "s/= MPI_/= MPI./" "${LIB_JL}" diff --git a/src/Libt8.jl b/src/Libt8.jl index 1f7aab6..a1b9f1a 100644 --- a/src/Libt8.jl +++ b/src/Libt8.jl @@ -11718,6 +11718,36 @@ function t8_forest_same_level_leaf_face_neighbor_index(forest, element_index, fa @ccall libt8.t8_forest_same_level_leaf_face_neighbor_index(forest::t8_forest_t, element_index::t8_locidx_t, face_index::Cint, global_treeid::t8_gloidx_t, dual_face::Ptr{Cint})::t8_locidx_t end +""" + t8_forest_leaf_neighbor_subface(forest, ltreeid, leaf, face, neighbor_tree_class, neighbor_leaf, neighbor_face) + +Compute the subface index for a coarser neighbor + +\\pre *leaf* and *neighbor_leaf* must be a face neighbors. The common face must correspond to *face* for *leaf* and *neighbor_face* for *neighbor_leaf* respectively. *neighbor_leaf* must be one level coarser than *leaf*. Otherwise the behavior is undefined. + +!!! note + + This function is designed to be called after t8_forest_leaf_face_neighbors_ext to complement its output. It is primarily intended for balanced forests, but can be used on any committed forest as long as the preconditions hold (i.e. the forest must be ''locally balanced''). + +# Arguments +* `forest`:\\[in\\] The forest. Must be committed. +* `ltreeid`:\\[in\\] A local tree id. +* `leaf`:\\[in\\] A leaf in *ltreeid*. +* `face`:\\[in\\] The face index of *leaf* to consider. +* `neighbor_tree_class`:\\[in\\] The eclass of the neighbor element. +* `neighbor_leaf`:\\[in\\] The leaf of *forest* on the other side of the face of index *face* of element *leaf*. +* `neighbor_face`:\\[in\\] The face index of *neighbor_leaf* (i.e. the dual face of *face*). +# Returns +The index of the subface of *neighbor_face* which corresponds to *face*. +### Prototype +```c +int t8_forest_leaf_neighbor_subface (t8_forest_t forest, t8_locidx_t ltreeid, const t8_element_t *leaf, int face, t8_eclass_t neighbor_tree_class, const t8_element_t *neighbor_leaf, int neighbor_face); +``` +""" +function t8_forest_leaf_neighbor_subface(forest, ltreeid, leaf, face, neighbor_tree_class, neighbor_leaf, neighbor_face) + @ccall libt8.t8_forest_leaf_neighbor_subface(forest::t8_forest_t, ltreeid::t8_locidx_t, leaf::Ptr{t8_element_t}, face::Cint, neighbor_tree_class::t8_eclass_t, neighbor_leaf::Ptr{t8_element_t}, neighbor_face::Cint)::Cint +end + """ t8_forest_ghost_exchange_data(forest, element_data) @@ -12367,6 +12397,18 @@ function t8_forest_element_centroid(forest, ltreeid, element, coordinates) @ccall libt8.t8_forest_element_centroid(forest::t8_forest_t, ltreeid::t8_locidx_t, element::Ptr{t8_element_t}, coordinates::Ptr{Cdouble})::Cvoid end +""" + t8_forest_element_linear_centroid(forest, ltreeid, element, coordinates) + +### Prototype +```c +void t8_forest_element_linear_centroid (const t8_forest_t forest, const t8_locidx_t ltreeid, const t8_element_t *element, double *coordinates); +``` +""" +function t8_forest_element_linear_centroid(forest, ltreeid, element, coordinates) + @ccall libt8.t8_forest_element_linear_centroid(forest::t8_forest_t, ltreeid::t8_locidx_t, element::Ptr{t8_element_t}, coordinates::Ptr{Cdouble})::Cvoid +end + """ t8_forest_element_diam(forest, ltreeid, element) @@ -16823,7 +16865,7 @@ const t8_scheme_c * t8_scheme_new_default (void); ``` """ function t8_scheme_new_default() - @ccall libt8.t8_scheme_new_default()::Ptr{Cint} + @ccall libt8.t8_scheme_new_default()::Ptr{t8_scheme_c} end """ @@ -16835,7 +16877,7 @@ int t8_eclass_scheme_is_default (const t8_scheme_c *scheme, const t8_eclass_t ec ``` """ function t8_eclass_scheme_is_default(scheme, eclass) - @ccall libt8.t8_eclass_scheme_is_default(scheme::Ptr{Cint}, eclass::t8_eclass_t)::Cint + @ccall libt8.t8_eclass_scheme_is_default(scheme::Ptr{t8_scheme_c}, eclass::t8_eclass_t)::Cint end const SC_HAVE_ZLIB = 1 @@ -17184,6 +17226,8 @@ const T8_ECLASS_MAX_DIM = 3 const T8_ECLASS_MAX_CHILDREN = 10 +const T8_ECLASS_MAX_FACE_CHILDREN = 4 + # Skipping MacroDefinition: T8_FACE_VERTEX_TO_TREE_VERTEX_VALUES { { { - 1 } } , /* vertex */ { { 0 } , { 1 } } , /* line */ { { 0 , 2 } , { 1 , 3 } , { 0 , 1 } , { 2 , 3 } } , /* quad */ { { 1 , 2 } , { 0 , 2 } , { 0 , 1 } } , /* triangle */ { { 0 , 2 , 4 , 6 } , { 1 , 3 , 5 , 7 } , { 0 , 1 , 4 , 5 } , { 2 , 3 , 6 , 7 } , { 0 , 1 , 2 , 3 } , { 4 , 5 , 6 , 7 } } , /* hex */ { { 1 , 2 , 3 } , { 0 , 2 , 3 } , { 0 , 1 , 3 } , { 0 , 1 , 2 } } , /* tet */ { { 1 , 2 , 4 , 5 } , { 0 , 2 , 3 , 5 } , { 0 , 1 , 3 , 4 } , { 0 , 1 , 2 } , { 3 , 4 , 5 } } , /* prism */ { { 0 , 2 , 4 } , { 1 , 3 , 4 } , { 0 , 1 , 4 } , { 2 , 3 , 4 } , { 0 , 1 , 2 , 3 } } /* pyramid */ \ #}