QMCPACK
test_LMYEngine.cpp
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) 2022 QMCPACK developers.
6 ////
7 //// File developed by: Leon Otis, leon_otis@berkeley.edu, University of California Berkeley
8 ////
9 //// File created by: Leon Otis, leon_otis@berkeley.edu, University of California Berkeley
10 ////////////////////////////////////////////////////////////////////////////////////////
11 //
12 
13 #ifdef HAVE_LMY_ENGINE
14 
15 #include "catch.hpp"
16 
17 #include "VariableSet.h"
18 #include "formic/utils/lmyengine/engine.h"
19 #include "formic/utils/lmyengine/var_dependencies.h"
20 
21 namespace qmcplusplus
22 {
25 
26 TEST_CASE("LMYEngine Sample Storage", "[drivers][lm]")
27 {
28  //Construct LM engine as in QMCFixedSampleLinearOptimize for testing
29  formic::VarDeps vdeps(1, std::vector<double>());
30  std::vector<double> shift_scales(3, 1.0);
31  cqmc::engine::LMYEngine<ValueType>* EngineObj =
32  new cqmc::engine::LMYEngine<ValueType>(&vdeps,
33  false, // exact sampling
34  true, // ground state?
35  false, // variance correct,
36  true,
37  true, // print matrices,
38  true, // build matrices
39  false, // spam
40  false, // use var deps?
41  true, // chase lowest
42  false, // chase closest
43  false, // eom
44  false,
45  false, // eom related
46  false, // eom related
47  false, // use block?
48  120000, // number of samples
49  0, // number of parameters
50  60, // max krylov iter
51  0, // max spam inner iter
52  1, // spam appro degree
53  0, // eom related
54  0, // eom related
55  0, // eom related
56  0.0, // omega
57  0.0, // var weight
58  1.0e-6, // convergence threshold
59  0.99, // minimum S singular val
60  0.0, 0.0,
61  10.0, // max change allowed
62  1.00, // identity shift
63  1.00, // overlap shift
64  0.3, // max parameter change
65  shift_scales, app_log());
66 
67 
68  EngineObj->setFiltering(true);
69  EngineObj->setStoringSamples(true);
70  EngineObj->setThreshold(1.0);
71  EngineObj->setFilterInfo(true);
72 
73  app_log() << "Creating fake data to test LM sample storage and parameter filtration" << std::endl;
74  int fakeParamNum = 1;
75  int fakeNumSamples = 2;
76 
77  EngineObj->setUpStorage(fakeParamNum, fakeNumSamples);
78  std::vector<FullPrecValueType> der_rat_samp;
79  std::vector<FullPrecValueType> le_der_samp;
80 
81  der_rat_samp.resize(fakeParamNum + 1, 0.0);
82  le_der_samp.resize(fakeParamNum + 1, 0.0);
83  der_rat_samp[0] = 1.0;
84  le_der_samp[0] - 1.0;
85 
86  der_rat_samp[1] = 0.5;
87  le_der_samp[1] = -2.0;
88 
89  EngineObj->store_sample(der_rat_samp, le_der_samp, le_der_samp, 1.0, 1.0, 0);
90  le_der_samp[0] = -1.5;
91  der_rat_samp[1] = 1.5;
92  le_der_samp[1] = -0.5;
93  EngineObj->store_sample(der_rat_samp, le_der_samp, le_der_samp, 1.0, 1.0, 1);
94  EngineObj->selectParameters();
95 
96  bool paramOn = EngineObj->getParameterSetting(0);
97  //Parameter should be left off
98  REQUIRE(paramOn == false);
99 
100  delete EngineObj;
101 }
102 
103 } // namespace qmcplusplus
104 #endif
qmcplusplus::QMCTraits::FullPrecValueType FullPrecValueType
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
std::ostream & app_log()
Definition: OutputManager.h:65
TEST_CASE("complex_helper", "[type_traits]")
QTFull::ValueType FullPrecValueType
Definition: Configuration.h:67
QTBase::ValueType ValueType
Definition: Configuration.h:60
REQUIRE(std::filesystem::exists(filename))
LatticeGaussianProduct::ValueType ValueType