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: Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign 8 // Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign 9 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory 10 // 11 // File created by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign 12 ////////////////////////////////////////////////////////////////////////////////////// 13 14 15 #ifndef QMCPLUSPLUS_COSTFUNCTION_H 16 #define QMCPLUSPLUS_COSTFUNCTION_H 17 18 #include "QMCDrivers/WFOpt/QMCCostFunctionBase.h" 19 #include "QMCDrivers/CloneManager.h" 20 #include "QMCWaveFunctions/OrbitalSetTraits.h" 21 22 namespace qmcplusplus 23 { 24 /** @ingroup QMCDrivers 25 * @brief Implements wave-function optimization 26 * 27 * Optimization by correlated sampling method with configurations 28 * generated from VMC running on a single thread. 29 */ 30 class QMCCostFunction : public QMCCostFunctionBase, public CloneManager 31 { 32 public: 33 ///Constructor. 34 QMCCostFunction(MCWalkerConfiguration& w, TrialWaveFunction& psi, QMCHamiltonian& h, Communicate* comm); 35 36 ///Destructor 37 ~QMCCostFunction(); 38 39 void getConfigurations(const std::string& aroot) override; 40 void checkConfigurations() override; 41 #ifdef HAVE_LMY_ENGINE 42 void engine_checkConfigurations(cqmc::engine::LMYEngine<Return_t>* EngineObj, 43 DescentEngine& descentEngineObj, 44 const std::string& MinMethod) override; 45 #endif 46 47 48 void resetPsi(bool final_reset = false) override; 49 void GradCost(std::vector<Return_rt>& PGradient, const std::vector<Return_rt>& PM, Return_rt FiniteDiff = 0) override; 50 Return_rt fillOverlapHamiltonianMatrices(Matrix<Return_rt>& Left, Matrix<Return_rt>& Right) override; 51 52 protected: 53 std::vector<QMCHamiltonian*> H_KE_Node; 54 std::vector<Matrix<Return_rt>*> RecordsOnNode; 55 56 /** Temp derivative properties and Hderivative properties of all the walkers 57 */ 58 std::vector<Matrix<Return_rt>*> DerivRecords; 59 std::vector<Matrix<Return_rt>*> HDerivRecords; 60 Return_rt CSWeight; 61 62 Return_rt correlatedSampling(bool needGrad = true) override; 63 64 #ifdef HAVE_LMY_ENGINE 65 int total_samples(); 66 Return_rt LMYEngineCost_detail(cqmc::engine::LMYEngine<Return_t>* EngineObj) override; 67 #endif 68 }; 69 } // namespace qmcplusplus 70 #endif 71