/usr/include/chemps2/ConvergenceScheme.h is in libchemps2-dev 1.8.5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | /*
CheMPS2: a spin-adapted implementation of DMRG for ab initio quantum chemistry
Copyright (C) 2013-2018 Sebastian Wouters
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef CONVERGENCESCHEME_CHEMPS2_H
#define CONVERGENCESCHEME_CHEMPS2_H
#include "Options.h"
namespace CheMPS2{
/** ConvergenceScheme class.
\author Sebastian Wouters <sebastianwouters@gmail.com>
\date November 7, 2013
The ConvergenceScheme class contains the convergence settings. This is a list of instructions, which are performed in order. Each instruction line contains the information for one particular batch of DMRG sweeps:\n
(1) the number of renormalized basis states to keep (D)\n
(2) the energy convergence threshold for energy changes per left- and right-sweep\n
(3) the maximum number of iterations, in case the energy changes do not drop below the threshold\n
(4) the noise prefactor f\n
(5) the Davidson residual tolerance\n
\n
The noise level which is added to the Sobject is the product of\n
(1) f\n
(2) the maximum discarded weight during the last sweep\n
(3) a random number in the interval [-0.5,0.5]*/
class ConvergenceScheme{
public:
//! Constructor
/** \param num_instructions the number of instructions */
ConvergenceScheme(const int num_instructions);
//! Destructor
virtual ~ConvergenceScheme();
//! Get the number of instructions
/** return the number of instructions */
int get_number() const;
//! Set an instruction
/** \param instruction the number of the instruction
\param D the number of renormalized states for that instruction
\param energy_conv the energy convergence threshold for that instruction
\param max_sweeps the max. number of sweeps for that instruction
\param noise_prefactor the noise prefactor for that instruction
\param davidson_rtol the Davidson residual tolerance for that instruction */
void set_instruction(const int instruction, const int D, const double energy_conv, const int max_sweeps, const double noise_prefactor, const double davidson_rtol);
//! Set an instruction
/** \param instruction the number of the instruction
\param D the number of renormalized states for that instruction
\param energy_conv the energy convergence threshold for that instruction
\param max_sweeps the max. number of sweeps for that instruction
\param noise_prefactor the noise prefactor for that instruction */
void setInstruction(const int instruction, const int D, const double energy_conv, const int max_sweeps, const double noise_prefactor){
set_instruction( instruction, D, energy_conv, max_sweeps, noise_prefactor, CheMPS2::DAVIDSON_DMRG_RTOL );
}
//! Get the number of renormalized states for a particular instruction
/** \param instruction the number of the instruction
\return the number of renormalized states for this instruction */
int get_D(const int instruction) const;
//! Get the energy convergence threshold for a particular instruction
/** \param instruction the number of the instruction
\return the energy convergence threshold for this instruction */
double get_energy_conv(const int instruction) const;
//! Get the maximum number of sweeps for a particular instruction
/** \param instruction the number of the instruction
\return the maximum number of sweeps for this instruction */
int get_max_sweeps(const int instruction) const;
//! Get the noise prefactor for a particular instruction
/** \param instruction the number of the instruction
\return the noise prefactor for this instruction */
double get_noise_prefactor(const int instruction) const;
//! Get the Davidson residual tolerance for a particular instruction
/** \param instruction the number of the instruction
\return the Davidson residual tolerance for this instruction */
double get_dvdson_rtol(const int instruction) const;
private:
//The number of instructions
int num_instructions;
//Number of renormalized states
int * num_D;
//Energy convergence thresholds
double * energy_convergence;
//Maximum number of sweeps per instruction
int * num_max_sweeps;
//The noise prefactor for each instruction
double * noise_prefac;
//The Davidson residual tolerance for each instruction
double * dvdson_rtol;
};
}
#endif
|