Loading...
Searching...
No Matches
eonc::GlobalOptimizationJob Class Reference

#include <GlobalOptimizationJob.h>

Inheritance diagram for eonc::GlobalOptimizationJob:

Public Member Functions

 GlobalOptimizationJob (std::unique_ptr< Parameters > parameters, Runtime &rt)
 ~GlobalOptimizationJob (void)=default
void hoppingStep (long, Matter &, Matter &)
void decisionStep (Matter &, Matter &)
void report (Matter &)
void acceptRejectNPEW (Matter &, Matter &)
void acceptRejectBoltzmann (Matter &, Matter &)
void analyze (Matter &, Matter &)
void examineEscape (Matter &, Matter &)
void applyMoveFeedbackMD (void)
void applyDecisionFeedback (void)
void mdescape (Matter &)
void randomMove (Matter &)
void insert (Matter &)
size_t hunt (double)
void velopt (Matter &)
std::vector< std::string > run (void)
 Virtual run; used solely for dynamic dispatch.
Public Member Functions inherited from eonc::Job
void adoptRuntime (std::unique_ptr< Runtime > rt)
 Take ownership of a Runtime previously passed as Runtime&.
 Job (std::unique_ptr< Parameters > parameters, Runtime &rt)
 Borrow: caller keeps Runtime alive (CLI stack / Python Session).
 Job (std::unique_ptr< Parameters > parameters, std::unique_ptr< Runtime > rt)
 Own a Runtime (one-shot makeJob / rvalue).
 Job (std::unique_ptr< Parameters > parameters)
 Own a default-constructed Runtime.
 Job (std::shared_ptr< Potential > potPassed, const Parameters &parameters)
virtual ~Job ()=default
JobType getType ()
PotRegistry & pots () noexcept
void releasePotential ()
 Drop the Potential so on_destroyed is recorded before Runtime dies.

Public Attributes

double beta1
double beta2
double beta3
double alpha1
double alpha2
long mdmin

Private Attributes

size_t nlmin
long fcallsMove
long fcallsRelax
double ediff
double ekin
bool firstStep
std::vector< double > earr
std::string escapeResult
std::string decisionResult
std::string hoppingResult
std::ofstream monfile
std::ofstream earrfile
eonc::log::Scoped log

Additional Inherited Members

Protected Attributes inherited from eonc::Job
JobType jtype
Parameters params
std::unique_ptr< Runtime > owned_runtime_
 Non-null when this Job owns the composition root (one-shot makeJob).
Runtime * runtime_
 Always valid: either owned_runtime_.get() or a caller-owned Runtime.
std::shared_ptr< Potential > pot

Detailed Description

Definition at line 23 of file GlobalOptimizationJob.h.

Constructor & Destructor Documentation

◆ GlobalOptimizationJob()

eonc::GlobalOptimizationJob::GlobalOptimizationJob ( std::unique_ptr< Parameters > parameters,
Runtime & rt )
inline

Definition at line 25 of file GlobalOptimizationJob.h.

26 : Job(std::move(parameters), rt),
27 nlmin{0},
28 ediff{1.E-1},
29 ekin{5.E-2},
30 beta1{params.global_optimization_options().beta},
31 beta2{params.global_optimization_options().beta},
32 beta3{1. / params.global_optimization_options().beta},
33 alpha1{1. / params.global_optimization_options().alpha},
34 alpha2{params.global_optimization_options().alpha},
35 mdmin{params.global_optimization_options().mdmin},
36 fcallsMove{0},
37 firstStep{true},
38 fcallsRelax{0},
39 monfile{"monitoring.dat"},
40 earrfile{"earr.dat"} {}
Job(std::unique_ptr< Parameters > parameters, Runtime &rt)
Borrow: caller keeps Runtime alive (CLI stack / Python Session).
Definition Job.h:76
Parameters params
Definition Job.h:58

◆ ~GlobalOptimizationJob()

eonc::GlobalOptimizationJob::~GlobalOptimizationJob ( void )
default

Member Function Documentation

◆ acceptRejectBoltzmann()

void eonc::GlobalOptimizationJob::acceptRejectBoltzmann ( Matter & matter_cur,
Matter & matter_hop )

Definition at line 219 of file GlobalOptimizationJob.cpp.

220 {
221 double eTrial = matter_hop.getPotentialEnergy();
222 double eCurrent = matter_cur.getPotentialEnergy();
223
224 double deltaE = eTrial - eCurrent;
225 const double kB = params.constants().kB;
226 const double T = params.main_options().temperature;
227
228 double p;
229 if (deltaE <= 0.0) {
230 p = 1.0;
231 } else if (!(T > 0.0) || !(kB > 0.0)) {
232 p = 0.0;
233 } else {
234 p = std::exp(-deltaE / (kB * T));
235 }
236
237 if (eonc::rng::randomDouble(1.0) < p) {
238 decisionResult = "accepted";
239 } else {
240 decisionResult = "rejected";
241 }
242}
double randomDouble()

◆ acceptRejectNPEW()

void eonc::GlobalOptimizationJob::acceptRejectNPEW ( Matter & matter_cur,
Matter & matter_hop )

Definition at line 209 of file GlobalOptimizationJob.cpp.

210 {
211 if (matter_hop.getPotentialEnergy() <
212 matter_cur.getPotentialEnergy() + ediff) {
213 decisionResult = "accepted";
214 } else {
215 decisionResult = "rejected";
216 }
217}

◆ analyze()

void eonc::GlobalOptimizationJob::analyze ( Matter & matter_cur,
Matter & matter_hop )

Definition at line 76 of file GlobalOptimizationJob.cpp.

76 {
77 if (escapeResult == "failure") {
78 hoppingResult = "same";
79 return;
80 }
81 double epot = matter_hop.getPotentialEnergy();
82 size_t jlo = hunt(epot);
83 QUILL_LOG_TRACE_L1(log, "REZA: {}", jlo);
84 if (std::abs(epot - earr[jlo]) <
85 params.structure_comparison_options().energy_difference) {
86 hoppingResult = "already_visited";
87 } else {
88 hoppingResult = "new";
89 }
90 if (decisionResult == "accepted") {
91 double epot_hop = matter_hop.getPotentialEnergy();
92 matter_cur = matter_hop;
93 size_t jlo = hunt(matter_hop.getPotentialEnergy());
94 if (hoppingResult == "new" && jlo == 0 && epot_hop < earr[0]) {
95 QUILL_LOG_DEBUG(log,
96 "new lowest: nlmin, epot_hop, dE {:7d} {:15.5f} {:10.5f}",
97 1, epot_hop, epot_hop - earr[0]);
98 }
99 insert(matter_cur);
100 } else if (decisionResult == "rejected") {
101 } else {
103 QUILL_LOG_CRITICAL(
104 log,
105 "ERROR: new minimum is neither accepted nor rejected: client stops.");
106 throw std::runtime_error(
107 "[Global Optimization] new minimum is neither accepted nor rejected");
108 }
109}
quill::Logger * traceback() noexcept
Get or create the "_traceback" logger for traceback logging.
Definition EonLogger.h:88

◆ applyDecisionFeedback()

void eonc::GlobalOptimizationJob::applyDecisionFeedback ( void )

Definition at line 145 of file GlobalOptimizationJob.cpp.

145 {
146 if (decisionResult == "accepted") {
147 ediff *= alpha1;
148 } else {
149 ediff *= alpha2;
150 }
151}

◆ applyMoveFeedbackMD()

void eonc::GlobalOptimizationJob::applyMoveFeedbackMD ( void )

Definition at line 124 of file GlobalOptimizationJob.cpp.

124 {
125 if (firstStep) {
126 firstStep = false;
127 return;
128 }
129 if (hoppingResult == "same") {
130 ekin *= beta1;
131 } else if (hoppingResult == "already_visited") {
132 ekin *= beta2;
133 } else if (hoppingResult == "new") {
134 ekin *= beta3;
135 } else {
137 QUILL_LOG_CRITICAL(log,
138 "ERROR: client does not know what to do with ekin.");
139 QUILL_LOG_CRITICAL(log, "ERROR: client stops in applyMoveFeedbackMD.");
140 throw std::runtime_error(std::format(
141 "[Global Optimization] unknown hoppingResult: {}", hoppingResult));
142 }
143}

◆ decisionStep()

void eonc::GlobalOptimizationJob::decisionStep ( Matter & matter_cur,
Matter & matter_hop )

Definition at line 185 of file GlobalOptimizationJob.cpp.

186 {
187 decisionResult = "unknown";
188 examineEscape(matter_cur, matter_hop);
189 if (escapeResult == "failure") {
190 return;
191 }
192 if (params.global_optimization_options().decision_method == "npew") {
193 acceptRejectNPEW(matter_cur, matter_hop);
194 } else if (params.global_optimization_options().decision_method ==
195 "boltzmann") {
196 acceptRejectBoltzmann(matter_cur, matter_hop);
197 } else {
199 QUILL_LOG_CRITICAL(
200 log, "ERROR: accept/reject method not specified. client stops.");
201 throw std::invalid_argument(
202 std::format("[Global Optimization] unknown decision_method: {}",
203 params.global_optimization_options().decision_method));
204 }
206}
void examineEscape(Matter &, Matter &)
void acceptRejectNPEW(Matter &, Matter &)
void acceptRejectBoltzmann(Matter &, Matter &)

◆ examineEscape()

void eonc::GlobalOptimizationJob::examineEscape ( Matter & matter_cur,
Matter & matter_hop )

Definition at line 111 of file GlobalOptimizationJob.cpp.

112 {
113 double epot, epot_hop;
114 epot = matter_cur.getPotentialEnergy();
115 epot_hop = matter_hop.getPotentialEnergy();
116 if (std::abs(epot_hop - epot) <
117 params.structure_comparison_options().energy_difference) {
118 escapeResult = "failure";
119 } else {
120 escapeResult = "success";
121 }
122}

◆ hoppingStep()

void eonc::GlobalOptimizationJob::hoppingStep ( long istep,
Matter & matter_cur,
Matter & matter_hop )

Definition at line 244 of file GlobalOptimizationJob.cpp.

245 {
246 bool converged;
247 matter_hop = matter_cur;
248 long fcalls1 = matter_hop.getForceCalls();
249 if (params.global_optimization_options().move_method == "md") {
251 mdescape(matter_hop);
252 } else if (params.global_optimization_options().move_method == "random") {
253 randomMove(matter_hop);
254 }
255 long fcalls2 = matter_hop.getForceCalls();
256 hoppingResult = "unknown";
257 converged =
258 matter_hop.relax(true, params.debug_options().write_movies,
259 params.main_options().checkpoint, "min", "matter_hop");
260 QUILL_LOG_DEBUG(log, "converged {}", (converged) ? "TRUE" : "FALSE");
261 long fcalls3 = matter_hop.getForceCalls();
262 fcallsMove = fcalls2 - fcalls1;
263 fcallsRelax = fcalls3 - fcalls2;
264}

◆ hunt()

size_t eonc::GlobalOptimizationJob::hunt ( double epot)

Definition at line 411 of file GlobalOptimizationJob.cpp.

411 {
412 // epot is in interval [earr(jlo),earr(jlo+1)[ ; earr(0)=-Infinity ; earr(n+1)
413 // = Infinity
414 size_t jlo;
415 double de;
416 for (jlo = 0; jlo < earr.size(); jlo++)
417 if (epot < earr[jlo])
418 break;
419 if (jlo == earr.size())
420 jlo--;
421 de = std::abs(epot - earr[jlo]);
422 if (jlo > 0)
423 if (std::abs(epot - earr[jlo - 1]) < de)
424 jlo--;
425 return jlo;
426}

◆ insert()

void eonc::GlobalOptimizationJob::insert ( Matter & matter)

Definition at line 396 of file GlobalOptimizationJob.cpp.

396 {
397 double epot;
398 size_t jlo, jlo_insert;
399 epot = matter.getPotentialEnergy();
400 jlo = hunt(epot);
401 QUILL_LOG_DEBUG(log, "JLO= {} {:10.5f} ", jlo, std::abs(epot - earr[jlo]));
402 if (!(std::abs(epot - earr[jlo]) <
403 params.structure_comparison_options().energy_difference)) {
404 jlo_insert = jlo;
405 if (epot > earr[jlo])
406 jlo_insert++;
407 earr.insert(earr.begin() + jlo_insert, 1, epot);
408 }
409}

◆ mdescape()

void eonc::GlobalOptimizationJob::mdescape ( Matter & matter)

Definition at line 296 of file GlobalOptimizationJob.cpp.

296 {
297 int nmd;
298 double ekinc, epot, etot, epot0, etot0;
299 auto dyn = std::make_unique<Dynamics>(&matter, params);
300 velopt(matter);
301 epot = matter.getPotentialEnergy();
302 ekinc = matter.getKineticEnergy();
303 etot = ekinc + epot;
304 epot0 = epot;
305 etot0 = etot;
306 size_t nummax = 0, nummin = 0;
307 double enmin1 = 0.0, enmin2 = 0.0, en0000 = 0.0;
308 double econs_max = -1.E100, econs_min = 1.E100, devcon;
309 bool md_presumably_escaped = false;
310 QUILL_LOG_DEBUG(log, "MD {:5d} {:20.10E} {:15.5E} {:15.5E} ", 0,
311 epot - epot0, ekinc, etot - etot0);
312 nmd = 1000;
313 for (int imd = 1; imd <= nmd; imd++) {
314 enmin2 = enmin1;
315 enmin1 = en0000;
316 dyn->velocityVerlet();
317 epot = matter.getPotentialEnergy();
318 ekinc = matter.getKineticEnergy();
319 etot = ekinc + epot;
320 en0000 = epot - epot0;
321 if (enmin1 > enmin2 && enmin1 > en0000)
322 nummax += 1;
323 if (enmin1 < enmin2 && enmin1 < en0000)
324 nummin += 1;
325 QUILL_LOG_TRACE_L1(log,
326 "MD {:5d} {:15.5f} {:15.5f} {:12.2E} {:4} {:4}",
327 imd, epot - epot0, ekinc, etot - etot0, nummax, nummin);
328 econs_max = std::max(econs_max, ekinc + epot);
329 econs_min = std::min(econs_min, ekinc + epot);
330 if (nummin >= static_cast<size_t>(mdmin)) {
331 if (nummax != nummin)
332 QUILL_LOG_WARNING(log, "WARNING: iproc,nummin,nummax {} {}", nummin,
333 nummax);
334 md_presumably_escaped = true;
335 break;
336 }
337 } // end of loop over imd
338 devcon = econs_max - econs_min;
339 if (md_presumably_escaped) {
340 devcon = devcon / static_cast<double>(matter.numberOfFreeAtoms() * 3);
341 if (devcon / ekin < 2.E-3) {
343 } else {
345 }
346 } else {
347 QUILL_LOG_DEBUG(log, "TOO MANY MD STEPS ");
349 }
350}
static dynamics_options_t & dynamics_options(Parameters &p)

◆ randomMove()

void eonc::GlobalOptimizationJob::randomMove ( Matter & matter)

Definition at line 266 of file GlobalOptimizationJob.cpp.

266 {
267 // create a random displacement
268 AtomMatrix displacement;
269 displacement.resize(matter.numberOfAtoms(), 3);
270 displacement.setZero();
271 int num = matter.numberOfAtoms();
272
273 for (int i = 0; i < num; i++) {
274 double disp = params.basin_hopping_options().displacement;
275 if (!matter.getFixed(i)) {
276 for (int j = 0; j < 3; j++) {
277 if (params.basin_hopping_options().displacement_distribution ==
278 "uniform") {
279 displacement(i, j) = eonc::rng::randomDouble(2 * disp) - disp;
280 } else if (params.basin_hopping_options().displacement_distribution ==
281 "gaussian") {
282 displacement(i, j) = eonc::rng::gaussRandom(0.0, disp);
283 } else {
285 QUILL_LOG_CRITICAL(log, "Unknown displacement_distribution");
286 throw std::invalid_argument(std::format(
287 "[Global Optimization] unknown displacement_distribution: {}",
288 params.basin_hopping_options().displacement_distribution));
289 }
290 }
291 }
292 }
293 matter.setPositions(matter.getPositions() + displacement);
294}
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
double gaussRandom(double avg, double std)

◆ report()

void eonc::GlobalOptimizationJob::report ( Matter & matter_hop)

Definition at line 153 of file GlobalOptimizationJob.cpp.

153 {
154 char C1, C2;
155 double ekin_p;
156 if (hoppingResult == "same") {
157 C1 = 'S';
158 C2 = '-';
159 ekin_p = ekin * beta1;
160 } else if (hoppingResult == "already_visited") {
161 C1 = 'O';
162 ekin_p = ekin * beta2;
163 } else if (hoppingResult == "new") {
164 C1 = 'N';
165 ekin_p = ekin * beta3;
166 } else {
167 C1 = '-';
168 ekin_p = ekin;
169 }
170 if (decisionResult == "accepted") {
171 C2 = 'A';
172 } else if (decisionResult == "rejected") {
173 C2 = 'R';
174 } else {
175 C2 = '-';
176 }
177 double epot_hop = matter_hop.getPotentialEnergy();
178 double temp = (2.0 * ekin_p / params.constants().kB);
179 double dt = params.dynamics_options().time_step;
180 monfile << std::format(
181 "{:15.5f} {:15.5f} {:11} {:12.2f} {}{} {:5} {:5}", epot_hop,
182 ediff, static_cast<size_t>(temp), dt, C1, C2, fcallsMove, fcallsRelax);
183}

◆ run()

std::vector< std::string > eonc::GlobalOptimizationJob::run ( void )
virtual

Virtual run; used solely for dynamic dispatch.

Implements eonc::Job.

Definition at line 26 of file GlobalOptimizationJob.cpp.

26 {
27 std::string reactant_passed =
28 eonc::helpers::getRelevantFile(params.main_options().conFilename);
29 std::vector<std::string> returnFiles;
30 auto matter_cur = std::make_unique<Matter>(pot, params);
31 auto matter_hop = std::make_unique<Matter>(pot, params);
32 if (!eonc::io::io_ok(matter_cur->con2matter(reactant_passed))) {
33 QUILL_LOG_CRITICAL(log, "Failed to load {}", reactant_passed);
34 throw std::runtime_error("failed to load " + reactant_passed);
35 }
36 bool converged;
37 long nstep = params.global_optimization_options().steps;
38 AtomMatrix rat_t(matter_cur->numberOfAtoms(), 3);
39 QUILL_LOG_DEBUG(log, "\nBeginning minima hopping of {}",
40 reactant_passed.c_str());
41 QUILL_LOG_TRACE_L1(log, "fcalls= {}", matter_cur->getForceCalls());
42 QUILL_LOG_TRACE_L1(log, "epot= {:24.15E}", matter_cur->getPotentialEnergy());
43 converged =
44 matter_cur->relax(false, params.debug_options().write_movies,
45 params.main_options().checkpoint, "min", "matter_cur");
46 QUILL_LOG_DEBUG(log, "converged {}", (converged) ? "TRUE" : "FALSE");
47 earr.push_back(matter_cur->getPotentialEnergy());
48 *matter_hop = *matter_cur;
50 for (long istep = 1; istep <= nstep; istep++) {
51 // hoppingStep attempts to hop into a new state followed by a minimization
52 hoppingStep(istep, *matter_cur, *matter_hop);
53 // decisionStep decides to accept or reject this step if it escaped
54 decisionStep(*matter_cur, *matter_hop);
55 // analyzing what happened in this step if it escaped
56 analyze(*matter_cur, *matter_hop);
57 // reporting useful information about this hop
58 report(*matter_hop);
59 if (matter_cur->getPotentialEnergy() <
60 params.global_optimization_options().target_energy)
61 break;
62 }
63 for (size_t i = 0; i < earr.size(); i++) {
64 double earrim1;
65 if (i == 0) {
66 earrim1 = earr[0];
67 } else {
68 earrim1 = earr[i - 1];
69 }
70 earrfile << std::format("{:5} {:15.5f} {:15.5f} {:15.5f} ", i + 1,
71 earr[i], earr[i] - earr[0], earr[i] - earrim1);
72 }
73 return returnFiles;
74} // end of GlobalOptimizationJob::run
void decisionStep(Matter &, Matter &)
void analyze(Matter &, Matter &)
void hoppingStep(long, Matter &, Matter &)
std::shared_ptr< Potential > pot
Definition Job.h:63
std::string getRelevantFile(std::string filename)
constexpr bool io_ok(IoStatus s) noexcept
Definition ConFileIO.h:38

◆ velopt()

void eonc::GlobalOptimizationJob::velopt ( Matter & matter)

Definition at line 352 of file GlobalOptimizationJob.cpp.

352 {
353 AtomMatrix vat(matter.numberOfAtoms(), 3);
354 double tt1, tt2, tt3, vtot[3];
355 int iat;
356 vtot[0] = 0.0;
357 vtot[1] = 0.0;
358 vtot[2] = 0.0;
359 for (iat = 0; iat < matter.numberOfAtoms(); iat++) {
363 vat(iat, 0) = (tt1 - 0.5) * 2.0;
364 vat(iat, 1) = (tt2 - 0.5) * 2.0;
365 vat(iat, 2) = (tt3 - 0.5) * 2.0;
366 vtot[0] += vat(iat, 0);
367 vtot[1] += vat(iat, 1);
368 vtot[2] += vat(iat, 2);
369 }
370 QUILL_LOG_DEBUG(log, "Linear momentum {:15.5E} {:15.5E} {:15.5E} ",
371 vtot[0], vtot[1], vtot[2]);
372 vtot[0] /= matter.numberOfAtoms();
373 vtot[1] /= matter.numberOfAtoms();
374 vtot[2] /= matter.numberOfAtoms();
375 for (iat = 0; iat < matter.numberOfAtoms(); iat++) {
376 vat(iat, 0) -= vtot[0];
377 vat(iat, 1) -= vtot[1];
378 vat(iat, 2) -= vtot[2];
379 }
380 matter.setVelocities(vat);
381 long nFreeCoords = matter.numberOfFreeAtoms() * 3;
382 if (nFreeCoords <= 0) {
383 throw std::invalid_argument("GlobalOptimizationJob::velopt: no free atoms");
384 }
385 double kinE = matter.getKineticEnergy();
386 double kB = params.constants().kB;
387 double kinT = (2.0 * kinE / nFreeCoords / kB);
388 if (!(kinT > 0.0)) {
389 throw std::runtime_error(
390 "GlobalOptimizationJob::velopt: zero kinetic temperature");
391 }
392 double temperature = (2.0 * ekin / kB);
393 matter.setVelocities(vat * std::sqrt(temperature / kinT));
394}

Member Data Documentation

◆ alpha1

double eonc::GlobalOptimizationJob::alpha1

Definition at line 60 of file GlobalOptimizationJob.h.

◆ alpha2

double eonc::GlobalOptimizationJob::alpha2

Definition at line 61 of file GlobalOptimizationJob.h.

◆ beta1

double eonc::GlobalOptimizationJob::beta1

Definition at line 57 of file GlobalOptimizationJob.h.

◆ beta2

double eonc::GlobalOptimizationJob::beta2

Definition at line 58 of file GlobalOptimizationJob.h.

◆ beta3

double eonc::GlobalOptimizationJob::beta3

Definition at line 59 of file GlobalOptimizationJob.h.

◆ decisionResult

std::string eonc::GlobalOptimizationJob::decisionResult
private

Definition at line 73 of file GlobalOptimizationJob.h.

◆ earr

std::vector<double> eonc::GlobalOptimizationJob::earr
private

Definition at line 71 of file GlobalOptimizationJob.h.

◆ earrfile

std::ofstream eonc::GlobalOptimizationJob::earrfile
private

Definition at line 76 of file GlobalOptimizationJob.h.

◆ ediff

double eonc::GlobalOptimizationJob::ediff
private

Definition at line 68 of file GlobalOptimizationJob.h.

◆ ekin

double eonc::GlobalOptimizationJob::ekin
private

Definition at line 69 of file GlobalOptimizationJob.h.

◆ escapeResult

std::string eonc::GlobalOptimizationJob::escapeResult
private

Definition at line 72 of file GlobalOptimizationJob.h.

◆ fcallsMove

long eonc::GlobalOptimizationJob::fcallsMove
private

Definition at line 66 of file GlobalOptimizationJob.h.

◆ fcallsRelax

long eonc::GlobalOptimizationJob::fcallsRelax
private

Definition at line 67 of file GlobalOptimizationJob.h.

◆ firstStep

bool eonc::GlobalOptimizationJob::firstStep
private

Definition at line 70 of file GlobalOptimizationJob.h.

◆ hoppingResult

std::string eonc::GlobalOptimizationJob::hoppingResult
private

Definition at line 74 of file GlobalOptimizationJob.h.

◆ log

eonc::log::Scoped eonc::GlobalOptimizationJob::log
private

Definition at line 77 of file GlobalOptimizationJob.h.

◆ mdmin

long eonc::GlobalOptimizationJob::mdmin

Definition at line 62 of file GlobalOptimizationJob.h.

◆ monfile

std::ofstream eonc::GlobalOptimizationJob::monfile
private

Definition at line 75 of file GlobalOptimizationJob.h.

◆ nlmin

size_t eonc::GlobalOptimizationJob::nlmin
private

Definition at line 65 of file GlobalOptimizationJob.h.


The documentation for this class was generated from the following files: