ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
#include <map>
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <cassert>
#include <algorithm>
#include "source_base/formatter.h"
#include "source_base/tool_quit.h"
#include "source_hamilt/module_vdw/vdwd3_parameters.h"
Functions | |
std::vector< double > | _search_impl (const std::string &xc, const std::map< std::string, std::vector< double > > &dict) |
void | _search (const std::string &xc, const std::string &method, std::vector< double > ¶m) |
Get the dftd3 params object. dftd3 method fall back: xc-bjm -> xc-bj -> pbe-bj xc-zerom -> xc-zero -> pbe-zero. | |
Variables | |
const std::pair< const char *, std::vector< double > > | bj_data [] |
const std::map< std::string, std::vector< double > > | bj = {std::begin(bj_data), std::end(bj_data)} |
const std::pair< const char *, std::vector< double > > | zero_data [] |
const std::map< std::string, std::vector< double > > | zero = {std::begin(zero_data), std::end(zero_data)} |
const std::pair< const char *, std::vector< double > > | bjm_data [] |
const std::map< std::string, std::vector< double > > | bjm = {std::begin(bjm_data), std::end(bjm_data)} |
const std::pair< const char *, std::vector< double > > | zerom_data [] |
const std::map< std::string, std::vector< double > > | zerom = {std::begin(zerom_data), std::end(zerom_data)} |
const std::pair< const char *, std::vector< double > > | op_data [] |
const std::map< std::string, std::vector< double > > | op = {std::begin(op_data), std::end(op_data)} |
void _search | ( | const std::string & | xc, |
const std::string & | method, | ||
std::vector< double > & | param | ||
) |
Get the dftd3 params object. dftd3 method fall back: xc-bjm -> xc-bj -> pbe-bj xc-zerom -> xc-zero -> pbe-zero.
xc | the functional name |
d3method | the d3 method, can be "bj", "zero-damping", "bj-modified", "zero-damping-modified", "op" |
param | the dftd3 parameters, ALL_KEYS = {'s6', 'rs6', 'a1', 's8', 'rs8', 'a2', 's9', 'alp', 'bet'} |
std::vector< double > _search_impl | ( | const std::string & | xc, |
const std::map< std::string, std::vector< double > > & | dict | ||
) |
const std::pair<const char*, std::vector<double> > bj_data[] |
This file stores XC dependent DFT-D3 parameters for Grimme-D3 dispersion correction.
Supported forms:
DFT-D3(0): zero-damping DFT-D3(BJ): Becke-Johnson damping DFT-D3M(0): zero-damping with modified damping function DFT-D3M(BJ): Becke-Johnson damping with modified damping function
A detailed introduction of undamped, and BJ damping, the modified damping can be found in DFT-D3 software manual, see: https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/man.pdf
Other excellent learning materials (where you can find expression of both DFT-D2 and DFT-D3): DFT-D2: https://www.vasp.at/wiki/index.php/DFT-D2 DFT-D3: https://www.vasp.at/wiki/index.php/DFT-D3
call function DFTD3::search(xc, method, param) to get the DFT-D3 parameters for the given XC functional. The obtained param should be a std::vector<double>, in which the first 9 elements are the DFT-D3 parameters: 's6', 'sr6', 'a1', 's8', 'sr8', 'a2', 's9', 'alp', 'bet'
If the requested D3 parameters of XC are not found, then the ABACUS will WARNING_QUIT with the message "DFT-D3 parameters for XC not found".
there are other kinds of dispersion correction, such as the xc VV09, VV10, and rVV10, and the vdw-DF family nonlocal dispersion correction. They will be mixed directly with the correlation and exchange part, which act differently from the DFT-D2 and D3 methods.
(thanks for help and discussion with @hhebrewsnabla and @moolawooda) wB97 XC family is special, their DFT-D3 supports are quite complicated.
wB97 long-range exx with B97 wB97X wB97 with additional short-range exx wB97X-D wB97X_D from libXC with DFTD2, not in DFTD3 framework wB97X-D3 wB97X_D3 from libXC with DFTD3(0) wB97X-D3(BJ) wB97X_V from libXC with DFTD3(BJ) wB97X-V with VV10, not in DFTD3 framework wB97M-V with VV10, not in DFTD3 framework
Recommended: http://bbs.keinsci.com/thread-19076-1-1.html Related information from Pyscf Github repo: https://github.com/pyscf/pyscf/issues/2069
const std::pair<const char*, std::vector<double> > bjm_data[] |
const std::pair<const char*, std::vector<double> > op_data[] |
const std::map<std::string, std::vector<double> > zero = {std::begin(zero_data), std::end(zero_data)} |
const std::pair<const char*, std::vector<double> > zero_data[] |
const std::map<std::string, std::vector<double> > zerom = {std::begin(zerom_data), std::end(zerom_data)} |
const std::pair<const char*, std::vector<double> > zerom_data[] |