1 ////////////////////////////////////////////////////////////////////////////////////// 2 // This file is distributed under the University of Illinois/NCSA Open Source License. 3 // See LICENSE file in top directory for details. 4 // 5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers. 6 // 7 // File developed by: Jordan E. Vincent, University of Illinois at Urbana-Champaign 8 // Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign 9 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign 10 // Miguel Morales, moralessilva2@llnl.gov, Lawrence Livermore National Laboratory 11 // Anouar Benali, benali@anl.gov, Argonne National Laboratory 12 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory 13 // 14 // File created by: Jordan E. Vincent, University of Illinois at Urbana-Champaign 15 ////////////////////////////////////////////////////////////////////////////////////// 16 17 18 #ifndef QMCPLUSPLUS_TOOLS_EXTERNAL_GAUSSIANPARSERBASE_H 19 #define QMCPLUSPLUS_TOOLS_EXTERNAL_GAUSSIANPARSERBASE_H 20 #include <iostream> 21 #include <cstdlib> 22 #include <sstream> 23 #include <iomanip> 24 #include <vector> 25 #include <map> 26 #include "OhmmsData/OhmmsElementBase.h" 27 #include "Utilities/SimpleParser.h" 28 #include "Particle/ParticleSet.h" 29 #include "Numerics/HDFSTLAttrib.h" 30 #include "OhmmsData/HDFStringAttrib.h" 31 #include "hdf/hdf_archive.h" 32 33 using namespace qmcplusplus; 34 35 struct QMCGaussianParserBase 36 { 37 typedef double value_type; 38 typedef ParticleSet::SingleParticlePos_t SingleParticlePos_t; 39 40 bool multideterminant; 41 bool multidetH5; 42 bool BohrUnit; 43 bool SpinRestricted; 44 bool Periodicity; 45 bool UseHDF5; 46 bool PBC; 47 bool production; 48 bool zeroCI; 49 bool orderByExcitation; 50 bool addJastrow; 51 bool addJastrow3Body; 52 bool ECP; 53 bool debug; 54 bool Structure; 55 bool DoCusp; 56 bool FixValence; 57 bool singledetH5; 58 bool optDetCoeffs; 59 bool usingCSF; 60 int IonChargeIndex; 61 int ValenceChargeIndex; 62 int AtomicNumberIndex; 63 int NumberOfAtoms; 64 int NumberOfEls; 65 // targeted state number 66 int target_state; 67 int SpinMultiplicity; 68 int NumberOfAlpha, NumberOfBeta; 69 int SizeOfBasisSet; 70 // mmorales: number of Molecular orbitals, not always equal to SizeOfBasisSet 71 int numMO, readNO, readGuess, numMO2print; 72 int ci_size, ci_nca, ci_ncb, ci_nea, ci_neb, ci_nstates; 73 int NbKpts; 74 int nbexcitedstates; 75 double ci_threshold; 76 77 78 std::vector<double> STwist_Coord; //Super Twist Coordinates 79 80 81 std::string Title; 82 std::string basisType; 83 std::string basisName; 84 std::string Normalized; 85 std::string CurrentCenter; 86 std::string outputFile; 87 std::string angular_type; 88 std::string h5file; 89 std::string multih5file; 90 std::string WFS_name; 91 std::string CodeName; 92 ParticleSet IonSystem; 93 94 95 std::vector<std::string> GroupName; 96 97 std::vector<int> gShell, gNumber, gBound; 98 std::vector<int> Occ_alpha, Occ_beta; 99 std::vector<value_type> Qv; 100 std::vector<value_type> gExp, gC0, gC1; 101 std::vector<value_type> EigVal_alpha, EigVal_beta; 102 std::vector<value_type> EigVec; 103 //std::vector<GaussianCombo<value_type> > gExp, gC0, gC1; 104 //std::string EigVecU, EigVecD; 105 xmlNodePtr gridPtr; 106 std::vector<std::string> CIalpha, CIbeta; 107 std::vector<std::string> CSFocc; 108 std::vector<std::vector<std::string>> CSFalpha, CSFbeta; 109 std::vector<std::vector<double>> CSFexpansion; 110 std::vector<double> CIcoeff; 111 std::vector<double> X, Y, Z; //LAttice vectors for PBC 112 std::vector<int> Image; 113 114 std::vector<int> CIexcitLVL; 115 116 std::vector<std::pair<int, double>> coeff2csf; 117 118 QMCGaussianParserBase(); 119 QMCGaussianParserBase(int argc, char** argv); 120 121 void setOccupationNumbers(); 122 123 void createGridNode(int argc, char** argv); 124 125 void createSPOSets(xmlNodePtr, xmlNodePtr); 126 void createSPOSetsH5(xmlNodePtr, xmlNodePtr); 127 void PrepareSPOSetsFromH5(xmlNodePtr, xmlNodePtr); 128 xmlNodePtr createElectronSet(const std::string& ion_tag); 129 xmlNodePtr createIonSet(); 130 xmlNodePtr createCell(); 131 xmlNodePtr createHamiltonian(const std::string& ion_tag, const std::string& psi_tag); 132 xmlNodePtr createBasisSet(); 133 xmlNodePtr createBasisSetWithHDF5(); 134 xmlNodePtr createCenter(int iat, int _off); 135 void createCenterH5(int iat, int _off, int numelem); 136 void createShell(int n, int ig, int off_, xmlNodePtr abasis); 137 void createShellH5(int n, int ig, int off_, int numelem); 138 139 xmlNodePtr createDeterminantSet(); 140 xmlNodePtr createMultiDeterminantSet(); 141 xmlNodePtr createDeterminantSetWithHDF5(); 142 xmlNodePtr createMultiDeterminantSetFromH5(); 143 xmlNodePtr createMultiDeterminantSetCIHDF5(); 144 xmlNodePtr PrepareDeterminantSetFromHDF5(); 145 xmlNodePtr createJ3(); 146 xmlNodePtr createJ2(); 147 xmlNodePtr createJ1(); 148 149 xmlNodePtr parameter(xmlNodePtr Parent, std::string Mypara, std::string a); 150 151 int numberOfExcitationsCSF(std::string&); 152 153 virtual void parse(const std::string& fname) = 0; 154 155 virtual void dumpPBC(const std::string& psi_tag, const std::string& ion_tag); 156 157 virtual void dump(const std::string& psi_tag, const std::string& ion_tag); 158 159 void dumpStdInput(const std::string& psi_tag, const std::string& ion_tag); 160 161 void dumpStdInputProd(const std::string& psi_tag, const std::string& ion_tag); 162 163 164 //static std::vector<std::string> IonName; 165 static std::map<int, std::string> IonName; 166 167 static std::vector<std::string> gShellType; 168 static std::vector<int> gShellID; 169 170 static void init(); 171 }; 172 #endif 173