mbptr12.h
//
// mbptr12.h
//
// Copyright (C) 2001 Edward Valeev
//
// Author: Edward Valeev <edward.valeev@chemistry.gatech.edu>
// Maintainer: EV
//
// This file is part of the SC Toolkit.
//
// The SC Toolkit is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.
//
// The SC Toolkit is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public License
// along with the SC Toolkit; see the file COPYING.LIB. If not, write to
// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
//
// The U.S. Government is granted a limited license as per AL 91-7.
//
#ifndef _chemistry_qc_mbptr12_mbptr12_h
#define _chemistry_qc_mbptr12_mbptr12_h
#ifdef __GNUC__
#pragma interface
#endif
#include <string>
#include <util/misc/compute.h>
#include <util/group/memory.h>
#include <util/group/message.h>
#include <util/group/thread.h>
#include <chemistry/qc/basis/obint.h>
#include <chemistry/qc/basis/tbint.h>
#include <chemistry/qc/scf/scf.h>
#include <chemistry/qc/mbpt/mbpt.h>
#include <chemistry/qc/mbptr12/linearr12.h>
//#include <chemistry/qc/mbptr12/vxb_eval.h>
#include <chemistry/qc/mbptr12/r12int_eval.h>
#include <chemistry/qc/mbptr12/vxb_eval_info.h>
#include <chemistry/qc/mbptr12/mp2r12_energy.h>
#include <chemistry/qc/mbptr12/twobodygrid.h>
namespace sc {
// //////////////////////////////////////////////////////////////////////////
class R12IntEval;
class R12IntEvalInfo;
class MP2R12Energy;
class MBPT2_R12: public MBPT2 {
Ref<R12IntEval> r12eval_; // the R12 intermediates evaluator
Ref<MP2R12Energy> r12a_energy_;
Ref<MP2R12Energy> r12ap_energy_;
Ref<MP2R12Energy> r12b_energy_;
Ref<GaussianBasisSet> aux_basis_; // This is the auxiliary basis set (ABS)
Ref<GaussianBasisSet> vir_basis_; // This is the virtuals basis set (VBS)
Ref<SCVector> epair_0_, epair_1_; // Singlet/triplet pair energies if spin-adapted
// Alpha-beta/alpha-alpha pair energies if spin-orbital
Ref<TwoBodyGrid> twopdm_grid_aa_; // The set of 2 particle positions on which to compute values of alpha-alpha 2-PDM
Ref<TwoBodyGrid> twopdm_grid_ab_; // The set of 2 particle positions on which to compute values of alpha-beta 2-PDM
#define ref_to_mp2r12_acc_ 100.0
double mp2_corr_energy_;
double r12_corr_energy_;
LinearR12::StandardApproximation stdapprox_;
LinearR12::ABSMethod abs_method_;
R12IntEvalInfo::StoreMethod r12ints_method_;
std::string r12ints_file_;
bool gbc_;
bool ebc_;
bool spinadapted_;
bool include_mp1_;
void init_variables_();
// This checks if the integral factory is suitable for R12 calculations
void check_integral_factory_();
// calculate the MP2-R12 energy in std approximations A and A'
void compute_energy_a_();
protected:
// implement the Compute::compute() function,
// overrides MBPT2::compute()
void compute();
public:
MBPT2_R12(StateIn&);
MBPT2_R12(const Ref<KeyVal>&);
~MBPT2_R12();
void save_data_state(StateOut&);
Ref<GaussianBasisSet> aux_basis() const;
Ref<GaussianBasisSet> vir_basis() const;
bool gbc() const;
bool ebc() const;
LinearR12::ABSMethod abs_method() const;
LinearR12::StandardApproximation stdapprox() const;
bool spinadapted() const;
R12IntEvalInfo::StoreMethod r12ints_method() const;
const std::string& r12ints_file() const;
double corr_energy();
double r12_corr_energy();
RefSymmSCMatrix density();
void obsolete();
int gradient_implemented() const;
int value_implemented() const;
void print(std::ostream&o=ExEnv::out0()) const;
};
}
#endif
// Local Variables:
// mode: c++
// c-file-style: "CLJ"
// End: