資源簡介
VASP+BEEF
beef-vdW全稱為Bayesian error estimation functional with van der Waals correlation, 是DTU在2012年做出來的一個新泛函,目前和Quantum Espresso,VASP,GPAW均有接口。具體的編譯過程可以參考SUNCAT - Software和 BEEF Functional Software。
把beef編譯到VASP里,首先要編譯libbeef
1 編譯和安裝BEEF
$ cd libbeef
$ chmod +x configure
$ ./configure CC=mpicc --prefix=/opt/software/beef
$ make
$ make install
2 修改VASP makefile.include
makefile.include需要稍作修改(CPP_OPTIONS里添加-Dlibbeeef,LLIBS里添加-Lpathtolibbeef -lbeef)
CPP_OPTIONS= -DMPI -DHOST=\"IFC91_ompi\" -DIFC \
-DCACHE_SIZE=4000 -DPGF90 -Davoidalloc \
-DMPI_BLOCK=8000 -DscaLAPACK -Duse_collective \
-DnoAugXCmeta -Duse_bse_te \
-Duse_shmem -Dtbdyn -Dlibbeef
......
BEEF = -L/opt/software/beef/lib -lbeef
......
LLIBS = $(SCALAPACK) $(LAPACK) $(BLAS) $(BEEF)
......
3 編譯VASP
$ make
beef-vdW全稱為Bayesian error estimation functional with van der Waals correlation, 是DTU在2012年做出來的一個新泛函,目前和Quantum Espresso,VASP,GPAW均有接口。具體的編譯過程可以參考SUNCAT - Software和 BEEF Functional Software。
把beef編譯到VASP里,首先要編譯libbeef
1 編譯和安裝BEEF
$ cd libbeef
$ chmod +x configure
$ ./configure CC=mpicc --prefix=/opt/software/beef
$ make
$ make install
2 修改VASP makefile.include
makefile.include需要稍作修改(CPP_OPTIONS里添加-Dlibbeeef,LLIBS里添加-Lpathtolibbeef -lbeef)
CPP_OPTIONS= -DMPI -DHOST=\"IFC91_ompi\" -DIFC \
-DCACHE_SIZE=4000 -DPGF90 -Davoidalloc \
-DMPI_BLOCK=8000 -DscaLAPACK -Duse_collective \
-DnoAugXCmeta -Duse_bse_te \
-Duse_shmem -Dtbdyn -Dlibbeef
......
BEEF = -L/opt/software/beef/lib -lbeef
......
LLIBS = $(SCALAPACK) $(LAPACK) $(BLAS) $(BEEF)
......
3 編譯VASP
$ make
代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?nbuf?65536
static?inline?double?sq(double?x)?{return?x*x;}
void?fileerror(const?char?*filename?FILE?*file)
{
????fclose(file);
????fprintf(stderr?“error?reading?file?%s\n“?filename);
????exit(4);
}
void?openerror(const?char?*filename)
{
????fprintf(stderr?“error?opening?file?%s\n“?filename);
????exit(3);
}
FILE?*openandfindlastbeefens(const?char?*filename?char?*buf)
{
????FILE?*f;
????unsigned?long?int?ulastu;
????
????f?=?fopen(filename?“r“);
????if(!f)?openerror(filename);
????
????u?=?1;
????while(fgets(bufnbuff)?&&?!strstr(buf“BEEFens“))?u++;
????if(!strstr(buf“ensemble?energies“))?fileerror(filename?f);
????do?{
lastu?=?u;
u++;
while(fgets(bufnbuff)?&&?!strstr(buf“BEEFens“))?u++;
????}?while(strstr(buf“ensemble?energies“));
????
????if(fseek(f0SEEK_SET))?fileerror(filename?f);
????
????for(u=0;u ????
????return?f;
}
int?main(int?argc?char?**argv)
{
????char?buf[nbuf];
????double?*samples;
????FILE?*dftout;
????double?de;
????int?nsamples;
????if(argc?3)
????{
fprintf(stderr?“usage:?%s?factor1?outputfile1?...?factorN?outputfileN\n“?argv[0]);
return?1;
????}
????dftout?=?openandfindlastbeefens(argv[2]?buf);
????nsamples?=?strtol(strstr(buf“BEEFens“)+7?NULL?10);
????samples?=?(double?*)?malloc(nsamples*sizeof(double));
????if(!samples)
????{
fclose(dftout);
fputs(“not?enough?memory?for?ensemble?energies\n“?stderr);
return?2;
????}
????d?=?strtod(argv[1]?NULL);
????for(int?j=0;j ????{
if(!fgets(bufnbufdftout))?fileerror(argv[2]?dftout);
samples[j]?=?d*strtod(buf?NULL);
????}
????fclose(dftout);
????for(int?i=3;i ????{
d?=?strtod(argv[i]?NULL);
dftout?=?openandfindlastbeefens(argv[i+1]?buf);
for(int?j=0;j {
????if(!fgets(bufnbufdftout))?fileerror(argv[i+1]?dftout);
????samples[j]?+=?d*strtod(buf?NULL);
}
fclose(dftout);
????}
????d?=?samples[0];
????for(int?i=1;i ????d?/=?(double)?nsamples;
????e?=?sq(samples[0]-d);
????for(int?i=1;i ????free(samples);
????printf(“%.5g?standard?deviation\n“?sqrt(e/nsamples));
????return?0;
}
評論
共有 條評論