QMCPACK
DiracParser.h
Go to the documentation of this file.
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) 2020 QMCPACK developers.
6 //
7 // File developed by: Cody A. Melton, cmelton@sandia.gov, Sandia National Laboratories
8 //
9 // File created by: Cody A. Melton, cmelton@sandia.gov, Sandia National Laboratories
10 //////////////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef QMCPLUSPLUS_TOOLS_DIRAC_OUT_H
13 #define QMCPLUSPLUS_TOOLS_DIRAC_OUT_H
14 
16 #include <string>
17 #include <map>
18 #include <cmath>
19 
20 using primBasis = std::pair<double, double>;
21 
22 struct basisGroup
23 {
24  int l;
25  int n;
26  std::vector<primBasis> radfuncs;
27 };
28 
29 struct atBasisSet
30 {
31  std::string elementType;
32  std::vector<basisGroup> basisGroups;
33 };
34 
35 enum class OrbType
36 {
37  CORE,
38  ACTIVE,
39  VIRTUAL
40 };
41 
42 struct fermIrrep
43 {
44  std::string label;
45  std::vector<double> energies;
46  std::vector<OrbType> orbtypes;
47  std::vector<std::vector<std::vector<double>>> spinor_mo_coeffs; //mo,ao,up_r,up_i,dn_r,dn_i
48  fermIrrep(std::string label_in, int nSpinors, int numAO);
50  int get_num_spinors() { return energies.size(); }
51  int get_num_ao() { return spinor_mo_coeffs[0].size(); }
52  std::string get_label() { return label; }
53 };
54 
55 struct ciState
56 {
57  double energy;
58  std::vector<std::string> occstrings;
59  std::vector<double> coeffs;
60 };
61 
62 class cosciRep
63 {
64 public:
65  cosciRep(std::string in_label, int nstates);
66  std::string label;
67  std::vector<ciState> states;
68  void printInfo(std::ostream& os, int& tot_state_count);
69 };
70 
72 {
73  using normMapType = std::map<std::string, double>;
74 
75 public:
76  DiracParser(int argc, char** argv);
77  void parse(const std::string& fname) override;
78 
79 private:
80  void dumpHDF5(const std::string& fname);
81  void getGeometry(std::istream& is);
82  void getGaussianCenters(std::istream& is);
83  void getSpinors(std::istream& is);
84  void getWF(std::istream& is);
85  void getCOSCI(std::istream& is);
86  void getSingleDet(std::istream& is);
87  std::streampos pivot_begin;
89  int version;
90  std::string aline;
91  std::vector<atBasisSet> basisset;
93 
94  std::vector<fermIrrep> irreps;
95  std::vector<fermIrrep> kp_irreps;
96  std::vector<cosciRep> cosciReps;
97 
98  void parseCOSCIOrbInfo(std::istream& is, const int irrep_idx, OrbType type);
99  int sortAndStoreCOSCIOrbs(OrbType type, const int spinor_component);
100 };
101 
102 
103 #endif
void dumpHDF5(const std::string &fname)
std::map< std::string, double > normMapType
Definition: DiracParser.h:73
int NumberOfSpecies
Definition: DiracParser.h:88
std::vector< cosciRep > cosciReps
Definition: DiracParser.h:96
void parse(const std::string &fname) override
std::string label
Definition: DiracParser.h:66
cosciRep(std::string in_label, int nstates)
Definition: DiracParser.cpp:55
fermIrrep(std::string label_in, int nSpinors, int numAO)
Definition: DiracParser.cpp:20
std::vector< std::vector< std::vector< double > > > spinor_mo_coeffs
Definition: DiracParser.h:47
void getWF(std::istream &is)
std::string get_label()
Definition: DiracParser.h:52
std::vector< ciState > states
Definition: DiracParser.h:67
std::vector< std::string > occstrings
Definition: DiracParser.h:58
void getGeometry(std::istream &is)
std::vector< double > coeffs
Definition: DiracParser.h:59
OrbType
Definition: DiracParser.h:35
double energy
Definition: DiracParser.h:57
std::vector< primBasis > radfuncs
Definition: DiracParser.h:26
void getSingleDet(std::istream &is)
fermIrrep generate_kramers_pair()
Definition: DiracParser.cpp:33
std::vector< OrbType > orbtypes
Definition: DiracParser.h:46
int sortAndStoreCOSCIOrbs(OrbType type, const int spinor_component)
std::string elementType
Definition: DiracParser.h:31
std::streampos pivot_begin
Definition: DiracParser.h:87
normMapType normMap
Definition: DiracParser.h:92
std::vector< double > energies
Definition: DiracParser.h:45
std::vector< basisGroup > basisGroups
Definition: DiracParser.h:32
void getSpinors(std::istream &is)
void getCOSCI(std::istream &is)
int get_num_ao()
Definition: DiracParser.h:51
DiracParser(int argc, char **argv)
Definition: DiracParser.cpp:68
void printInfo(std::ostream &os, int &tot_state_count)
Definition: DiracParser.cpp:57
std::pair< double, double > primBasis
Definition: DiracParser.h:20
void getGaussianCenters(std::istream &is)
std::vector< atBasisSet > basisset
Definition: DiracParser.h:91
std::string aline
Definition: DiracParser.h:90
std::vector< fermIrrep > kp_irreps
Definition: DiracParser.h:95
int get_num_spinors()
Definition: DiracParser.h:50
void parseCOSCIOrbInfo(std::istream &is, const int irrep_idx, OrbType type)
std::string label
Definition: DiracParser.h:44
std::vector< fermIrrep > irreps
Definition: DiracParser.h:94