mpqcin.h

00001 
00002 #ifndef _mpqcin_h
00003 #define _mpqcin_h
00004 
00005 #include <vector>
00006 #include <iostream>
00007 
00008 #include <util/keyval/keyval.h>
00009 #include <chemistry/molecule/molecule.h>
00010 
00011 class MPQCInFlexLexer;
00012 
00013 namespace sc {
00014 
00015 class IPV2;
00016 
00017 template <class T>
00018 class MPQCInDatum {
00019     int set_;
00020     T val_;
00021   public:
00022     MPQCInDatum(const T&v): val_(v), set_(0) {}
00023     const T &operator =(const T&v) { set_ = 1; val_ = v; return val_; }
00024     void reset(const T &val) { set_ = 0; val_ = val; }
00025     int set() const { return set_; }
00026     T val() const { return val_; }
00027 };
00028 
00029 class MPQCIn {
00030     MPQCInFlexLexer *lexer_;
00031     Ref<Molecule> mol_;
00032     MPQCInDatum<int> gradient_;
00033     MPQCInDatum<int> frequencies_;
00034     MPQCInDatum<int> optimize_;
00035     MPQCInDatum<int> mult_;
00036     MPQCInDatum<int> redund_coor_;
00037     MPQCInDatum<int> opt_type_;
00038     MPQCInDatum<int> restart_;
00039     MPQCInDatum<int> checkpoint_;
00040     MPQCInDatum<int> charge_;
00041     MPQCInDatum<int> atom_charge_;
00042     MPQCInDatum<int> molecule_bohr_;
00043     MPQCInDatum<char *> basis_;
00044     MPQCInDatum<char *> auxbasis_;
00045     MPQCInDatum<char *> method_;
00046     MPQCInDatum<char *> method_xc_;
00047     MPQCInDatum<char *> method_grid_;
00048     MPQCInDatum<char *> symmetry_;
00049     MPQCInDatum<char *> memory_;
00050     MPQCInDatum<std::vector<int> *> alpha_;
00051     MPQCInDatum<std::vector<int> *> beta_;
00052     MPQCInDatum<std::vector<int> *> docc_;
00053     MPQCInDatum<std::vector<int> *> socc_;
00054     MPQCInDatum<std::vector<int> *> frozen_docc_;
00055     MPQCInDatum<std::vector<int> *> frozen_uocc_;
00056     MPQCInDatum<const char *> method_ebc_;
00057     MPQCInDatum<const char *> method_gbc_;
00058     MPQCInDatum<const char *> method_absmethod_;
00059 
00060     int nirrep_;
00061 
00062     void write_energy_object(std::ostream&, const char *keyword,
00063                              const char *method,
00064                              const char *basis, int coor,
00065                              bool &need_cints);
00066     void write_basis_object(std::ostream&, const char *keyword,
00067                             const char *basis);
00068     void write_vector(std::ostream &ostrs,
00069                       const char *keyvalname,
00070                       const char *name,
00071                       MPQCInDatum<std::vector<int> *>&vec,
00072                       int require_nirrep);
00073 
00074     static int checking_;
00075   public:
00076     MPQCIn();
00077     ~MPQCIn();
00078 
00079     char *parse_string(const char *s);
00080     int check_string(const char *s);
00081 
00082     int ylex();
00083     int yparse();
00084     void error(const char* s);
00085     void error2(const char* s, const char* s2);
00086     void yerror(const char* s);
00087     void yerror2(const char* s, const char *);
00088 
00089     void begin_molecule();
00090     void end_molecule();
00091     void add_atom(char *, char *, char *, char *);
00092     void set_charge(char *);
00093     void set_method(char *);
00094     void set_basis(char *);
00095     void set_auxbasis(char *);
00096     void set_multiplicity(char *);
00097     void set_memory(char *);
00098     void set_optimize(int);
00099     void set_opt_type(int);
00100     void set_atom_charge(char *);
00101     void set_molecule_unit(char *);
00102     void set_method_xc(char *);
00103     void set_method_grid(char *);
00104     void set_symmetry(char *);
00105     void set_redund_coor(int);
00106     void set_gradient(int);
00107     void set_frequencies(int);
00108     void set_restart(int);
00109     void set_checkpoint(int);
00110     void set_molecule_bohr(int);
00111     void set_docc(std::vector<int> *);
00112     void set_socc(std::vector<int> *);
00113     void set_alpha(std::vector<int> *);
00114     void set_beta(std::vector<int> *);
00115     void set_frozen_docc(std::vector<int> *);
00116     void set_frozen_uocc(std::vector<int> *);
00117     std::vector<int> *make_nnivec(std::vector<int> *, char *);
00118     void set_method_absmethod(const char *);
00119     void set_method_ebc(const char *);
00120     void set_method_gbc(const char *);
00121 
00122     static int checking() { return checking_; }
00123 };
00124 
00125 }
00126 
00127 #endif

Generated at Mon Dec 3 23:23:39 2007 for MPQC 2.3.1 using the documentation package Doxygen 1.5.2.