45 int main(
int argc,
char **argv)
54 std::string integralsfile =
"mo-integrals.h5";
58 bool localmini =
false;
60 bool localmininoopt =
false;
62 struct option long_options[] =
64 {
"integrals", required_argument, 0,
'i'},
65 {
"unitary", required_argument, 0,
'u'},
66 {
"rdm", required_argument, 0,
'd'},
67 {
"random", no_argument, 0,
'r'},
68 {
"scan", no_argument, 0,
's'},
69 {
"local-minimizer", no_argument, 0,
'l'},
70 {
"local-minimizer-no-opt", no_argument, 0,
'n'},
71 {
"help", no_argument, 0,
'h'},
77 while( (j = getopt_long (argc, argv,
"d:rlhi:u:sn", long_options, &i)) != -1)
82 cout <<
"Usage: " << argv[0] <<
" [OPTIONS]\n"
84 " -i, --integrals=integrals-file Set the input integrals file\n"
85 " -d, --rdm=rdm-file Use this rdm as starting point\n"
86 " -u, --unitary=unitary-file Use the unitary matrix in this file\n"
87 " -r, --random Perform a random unitary transformation on the Hamiltonian\n"
88 " -l, --local-minimizer Use the local minimizer\n"
89 " -n, --local-minimizer-no-opt Use the local minimizer without optimalization\n"
90 " -h, --help Display this help\n"
95 integralsfile = optarg;
113 localmininoopt =
true;
117 cout <<
"Reading: " << integralsfile << endl;
121 setenv(
"SAVE_H5_PATH",
"./", 0);
123 cout <<
"Using save path: " << getenv(
"SAVE_H5_PATH") << endl;
127 const auto L = ham.getL();
128 const auto N = ham.getNe();
130 cout <<
"Starting with L=" << L <<
" N=" << N << endl;
132 if(!unitary.empty() && !localmini)
134 cout <<
"Reading transform: " << unitary << endl;
152 std::string filename = getenv(
"SAVE_H5_PATH");
153 filename +=
"/random-start-unitary.h5";
163 char *X_env = getenv(
"v2DM_DOCI_SUP_X");
164 if(X_env && strlen(X_env) > 0)
166 cout <<
"Reading X from " << X_env << endl;
170 char *Z_env = getenv(
"v2DM_DOCI_SUP_Z");
171 if(Z_env && strlen(Z_env) > 0)
173 cout <<
"Reading Z from " << Z_env << endl;
178 struct sigaction act;
183 sigemptyset(&blockset);
184 act.sa_mask = blockset;
186 sigaction(SIGALRM, &act, 0);
190 sigaction(SIGUSR1, &act, 0);
194 cout <<
"Reading rdm: " << rdmfile << endl;
200 LocalMinimizer minimize(ham);
204 cout <<
"Starting local minimizer from: " << unitary << endl;
205 minimize.getOrbitalTf().get_unitary().loadU(unitary);
208 minimize.UseBoundaryPoint();
209 minimize.getMethod_BP().getX() = method.
getX();
210 minimize.getMethod_BP().getZ() = method.
getZ();
211 minimize.getMethod_BP().set_use_prev_result(
true);
212 minimize.getMethod_BP().set_tol_PD(1e-7);
214 minimize.set_conv_steps(10);
217 minimize.set_conv_crit(1e-6);
220 minimize.Minimize_noOpt(1e-2);
224 cout <<
"Bottom is " << minimize.get_energy() << endl;
226 method = minimize.getMethod_BP();
234 cout <<
"The optimal energy is " << method.
evalEnergy() << std::endl;
292 std::string h5_name = getenv(
"SAVE_H5_PATH");
293 h5_name +=
"/optimal-rdm.h5";
297 h5_name = getenv(
"SAVE_H5_PATH");
298 h5_name +=
"/optimal-ham.h5";
void ReadFromFile(std::string filename)
static Hamiltonian CreateFromH5(const string filename)
sig_atomic_t stopping_min
void print_unitary() const
int main(int argc, char **argv)
void set_use_prev_result(bool)
void stopcalcsignal(int sig)
double evalEnergy() const
void WriteToFile(hid_t &group_id) const
void stopminsignal(int sig)
void make_skew_symmetric()
void ReadFromFile(std::string filename)