[[Category:Software]][[Category:ComputationalChemistry]] __TOC__ = General = [https://wiki.fysik.dtu.dk/gpaw/ GPAW] is a density-functional theory (DFT) [[Python]] code based on the projector-augmented wave (PAW) method and the atomic simulation environment (ASE). = Creating a GPAW virtual environment = We provide precompiled [[Available Python wheels|Python wheels]] for GPAW that can be installed into a [[Python#Creating_and_using_a_virtual_environment|virtual python environment]]. 1. Check which versions of gpaw are available: {{Command|prompt=[name@server ~] |avail_wheels gpaw |result= name version python arch ------ --------- -------- ------ gpaw 22.8.0 cp39 avx2 gpaw 22.8.0 cp38 avx2 gpaw 22.8.0 cp310 avx2 }} 2. Load a Python module (e.g. python/3.10) {{Command|prompt=(ENV) [name@server ~] |module load python/3.10 }} 3. Create a new virtualenv {{Command|prompt=[name@server ~] |virtualenv --no-download venv_gpaw |result= created virtual environment CPython3.10.2.final.0-64 in 514ms [...] }} 4. Activate the virtualenv (venv) {{Command|prompt=[name@server ~] |source venv_gpaw/bin/activate }} 5. Install gpaw into venv {{Command|prompt=(venv_gpaw) [name@server ~] |pip install --no-index gpaw |result= [...] Successfully installed ... gpaw-22.8.0+computecanada ... }} 6. Download the data and install it into the SCRATCH filesystem {{Command|prompt=(venv_gpaw) [name@server ~] |gpaw install-data $SCRATCH |result= Available setups and pseudopotentials [*] https://wiki.fysik.dtu.dk/gpaw-files/gpaw-setups-0.9.20000.tar.gz [...] Setups installed into /scratch/name/gpaw-setups-0.9.20000. Register this setup path in /home/name/.gpaw/rc.py? [y/n] n As you wish. [...] Installation complete. }} 7. Now set GPAW_SETUP_PATH to point to the data directory {{Command|prompt=(venv_gpaw) [name@server ~] |export GPAW_SETUP_PATH{{=}}$SCRATCH/gpaw-setups-0.9.20000 }} 8. We can run the tests, which are very fast: {{Command|prompt=(venv_gpaw) [name@server ~] |gpaw test |result= ------------------------------------------------------------------------------------------------------------ {{!}} python-3.10.2 /home/name/venv_gpaw/bin/python {{!}} {{!}} gpaw-22.8.0 /home/name/venv_gpaw/lib/python3.10/site-packages/gpaw/ {{!}} {{!}} ase-3.22.1 /home/name/venv_gpaw/lib/python3.10/site-packages/ase/ {{!}} {{!}} numpy-1.23.0 /home/name/venv_gpaw/lib/python3.10/site-packages/numpy/ {{!}} {{!}} scipy-1.9.3 /home/name/venv_gpaw/lib/python3.10/site-packages/scipy/ {{!}} {{!}} libxc-5.2.3 yes {{!}} {{!}} _gpaw /home/name/venv_gpaw/lib/python3.10/site-packages/_gpaw.cpython-310-x86_64-linux-gnu.so {{!}} {{!}} MPI enabled yes {{!}} {{!}} OpenMP enabled yes {{!}} {{!}} scalapack yes {{!}} {{!}} Elpa no {{!}} {{!}} FFTW yes {{!}} {{!}} libvdwxc no {{!}} {{!}} PAW-datasets (1) /scratch/name/gpaw-setups-0.9.20000 {{!}} ----------------------------------------------------------------------------------------------------------- Doing a test calculation (cores: 1): ... Done Test parallel calculation with "gpaw -P 4 test". }} {{Command|prompt=(venv_gpaw) [name@server ~] |gpaw -P 4 test |result= ------------------------------------------------------------------------------------------------------------ {{!}} python-3.10.2 /home/name/venv_gpaw/bin/python {{!}} {{!}} gpaw-22.8.0 /home/name/venv_gpaw/lib/python3.10/site-packages/gpaw/ {{!}} {{!}} ase-3.22.1 /home/name/venv_gpaw/lib/python3.10/site-packages/ase/ {{!}} {{!}} numpy-1.23.0 /home/name/venv_gpaw/lib/python3.10/site-packages/numpy/ {{!}} {{!}} scipy-1.9.3 /home/name/venv_gpaw/lib/python3.10/site-packages/scipy/ {{!}} {{!}} libxc-5.2.3 yes {{!}} {{!}} _gpaw /home/name/venv_gpaw/lib/python3.10/site-packages/_gpaw.cpython-310-x86_64-linux-gnu.so {{!}} {{!}} MPI enabled yes {{!}} {{!}} OpenMP enabled yes {{!}} {{!}} scalapack yes {{!}} {{!}} Elpa no {{!}} {{!}} FFTW yes {{!}} {{!}} libvdwxc no {{!}} {{!}} PAW-datasets (1) /scratch/name/gpaw-setups-0.9.20000 {{!}} ----------------------------------------------------------------------------------------------------------- Doing a test calculation (cores: 4): ... Done }} Results of the last test can be found in the file test.txt that will be created in the current directory. = Example Jobscript = A jobscript may look something like this for hybrid (OpenMP and MPI) parallelization. This assumes that the virtualenv is in your $HOME directory and the PAW-datasets in $SCRATCH as shown above. {{File |language=bash |name=job_gpaw.sh |contents= #!/bin/bash #SBATCH --ntasks=8 #SBATCH --cpus-per-task=4 #SBATCH --mem-per-cpu=4000M #SBATCH --time=0-01:00 module load gcc/9.3.0 openmpi/4.0.3 source ~/venv_gpaw/bin/activate export OMP_NUM_THREADS="${SLURM_CPUS_PER_TASK:-1}" export GPAW_SETUP_PATH=/scratch/$USER/gpaw-setups-0.9.20000 srun --cpus-per-task=$OMP_NUM_THREADS gpaw python my_gpaw_script.py }} This would use a single node with 8 MPI-ranks (ntasks) and 4 OpenMP threads per MPI rank (cpus-per-task) so a total of 32 CPUs. You probably want to adjust those numbers so that the product matches the number of cores of a whole node (i.e. 32 at [[Graham]], 40 at [[Béluga/en|Béluga]] and [[Niagara]], 48 at [[Cedar]] or 64 at [[Narval/en|Narval]]). Setting OMP_NUM_THREADS as shown above, makes sure it is always set to the same value as cpus-per-task or 1 in case cpus-per-task is not set. Loading the modules gcc/9.3.0 and openmpi/4.0.3 ensures that the exact MPI library is used for the job, as was used for building the wheels.