Support for Real and Complex Numbers ------------------------------------ DOLFINX provides builds with both real and complex number support making use of PETSc with real or complex number support. python3-dolfinx will bring in python3-dolfinx-real (real number support) by default. Complex number support is provided by python3-dolfinx-complex. In the C++ components, libdolfinx-dev brings in libdolfinx-real-dev (real number support) by default. Complex number support is provided by libdolfinx-complex-dev. libdolfinx-real-dev provides dolfinx_real.pc for pkg-config. libdolfinx-complex-dev provides dolfinx_complex.pc. Both real and complex packages can be installed at the same time. If not otherwise specified, the selected version of dolfinx is the one built against the preferred version of PETSc in /usr/lib/petsc. By default this is petsc-real, but can be controlled by update-alternatives --config petsc The alternative build of DOLFINX can be accessed by setting PETSC_DIR as an environment variable where needed, e.g. PETSC_DIR=/usr/lib/petscdir/petsc-complex python3 -c "import dolfinx; print(dolfinx.__path__); print('supports complex numbers: ', dolfinx.has_petsc_complex)" Depending on your application, you might also need to set the SLEPC_DIR environment variable, e.g. SLEPC_DIR=/usr/lib/slepcdir/slepc-complex or SLEPC_DIR=$( echo $PETSC_DIR | sed "s/petsc/slepc/g" ) Support for SuperLU-Dist ------------------------ In principle dolfinx supports SuperLU-Dist via PETSc. Be aware that upstream SuperLU-Dist was developed to use mc64, which cannot legally be redistributed. CombBLAS may be used as a substitute for mc64, and so debian's superlu-dist package is provided using CombBLAS. dolfinx itself sets no direct preference, by default simply using the default solver employed by PETSc. You may specify superlu_dist if desired (or if you have a local build of superlu_dist that includes mc64), for instance with pc.setFactorSolverType("mumps") See demos for current syntax. You may also successfully use superlu_dist without mc64 by specifying C++: PETScOptions::set("-mat_superlu_dist_rowperm", "NATURAL"); Python: PETScOptions.set('-mat_superlu_dist_rowperm', 'NATURAL') The same issue applies to superlu, from which mc64 has also been removed. superlu still functions successfully however (mc64 is not core for the serial version of SuperLU). Internet availability for pusimp integration tests -------------------------------------------------- The goal of some pusimp integration tests is to create a dirty virtualenv in which some of dolfinx dependecies are replaced with a manually installed package from PyPI, and verify that pusimp actually triggers an error while trying to import dolfinx. However, to create such virtualenv environment the build needs to be allowed to download packages from pypi.org. To build locally with full internet access: - if building with dpkg-buildpackage export http_proxy="" https_proxy="" before running dpkg-buildpackage - if building with pdebuild, in addition to exporting the two environment variables as above the maintainer may want to add USENETWORK=yes to their $HOME/.pbuilderrc. The pdebuild log with default USENETWORK=no contains I: pbuilder: network access will be disabled during build while the pdebuild log with customized USENETWORK=yes contains W: pbuilder: network will not be disabled during build! The file test/debian-only/test_pusimp.py gracefully handles a missing network by checking for internet availability trying to fetch www.debian.org via python3-requests. If networks is unreachable, all tests in the file will be skipped, and pusimp integration will only be partially tested.