Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
ce65935
preallocate cutting geometries
sclaus2 Mar 7, 2026
5534d5e
flatten connectivity array
sclaus2 Mar 7, 2026
69010f2
improve performance of vtk mesh cutting
sclaus2 Mar 8, 2026
c26425d
add quadrature rule routines to CutCells. Now CutCells can generate r…
sclaus2 Mar 9, 2026
54d4bd6
add meshview and level set function
sclaus2 Mar 14, 2026
dd3d68e
Add higher-order level set infrastructure and mesh utilities
sclaus2 Apr 8, 2026
b066492
new higher order cutting path
sclaus2 Apr 11, 2026
8599d4a
first straight cut with one level set working in new ho pipeline with…
sclaus2 Apr 17, 2026
7c556a7
make consistent basix numbering
sclaus2 Apr 17, 2026
a1a05b5
some simplifications, numbering change
sclaus2 Apr 17, 2026
06b6c04
introducing new midpoint on uncut edges splitting scheme to make subt…
sclaus2 Apr 22, 2026
3681aeb
testing 2 level sets, cuts in triangle and tetrahedron working, hole …
sclaus2 Apr 24, 2026
d9806b9
multiple levelsets 2d working
sclaus2 Apr 24, 2026
0581644
work on non-triangulated mapping of 3d and 2d geometries
sclaus2 Apr 27, 2026
18111d6
3d looking better but still tangling
sclaus2 Apr 28, 2026
38abf29
introduction of tolerances for level set values and edge lengths
sclaus2 Apr 30, 2026
549ee31
graph and jacobian checks in place, refinement currently brings no im…
sclaus2 May 4, 2026
36fc259
adding graph check files
sclaus2 May 4, 2026
0d12ccb
found good refinement rule to improve surface jacobian, triangulated …
sclaus2 May 4, 2026
e6e9397
mapping looking ok for quads and tris. Triangulation leads to problems.
sclaus2 May 5, 2026
2707290
clean up curving to merge without curving for now for new release
sclaus2 May 15, 2026
e392bf0
changes to demo and test
sclaus2 May 16, 2026
6d45fd3
include or
sclaus2 May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 33 additions & 22 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,52 +1,63 @@
cmake_minimum_required(VERSION 3.21)

# ------------------------------------------------------------------------------
# Set project name and version number
project(CutCells VERSION "0.2.0" LANGUAGES CXX C)

# Use C++20
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# Options
option(BUILD_SHARED_LIBS "Build CutCells with shared libraries." ON)
#add_feature_info(BUILD_SHARED_LIBS BUILD_SHARED_LIBS "Build cutfemx with shared libraries.")

include(FeatureSummary)
include(GNUInstallDirs)
include(CheckIPOSupported)

# Source files
add_subdirectory(src)

set_target_properties(cutcells PROPERTIES PRIVATE_HEADER "${HEADERS}")
find_package(OpenMP QUIET COMPONENTS CXX)
if(OpenMP_CXX_FOUND AND TARGET OpenMP::OpenMP_CXX)
target_link_libraries(cutcells PUBLIC OpenMP::OpenMP_CXX)
endif()

check_ipo_supported(RESULT CUTCELLS_IPO_SUPPORTED OUTPUT CUTCELLS_IPO_ERROR)
if(CUTCELLS_IPO_SUPPORTED)
set_property(TARGET cutcells PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
endif()

target_include_directories(cutcells PUBLIC
$<INSTALL_INTERFACE:include>
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR}>")
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)


install(FILES ${HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cutcells
COMPONENT Development)

install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cutcells/${DIR}
COMPONENT Development)
# Install generated headers produced at build time (tables, etc.)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/generated
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cutcells
COMPONENT Development
FILES_MATCHING PATTERN "*.h")

# Install the cutcells library
install(TARGETS cutcells
EXPORT CutCellsTargets
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
PRIVATE_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/src
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT RuntimeExecutables
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT RuntimeLibraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Development)

# Configure CMake helpers
include(CMakePackageConfigHelpers)
write_basic_package_version_file(CutCellsConfigVersion.cmake VERSION ${PACKAGE_VERSION}
write_basic_package_version_file(CutCellsConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion)
configure_package_config_file(CutCellsConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CutCellsConfig.cmake
configure_package_config_file(CutCellsConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/CutCellsConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cutcells)

# Install CMake files
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CutCellsConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/CutCellsConfigVersion.cmake
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/CutCellsConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/CutCellsConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cutcells COMPONENT Development)
install(EXPORT CutCellsTargets FILE CutCellsTargets.cmake NAMESPACE CUTCELLS::
install(EXPORT CutCellsTargets
FILE CutCellsTargets.cmake
NAMESPACE CUTCELLS::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cutcells)


6 changes: 3 additions & 3 deletions cpp/demo/cut_interval/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ int main()
cell::CutCell<double> cut_cell;
cell::cut<double>(cell_type, vertex_coordinates, gdim, ls_values, "phi=0", cut_cell);
std::string fname = "interface.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);

cell::cut<double>(cell_type, vertex_coordinates, gdim, ls_values, "phi<0", cut_cell);
fname = "interior.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);
fname = "interior.vtu";
io::write_vtk(fname,cut_cell);

cell::cut<double>(cell_type, vertex_coordinates, gdim, ls_values, "phi>0", cut_cell, false);
fname = "exterior.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);
fname = "exterior.vtu";
io::write_vtk(fname,cut_cell);
}
Expand Down
6 changes: 3 additions & 3 deletions cpp/demo/cut_tetrahedron/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,19 @@ int main()
cell::CutCell<T> cut_cell;
cell::cut<T>(cell_type, vertex_coordinates, gdim, ls_values, "phi=0", cut_cell, triangulate);
std::string fname = "interface.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);
fname = "interface.vtu";
io::write_vtk(fname,cut_cell);

cell::cut<T>(cell_type, vertex_coordinates, gdim, ls_values, "phi<0", cut_cell, triangulate);
fname = "interior.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);
fname = "interior.vtu";
io::write_vtk(fname,cut_cell);

cell::cut<T>(cell_type, vertex_coordinates, gdim, ls_values, "phi>0", cut_cell, triangulate);
fname = "exterior.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);
fname = "exterior.vtu";
io::write_vtk(fname,cut_cell);
}
Expand Down
6 changes: 3 additions & 3 deletions cpp/demo/cut_triangle/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ int main()
cell::CutCell<T> cut_cell;
cell::cut<T>(cell_type, vertex_coordinates, gdim, ls_values, "phi=0", cut_cell);
std::string fname = "interface.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);

cell::cut<T>(cell_type, vertex_coordinates, gdim, ls_values, "phi<0", cut_cell);
fname = "interior.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);
fname = "interior.vtu";
io::write_vtk(fname,cut_cell);

cell::cut<T>(cell_type, vertex_coordinates, gdim, ls_values, "phi>0", cut_cell, false);
fname = "exterior.tex";
io::write_tikz(fname,cut_cell._vertex_coords,cut_cell._connectivity,vertex_coordinates,bg_elements,ls_values,gdim);
io::write_tikz(fname,cut_cell,vertex_coordinates,bg_elements,ls_values,gdim);
fname = "exterior.vtu";
io::write_vtk(fname,cut_cell);
}
Expand Down
40 changes: 33 additions & 7 deletions cpp/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
# ------------------------------------------------------------------------------
include(GNUInstallDirs)

# ------------------------------------------------------------------------------
# Declare the library (target)
add_library(cutcells)

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in version.h)
include_directories(${CMAKE_CURRENT_BINARY_DIR})

# Make headers in this directory discoverable for generated table headers
# (e.g. generated/*_tables.h includes "cell_types.h").
Expand All @@ -18,16 +14,33 @@ set(HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/cell_types.h
${CMAKE_CURRENT_SOURCE_DIR}/cell_flags.h
${CMAKE_CURRENT_SOURCE_DIR}/cell_subdivision.h
${CMAKE_CURRENT_SOURCE_DIR}/cell_topology.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_triangle.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_interval.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_quadrilateral.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_hexahedron.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_prism.h
${CMAKE_CURRENT_SOURCE_DIR}/quad_midpoint_split.h
${CMAKE_CURRENT_SOURCE_DIR}/prism_midpoint_split.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_pyramid.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_tetrahedron.h
${CMAKE_CURRENT_SOURCE_DIR}/triangulation.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_cell.h
${CMAKE_CURRENT_SOURCE_DIR}/cut_mesh.h
${CMAKE_CURRENT_SOURCE_DIR}/mapping.h
${CMAKE_CURRENT_SOURCE_DIR}/bernstein.h
${CMAKE_CURRENT_SOURCE_DIR}/level_set.h
${CMAKE_CURRENT_SOURCE_DIR}/level_set_cell.h
${CMAKE_CURRENT_SOURCE_DIR}/mesh_view.h
${CMAKE_CURRENT_SOURCE_DIR}/adapt_cell.h
${CMAKE_CURRENT_SOURCE_DIR}/ho_cut_mesh.h
${CMAKE_CURRENT_SOURCE_DIR}/ho_mesh_part_output.h
${CMAKE_CURRENT_SOURCE_DIR}/selection_expr.h
${CMAKE_CURRENT_SOURCE_DIR}/edge_certification.h
${CMAKE_CURRENT_SOURCE_DIR}/cell_certification.h
${CMAKE_CURRENT_SOURCE_DIR}/refine_cell.h
${CMAKE_CURRENT_SOURCE_DIR}/quadrature.h
${CMAKE_CURRENT_SOURCE_DIR}/quadrature_tables.h
${CMAKE_CURRENT_SOURCE_DIR}/span_math.h
${CMAKE_CURRENT_SOURCE_DIR}/utils.h
${CMAKE_CURRENT_SOURCE_DIR}/write_tikz.h
Expand All @@ -40,13 +53,26 @@ target_sources(cutcells PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/cut_quadrilateral.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cut_hexahedron.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cut_prism.cpp
${CMAKE_CURRENT_SOURCE_DIR}/quad_midpoint_split.cpp
${CMAKE_CURRENT_SOURCE_DIR}/prism_midpoint_split.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cut_pyramid.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cut_tetrahedron.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cut_cell.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cut_mesh.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mapping.cpp
${CMAKE_CURRENT_SOURCE_DIR}/bernstein.cpp
${CMAKE_CURRENT_SOURCE_DIR}/level_set.cpp
${CMAKE_CURRENT_SOURCE_DIR}/level_set_cell.cpp
${CMAKE_CURRENT_SOURCE_DIR}/adapt_cell.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ho_cut_mesh.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ho_mesh_part_output.cpp
${CMAKE_CURRENT_SOURCE_DIR}/selection_expr.cpp
${CMAKE_CURRENT_SOURCE_DIR}/edge_certification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cell_certification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/refine_cell.cpp
${CMAKE_CURRENT_SOURCE_DIR}/quadrature.cpp
${CMAKE_CURRENT_SOURCE_DIR}/write_vtk.cpp

)



target_compile_options(cutcells PRIVATE
$<$<CONFIG:Release>:-O3>)
Loading