Open jan-janssen opened 2 years ago
The FFT grid can be specified in the &SYSTEM
section by providing values for nr1, nr2, nr3
(hard grid) or nr1s, nr2s, nr3s
(smooth grid) in pw.x
calculations - see
https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm294
_Originally posted by @niklassiemer in https://github.com/pyiron/pyiron_contrib/issues/287#issuecomment-992847301_
Comment from Christoph:
in SPHInX hat man volle Kontrolle über die FFT-Gitter. Dafür gibt es zwei Möglichkeiten: in
basis {}
kann man entweder
mesh = [NX,NY,NZ];
auf das gewünschte mesh setzen, oder per
meshAccuracy = <factor>;
relativ zum Standard-Gitter skalieren. (1.2 hieße z.B. ein FFT-Mesh was mindestens 1.2 mal größer ist, als das Standardmesh). Das SPHInX-Standardmesh ist so gewählt, das lineare aliasing-Effekte in der Elektronendichte nicht auftreten (im Gegensatz zu VASP, das im Normalmodus ein 80%-Gitter verwendet).
Neben dem plane-wave-cutoff der ebenen Wellen für die Wellenfunktionen kann man sogar den cutoff für die Dichte/Potentiale separat wählen (
gCut
), um den Default (gCut = 4 x eCut
) zu überschreiben.Das xc-Mesh ist grundsätzlich doppelt so fein (8x Punkte) wie das normale FFT-Mesh, das kann man aber auch im PAWHamiltonian individuell einstellen (
xcMesh
-Gruppe, Details im Manual). Hintergrund ist, dass xc nichtlinear ist und deswegen das lineare sampling Theorem nicht gilt. In der Praxis hat sich das doppelte xc-Mesh als ausreichend für die meisten Anwendungen erwiesen, und ist nicht so teuer, das Fine-Tuning viel brächte.Zuguterletzt ist die Implementation der Augmentation-charges im reziproken Raum, sodass Aliasing-Effekte im Normalfall von vornherein nicht auftreten. Im Gegensatz dazu setzt VASP die Ladungen im Realraum auf, wodurch die Gittergröße viel problematischer ist.
Lange Rede kurzer Sinn: SPHInX ist an der Stelle eh viel besser als VASP aufgestellt. Wenn man fein-tunen will, dann am besten gezielt.
I presume that his strongest emphasis should be on the last phrase 😎
def set_fft_mesh(self, nx=None, ny=None, nz=None, mesh_accuracy=1)
def set_xc_mesh(self, nxf=None, nyf=None, nzf=None, mesh_accuracy=1)
Here meshaccuracy=1
equals Accurate
for VASP and analogously meshaccuracy=0.75
equals Normal
. https://www.vasp.at/wiki/index.php/PREC and https://sxrepo.mpie.de/attachments/download/61/sphinx-manual-2.7.pdf
Summary
Currently only VASP implements an
set_fft_mesh(self, nx=None, ny=None, nz=None)
function. Still it would be great to extend this functionality to other DFT codes and define a genericset_fft_mesh()
function. In addition the arguments could be either relative or absolute and it might be more comfortable to use a list rather than three individual arguments.Detailed Description
Different meshes in VASP:
Further Information, Files, and Links