Install Lumen on MacOsX (from Yuncheng Mao)
Lumen 2.0.1 macOS Compilation Guide
This guide records a working macOS/Homebrew recipe for compiling the Lumen executables with MPI parallel execution enabled. Two build configurations are documented:
- MPI+SLK+HDF5_IO: Serial HDF5/NetCDF I/O. Simpler setup using Homebrew libraries directly. MPI execution and ScaLAPACK are still active.
- MPI+SLK+HDF5_MPI_IO: Parallel HDF5/NetCDF I/O. Requires building HDF5, NetCDF-C, and NetCDF-Fortran from source with MPI support into a local prefix.
The commands below intentionally avoid conda. Run configure, build, and verification commands through the clean environment wrapper shown here so that Homebrew compilers and libraries are used first.
Verified Platform
This recipe was verified on:
- macOS on Apple Silicon (
apple@arm) - Homebrew under
/opt/homebrew - GNU Fortran from Homebrew GCC
- Open MPI from Homebrew
The final verified executable set from either build is:
bin/a2y bin/p2y bin/yambo bin/yambo_nl bin/yambo_ph bin/yambo_rt bin/yambo_sc bin/ypp bin/ypp_nl bin/ypp_ph bin/ypp_rt bin/ypp_sc
p2y is enabled in this configuration. e2y is disabled by config/mk/global/defs.mk.
Required Homebrew Packages
Install the needed tools and libraries:
<source lang="bash"> brew install gcc open-mpi openblas scalapack fftw netcdf netcdf-fortran hdf5 automake libtool wget cmake </source>
The verified versions were:
automake 1.18.1 cmake 4.x fftw 3.3.11 gcc 15.2.0_1 hdf5 2.1.1 libtool 2.5.4 netcdf 4.10.0 netcdf-fortran 4.6.2 open-mpi 5.0.9 openblas 0.3.33 scalapack 2.2.3
Check that the tools resolve to Homebrew, not conda:
<source lang="bash"> which mpicc mpifort mpirun gfortran nc-config nf-config h5fc cmake </source>
Expected paths are under /opt/homebrew/bin.
Clean Build Environment
Use this wrapper for all configure, build, and verification commands:
<source lang="bash"> env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin <command> </source>
Why:
env -iremoves conda variables and library paths.PATHputs Homebrew and system tools in a known order.TMPDIR=/private/tmpavoids macOS compiler temp-file failures seen with a stripped environment.
The examples below use the explicit path form that was verified:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin <command> </source>G
Build Configuration A: MPI+SLK+HDF5_IO (Serial I/O)
This is the simpler configuration. Homebrew HDF5 and NetCDF are used directly, but parallel HDF5 I/O is disabled. MPI execution and ScaLAPACK are still active.
Check whether Homebrew NetCDF has parallel I/O support: <source lang="bash"> nc-config --has-parallel4 </source>
If this prints no (the typical Homebrew default), use this configuration.
Configure (Serial I/O)
Run from the repository root: <source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ./configure \
CC=mpicc \ FC=gfortran \ F77=gfortran \ MPICC=mpicc \ MPIFC=mpifort \ MPIF77=mpifort \ LDFLAGS=-Wl,-rpath,/opt/homebrew/lib \ --enable-mpi \ --enable-par-linalg \ --disable-hdf5-par-io \ --with-blas-libs="-L/opt/homebrew/opt/openblas/lib -lopenblas" \ --with-lapack-libs="-L/opt/homebrew/opt/openblas/lib -lopenblas" \ --with-scalapack-libs="-L/opt/homebrew/opt/scalapack/lib -lscalapack" \ --with-fft-path=/opt/homebrew/opt/fftw \ --with-netcdf-path=/opt/homebrew/opt/netcdf \ --with-netcdff-path=/opt/homebrew/opt/netcdf-fortran \ --with-hdf5-path=/opt/homebrew/opt/hdf5
</source>
Expected config/report highlights:
[E] MPI [E] SCALAPACK [E] BLAS : OpenBLAS [E] LAPACK : OpenBLAS [E] FFT : FFTW v3 [E] NETCDF [E] NETCDFF [E] HDF5 : Serial_lib [-] Parallel I/O
Build Configuration B: MPI+SLK+HDF5_MPI_IO (Parallel I/O)
This configuration enables parallel HDF5/NetCDF I/O, which allows Lumen to read and write HDF5 files collectively across MPI ranks. It requires building HDF5, NetCDF-C, and NetCDF-Fortran from source because Homebrew's netcdf formula is not compiled with parallel HDF5 support.
The local libraries are installed into ./external/parallel-libs/ so that Homebrew packages remain untouched.
Build Local Parallel HDF5
Download, configure, and install HDF5 with MPI support: <source lang="bash"> PARLIB=$PWD/external/parallel-libs mkdir -p $PARLIB/src cd $PARLIB/src
- HDF5 1.14.5
wget -O hdf5-1.14.5.tar.gz "https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.5/hdf5-1.14.5.tar.gz" tar xzf hdf5-1.14.5.tar.gz cd hdf5-1.14.5
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
./configure --prefix=$PARLIB --enable-fortran --enable-parallel CC=mpicc FC=mpifort F77=mpifort
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
make -j$(sysctl -n hw.ncpu)
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
make install
</source>
Verify parallel support: <source lang="bash"> $PARLIB/bin/h5pcc -showconfig 2>&1 | grep "Parallel HDF5" </source>
Expected: Parallel HDF5: yes
Build Local Parallel NetCDF-C
<source lang="bash"> cd $PARLIB/src
- NetCDF-C 4.9.2
wget -O netcdf-c-4.9.2.tar.gz "https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.9.2.tar.gz" tar xzf netcdf-c-4.9.2.tar.gz cd netcdf-c-4.9.2
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
cmake -S . -B build \ -DCMAKE_INSTALL_PREFIX=$PARLIB \ -DCMAKE_C_COMPILER=mpicc \ -DENABLE_PNETCDF=OFF \ -DENABLE_PARALLEL4=ON \ -DENABLE_HDF5=ON \ -DHDF5_DIR=$PARLIB \ -DENABLE_DAP=OFF \ -DENABLE_TESTS=OFF \ -DENABLE_BYTERANGE=OFF \ -DENABLE_DISKLESS=OFF
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
cmake --build build -j$(sysctl -n hw.ncpu)
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
cmake --install build
</source>
Verify parallel support: <source lang="bash"> $PARLIB/bin/nc-config --has-parallel4 </source>
Expected: yes
Build Local Parallel NetCDF-Fortran
<source lang="bash"> cd $PARLIB/src
- NetCDF-Fortran 4.6.1
wget -O netcdf-fortran-4.6.1.tar.gz "https://github.com/Unidata/netcdf-fortran/archive/refs/tags/v4.6.1.tar.gz" tar xzf netcdf-fortran-4.6.1.tar.gz cd netcdf-fortran-4.6.1
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
cmake -S . -B build \ -DCMAKE_INSTALL_PREFIX=$PARLIB \ -DCMAKE_C_COMPILER=mpicc \ -DCMAKE_Fortran_COMPILER=mpifort \ -DENABLE_TESTS=OFF \ -DCMAKE_PREFIX_PATH=$PARLIB \ -DnetCDF_INCLUDE_DIR=$PARLIB/include \ -DnetCDF_LIBRARIES=$PARLIB/lib/libnetcdf.dylib
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
cmake --build build -j$(sysctl -n hw.ncpu)
/usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
cmake --install build
</source>
The cmake configure output should show Parallel IO: yes and NetCDF4 Parallel IO: yes.
Summary of Local Parallel Libraries
After the steps above, ./external/parallel-libs/ contains:
| Library | Version | Parallel |
|---|---|---|
| HDF5 | 1.14.5 | yes |
| NetCDF-C | 4.9.2 | yes (parallel4) |
| NetCDF-Fortran | 4.6.1 | yes |
These are self-contained and do not affect Homebrew.
Configure (Parallel I/O)
Run from the repository root, pointing to the local parallel libraries:
<source lang="bash"> PARLIB=$PWD/external/parallel-libs /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ./configure \
CC=mpicc \ FC=gfortran \ F77=gfortran \ MPICC=mpicc \ MPIFC=mpifort \ MPIF77=mpifort \ LDFLAGS="-Wl,-rpath,$PARLIB/lib" \ --enable-mpi \ --enable-par-linalg \ --enable-hdf5-par-io \ --with-blas-libs="-L/opt/homebrew/opt/openblas/lib -lopenblas" \ --with-lapack-libs="-L/opt/homebrew/opt/openblas/lib -lopenblas" \ --with-scalapack-libs="-L/opt/homebrew/opt/scalapack/lib -lscalapack" \ --with-fft-path=/opt/homebrew/opt/fftw \ --with-netcdf-path=$PARLIB \ --with-netcdff-path=$PARLIB \ --with-hdf5-path=$PARLIB
</source>
Expected config/report highlights:
[E] MPI [E] SCALAPACK [E] BLAS : OpenBLAS [E] LAPACK : OpenBLAS [E] FFT : FFTW v3 [C] NETCDF [C] NETCDFF [E] HDF5 : Parallel_lib [X] Parallel I/O (via HDF5)
Note: NetCDF and NetCDF-Fortran are marked [C] (to be compiled) because the build system compiles them internally against the parallel HDF5. The [E] HDF5 points to the local parallel build.
Build the Internal Libraries
After configure (either configuration), build the internal libraries first:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 iotk ldiago devxlib </source>
Build bundled LibXC:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 libxc </source>
Do not force Homebrew LibXC for this Lumen source. Current Homebrew LibXC is too new for the Fortran module symbols expected by this code. The bundled libxc-5.2.3 builds and links correctly.
If the internal tarballs are missing and the machine has network access, these targets download the needed archives into lib/archive/:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make ldiago-dl iotk-dl devxlib-dl libxc-dl </source>
Expected archives:
lib/archive/Ldiago-0.5.1.tar.gz lib/archive/iotk-y1.2.2.tar.gz lib/archive/devicexlib-0.8.5.tar.gz lib/archive/libxc-5.2.3.tar.gz
Build the Executables
Build the project executables one target at a time. Do not put multiple project targets in the same make invocation: project flags are selected from MAKECMDGOALS, and the internal library/stamp setup is sensitive to target switching.
Use -j1 for project executables. Higher parallelism can race Fortran module availability during target switches; the compiled programs themselves are still MPI-enabled.
During builds on macOS, this warning can appear many times:
grep: /proc/cpuinfo: No such file or directory
It is harmless. The build scripts probe Linux CPU information, but the absence of /proc/cpuinfo on macOS does not prevent compilation.
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 yambo </source>
Then build the remaining enabled targets:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 ypp /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 a2y /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 p2y /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 yambo_ph /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 ypp_ph /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 yambo_sc /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 ypp_sc /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 yambo_rt /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 ypp_rt /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 yambo_nl /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -j1 ypp_nl </source>
In this configuration p2y is enabled and e2y is disabled. The expected outputs are:
bin/a2y bin/p2y bin/yambo bin/yambo_nl bin/yambo_ph bin/yambo_rt bin/yambo_sc bin/ypp bin/ypp_nl bin/ypp_ph bin/ypp_rt bin/ypp_sc
Precision Switching for NL Targets
The yambo_nl and ypp_nl targets are compiled with -D_DOUBLE (double precision). The build system's object save/restore mechanism handles switching between single and double precision automatically: when you build yambo (single precision) first and then yambo_nl (double precision), the build system saves the single-precision objects and compiles fresh double-precision ones.
If the save/restore mechanism gets confused (e.g., after a failed build or manual cleanup), remove all stamps and library objects for a clean rebuild:
<source lang="bash"> rm -f config/stamps_and_lists/*.stamp find lib/qe_pseudo lib/slatec lib/math77 lib/local -name '*.lock' -delete 2>/dev/null find lib/qe_pseudo lib/slatec lib/math77 lib/local -name 'objects.save' -type d -exec rm -rf {} + 2>/dev/null find lib/qe_pseudo lib/slatec lib/math77 lib/local -name 'DOUBLE_objects.save' -type d -exec rm -rf {} + 2>/dev/null find src -name '*.o' -delete 2>/dev/null find src -name '*.mod' -delete 2>/dev/null </source>
Then rebuild the targets in order. Single-precision targets first, then NL:
<source lang="bash">
- Single precision targets
make -j1 yambo ypp a2y p2y yambo_ph ypp_ph yambo_sc ypp_sc yambo_rt ypp_rt
- Double precision targets
make -j1 yambo_nl ypp_nl </source>
Stale Stamp Recovery
If a previous failed or cleaned build leaves stamps but missing generated libraries/modules, remove only the stale stamp for the failing library and rerun the target. Examples encountered during this build:
<source lang="bash"> rm -f config/stamps_and_lists/lib_Y_tools.a.stamp rm -f config/stamps_and_lists/libqe_pseudo.a.stamp </source>
The symptom for the libqe_pseudo case is usually:
Fatal Error: Cannot open module file 'qe_pseudo_m.mod' for reading
This was seen while switching to the ypp and ypp_nl targets after previous project builds. The module had been built in lib/qe_pseudo/*objects.save/, but the stale stamp prevented the build system from recreating include/qe_pseudo_m.mod.
If you prefer not to remove the stamp, move it aside instead: <source lang="bash"> mv config/stamps_and_lists/libqe_pseudo.a.stamp config/stamps_and_lists/libqe_pseudo.a.stamp.stale </source>
Then rerun the failed target with make -j1 <target>.
If libiotk.a is missing after a partial clean, rebuild and copy it:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin make -C lib/iotk/iotk/src libiotk.a /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ranlib lib/iotk/iotk/src/libiotk.a /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin cp lib/iotk/iotk/src/libiotk.a lib/external/gfortran/mpifort/lib/ </source>
Prefer targeted stamp recovery over broad clean commands. The source tarball is not necessarily a git checkout, and make veryclean can assume git metadata.
Verification
Check the files:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ls -l bin /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin file bin/* </source>
Expected:
Mach-O 64-bit executable arm64
Check linked libraries:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin otool -L bin/* </source>
The dynamic libraries should resolve to /opt/homebrew/opt/..., ./external/parallel-libs/ (for the parallel I/O build), or /usr/lib. There should be no conda, miniforge, or anaconda paths.
This command should print nothing:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin otool -L bin/* | rg -i 'conda|anaconda|miniforge|mambaforge' </source>
Check help output:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin zsh -lc 'for exe in a2y p2y yambo yambo_nl yambo_ph yambo_rt yambo_sc ypp ypp_nl ypp_ph ypp_rt ypp_sc; do ./bin/$exe -h >/tmp/lumen_${exe}_help.out 2>&1; st=$?; echo "$exe $st"; done' </source>
The verified run printed exit status 0 for every executable.
Check MPI launch:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mpirun -np 2 ./bin/yambo -h /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mpirun -np 2 ./bin/yambo_nl -h /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mpirun -np 2 ./bin/ypp -h /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mpirun -np 2 ./bin/ypp_nl -h </source>
In restricted sandboxes, Open MPI may fail with socket bind() permission errors. On a normal macOS shell, the two-rank smoke tests should print help from both MPI ranks and exit with status 0.
Running Later
Use the same clean environment for production runs if conda is installed:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mpirun -np 4 ./bin/yambo_nl </source>
For single-process runs:
<source lang="bash"> /usr/bin/env -i HOME="$HOME" TMPDIR=/private/tmp PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ./bin/yambo </source>