Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
*.ipynb diff=jupyternotebook

*.ipynb merge=jupyternotebook
# SCM syntax highlighting & preventing 3-way merges
pixi.lock merge=binary linguist-language=YAML linguist-generated=true
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,7 @@ docs/test/Pressure_Error.png

docs/test/uplift/buildMount.txt
docs/test/temp.h5

# pixi environments
.pixi
*.egg-info
6 changes: 3 additions & 3 deletions clean.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
set -x # show commands

rm -fr build
find . -name \*.so -exec rm {} +
find . -name __pycache__ -exec rm -r {} +
find . -name '*.egg-info' -exec rm -r {} +
find src/ -name \*.so -exec rm {} +
find src/ -name __pycache__ -exec rm -r {} +
find src/ -name '*.egg-info' -exec rm -r {} +
rm -rf .pytest_cache
## To remove untracked git files
#git clean -dfX ; git clean -dfx
41 changes: 41 additions & 0 deletions pixi.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[workspace]
authors = ["Julian Giordani <[email protected]>"]
channels = [
"conda-forge",
"https://prefix.dev/pixi-build-backends"
]
name = "uw2-pixi"
platforms = ["linux-64", "osx-arm64"]

[tasks]
uw2-build = "pip install ."
uw2-test = "pytest ./docs/pytests/tests.py ./docs/pytests/test_examples.py ./docs/pytests/test_user_guide.py"

[dependencies]
petsc = "3.21.*"
python = "3.11.*"
numpy = "<2"
pint = ">=0.24.4,<0.25"
cmake = ">=4.0.3,<5"
swig = ">=4"
pkg-config = ">=0.29.2,<0.30"
compilers = ">=1.10.0,<2"
scipy = ">=1.16.0,<2"
mpi4py = ">=4.1.0,<5"
libxml2 = ">=2.13.8,<3"
ninja = ">=1.13.0,<2"
pytest = ">=8.4.1,<9"
nbmake = ">=1.5.5,<2"
jupytext = ">=1.17.2,<2"
jupyterlab = ">=4.4.4,<5"
mesalib = ">=25.0.5,<26"
mpich = ">=4.3.1,<5"
hdf5 = { version = "*", build = "mpi*" }
h5py = { version = "*", build = "mpi*" }
pip = ">=25.1.1,<26"

[host-dependencies]
c-compiler = "*"
cxx-compiler = "*"
cmake = "*"
make = "*"
2 changes: 1 addition & 1 deletion src/underworld/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "2.17.0"
__version__ = "2.17.1"
10 changes: 8 additions & 2 deletions src/underworld/libUnderworld/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0078 OLD)

# Set some Global options for CMAKE
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(Python_FIND_VIRTUALENV ONLY)
cmake_policy(SET CMP0078 OLD)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

project(Underworld)

# Required dependencies
find_package(PkgConfig REQUIRED)
find_package(LibXml2 REQUIRED)
find_package(MPI REQUIRED)

find_package(Python3 COMPONENTS Interpreter Development NumPy REQUIRED)
find_package(SWIG 4.0 COMPONENTS python REQUIRED)

Expand All @@ -24,6 +28,7 @@ else(DEFINED ENV{PETSC_DIR})
endif()
message(STATUS "Checking for PETSc using $PKG_CONFIG_PATH=$ENV{PKG_CONFIG_PATH}")

# Get CMAKE to find PETSc
pkg_check_modules(PETSc PETSc)
if(NOT PETSc_FOUND)
message(FATAL_ERROR "Cannot find PETSc, please check that the PETSC_DIR environment "
Expand Down Expand Up @@ -204,4 +209,5 @@ install(TARGETS ${target_sources}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

# Now build the UW Swig wrappers (after C-code has been built). All swig stuff are in libUnderworldPY
add_subdirectory(libUnderworldPy)
154 changes: 81 additions & 73 deletions src/underworld/libUnderworld/libUnderworldPy/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@

# SWIG
find_package(SWIG REQUIRED)
find_package (Python COMPONENTS Interpreter Development)
# load swig's cmake module
include(${SWIG_USE_FILE})
include_directories(${Python3_INCLUDE_DIRS})

include_directories(../.)
include_directories(${PETSc_INCLUDE_DIRS})
include_directories(${LIBXML2_INCLUDE_DIR})
include_directories(${Python3_NumPy_INCLUDE_DIRS})

SET(UW_LIBRARIES
Underworld
Expand All @@ -25,6 +18,7 @@ if(NOT APPLE)
set(CMAKE_INSTALL_RPATH "\$ORIGIN")
else()
message(STATUS ">>> Apple")
set(CMAKE_MACOSX_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "@loader_path")
endif()

Expand All @@ -35,89 +29,101 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

SET(CMAKE_SWIG_FLAGS "-v" "-Wextra" "-O" "-c++" "-DSWIG_DO_NOT_WRAP")

SET_SOURCE_FILES_PROPERTIES(Function.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE Function.i PROPERTY SWIG_MODULE_NAME Function)
SWIG_ADD_LIBRARY(Function TYPE SHARED LANGUAGE python SOURCES Function.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_Function_REAL_NAME} PROPERTIES SUFFIX ".so")
message("This is Jules:")
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "dir='${dir}'")
endforeach()
message(STATUS "UW_LIBRARIES=${UW_LIBRARIES}")
message(STATUS "PETSc_LIBRARIES=${PETSc_LIBRARIES}")
message("End Jules:")

set_source_files_properties(Function.i PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME Function)
# This create swig module target, SWIG_MODULE_Function_REAL_NAME with CMP0078 != NEW
swig_add_library(Function
TYPE SHARED
LANGUAGE python
SOURCES Function.i
)
set_target_properties(${SWIG_MODULE_Function_REAL_NAME} PROPERTIES
SUFFIX ".so" )

target_link_libraries(${SWIG_MODULE_Function_REAL_NAME}
PRIVATE ${UW_LIBRARIES}
PRIVATE ${PETSc_LIBRARIES})

SWIG_LINK_LIBRARIES(Function PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(Function PRIVATE ${PETSc_LINK_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(c_arrays.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE c_arrays.i PROPERTY SWIG_MODULE_NAME c_arrays)
SWIG_ADD_LIBRARY(c_arrays TYPE SHARED LANGUAGE python SOURCES c_arrays.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_c_arrays_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(c_arrays PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(c_arrays PRIVATE ${PETSc_LINK_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(c_pointers.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE c_pointers.i PROPERTY SWIG_MODULE_NAME c_pointers)
SWIG_ADD_LIBRARY(c_pointers TYPE SHARED LANGUAGE python SOURCES c_pointers.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_c_pointers_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(c_pointers PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(c_pointers PRIVATE ${PETSc_LINK_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(gLucifer.i PROPERTIES CPLUSPLUS ON)
SWIG_LINK_LIBRARIES(Function PRIVATE ${PETSc_LIBRARIES})

set_source_files_properties(c_arrays.i PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME c_arrays)
swig_add_library(c_arrays TYPE SHARED LANGUAGE python SOURCES c_arrays.i)
set_target_properties(${SWIG_MODULE_c_arrays_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_c_arrays_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

set_source_files_properties(c_pointers.i PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME c_pointers)
swig_add_library(c_pointers TYPE SHARED LANGUAGE python SOURCES c_pointers.i)
set_target_properties(${SWIG_MODULE_c_pointers_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_c_pointers_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

set_source_files_properties(gLucifer.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE gLucifer.i PROPERTY SWIG_MODULE_NAME gLucifer)
SWIG_ADD_LIBRARY(gLucifer TYPE SHARED LANGUAGE python SOURCES gLucifer.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_gLucifer_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(gLucifer PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(gLucifer PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(gLucifer TYPE SHARED LANGUAGE python SOURCES gLucifer.i)
set_target_properties(${SWIG_MODULE_gLucifer_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_gLucifer_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(petsc.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(petsc.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE petsc.i PROPERTY SWIG_MODULE_NAME petsc)
SWIG_ADD_LIBRARY(petsc TYPE SHARED LANGUAGE python SOURCES petsc.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_petsc_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(petsc PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(petsc PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(petsc TYPE SHARED LANGUAGE python SOURCES petsc.i)
set_target_properties(${SWIG_MODULE_petsc_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_petsc_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(PICellerator.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(PICellerator.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE PICellerator.i PROPERTY SWIG_MODULE_NAME PICellerator)
SWIG_ADD_LIBRARY(PICellerator TYPE SHARED LANGUAGE python SOURCES PICellerator.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_PICellerator_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(PICellerator PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(PICellerator PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(PICellerator TYPE SHARED LANGUAGE python SOURCES PICellerator.i)
set_target_properties(${SWIG_MODULE_PICellerator_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_PICellerator_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(Solvers.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(Solvers.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE Solvers.i PROPERTY SWIG_MODULE_NAME Solvers)
SWIG_ADD_LIBRARY(Solvers TYPE SHARED LANGUAGE python SOURCES Solvers.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_Solvers_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(Solvers PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(Solvers PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(Solvers TYPE SHARED LANGUAGE python SOURCES Solvers.i)
set_target_properties(${SWIG_MODULE_Solvers_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_Solvers_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(StgDomain.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StgDomain.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StgDomain.i PROPERTY SWIG_MODULE_NAME StgDomain)
SWIG_ADD_LIBRARY(StgDomain TYPE SHARED LANGUAGE python SOURCES StgDomain.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StgDomain_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StgDomain PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StgDomain PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StgDomain TYPE SHARED LANGUAGE python SOURCES StgDomain.i)
set_target_properties(${SWIG_MODULE_StgDomain_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StgDomain_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(StGermain.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StGermain.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StGermain.i PROPERTY SWIG_MODULE_NAME StGermain)
SWIG_ADD_LIBRARY(StGermain TYPE SHARED LANGUAGE python SOURCES StGermain.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StGermain_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StGermain PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StGermain PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StGermain TYPE SHARED LANGUAGE python SOURCES StGermain.i)
set_target_properties(${SWIG_MODULE_StGermain_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StGermain_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(StGermain_Tools.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StGermain_Tools.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StGermain_Tools.i PROPERTY SWIG_MODULE_NAME StGermain_Tools)
SWIG_ADD_LIBRARY(StGermain_Tools TYPE SHARED LANGUAGE python SOURCES StGermain_Tools.i StGermain_Tools.c)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StGermain_Tools PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StGermain_Tools PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StGermain_Tools TYPE SHARED LANGUAGE python SOURCES StGermain_Tools.i StGermain_Tools.c)
set_target_properties(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(StgFEM.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StgFEM.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StgFEM.i PROPERTY SWIG_MODULE_NAME StgFEM)
SWIG_ADD_LIBRARY(StgFEM TYPE SHARED LANGUAGE python SOURCES StgFEM.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StgFEM_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StgFEM PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StgFEM PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StgFEM TYPE SHARED LANGUAGE python SOURCES StgFEM.i)
set_target_properties(${SWIG_MODULE_StgFEM_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StgFEM_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(Underworld.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(Underworld.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE Underworld.i PROPERTY SWIG_MODULE_NAME Underworld)
SWIG_ADD_LIBRARY(Underworld TYPE SHARED LANGUAGE python SOURCES Underworld.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_Underworld_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(Underworld PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(Underworld PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(Underworld TYPE SHARED LANGUAGE python SOURCES Underworld.i)
set_target_properties(${SWIG_MODULE_Underworld_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_Underworld_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

# Handle where to install the resulting Python package
if(CALL_FROM_SETUP_PY)
Expand All @@ -130,6 +136,7 @@ else()
set(UW_INSTALL_PREFIX ${Python3_SITELIB})
endif()

# Find the SWIG_SUPPORT_FILES from each wrapping
get_property(FUNCTION_PY_FILE TARGET ${SWIG_MODULE_Function_REAL_NAME} PROPERTY SWIG_SUPPORT_FILES)
get_property(CARRAYS_PY_FILE TARGET ${SWIG_MODULE_c_arrays_REAL_NAME} PROPERTY SWIG_SUPPORT_FILES)
get_property(CPOINTERS_PY_FILE TARGET ${SWIG_MODULE_c_pointers_REAL_NAME} PROPERTY SWIG_SUPPORT_FILES)
Expand Down Expand Up @@ -158,6 +165,7 @@ set(WRAPPER_FILES
${UNDERWORLD_PY_FILE}
)

# install the wrapper files
install(FILES ${WRAPPER_FILES} DESTINATION "${UW_INSTALL_PREFIX}/libUnderworld/libUnderworldPy")


Expand Down