3
0
Fork 0
forked from mirrors/nixpkgs

Merge pull request #214924 from sheepforce/meep

meep: init at 1.25.0
This commit is contained in:
markuskowa 2023-02-08 14:40:34 +01:00 committed by GitHub
commit 9313ae3ba5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 231 additions and 0 deletions

View file

@ -0,0 +1,42 @@
{ lib
, stdenv
, fetchFromGitHub
, autoreconfHook
, gfortran
, blas
, lapack
}:
assert !blas.isILP64;
assert !lapack.isILP64;
stdenv.mkDerivation rec {
pname = "harminv";
version = "1.4.2";
src = fetchFromGitHub {
owner = "NanoComp";
repo = pname;
rev = "v${version}";
hash = "sha256-EXEt7l69etcBdDdEDlD1ODOdhTBZCVjgY1jhRUDd/W0=";
};
# File is missing in the git checkout but required by autotools
postPatch = ''
touch ChangeLog
'';
nativeBuildInputs = [ autoreconfHook gfortran ];
buildInputs = [ blas lapack ];
configureFlags = [ "--enable-shared" ];
meta = with lib; {
description = "Harmonic inversion algorithm of Mandelshtam: decompose signal into sum of decaying sinusoids";
homepage = "https://github.com/NanoComp/harminv";
license = with licenses; [ gpl2Only ];
maintainers = with maintainers; [ sheepforce markuskowa ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,32 @@
{ lib
, stdenv
, fetchFromGitHub
, autoreconfHook
}:
stdenv.mkDerivation rec {
pname = "libGDSII";
version = "0.21";
src = fetchFromGitHub {
owner = "HomerReid";
repo = pname;
rev = "v${version}";
hash = "sha256-EXEt7l69etcBdDdEDlD1ODOdhTBZCVjgY1jhRUDd/W0=";
};
# File is missing in the repo but automake requires it
postPatch = ''
touch ChangeLog
'';
nativeBuildInputs = [ autoreconfHook ];
meta = with lib; {
description = "Library and command-line utility for reading GDSII geometry files";
homepage = "https://github.com/HomerReid/libGDSII";
license = [ licenses.gpl2Only ];
maintainers = with maintainers; [ sheepforce markuskowa ];
platforms = platforms.linux;
};
}

View file

@ -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 ];
};
}

View file

@ -7899,6 +7899,8 @@ with pkgs;
gyb = callPackage ../tools/backup/gyb { };
harminv = callPackage ../development/libraries/science/chemistry/harminv { };
igrep = callPackage ../tools/text/igrep {
inherit (darwin.apple_sdk.frameworks) Security;
};
@ -27322,6 +27324,8 @@ with pkgs;
ledger-udev-rules = callPackage ../os-specific/linux/ledger-udev-rules {};
libGDSII = callPackage ../development/libraries/science/chemistry/libGDSII { };
inherit (callPackages ../data/fonts/liberation-fonts { })
liberation_ttf_v1
liberation_ttf_v2

View file

@ -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 { };