GPAW: DFT and beyond within the projector-augmented wave method¶
GPAW is a density-functional theory (DFT) Python code based on the projector-augmented wave (PAW) method and the atomic simulation environment (ASE). The wave functions can be described with:
Plane-waves (pw)
Real-space uniform grids, multigrid methods and the finite-difference approximation (fd)
Atom-centered basis-functions (lcao)
>>> # H2-molecule example:
>>> import numpy as np
>>> from ase import Atoms
>>> from gpaw import GPAW, PW
>>> h2 = Atoms('H2', [(0, 0, 0), (0, 0, 0.74)])
>>> h2.center(vacuum=2.5)
>>> h2.cell
Cell([5.0, 5.0, 5.74])
>>> h2.positions
array([[2.5 , 2.5 , 2.5 ],
[2.5 , 2.5 , 3.24]])
>>> h2.calc = GPAW(xc='PBE',
... mode=PW(300),
... txt='h2.txt')
>>> energy = h2.get_potential_energy()
>>> print(f'Energy: {energy:.3f} eV')
Energy: -6.631 eV
>>> forces = h2.get_forces()
>>> forces.shape
(2, 3)
>>> print(f'Force: {forces[0, 2]:.3f} eV/Å')
Force: -0.639 eV/Å
News¶
GPAW version 22.8.0 released (Aug 18, 2022).
GPAW version 22.1.0 released (Jan 12, 2022).
GPAW version 21.6.0 released (Jun 24, 2021).
Slides from the “GPAW 2021 Users and developers meeting” are now available here (Jun 2, 2021).
Upcoming workshop: The GPAW 2021 Users and developers meeting will be held online on June 1–4, 2021. See also announcement on Psi-k (Mar 1, 2021).
GPAW version 21.1.0 released (Jan 18, 2021).
GPAW version 20.10.0 released (Oct 19, 2020).
GPAW version 20.1.0 released (Jan 30, 2020).
GPAW version 19.8.1 released (Aug 8, 2019).
GPAW version 19.8.0 released (Aug 1, 2019).
GPAW version 1.5.2 released (May 8, 2019).
GPAW version 1.5.1 released (Jan 23, 2019).
GPAW version 1.5.0 released (Jan 11, 2019).
GPAW version 1.4.0 released (May 29, 2018).
GPAW version 1.3.0 released (Oct 2, 2017).
Supported by NOMAD (Mar 1, 2017)
Code-sprints moved to first Tuesday of every month (Feb 17, 2017)
GPAW version 1.2 released (Feb 7, 2017)
It has been decided to have monthly GPAW/ASE code-sprints at DTU in Lyngby. The sprints will be the first Wednesday of every month starting December 7, 2016 (Nov 11, 2016)
Slides from the talks at GPAW 2016: Users and developers meeting are now available (Sep 5, 2016)
GPAW version 1.1 released (Jun 22, 2016)
GPAW version 1.0 released (Mar 18, 2016)
Web-page now use the Read the Docs Sphinx Theme (Mar 18, 2016)
GPAW version 0.11 released (Jul 22, 2015)
GPAW version 0.10 released (Apr 8, 2014)
GPAW is part of the PRACE Unified European Application Benchmark Suite (Oct 17, 2013)
May 21-23, 2013: GPAW workshop at the Technical University of Denmark (Feb 8, 2013)
Prof. Häkkinen has received 18 million CPU hour grant for GPAW based research project (Nov 20, 2012)
A new Atomic PAW Setups bundle released (Oct 26, 2012)
GPAW version 0.9 released (March 7, 2012)
GPAW version 0.8 released (May 25, 2011)
GPAW is part of benchmark suite for CSC’s supercomputer procurement (Apr 19, 2011)
New features: Calculation of the linear dielectric response of an extended system (RPA and ALDA kernels) and calculation of RPA correlation energy (Mar 18, 2011)
Massively parallel GPAW calculations presented at PyCon 2011. See William Scullin’s talk here: Python for High Performance Computing (Mar 12, 2011)
GPAW version 0.7.2 released (Aug 13, 2010)
GPAW version 0.7 released (Apr 23, 2010)
GPAW is \(\Psi_k\) scientific highlight of the month (Apr 3, 2010)
A third GPAW code sprint was successfully hosted at CAMD (Oct 20, 2009)
GPAW version 0.6 released (Oct 9, 2009)
QuantumWise adds GPAW-support to Virtual NanoLab (Sep 8, 2009)
Join the new IRC channel
#gpaw
on FreeNode (Jul 15, 2009)GPAW version 0.5 released (Apr 1, 2009)
A new Atomic PAW Setups bundle released (Mar 27, 2009)
A second GPAW code sprint was successfully hosted at CAMD (Mar 20, 2009)
GPAW version 0.4 released (Nov 13, 2008)
The Tutorials and exercises are finally ready for use in the CAMd summer school 2008 (Aug 15, 2008)
This site is now powered by Sphinx (Jul 31, 2008)
GPAW is now based on numpy instead of of Numeric (Jan 22, 2008)
GPAW version 0.3 released (Dec 19, 2007)
CSC is organizing a GPAW course: “Electronic structure calculations with GPAW” (Dec 11, 2007)
The code sprint 2007 was successfully finished (Nov 16, 2007)
The source code is now in the hands of SVN and Trac (Oct 22, 2007)
A GPAW Sprint will be held on November 16 in Lyngby (Oct 18, 2007)
Work on atomic basis-sets begun (Sep 25, 2007)
- Features and algorithms
- Installation
- Documentation
- Basic usage
- Introduction
- Doing a PAW calculation
- Parameters
- Finite-difference, plane-wave or LCAO mode
- Number of electronic bands
- Exchange-Correlation functional
- Brillouin-zone sampling
- Spinpolarized calculation
- Number of grid points
- Grid spacing
- Use of symmetry
- Wave function initialization
- Occupation numbers
- Compensation charges
- Charge
- Accuracy of the self-consistency cycle
- Maximum number of SCF-iterations
- Where to send text output
- Density mixing
- Fixed density calculation
- PAW datasets or pseudopotentials
- Atomic basis set
- Eigensolver
- Poisson solver
- Finite-difference stencils
- Using Hund’s rule for guessing initial magnetic moments
- External potential
- Output verbosity
- Communicator object
- Total Energies
- Restarting a calculation
- Customizing behaviour through observers
- Command-line options
- Parallel runs
- Convergence Issues
- Restart files
- Introduction
- Advanced topics
- Spin-orbit coupling and non-collinear calculations
- Advanced Poisson solvers
- Classical electrodynamics
- Constrained DFT (cDFT)
- Delta Self-Consistent Field
- DeltaCodesDFT - Comparing Solid State DFT Codes, Basis Sets and Potentials
- Exact exchange
- External potential
- Grids
- Isotropic and anisotropic hyperfine coupling paramters
- LCAO Mode
- Excited-State Calculations with Maximum Overlap Method and Direct Optimization
- Excited State Calculations with Direct Optimization and Generalized Mode Following
- Occupation number smearing
- Orbital-free Density Functional Theory (OFDFT)
- RPA correlation energy
- Scissors operator for LCAO mode
- XC Functionals
- Custom convergence criteria
- Theory
- Introduction to PAW
- Articles on the PAW formalism
- Residual minimization method
- Orthogonalizing the wave functions
- Density Mixing
- Direct Minimization Methods
- Eigenvalues of core states
- Planewaves and exact exchange
- Localised electrostatic charges in non-uniform dielectric media: Theory
- Note on electrostatic potential
- Linear dielectric response of an extended system: theory
- Quasi-particle spectrum in the GW approximation: theory
- Bethe-Salpeter Equation - Theory
- Introduction
- The four point Bethe-Salpeter equation
- Transform using electron-hole pair basis
- Bethe-Salpeter equation as an effective two-particle Hamiltonian
- Explicit kpoint dependence
- Transform between electron-hole pair space and reciprocal space
- Dielectric function and its relation to spectra
- The implementation flowchart
- Tamm-Dancoff approximation
- X-Ray Absorption Spectroscopy (XAS)
- Ehrenfest dynamics (TDDFT/MD) - Theory
- Electron-Phonon Coupling Theory
- Raman spectroscopy
- Solvated Jellium (constant-potential electrochemistry)
- Introduction to GPAW internals
- DFT components
- Full picture
- Do-it-yourself example
- DFT-calculation object
- Naming convention for arrays
- Domain descriptors
- Atoms-arrays
- Block boundary conditions
- Matrix elements
- Atom-centered functions
- Matrix object
- API
- Core
UniformGrid
UniformGrid.atom_centered_functions()
UniformGrid.blocks()
UniformGrid.ecut_max()
UniformGrid.eikr()
UniformGrid.empty()
UniformGrid.fft_plans()
UniformGrid.from_cell_and_grid_spacing()
UniformGrid.global_shape()
UniformGrid.new()
UniformGrid.phase_factors_cd
UniformGrid.ranks_from_fractional_positions()
UniformGrid.size
UniformGrid.transformer()
UniformGrid.xyz()
PlaneWaves
AtomCenteredFunctions
UniformGridFunctions
UniformGridFunctions.abs_square()
UniformGridFunctions.fft()
UniformGridFunctions.fft_restrict()
UniformGridFunctions.gather()
UniformGridFunctions.integrate()
UniformGridFunctions.interpolate()
UniformGridFunctions.moment()
UniformGridFunctions.multiply_by_eikr()
UniformGridFunctions.new()
UniformGridFunctions.norm2()
UniformGridFunctions.randomize()
UniformGridFunctions.scaled()
UniformGridFunctions.scatter_from()
UniformGridFunctions.symmetrize()
UniformGridFunctions.to_pbc_grid()
UniformGridFunctions.xy()
DistributedArrays
AtomArrays
AtomArraysLayout
AtomDistribution
PlaneWaveExpansions
PlaneWaveExpansions.abs_square()
PlaneWaveExpansions.copy()
PlaneWaveExpansions.gather()
PlaneWaveExpansions.gather_all()
PlaneWaveExpansions.ifft()
PlaneWaveExpansions.integrate()
PlaneWaveExpansions.interpolate()
PlaneWaveExpansions.matrix
PlaneWaveExpansions.moment()
PlaneWaveExpansions.morph()
PlaneWaveExpansions.new()
PlaneWaveExpansions.norm2()
PlaneWaveExpansions.randomize()
PlaneWaveExpansions.scatter_from()
PlaneWaveExpansions.scatter_from_all()
PlaneWaveExpansions.to_pbc_grid()
Empty
Matrix
MatrixDistribution
MatrixDistribution.blocksize
MatrixDistribution.columns
MatrixDistribution.comm
MatrixDistribution.desc
MatrixDistribution.eighg()
MatrixDistribution.full_shape
MatrixDistribution.matrix()
MatrixDistribution.multiply()
MatrixDistribution.my_row_range()
MatrixDistribution.new()
MatrixDistribution.rows
MatrixDistribution.shape
- DFT
DFTCalculation
DFTCalculation.converge()
DFTCalculation.densities()
DFTCalculation.dipole()
DFTCalculation.electrostatic_potential()
DFTCalculation.energies()
DFTCalculation.forces()
DFTCalculation.from_parameters()
DFTCalculation.iconverge()
DFTCalculation.magmoms()
DFTCalculation.move_atoms()
DFTCalculation.new()
DFTCalculation.stress()
DFTCalculation.write_converged()
DFTState
Density
builder()
IBZWaveFunctions
IBZWaveFunctions.add_to_density()
IBZWaveFunctions.calculate_occs()
IBZWaveFunctions.forces()
IBZWaveFunctions.get_all_eigs_and_occs()
IBZWaveFunctions.get_all_electron_wave_function()
IBZWaveFunctions.get_eigs_and_occs()
IBZWaveFunctions.get_homo_lumo()
IBZWaveFunctions.get_max_shape()
IBZWaveFunctions.get_wfs()
IBZWaveFunctions.is_master()
IBZWaveFunctions.make_sure_wfs_are_read_from_gpw_file()
IBZWaveFunctions.move()
IBZWaveFunctions.orthonormalize()
IBZWaveFunctions.write()
IBZWaveFunctions.write_summary()
Potential
PotentialCalculator
SCFLoop
InputParameters
InputParameters.basis
InputParameters.charge
InputParameters.communicator
InputParameters.convergence
InputParameters.dtype
InputParameters.eigensolver
InputParameters.experimental
InputParameters.gpts
InputParameters.h
InputParameters.hund
InputParameters.items()
InputParameters.kpts
InputParameters.magmoms
InputParameters.mode
InputParameters.nbands
InputParameters.parallel
InputParameters.poissonsolver
InputParameters.setups
InputParameters.soc
InputParameters.spinpol
InputParameters.symmetry
InputParameters.txt
InputParameters.xc
PWFDWaveFunctions
PWFDWaveFunctions.P_ani
PWFDWaveFunctions.add_to_density()
PWFDWaveFunctions.array_shape()
PWFDWaveFunctions.collect()
PWFDWaveFunctions.dipole_matrix_elements()
PWFDWaveFunctions.force_contribution()
PWFDWaveFunctions.gather_wave_function_coefficients()
PWFDWaveFunctions.morph()
PWFDWaveFunctions.move()
PWFDWaveFunctions.orthonormalize()
PWFDWaveFunctions.pt_aiX
PWFDWaveFunctions.subspace_diagonalize()
PWFDWaveFunctions.to_uniform_grid_wave_functions()
ASECalculator
ASECalculator.band_structure()
ASECalculator.calculate()
ASECalculator.calculate_property()
ASECalculator.converge()
ASECalculator.converge_wave_functions()
ASECalculator.create_new_calculation()
ASECalculator.create_new_calculation_from_old()
ASECalculator.density
ASECalculator.diagonalize_full_hamiltonian()
ASECalculator.dos()
ASECalculator.fixed_density()
ASECalculator.get_all_electron_density()
ASECalculator.get_atomic_electrostatic_potentials()
ASECalculator.get_atoms()
ASECalculator.get_bz_k_points()
ASECalculator.get_dipole_moment()
ASECalculator.get_effective_potential()
ASECalculator.get_eigenvalues()
ASECalculator.get_electrostatic_corrections()
ASECalculator.get_electrostatic_potential()
ASECalculator.get_fermi_level()
ASECalculator.get_fermi_levels()
ASECalculator.get_forces()
ASECalculator.get_homo_lumo()
ASECalculator.get_ibz_k_points()
ASECalculator.get_magnetic_moment()
ASECalculator.get_magnetic_moments()
ASECalculator.get_number_of_bands()
ASECalculator.get_number_of_electrons()
ASECalculator.get_number_of_grid_points()
ASECalculator.get_number_of_iterations()
ASECalculator.get_number_of_spins()
ASECalculator.get_occupation_numbers()
ASECalculator.get_potential_energy()
ASECalculator.get_property()
ASECalculator.get_pseudo_density()
ASECalculator.get_pseudo_wave_function()
ASECalculator.get_reference_energy()
ASECalculator.get_stress()
ASECalculator.get_xc_difference()
ASECalculator.gs_adapter()
ASECalculator.hamiltonian
ASECalculator.implemented_properties
ASECalculator.initialize()
ASECalculator.initialized
ASECalculator.move_atoms()
ASECalculator.name
ASECalculator.new()
ASECalculator.parameters
ASECalculator.results
ASECalculator.setups
ASECalculator.spos_ac
ASECalculator.wfs
ASECalculator.world
ASECalculator.write()
GPAW()
- FFTW
- BLAS
- Core
- Command line interface
- GPU
- The gpaw.gpu module
- Fake cupy library
- CuPy enabled container objects
- GPU-aware MPI
- Utilities
- Reports, presentations, and theses using gpaw
- Basic usage
- Tutorials and exercises
- Basics and structure optimization
- Energetics
- Electronic structure
- Density Of States
- Density of states
- Calculation of electronic band structures
- Band structure
- Electronic Band Structure Unfolding for Supercell Calculations
- Spin-orbit coupling
- Berry phase calculations
- Calculating band gap using the GLLB-sc functional
- G0W0 calculation of the band gap of silicon
- PBE0 calculations for bulk silicon
- Tutorial: STM images - Al(111)
- STM simulations
- Electron transport
- Electrostatics and -dynamics
- Magnetic properties
- Molecular dynamics
- Optical response
- Time-propagation TDDFT
- Time-propagation TDDFT with LCAO
- Linear response TDDFT
- Linear response TDDFT 2 - indexed version
- Induced density oscillations and electric near field from TDDFT
- Circular dichroism with real-time TDDFT
- Radiation-Reaction: Self-consistent Light-Matter interaction with real-time TDDFT
- Calculation of optical spectra with TDDFT
- Linear dielectric response of an extended system
- Nonlinear optical response of an extended system
- The Quantum Electrostatic Heterostructure (QEH) model
- Electron energy loss spectrum of silver
- Quasi-particle spectrum in the GW approximation: tutorial
- The Bethe-Salpeter equation and Excitons
- Simulating an XAS spectrum
- Vibrational properties
- Wave functions and charge transfer
- Local Orbitals
- Frequently asked exercise questions
- Atomic PAW Setups
- Setup releases
- Periodic table
- Installation of PAW datasets
- Tests
- Advanced topics
- Setup generation
- XML specification for atomic PAW datasets
- Introduction
- What defines a dataset?
- Specification of the elements
- The header
- A comment
- The
atom
element - Exchange-correlation
- Generator
- Energies
- Valence states
- Radial grids
- Shape function for the compensation charge
- Radial functions
- Zero potential
- The Kresse-Joubert formulation
- Kinetic energy differences
- Meta-GGA
- Exact exchange integrals
- Optional elements
- End of the dataset
- How to use the datasets
- Plotting the radial functions
- References
- Release notes
- Git master branch
- Version 22.8.0
- Version 22.1.0
- Version 21.6.0
- Version 21.1.0
- Version 20.10.0
- Version 20.1.0
- Version 19.8.1
- Version 19.8.0
- Version 1.5.2
- Version 1.5.1
- Version 1.5.0
- Version 1.4.0
- Version 1.3.0
- Version 1.2.0
- Version 1.1.0
- Version 1.0.0
- Version 0.11.0
- Version 0.10.0
- Version 0.9.0
- Version 0.8.0
- Version 0.7.2
- Version 0.7
- Version 0.6
- Version 0.5
- Version 0.4
- Version 0.3
- Contact
- Frequently Asked Questions
- Development
- Development workflow
- Development topics
- Code Overview
- Overview
- Developers guide to GPAW
- GPAW enhancement proposals
- The GPAW calculator object
GPAW
GPAW.add_wannier_correction()
GPAW.attach()
GPAW.band_structure()
GPAW.calculate()
GPAW.calculate_numerical_forces()
GPAW.calculate_numerical_stress()
GPAW.calculate_properties()
GPAW.call_observers()
GPAW.check_state()
GPAW.converge_wave_functions()
GPAW.default_parameters
GPAW.discard_results_on_any_change
GPAW.dos()
GPAW.embed()
GPAW.estimate_memory()
GPAW.fixed_density()
GPAW.get_all_electron_density()
GPAW.get_all_electron_ldos()
GPAW.get_atomic_electrostatic_potentials()
GPAW.get_bz_k_points()
GPAW.get_bz_to_ibz_map()
GPAW.get_dos()
GPAW.get_effective_potential()
GPAW.get_eigenvalues()
GPAW.get_electrostatic_corrections()
GPAW.get_electrostatic_potential()
GPAW.get_fermi_level()
GPAW.get_fermi_levels()
GPAW.get_homo_lumo()
GPAW.get_ibz_k_points()
GPAW.get_k_point_weights()
GPAW.get_lcao_dos()
GPAW.get_magnetic_moments()
GPAW.get_number_of_bands()
GPAW.get_occupation_numbers()
GPAW.get_orbital_ldos()
GPAW.get_projections()
GPAW.get_property()
GPAW.get_pseudo_density()
GPAW.get_pseudo_density_corrections()
GPAW.get_pseudo_valence_density()
GPAW.get_pseudo_wave_function()
GPAW.get_spin_polarized()
GPAW.get_stresses()
GPAW.get_wannier_integrals()
GPAW.get_wannier_localization_matrix()
GPAW.get_wigner_seitz_densities()
GPAW.get_wigner_seitz_ldos()
GPAW.get_xc_functional()
GPAW.icalculate()
GPAW.ignored_changes
GPAW.implemented_properties
GPAW.initial_wannier()
GPAW.initialize()
GPAW.initialize_positions()
GPAW.linearize_to_xc()
GPAW.new()
GPAW.print_memory_estimate()
GPAW.read()
GPAW.reset()
GPAW.set()
GPAW.set_label()
GPAW.set_positions()
GPAW.write()
- Symmetry
- Wave functions
WaveFunctions
WaveFunctions.calculate_atomic_density_matrices()
WaveFunctions.calculate_atomic_density_matrices_with_occupation()
WaveFunctions.calculate_density_contribution()
WaveFunctions.collect_array()
WaveFunctions.collect_auxiliary()
WaveFunctions.collect_projections()
WaveFunctions.get_homo_lumo()
WaveFunctions.get_orbital_density_matrix()
WaveFunctions.get_wave_function_array()
FDWaveFunctions
PWWaveFunctions
PW
LCAOWaveFunctions
KPoint
Eigensolver
- Atomic PAW setups
- Density and hamiltonian objects
Density
Density.calculate_pseudo_density()
Density.get_all_electron_density()
Density.get_correction()
Density.get_spin_contamination()
Density.initialize_directly_from_arrays()
Density.initialize_from_atomic_densities()
Density.initialize_from_other_density()
Density.initialize_from_wavefunctions()
Density.normalize()
Hamiltonian
- MPI communicators
_Communicator
_Communicator.abort()
_Communicator.all_gather()
_Communicator.alltoallv()
_Communicator.barrier()
_Communicator.broadcast()
_Communicator.compare()
_Communicator.gather()
_Communicator.get_c_object()
_Communicator.get_members()
_Communicator.max()
_Communicator.min()
_Communicator.name()
_Communicator.new_communicator()
_Communicator.product()
_Communicator.scatter()
_Communicator.sum()
_Communicator.test()
_Communicator.testall()
_Communicator.translate_ranks()
_Communicator.wait()
_Communicator.waitall()
send()
receive()
broadcast_array()
broadcast_exception()
- Miscellaneous objects and functions
LocalizedFunctionsCollection
BasisFunctions
BasisFunctions.add_to_density()
BasisFunctions.calculate_force_contribution()
BasisFunctions.calculate_potential_matrices()
BasisFunctions.calculate_potential_matrix()
BasisFunctions.calculate_potential_matrix_derivative()
BasisFunctions.construct_density()
BasisFunctions.integrate2()
BasisFunctions.lcao_to_grid()
Spline
FDPoissonSolver
XCFunctional
GGA
calculate_forces()
GridDescriptor
GridDescriptor.bytecount()
GridDescriptor.calculate_dipole_moment()
GridDescriptor.coarsen()
GridDescriptor.collect()
GridDescriptor.coords()
GridDescriptor.dipole_moment()
GridDescriptor.distribute()
GridDescriptor.empty()
GridDescriptor.find_center()
GridDescriptor.get_boxes()
GridDescriptor.get_grid_point_coordinates()
GridDescriptor.get_grid_point_distance_vectors()
GridDescriptor.get_nearest_grid_point()
GridDescriptor.integrate()
GridDescriptor.interpolate_grid_points()
GridDescriptor.is_my_grid_point()
GridDescriptor.new_descriptor()
GridDescriptor.plane_wave()
GridDescriptor.refine()
GridDescriptor.wannier_matrix()
GridDescriptor.zero_pad()
GridDescriptor.zeros()
SCFLoop
BandDescriptor
BZWaveFunctions
WaveFunction
KPointDescriptor
KPointDescriptor.collect()
KPointDescriptor.copy()
KPointDescriptor.create_k_points()
KPointDescriptor.find_ibzkpt()
KPointDescriptor.find_k_plus_q()
KPointDescriptor.get_bz_q_points()
KPointDescriptor.get_count()
KPointDescriptor.get_ibz_q_points()
KPointDescriptor.get_indices()
KPointDescriptor.get_offset()
KPointDescriptor.get_rank_and_index()
KPointDescriptor.get_transform_wavefunction_index()
KPointDescriptor.set_communicator()
KPointDescriptor.set_symmetry()
KPointDescriptor.transform_wave_function()
KPointDescriptor.where_is_q()
KPointDescriptor.who_has()
Projections
- The GPAW logo
- Statistics
- Contributing to GPAW
- Summer schools
- CAMd Summer School 2022
- Summer school exercises in Jupyter notebooks
- The computer system
- Instructions
- Windows users
- Mac and Linux users
- iPad users (not recommended)
- Introductory slides
- Projects
- Instructions for instructors
- CAMd Summer School 2018
- CAMd Summer School 2016
- CAMd Summer School 2014
- CAMd Summer school 2012
- CAMd Summer school 2010
- CAMd Summer school 2008
- MobaXTerm for Windows users
- CAMd Summer School 2022
- Workshops
- Bugs!