QMC2 is an efficient diffusion monte-carlo implementation coded in C++ supported by Python scripts.
To install, go to the QMC2 main folder and run
External library dependencies:
- armadillo (http://arma.sourceforge.net)
- boost (http://www.boost.org)
- MPI (can be turned off in the QMC2/src/defines.h)
To access the GUI functionalities you will need PySide
- PySide (apt-get install pyside-tools)
To access automatic plotting and the QMCGui, you will need to get DCViz from
Remember to add it to your Pythonpath!
The qmake project file is available in the QMC2/qmakeQMC2. Please use it :-)
###Adding a new system:
- Implement your potential as a subclass of Potentials. See mainfile on how to add it to the solver.
- Implement your basis functions as BasisFunctions subclasses. Do use the OrbitalGenerator (SymPy) if things are extensive.
- Set up your basis in an Orbitals subclass, see the code for examples. This creates the mapping from single particle states to the reference Slater determinant (for Fermions).
Here follows an example of a mainfile structure.
//... //Initializing the system struct GeneralParams gP; struct SystemObjects sO; struct VariationalParams vP; gP.dim = 3; gP.n_p = 2; sO.SP_basis = new DiTransform(gP, vP); System* system = new Fermions(gP, sO.SP_basis); system->add_potential(new DiAtomCore(gP)); system->add_potential(new Coulomb(gP)); sO.SYSTEM = system; sO.sample_method = new Importance(gP); sO.jastrow = new Pade_Jastrow(gP, vP); //Initializing the solver struct DMCparams dmcParams; dmcParams.dt = 0.001; dmcParams.n_b = 100; dmcParams.n_c = 1000; dmcParams.n_w = 1E5; dmcParams.therm = 1000; struct VMCparams vmcParams; vmcParams.dt = 0.01; vmcParams.n_c = 1E8; vP.alpha = 1.0; vP.beta = 0.5; //initialize parallelization (or not!) struct ParParams parParams; parParams.parallel = false; parParams.node = 0; parParams.n_nodes = 1; parParams.is_master = true; //create a VMC solver object initialized to prepare DMC walkers. //adding an error estimator which computes the variance of the samples. VMC vmc(gP, vmcParams, sO, parParams, dmcParams.n_w); vmc->set_error_estimator(new SimpleVar(parParams)); vmc->run_method(); //and the same for DMC. The last argument is the VMC-object which now have prepped walkers ready. DMC dmc(gP, dmcParams, sO, parParams, &vmc); dmc->set_error_estimator(new SimpleVar(parParams)); dmc->run_method(); //...
For more details regarding closed form expressions for derivatives, parameterspace energy minimization etc, see the actual code for examples and comments.
- Change the input to be parsed by libconfig and not throught the CML. Goal: Deprecate runQMC.py
- Set smarter default values for initialization structs to lower the threshold for seting up main files.
- Get DCViz out of the repository and try/except everywhere it is used (remove dependency)
- Compile different executables for 2 and three dimensions?
- have an option to fix the particle number (and initialize by arma::mat::fixed<N,N>?
- have an option to hardCode and compile a specific iniFile?
- Overall make the cache use more efficient.
- Slater orbitals for atoms (not sure if we need more SymPy here, as everything is given in terms of the hydrogenic ones which are already in) See http://en.wikipedia.org/wiki/Slater-type_orbital
- Hartree-Fock for atoms. Preliminary code is implemented, however, not functioning. Need values for coulumb integrals for p orbitals and so on (higher l)
- OrbitalsWrapper for making a single system into a N-system. Exists already for N=2. Got a scheme for generalizing it, but never got to it..
- Generalize the Wrapper to different types of atoms (not n_p_local = n_p/N, but for heterogeneous distributions). This is just standard coding..