#ifndef _mpqcin_h #define _mpqcin_h #include #include #include #include class MPQCInFlexLexer; namespace sc { class IPV2; template class MPQCInDatum { int set_; T val_; public: MPQCInDatum(const T&v): val_(v), set_(0) {} const T &operator =(const T&v) { set_ = 1; val_ = v; return val_; } void reset(const T &val) { set_ = 0; val_ = val; } int set() const { return set_; } T val() const { return val_; } }; class MPQCIn { MPQCInFlexLexer *lexer_; Ref mol_; MPQCInDatum gradient_; MPQCInDatum frequencies_; MPQCInDatum optimize_; MPQCInDatum mult_; MPQCInDatum redund_coor_; MPQCInDatum opt_type_; MPQCInDatum restart_; MPQCInDatum checkpoint_; MPQCInDatum charge_; MPQCInDatum atom_charge_; MPQCInDatum molecule_bohr_; MPQCInDatum basis_; MPQCInDatum auxbasis_; MPQCInDatum method_; MPQCInDatum method_xc_; MPQCInDatum method_grid_; MPQCInDatum symmetry_; MPQCInDatum memory_; MPQCInDatum *> alpha_; MPQCInDatum *> beta_; MPQCInDatum *> docc_; MPQCInDatum *> socc_; MPQCInDatum *> frozen_docc_; MPQCInDatum *> frozen_uocc_; MPQCInDatum method_ebc_; MPQCInDatum method_gbc_; MPQCInDatum method_absmethod_; int nirrep_; void write_energy_object(std::ostream&, const char *keyword, const char *method, const char *basis, int coor, bool &need_cints); void write_basis_object(std::ostream&, const char *keyword, const char *basis); void write_vector(std::ostream &ostrs, const char *keyvalname, const char *name, MPQCInDatum *>&vec, int require_nirrep); static int checking_; public: MPQCIn(); ~MPQCIn(); char *parse_string(const char *s); int check_string(const char *s); int ylex(); int yparse(); void error(const char* s); void error2(const char* s, const char* s2); void yerror(const char* s); void yerror2(const char* s, const char *); void begin_molecule(); void end_molecule(); void add_atom(char *, char *, char *, char *); void set_charge(char *); void set_method(char *); void set_basis(char *); void set_auxbasis(char *); void set_multiplicity(char *); void set_memory(char *); void set_optimize(int); void set_opt_type(int); void set_atom_charge(char *); void set_molecule_unit(char *); void set_method_xc(char *); void set_method_grid(char *); void set_symmetry(char *); void set_redund_coor(int); void set_gradient(int); void set_frequencies(int); void set_restart(int); void set_checkpoint(int); void set_molecule_bohr(int); void set_docc(std::vector *); void set_socc(std::vector *); void set_alpha(std::vector *); void set_beta(std::vector *); void set_frozen_docc(std::vector *); void set_frozen_uocc(std::vector *); std::vector *make_nnivec(std::vector *, char *); void set_method_absmethod(const char *); void set_method_ebc(const char *); void set_method_gbc(const char *); static int checking() { return checking_; } }; } #endif