Skip to content

Commit

Permalink
meep: init at 1.25.0
Browse files Browse the repository at this point in the history
meep: more comments
  • Loading branch information
sheepforce committed Feb 8, 2023
1 parent 4c45a5f commit bd09bea
Show file tree
Hide file tree
Showing 2 changed files with 153 additions and 0 deletions.
151 changes: 151 additions & 0 deletions pkgs/development/python-modules/meep/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
{ stdenv
, lib
, buildPythonPackage
, fetchFromGitHub
, autoreconfHook
, pkg-config
, gfortran
, mpi
, blas
, lapack
, fftw
, hdf5-mpi
, swig
, gsl
, harminv
, libctl
, libGDSII
, openssh
, guile
, python
, numpy
, scipy
, matplotlib
, h5py-mpi
, cython
, autograd
, mpi4py
}:

assert !blas.isILP64;
assert !lapack.isILP64;

buildPythonPackage rec {
pname = "meep";
version = "1.25.0";

src = fetchFromGitHub {
owner = "NanoComp";
repo = pname;
rev = "v${version}";
hash = "sha256-4rIz2RXLSWzZbRuv8d4nidOa0ULYc4QHIdaYrGu1WkI=";
};

format = "other";

# MPI is needed in nativeBuildInputs too, otherwise MPI libs will be missing
# at runtime
nativeBuildInputs = [
autoreconfHook
gfortran
pkg-config
swig
mpi
];

buildInputs = [
gsl
blas
lapack
fftw
hdf5-mpi
harminv
libctl
libGDSII
guile
gsl
];

propagatedBuildInputs = [
mpi
numpy
scipy
matplotlib
h5py-mpi
cython
autograd
mpi4py
];

propagatedUserEnvPkgs = [ mpi ];

dontUseSetuptoolsBuild = true;
dontUsePipInstall = true;
dontUseSetuptoolsCheck = true;

enableParallelBuilding = true;

preConfigure = ''
export HDF5_MPI=ON
export PYTHON=${python}/bin/${python.executable};
'';

configureFlags = [
"--without-libctl"
"--enable-shared"
"--with-mpi"
"--with-openmp"
"--enable-maintainer-mode"
];

passthru = { inherit mpi; };

/*
This test is taken from the MEEP tutorial "Fields in a Waveguide" at
<https://meep.readthedocs.io/en/latest/Python_Tutorials/Basics/>.
It is important, that the test actually performs a calculation
(calls `sim.run()`), as only then MPI will be initialised and MPI linking
errors can be caught.
*/
doCheck = true;
checkPhase = ''
export PATH=$PATH:${openssh}/bin
export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
export OMP_NUM_THREADS=1
# Fix to make mpich run in a sandbox
export HYDRA_IFACE=lo
export OMPI_MCA_rmaps_base_oversubscribe=1
# Generate a python test script
cat > test.py << EOF
import meep as mp
cell = mp.Vector3(16,8,0)
geometry = [mp.Block(mp.Vector3(mp.inf,1,mp.inf),
center=mp.Vector3(),
material=mp.Medium(epsilon=12))]
sources = [mp.Source(mp.ContinuousSource(frequency=0.15),
component=mp.Ez,
center=mp.Vector3(-7,0))]
pml_layers = [mp.PML(1.0)]
resolution = 10
sim = mp.Simulation(cell_size=cell,
boundary_layers=pml_layers,
geometry=geometry,
sources=sources,
resolution=resolution)
sim.run(until=200)
EOF
${mpi}/bin/mpiexec -np 2 python3 test.py
'';

meta = with lib; {
description = "Free finite-difference time-domain (FDTD) software for electromagnetic simulations";
homepage = "https://meep.readthedocs.io/en/latest/";
license = licenses.gpl2Only;
platforms = platforms.linux;
maintainers = with maintainers; [ sheepforce markuskowa ];
};
}
2 changes: 2 additions & 0 deletions pkgs/top-level/python-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5804,6 +5804,8 @@ self: super: with self; {

mediapy = callPackage ../development/python-modules/mediapy { };

meep = callPackage ../development/python-modules/meep { };

meilisearch = callPackage ../development/python-modules/meilisearch { };

meinheld = callPackage ../development/python-modules/meinheld { };
Expand Down

0 comments on commit bd09bea

Please sign in to comment.