158 lines
2.7 KiB
Nix
158 lines
2.7 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
toPythonModule,
|
|
fetchFromGitHub,
|
|
buildPythonPackage,
|
|
|
|
# build-system
|
|
scikit-build-core,
|
|
nanobind,
|
|
|
|
# nativeBuildInputs
|
|
cmake,
|
|
ninja,
|
|
pkg-config,
|
|
|
|
# buildInputs
|
|
dolfinx,
|
|
|
|
# dependency
|
|
numpy,
|
|
cffi,
|
|
mpi4py,
|
|
petsc4py,
|
|
slepc4py,
|
|
adios2,
|
|
kahip,
|
|
fenics-ffcx,
|
|
fenics-basix,
|
|
fenics-ufl,
|
|
|
|
# nativeCheckInputs
|
|
scipy,
|
|
matplotlib,
|
|
pytest-xdist,
|
|
pytestCheckHook,
|
|
writableTmpDirAsHomeHook,
|
|
mpiCheckPhaseHook,
|
|
|
|
# custom options
|
|
withParmetis ? false,
|
|
|
|
# passthru.tests
|
|
fenics-dolfinx,
|
|
mpich,
|
|
}:
|
|
|
|
let
|
|
fenicsPackages = petsc4py.petscPackages.overrideScope (
|
|
final: prev: {
|
|
slepc = final.callPackage slepc4py.override { };
|
|
adios2 = final.callPackage adios2.override { };
|
|
kahip = final.callPackage kahip.override { };
|
|
dolfinx = final.callPackage dolfinx.override { inherit withParmetis; };
|
|
}
|
|
);
|
|
in
|
|
buildPythonPackage rec {
|
|
inherit (dolfinx)
|
|
version
|
|
src
|
|
;
|
|
pname = "fenics-dolfinx";
|
|
pyproject = true;
|
|
|
|
pythonRelaxDeps = [
|
|
"cffi"
|
|
"fenics-ufl"
|
|
];
|
|
|
|
preConfigure = ''
|
|
cd python
|
|
'';
|
|
|
|
dontUseCmakeConfigure = true;
|
|
|
|
build-system = [
|
|
scikit-build-core
|
|
nanobind
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
cmake
|
|
ninja
|
|
pkg-config
|
|
fenicsPackages.mpi
|
|
];
|
|
|
|
buildInputs = [
|
|
fenicsPackages.dolfinx
|
|
];
|
|
|
|
dependencies = [
|
|
numpy
|
|
cffi
|
|
fenics-basix
|
|
fenics-ffcx
|
|
fenics-ufl
|
|
petsc4py
|
|
fenicsPackages.slepc
|
|
fenicsPackages.adios2
|
|
fenicsPackages.kahip
|
|
(mpi4py.override { inherit (fenicsPackages) mpi; })
|
|
];
|
|
|
|
doCheck = true;
|
|
|
|
nativeCheckInputs = [
|
|
scipy
|
|
matplotlib
|
|
pytest-xdist
|
|
pytestCheckHook
|
|
writableTmpDirAsHomeHook
|
|
mpiCheckPhaseHook
|
|
];
|
|
|
|
preCheck = ''
|
|
rm -rf dolfinx
|
|
'';
|
|
|
|
pythonImportsCheck = [
|
|
"dolfinx"
|
|
];
|
|
|
|
disabledTests = [
|
|
# require cffi<1.17
|
|
"test_cffi_expression"
|
|
"test_hexahedron_mesh"
|
|
];
|
|
|
|
passthru = {
|
|
tests =
|
|
{
|
|
complex = fenics-dolfinx.override {
|
|
petsc4py = petsc4py.override { scalarType = "complex"; };
|
|
};
|
|
}
|
|
// lib.optionalAttrs stdenv.hostPlatform.isLinux {
|
|
mpich = fenics-dolfinx.override {
|
|
petsc4py = petsc4py.override { mpi = mpich; };
|
|
};
|
|
};
|
|
};
|
|
|
|
meta = {
|
|
homepage = "https://fenicsproject.org";
|
|
downloadPage = "https://github.com/fenics/dolfinx";
|
|
description = "Computational environment of FEniCSx and implements the FEniCS Problem Solving Environment in C++ and Python";
|
|
changelog = "https://github.com/fenics/dolfinx/releases/tag/${src.tag}";
|
|
license = with lib.licenses; [
|
|
bsd2
|
|
lgpl3Plus
|
|
];
|
|
platforms = lib.platforms.unix;
|
|
maintainers = with lib.maintainers; [ qbisi ];
|
|
};
|
|
}
|