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

#include <Matter.h>

Public Member Functions

 ~Matter ()=default
 Matter (std::shared_ptr< Potential > pot, const Parameters &params)
 Matter (const Matter &matter)
const Matteroperator= (const Matter &matter)
 Matter (Matter &&other) noexcept
 Move: transfers retained movie ConFrames (move-only).
Matteroperator= (Matter &&other) noexcept
bool compare (const Matter &matter, bool indistinguishable=false)
double distanceTo (const Matter &matter)
double perAtomNorm (const Matter &matter)
void setPotential (std::shared_ptr< Potential > pot)
std::shared_ptr< PotentialgetPotential ()
void resize (long int nAtoms)
long int numberOfAtoms () const
Matrix3d getCell () const
void setCell (const Matrix3d &newCell)
double getPosition (long int atom, int axis) const
void setPosition (long int atom, int axis, double position)
void setVelocity (long int atom, int axis, double velocity)
bool relax (bool quiet=false, bool writeMovie=false, bool checkpoint=false, std::string prefixMovie=std::string(), std::string prefixCheckpoint=std::string(), bool retainMovieFrames=false)
const std::vector< readcon::ConFrame > & movieFrames () const
 In-memory minimization movie (same stamps as writeMovie CON).
void clearMovieFrames ()
std::vector< readcon::ConFrame > takeMovieFrames ()
 Take ownership of retained frames (leaves storage empty).
AtomMatrix pbc (const AtomMatrix &diff) const
VectorXd pbcV (const VectorXd &diff) const
size_t getPotentialCalls () const
const AtomMatrixgetPositions () const
AtomMatrix getPositionsCopy () const
VectorXd getPositionsV () const
AtomMatrix getPositionsFree () const
VectorXd getPositionsFreeV () const
void setPositions (const AtomMatrix &pos)
void setPositionsV (const VectorXd &pos)
void setPositionsFree (const AtomMatrix &pos)
void setPositionsFreeV (const VectorXd &pos)
AtomMatrix getVelocities () const
void setVelocities (const AtomMatrix &v)
void setBiasForces (const AtomMatrix &bf)
void setBiasPotential (BondBoost *bondBoost)
void setForces (const AtomMatrix &f)
AtomMatrix getAccelerations ()
const AtomMatrixgetForces () const
const AtomMatrixgetForcesRaw () const
AtomMatrix getBiasForces ()
VectorXd getForcesV () const
AtomMatrix getForcesFree () const
VectorXd getForcesFreeV () const
PbcConvention getPbcConvention () const
void setPbcConvention (PbcConvention convention)
double getMass (long int atom) const
void setMass (long int atom, double mass)
void setMasses (const VectorXd &massesIn)
long getAtomicNr (long int atom) const
void setAtomicNr (long int atom, long atomicNr)
VectorXi getAtomicNrs () const
VectorXi getAtomicNrsFree () const
void setAtomicNrs (const VectorXi &atmnrs)
int getFixed (long int atom) const
 1 if every Cartesian axis of the atom is fixed, else 0.
int getFixed (long int atom, int axis) const
 1 if this atom's axis is fixed, else 0. axis is 0=x, 1=y, 2=z.
std::array< bool, 3 > getFixedMask (long int atom) const
 Per-axis CON column-4 mask (bit0=x, bit1=y, bit2=z).
void setFixed (long int atom, int isFixed)
 Broadcast a whole-atom flag onto all three axes.
void setFixed (long int atom, int axis, int isFixed)
 Set one Cartesian axis. axis is 0=x, 1=y, 2=z.
void setFixedMask (long int atom, std::array< bool, 3 > mask)
double getEnergyVariance () const
double getPotentialEnergy () const
bool needsForceUpdate () const
 Whether forces need recomputation (positions changed since last eval).
double * forcesData ()
 Mutable access to force storage for batched potential evaluation.
void setComputedPotential (double energy, double variance)
 Set energy/variance from external batched evaluation and mark forces as up-to-date (recomputePotential = false).
double getKineticEnergy () const
double getMechanicalEnergy () const
double distance (long index1, long index2) const
double pdistance (long index1, long index2, int axis) const
double distance (const Matter &matter, long index) const
long int numberOfFreeAtoms () const
long int numberOfFixedAtoms () const
long getForceCalls () const
void resetForceCalls ()
double maxForce (void) const
bool getWriteConForces () const noexcept
 Parameters.main_options.writeConForces for this Matter, if bound.
io::IoStatus writeTibble (std::string filename)
io::IoStatus con2matter (std::string filename)
io::IoStatus con2matter (const readcon::ConFrame &frame, io::ConFrameMetadata *out_metadata=nullptr)
io::IoStatus convel2matter (std::string filename)
io::IoStatus matter2con (std::string filename, bool append=false, const io::ConFrameMetadata *metadata=nullptr)
io::IoStatus matter2convel (std::string filename)
io::IoStatus matter2xyz (std::string filename, bool append=false)
AtomMatrix getFree () const
VectorXd getFreeV () const
Eigen::Matrix< double, Eigen::Dynamic, 1 > getMasses () const
std::int64_t getAtomIndex (long int atom) const
 .con column-5 index (pre-grouping); public for I/O / bindings.
void setAtomIndex (long int atom, std::int64_t index)
const std::array< std::string, 5 > & getHeaderCon () const
 CON header lines (indices 0..4); public for I/O / bindings.
void setHeaderCon (const std::array< std::string, 5 > &headers)
void setHeaderConLine (size_t i, std::string line)
bool getPeriodic () const noexcept
void setPeriodic (bool periodic)
void applyPeriodicBoundaryIfEnabled ()
 Apply MIC wrap when periodic boundaries are enabled (I/O path).

Private Member Functions

void assertIsolatedMoleculeLayoutSafe () const
 Throw if pot forbids PBC (isolated molecular QM backends, issue #188).
void computePotential () const
void applyPeriodicBoundary ()
void applyPeriodicBoundary (double &component, int axis)
void applyPeriodicBoundary (AtomMatrix &diff)

Private Attributes

eonc::log::Scoped m_log
std::shared_ptr< Potentialpotential
bool usePeriodicBoundaries
PbcConvention pbcConvention
bool recomputePotential
long forceCalls
std::array< std::string, 5 > headerCon
bool removeNetForce {true}
Parameters::structure_comparison_options_t structComp
const Parametersparameters
long nAtoms
AtomMatrix positions
AtomMatrix velocities
AtomMatrix forces
AtomMatrix biasForces
BondBoostbiasPotential {nullptr}
VectorXd masses
VectorXi atomicNrs
AtomMatrix isFixed
Eigen::Matrix< std::int64_t, Eigen::Dynamic, 1 > atomIndex
AtomMatrix freeMask
AtomMatrix maskedForces
std::vector< int > freeIndices
bool recomputeFreeMask {true}
bool recomputeMaskedForces {true}
Matrix3d cell
Matrix3d cellInverse
double energyVariance
std::vector< readcon::ConFrame > movie_frames_
double potentialEnergy

Friends

io::IoStatus io::con2matter (Matter &, const readcon::ConFrame &, io::ConFrameMetadata *)

Detailed Description

Definition at line 92 of file Matter.h.

Constructor & Destructor Documentation

◆ ~Matter()

eonc::Matter::~Matter ( )
default

◆ Matter() [1/3]

eonc::Matter::Matter ( std::shared_ptr< Potential > pot,
const Parameters & params )
inline

Definition at line 95 of file Matter.h.

96 : potential{pot},
97 // Isolated molecular QM (NWChem/ORCA) must start with PBC off (#188).
98 usePeriodicBoundaries{!(pot && pot->requiresIsolatedMoleculeLayout())},
100 recomputePotential{true},
101 forceCalls{0},
104 parameters{&params},
105 nAtoms{0},
106 positions{MatrixXd::Zero(0, 3)},
107 velocities{MatrixXd::Zero(0, 3)},
108 forces{MatrixXd::Zero(0, 3)},
109 biasForces{MatrixXd::Zero(0, 3)},
110 biasPotential{nullptr},
111 masses{Eigen::VectorXd::Zero(0)},
112 atomicNrs{Eigen::VectorXi::Zero(0)},
113 isFixed{AtomMatrix::Zero(0, 3)},
114 cell{Matrix3d::Zero()},
115 cellInverse{Matrix3d::Zero()},
116 energyVariance{0.0},
117 potentialEnergy{0.0} {} // the number of atoms shall be set later
double potentialEnergy
Definition Matter.h:386
Parameters::structure_comparison_options_t structComp
Definition Matter.h:363
PbcConvention pbcConvention
Definition Matter.h:347
VectorXd masses
Definition Matter.h:372
VectorXi atomicNrs
Definition Matter.h:373
AtomMatrix velocities
Definition Matter.h:368
const Parameters * parameters
Definition Matter.h:365
bool removeNetForce
Definition Matter.h:362
long nAtoms
Definition Matter.h:366
std::shared_ptr< Potential > potential
Definition Matter.h:342
BondBoost * biasPotential
Definition Matter.h:371
long forceCalls
Definition Matter.h:351
AtomMatrix forces
Definition Matter.h:369
bool recomputePotential
Definition Matter.h:348
bool usePeriodicBoundaries
Definition Matter.h:343
AtomMatrix isFixed
Definition Matter.h:374
Matrix3d cell
Definition Matter.h:382
Matrix3d cellInverse
Definition Matter.h:383
double energyVariance
Definition Matter.h:384
AtomMatrix biasForces
Definition Matter.h:370
AtomMatrix positions
Definition Matter.h:367
struct eonc::Parameters::structure_comparison_options_t structure_comparison_options
struct eonc::Parameters::main_options_t main_options

◆ Matter() [2/3]

Matter::Matter ( const Matter & matter)

Definition at line 23 of file Matter.cpp.

23{ operator=(matter); }
const Matter & operator=(const Matter &matter)
Definition Matter.cpp:25

◆ Matter() [3/3]

Matter::Matter ( Matter && other)
noexcept

Move: transfers retained movie ConFrames (move-only).

User copy suppresses implicit move — without this, relax(inplace=False, retain_frames=True) loses frames when returning the working Matter.

Definition at line 74 of file Matter.cpp.

74{ operator=(std::move(other)); }

Member Function Documentation

◆ applyPeriodicBoundary() [1/3]

void Matter::applyPeriodicBoundary ( )
private

Definition at line 543 of file Matter.cpp.

543 {
545 // Unset / singular cell (default after Matter construct is Zero) — do not
546 // wipe coordinates; callers set the cell before wrapping makes sense.
547 if (std::abs(cell.determinant()) < 1e-30) {
548 return;
549 }
550 positions =
552}
void assertIsolatedMoleculeLayoutSafe() const
Throw if pot forbids PBC (isolated molecular QM backends, issue #188).
Definition Matter.cpp:486
AtomMatrix applyPositions(const AtomMatrix &coords, const Matrix3d &cell, const Matrix3d &cellInverse, PbcConvention convention)
Definition Matter.h:66

◆ applyPeriodicBoundary() [2/3]

void eonc::Matter::applyPeriodicBoundary ( AtomMatrix & diff)
private

◆ applyPeriodicBoundary() [3/3]

void eonc::Matter::applyPeriodicBoundary ( double & component,
int axis )
private

◆ applyPeriodicBoundaryIfEnabled()

void eonc::Matter::applyPeriodicBoundaryIfEnabled ( )
inline

Apply MIC wrap when periodic boundaries are enabled (I/O path).

Definition at line 327 of file Matter.h.

327 {
330 }
331 }
void applyPeriodicBoundary()
Definition Matter.cpp:543

◆ assertIsolatedMoleculeLayoutSafe()

void Matter::assertIsolatedMoleculeLayoutSafe ( ) const
private

Throw if pot forbids PBC (isolated molecular QM backends, issue #188).

Definition at line 486 of file Matter.cpp.

486 {
487 if (!potential || !potential->requiresIsolatedMoleculeLayout()) {
488 return;
489 }
491 throw std::runtime_error(
492 "Potential requires an isolated (non-periodic) molecular layout "
493 "(NWChem/ORCA-class). Disable periodic boundaries before optimizing; "
494 "PBC wraps can tear non-centered molecules (issue #188).");
495 }
496}

◆ clearMovieFrames()

void eonc::Matter::clearMovieFrames ( )
inline

Definition at line 157 of file Matter.h.

157{ movie_frames_.clear(); }
std::vector< readcon::ConFrame > movie_frames_
Definition Matter.h:385

◆ compare()

bool Matter::compare ( const Matter & matter,
bool indistinguishable = false )

Definition at line 129 of file Matter.cpp.

129 {
130 if (nAtoms != matter.numberOfAtoms())
131 return false;
132 if (structComp.check_rotation && indistinguishable) {
133 return eonc::helpers::sortedR(*this, matter,
134 structComp.distance_difference);
135 } else if (indistinguishable) {
136 if (this->numberOfFixedAtoms() == 0 and structComp.remove_translation)
138 return eonc::helpers::identical(*this, matter,
139 structComp.distance_difference);
140 } else if (structComp.check_rotation) {
141 return eonc::helpers::rotationMatch(*this, matter,
142 structComp.distance_difference);
143 } else {
144 if (this->numberOfFixedAtoms() == 0 and structComp.remove_translation)
146 return (structComp.distance_difference) > perAtomNorm(matter);
147 }
148}
long int numberOfFixedAtoms() const
Definition Matter.cpp:465
long int numberOfAtoms() const
Definition Matter.cpp:209
double perAtomNorm(const Matter &matter)
Definition Matter.cpp:160
bool rotationMatch(const Matter &m1, const Matter &m2, const double max_diff)
bool identical(const Matter &m1, const Matter &m2, const double distanceDifference)
bool sortedR(const Matter &m1, const Matter &m2, const double distanceDifference)
void translationRemove(Matter &m1, const AtomMatrix r1)

◆ computePotential()

void Matter::computePotential ( ) const
private

Definition at line 498 of file Matter.cpp.

498 {
499 if (recomputePotential) {
500 if (!potential) {
501 throw std::runtime_error(
502 "Matter::computePotential called without a potential");
503 }
505 if (potential->isSurrogate()) {
506 // Surrogate potential case: uses free-atom subset interface
507 auto surrogatePotential =
508 static_cast<SurrogatePotential *>(potential.get());
509 auto [freePE, freeForces, vari] = surrogatePotential->get_ef_var(
510 this->getPositionsFree(), this->getAtomicNrsFree(), cell);
511 this->potentialEnergy = freePE;
512 this->energyVariance = vari;
513 for (long idx{0}, jdx{0}; idx < nAtoms; idx++) {
514 if (!getFixed(idx)) {
515 forces.row(idx) = freeForces.row(jdx);
516 jdx++;
517 }
518 }
519 } else {
520 // Hot path: call force() directly into member storage.
521 // No intermediate allocation, no tuple, no copy.
522 double var{0};
523 potential->force(nAtoms, positions.data(), atomicNrs.data(),
524 forces.data(), &potentialEnergy, &var, cell.data());
525 potential->forceCallCounter++;
527 }
529 recomputePotential = false;
530
531 if (isFixed.maxCoeff() < 0.5 && removeNetForce) {
532 Vector3d tempForce = forces.colwise().sum() / nAtoms;
533 for (long int i = 0; i < nAtoms; i++) {
534 forces.row(i) -= tempForce.transpose();
535 }
536 }
537 }
538}
AtomMatrix getPositionsFree() const
Definition Matter.cpp:244
VectorXi getAtomicNrsFree() const
Definition Matter.cpp:253
int getFixed(long int atom) const
1 if every Cartesian axis of the atom is fixed, else 0.
Definition Matter.cpp:402
static PotRegistry & get() noexcept
Process-lifetime singleton.
void on_force_call(PotType t) noexcept

◆ con2matter() [1/2]

io::IoStatus eonc::Matter::con2matter ( const readcon::ConFrame & frame,
io::ConFrameMetadata * out_metadata = nullptr )
inlinenodiscard

Definition at line 273 of file Matter.h.

274 {
275 return io::con2matter(*this, frame, out_metadata);
276 }
IoStatus con2matter(Matter &m, std::string filename)

◆ con2matter() [2/2]

io::IoStatus eonc::Matter::con2matter ( std::string filename)
inlinenodiscard

Definition at line 269 of file Matter.h.

269 {
270 return io::con2matter(*this, filename);
271 }

◆ convel2matter()

io::IoStatus eonc::Matter::convel2matter ( std::string filename)
inlinenodiscard

Definition at line 277 of file Matter.h.

277 {
278 return io::convel2matter(*this, filename);
279 }
IoStatus convel2matter(Matter &m, std::string filename)

◆ distance() [1/2]

double Matter::distance ( const Matter & matter,
long index ) const

Definition at line 376 of file Matter.cpp.

376 {
377 return pbc(positions.row(index) - matter.getPositions().row(index)).norm();
378}
AtomMatrix pbc(const AtomMatrix &diff) const
Definition Matter.h:163
const AtomMatrix & getPositions() const
Definition Matter.cpp:236

◆ distance() [2/2]

double Matter::distance ( long index1,
long index2 ) const

Definition at line 360 of file Matter.cpp.

360 {
361 return pbc(positions.row(index1) - positions.row(index2)).norm();
362}

◆ distanceTo()

double Matter::distanceTo ( const Matter & matter)

Definition at line 155 of file Matter.cpp.

155 {
156 return pbc(positions - matter.positions).norm();
157}

◆ forcesData()

double * eonc::Matter::forcesData ( )
inline

Mutable access to force storage for batched potential evaluation.

Caller must also call setComputedPotential() after writing forces.

Definition at line 236 of file Matter.h.

236{ return forces.data(); }

◆ getAccelerations()

AtomMatrix Matter::getAccelerations ( )

Definition at line 612 of file Matter.cpp.

612 {
614 AtomMatrix ret = totF.array() * getFree().array();
615 // Single reciprocal mass computation, replicated across 3 columns
616 auto invMass = masses.array().inverse();
617 ret.col(0).array() *= invMass;
618 ret.col(1).array() *= invMass;
619 ret.col(2).array() *= invMass;
620 return ret;
621}
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
AtomMatrix getFree() const
Definition Matter.cpp:580
const AtomMatrix & getForces() const
Definition Matter.cpp:324
AtomMatrix getBiasForces()
Definition Matter.cpp:305

◆ getAtomicNr()

long Matter::getAtomicNr ( long int atom) const

Definition at line 392 of file Matter.cpp.

392 {
393 return (atomicNrs[indexAtom]);
394}

◆ getAtomicNrs()

VectorXi Matter::getAtomicNrs ( ) const

Definition at line 569 of file Matter.cpp.

569{ return this->atomicNrs; }

◆ getAtomicNrsFree()

VectorXi Matter::getAtomicNrsFree ( ) const

Definition at line 253 of file Matter.cpp.

253 {
254 return this->atomicNrs.array() * getFreeV().cast<int>().array();
255}
VectorXd getFreeV() const
Definition Matter.cpp:596

◆ getAtomIndex()

std::int64_t eonc::Matter::getAtomIndex ( long int atom) const
inlinenodiscard

.con column-5 index (pre-grouping); public for I/O / bindings.

Held 64-bit wide: readcon carries the column as a uint64_t, and a 32-bit slot drops the high half of any id past 2^31.

Definition at line 300 of file Matter.h.

300 {
301 return atomIndex(atom);
302 }
Eigen::Matrix< std::int64_t, Eigen::Dynamic, 1 > atomIndex
Definition Matter.h:376

◆ getBiasForces()

AtomMatrix Matter::getBiasForces ( )

Definition at line 305 of file Matter.cpp.

305 {
306 if (biasPotential != nullptr) {
307 // Evaluate the current bias only. The MD job advances the bond-boost
308 // schedule once per step via BondBoost::advance().
309 biasPotential->boost();
310 }
311 return biasForces.array() * getFree().array();
312}

◆ getCell()

Matrix3d Matter::getCell ( ) const

Definition at line 211 of file Matter.cpp.

211{ return cell; }

◆ getEnergyVariance()

double Matter::getEnergyVariance ( ) const

Definition at line 663 of file Matter.cpp.

663{ return this->energyVariance; }

◆ getFixed() [1/2]

int Matter::getFixed ( long int atom) const

1 if every Cartesian axis of the atom is fixed, else 0.

Definition at line 402 of file Matter.cpp.

402 {
403 return (isFixed(indexAtom, 0) > 0.5 && isFixed(indexAtom, 1) > 0.5 &&
404 isFixed(indexAtom, 2) > 0.5)
405 ? 1
406 : 0;
407}

◆ getFixed() [2/2]

int Matter::getFixed ( long int atom,
int axis ) const

1 if this atom's axis is fixed, else 0. axis is 0=x, 1=y, 2=z.

Definition at line 409 of file Matter.cpp.

409 {
410 return isFixed(indexAtom, axis) > 0.5 ? 1 : 0;
411}

◆ getFixedMask()

std::array< bool, 3 > Matter::getFixedMask ( long int atom) const
nodiscard

Per-axis CON column-4 mask (bit0=x, bit1=y, bit2=z).

Definition at line 413 of file Matter.cpp.

413 {
414 return {isFixed(indexAtom, 0) > 0.5, isFixed(indexAtom, 1) > 0.5,
415 isFixed(indexAtom, 2) > 0.5};
416}

◆ getForceCalls()

long Matter::getForceCalls ( ) const

Definition at line 479 of file Matter.cpp.

479{ return (forceCalls); }

◆ getForces()

const AtomMatrix & Matter::getForces ( ) const

Definition at line 324 of file Matter.cpp.

324 {
327 // Use the cached freeMask (Nx3, 1.0 for free / 0.0 for fixed) to zero
328 // fixed-atom forces in a single vectorized Eigen operation.
329 maskedForces = forces.array() * getFree().array();
330 recomputeMaskedForces = false;
331 }
332 return maskedForces;
333}
void computePotential() const
Definition Matter.cpp:498
bool recomputeMaskedForces
Definition Matter.h:381
AtomMatrix maskedForces
Definition Matter.h:378

◆ getForcesFree()

AtomMatrix Matter::getForcesFree ( ) const

Definition at line 344 of file Matter.cpp.

344 {
345 AtomMatrix allForces = getForces();
346 getFree(); // ensure freeIndices is up to date (mutable cache)
347 AtomMatrix ret(static_cast<long>(freeIndices.size()), 3);
348 for (size_t j = 0; j < freeIndices.size(); j++) {
349 ret.row(static_cast<long>(j)) = allForces.row(freeIndices[j]);
350 }
351 return ret;
352}
std::vector< int > freeIndices
Definition Matter.h:379

◆ getForcesFreeV()

VectorXd Matter::getForcesFreeV ( ) const

Definition at line 354 of file Matter.cpp.

354 {
355 AtomMatrix freeForces = getForcesFree();
356 return VectorXd::Map(freeForces.data(), 3 * numberOfFreeAtoms());
357}
long int numberOfFreeAtoms() const
Definition Matter.cpp:475
AtomMatrix getForcesFree() const
Definition Matter.cpp:344

◆ getForcesRaw()

const AtomMatrix & Matter::getForcesRaw ( ) const

Definition at line 335 of file Matter.cpp.

335 {
337 return forces;
338}

◆ getForcesV()

VectorXd Matter::getForcesV ( ) const

Definition at line 340 of file Matter.cpp.

340 {
341 return VectorXd::Map(getForces().data(), 3 * numberOfAtoms());
342}

◆ getFree()

AtomMatrix Matter::getFree ( ) const

Definition at line 580 of file Matter.cpp.

580 {
581 if (recomputeFreeMask) {
582 freeMask.resize(nAtoms, 3);
583 freeMask = 1.0 - isFixed.array();
584 freeIndices.clear();
585 freeIndices.reserve(static_cast<size_t>(nAtoms));
586 for (long i = 0; i < nAtoms; i++) {
587 if (freeMask.row(i).sum() > 0.5) {
588 freeIndices.push_back(static_cast<int>(i));
589 }
590 }
591 recomputeFreeMask = false;
592 }
593 return freeMask;
594}
bool recomputeFreeMask
Definition Matter.h:380
AtomMatrix freeMask
Definition Matter.h:377

◆ getFreeV()

VectorXd Matter::getFreeV ( ) const

Definition at line 596 of file Matter.cpp.

596 {
597 return VectorXd::Map(getFree().data(), 3 * numberOfAtoms());
598}

◆ getHeaderCon()

const std::array< std::string, 5 > & eonc::Matter::getHeaderCon ( ) const
inlinenodiscard

CON header lines (indices 0..4); public for I/O / bindings.

Definition at line 308 of file Matter.h.

308 {
309 return headerCon;
310 }
std::array< std::string, 5 > headerCon
Definition Matter.h:354

◆ getKineticEnergy()

double Matter::getKineticEnergy ( ) const

Definition at line 454 of file Matter.cpp.

454 {
455 // 0.5 * sum(mass_i * |v_i,free|^2); a constrained axis does not contribute.
456 AtomMatrix vfree = velocities.array() * getFree().array();
457 Eigen::VectorXd speed2 = vfree.rowwise().squaredNorm();
458 return 0.5 * (masses.array() * speed2.array()).sum();
459}

◆ getMass()

double Matter::getMass ( long int atom) const

Definition at line 380 of file Matter.cpp.

380{ return (masses[indexAtom]); }

◆ getMasses()

Matrix< double, Eigen::Dynamic, 1 > Matter::getMasses ( ) const

Definition at line 623 of file Matter.cpp.

623{ return masses; }

◆ getMechanicalEnergy()

double Matter::getMechanicalEnergy ( ) const

Definition at line 461 of file Matter.cpp.

461 {
463}
double getPotentialEnergy() const
Definition Matter.cpp:446
double getKineticEnergy() const
Definition Matter.cpp:454

◆ getPbcConvention()

PbcConvention eonc::Matter::getPbcConvention ( ) const
inline

Definition at line 201 of file Matter.h.

201{ return pbcConvention; }

◆ getPeriodic()

bool eonc::Matter::getPeriodic ( ) const
inlinenodiscardnoexcept

Definition at line 318 of file Matter.h.

318 {
320 }

◆ getPosition()

double Matter::getPosition ( long int atom,
int axis ) const

Definition at line 218 of file Matter.cpp.

218 {
219 return positions(indexAtom, axis);
220}

◆ getPositions()

const AtomMatrix & Matter::getPositions ( ) const

Definition at line 236 of file Matter.cpp.

236{ return positions; }

◆ getPositionsCopy()

AtomMatrix Matter::getPositionsCopy ( ) const

Definition at line 238 of file Matter.cpp.

238{ return positions; }

◆ getPositionsFree()

AtomMatrix Matter::getPositionsFree ( ) const

Definition at line 244 of file Matter.cpp.

244 {
245 getFree(); // ensure freeIndices is up to date
246 AtomMatrix ret(static_cast<long>(freeIndices.size()), 3);
247 for (size_t j = 0; j < freeIndices.size(); j++) {
248 ret.row(static_cast<long>(j)) = positions.row(freeIndices[j]);
249 }
250 return ret;
251}

◆ getPositionsFreeV()

VectorXd Matter::getPositionsFreeV ( ) const

Definition at line 268 of file Matter.cpp.

268 {
269 return VectorXd::Map(getPositionsFree().data(), 3 * numberOfFreeAtoms());
270}

◆ getPositionsV()

VectorXd Matter::getPositionsV ( ) const

Definition at line 240 of file Matter.cpp.

240 {
241 return VectorXd::Map(positions.data(), 3 * numberOfAtoms());
242}

◆ getPotential()

std::shared_ptr< Potential > Matter::getPotential ( )

Definition at line 671 of file Matter.cpp.

671{ return this->potential; }

◆ getPotentialCalls()

size_t Matter::getPotentialCalls ( ) const

Definition at line 659 of file Matter.cpp.

659 {
660 return this->potential->forceCallCounter;
661}

◆ getPotentialEnergy()

double Matter::getPotentialEnergy ( ) const

Definition at line 446 of file Matter.cpp.

446 {
447 if (nAtoms > 0) {
449 return potentialEnergy;
450 } else
451 return 0.0;
452}

◆ getVelocities()

AtomMatrix Matter::getVelocities ( ) const

Definition at line 600 of file Matter.cpp.

600 {
601 return velocities.array() * getFree().array();
602}

◆ getWriteConForces()

bool eonc::Matter::getWriteConForces ( ) const
inlinenodiscardnoexcept

Parameters.main_options.writeConForces for this Matter, if bound.

Definition at line 261 of file Matter.h.

261 {
262 return parameters != nullptr && parameters->main_options.writeConForces;
263 }

◆ matter2con()

io::IoStatus eonc::Matter::matter2con ( std::string filename,
bool append = false,
const io::ConFrameMetadata * metadata = nullptr )
inlinenodiscard

Definition at line 281 of file Matter.h.

282 {
283 return io::matter2con(*this, filename, append, metadata);
284 }
IoStatus matter2con(Matter &m, std::string filename, bool append, const ConFrameMetadata *metadata)
Append a frame to a .con, or truncate and write one frame.

◆ matter2convel()

io::IoStatus eonc::Matter::matter2convel ( std::string filename)
inlinenodiscard

Definition at line 285 of file Matter.h.

285 {
286 return io::matter2convel(*this, filename);
287 }
IoStatus matter2convel(Matter &m, std::string filename)

◆ matter2xyz()

io::IoStatus eonc::Matter::matter2xyz ( std::string filename,
bool append = false )
inlinenodiscard

Definition at line 288 of file Matter.h.

289 {
290 return io::matter2xyz(*this, filename, append);
291 }
IoStatus matter2xyz(Matter &m, std::string filename, bool append)
Write one extended-XYZ frame: Lattice= cell and 17-digit coordinates.

◆ maxForce()

double Matter::maxForce ( void ) const

Definition at line 554 of file Matter.cpp.

554 {
555 // Ensures that the forces are up to date
557
558 const AtomMatrix &f = getForces();
559 double maxForce = 0.0;
560 for (int i = 0; i < nAtoms; i++) {
561 if (getFixed(i)) {
562 continue;
563 }
564 maxForce = std::max(f.row(i).norm(), maxForce);
565 }
566 return maxForce;
567}
double maxForce(void) const
Definition Matter.cpp:554

◆ movieFrames()

const std::vector< readcon::ConFrame > & eonc::Matter::movieFrames ( ) const
inlinenodiscard

In-memory minimization movie (same stamps as writeMovie CON).

Cleared when retainMovieFrames=false on the next relax, or via clearMovieFrames().

Definition at line 154 of file Matter.h.

154 {
155 return movie_frames_;
156 }

◆ needsForceUpdate()

bool eonc::Matter::needsForceUpdate ( ) const
inlinenodiscard

Whether forces need recomputation (positions changed since last eval).

Definition at line 232 of file Matter.h.

232{ return recomputePotential; }

◆ numberOfAtoms()

long int Matter::numberOfAtoms ( ) const

Definition at line 209 of file Matter.cpp.

209{ return (nAtoms); }

◆ numberOfFixedAtoms()

long int Matter::numberOfFixedAtoms ( ) const

Definition at line 465 of file Matter.cpp.

465 {
466 long n = 0;
467 for (long i = 0; i < nAtoms; ++i) {
468 if (getFixed(i)) {
469 ++n;
470 }
471 }
472 return n;
473}

◆ numberOfFreeAtoms()

long int Matter::numberOfFreeAtoms ( ) const

Definition at line 475 of file Matter.cpp.

475 {
476 return nAtoms - numberOfFixedAtoms();
477}

◆ operator=() [1/2]

const Matter & Matter::operator= ( const Matter & matter)

Definition at line 25 of file Matter.cpp.

25 {
26 if (this == &matter) {
27 return *this;
28 }
29 nAtoms = matter.nAtoms;
31
32 positions = matter.positions;
33 forces = matter.forces;
34 masses = matter.masses;
35 atomicNrs = matter.atomicNrs;
36 isFixed = matter.isFixed;
37 atomIndex = matter.atomIndex;
38 cell = matter.cell;
39 cellInverse = matter.cellInverse;
40 velocities = matter.velocities;
41
43 structComp = matter.structComp;
44 parameters = matter.parameters;
45
48
49 potential = matter.potential;
52 forceCalls = matter.forceCalls;
54 // Both caches describe the forces this object held before the assignment.
55 // resize() above already raises them; state it here alongside the members
56 // this function owns.
57 recomputeFreeMask = true;
59
60 // A BondBoost binds to one Matter (BondBoost.h:32 takes a Matter *), so a
61 // copy cannot share the source's: boosting through it would drive the
62 // original. The copy starts without one and re-establishes it through
63 // setBiasPotential. biasForces is zeroed by the resize above, which is the
64 // state that matches having no bias potential.
65 biasPotential = nullptr;
66
67 headerCon = matter.headerCon;
68 // ConFrame is move-only; copy does not retain movie trajectory.
69 movie_frames_.clear();
70
71 return *this;
72}
void resize(long int nAtoms)
Definition Matter.cpp:173

◆ operator=() [2/2]

Matter & Matter::operator= ( Matter && other)
noexcept

Definition at line 76 of file Matter.cpp.

76 {
77 if (this == &other) {
78 return *this;
79 }
80 potential = std::move(other.potential);
84 forceCalls = other.forceCalls;
85 headerCon = std::move(other.headerCon);
87 structComp = other.structComp;
88 parameters = other.parameters;
89 nAtoms = other.nAtoms;
90 positions = std::move(other.positions);
91 velocities = std::move(other.velocities);
92 forces = std::move(other.forces);
93 biasForces = std::move(other.biasForces);
95 other.biasPotential = nullptr;
96 masses = std::move(other.masses);
97 atomicNrs = std::move(other.atomicNrs);
98 isFixed = std::move(other.isFixed);
99 atomIndex = std::move(other.atomIndex);
100 freeMask = std::move(other.freeMask);
101 maskedForces = std::move(other.maskedForces);
102 freeIndices = std::move(other.freeIndices);
105 cell = std::move(other.cell);
106 cellInverse = std::move(other.cellInverse);
108 movie_frames_ = std::move(other.movie_frames_);
110
111 other.nAtoms = 0;
112 other.recomputePotential = true;
113 other.recomputeFreeMask = true;
114 other.recomputeMaskedForces = true;
115 return *this;
116}

◆ pbc()

AtomMatrix eonc::Matter::pbc ( const AtomMatrix & diff) const
inline

Definition at line 163 of file Matter.h.

163 {
164 return eonc::pbc::apply(diff, cell, cellInverse);
165 }
AtomMatrix apply(const AtomMatrix &diff, const Matrix3d &cell, const Matrix3d &cellInverse)
Definition Matter.h:42

◆ pbcV()

VectorXd eonc::Matter::pbcV ( const VectorXd & diff) const
inline

Definition at line 166 of file Matter.h.

166 {
167 return eonc::pbc::applyV(diff, cell, cellInverse);
168 }
VectorXd applyV(const VectorXd &diffVector, const Matrix3d &cell, const Matrix3d &cellInverse)
Definition Matter.h:75

◆ pdistance()

double Matter::pdistance ( long index1,
long index2,
int axis ) const

Definition at line 366 of file Matter.cpp.

366 {
367 Matrix<double, 1, 3> ret;
368 ret.setZero();
369 ret(0, axis) = positions(index1, axis) - positions(index2, axis);
370 ret = pbc(ret);
371 return ret(0, axis);
372}

◆ perAtomNorm()

double Matter::perAtomNorm ( const Matter & matter)

Definition at line 160 of file Matter.cpp.

160 {
161 long i = 0;
162 double max_distance = 0.0;
163
164 if (matter.numberOfAtoms() == nAtoms) {
165 AtomMatrix diff = pbc(positions - matter.positions);
166 for (i = 0; i < nAtoms; i++) {
167 max_distance = std::max(diff.row(i).norm(), max_distance);
168 }
169 }
170 return max_distance;
171}

◆ relax()

bool Matter::relax ( bool quiet = false,
bool writeMovie = false,
bool checkpoint = false,
std::string prefixMovie = std::string(),
std::string prefixCheckpoint = std::string(),
bool retainMovieFrames = false )

Definition at line 257 of file Matter.cpp.

259 {
260 if (retainMovieFrames) {
261 movie_frames_.clear();
262 }
264 *this, *parameters, quiet, writeMovie, checkpoint, prefixMovie,
265 prefixCheckpoint, retainMovieFrames ? &movie_frames_ : nullptr);
266}
bool relaxMatter(Matter &matter, const Parameters &params, bool quiet=false, bool writeMovie=false, bool checkpoint=false, std::string prefixMovie=std::string(), std::string prefixCheckpoint=std::string(), std::vector< readcon::ConFrame > *outFrames=nullptr)

◆ resetForceCalls()

void Matter::resetForceCalls ( )

Definition at line 481 of file Matter.cpp.

481 {
482 forceCalls = 0;
483 return;
484}

◆ resize()

void Matter::resize ( long int nAtoms)

Definition at line 173 of file Matter.cpp.

173 {
174 if (length < 0) {
175 throw std::invalid_argument("Matter::resize: negative atom count");
176 }
177 // Zero is a real size: leaving nAtoms at the old value there sends
178 // setMasses and every other nAtoms loop off the end of an empty array.
179 nAtoms = length;
180 positions.resize(length, 3);
181 positions.setZero();
182
183 velocities.resize(length, 3);
184 velocities.setZero();
185
186 biasForces.resize(length, 3);
187 biasForces.setZero();
188
189 forces.resize(length, 3);
190 forces.setZero();
191
192 masses.resize(length);
193 masses.setZero();
194
195 atomicNrs.resize(length);
196 atomicNrs.setZero();
197
198 isFixed.resize(length, 3);
199 isFixed.setZero();
200
201 atomIndex.resize(length);
202 for (long i = 0; i < length; i++)
203 atomIndex(i) = static_cast<std::int64_t>(i); // default: sequential
204 recomputePotential = true;
206 recomputeFreeMask = true;
207}

◆ setAtomicNr()

void Matter::setAtomicNr ( long int atom,
long atomicNr )

Definition at line 396 of file Matter.cpp.

396 {
397 atomicNrs[indexAtom] = atomicNr;
398 recomputePotential = true;
400}

◆ setAtomicNrs()

void Matter::setAtomicNrs ( const VectorXi & atmnrs)

Definition at line 571 of file Matter.cpp.

571 {
572 if (atmnrs.size() != this->nAtoms) {
573 throw std::invalid_argument(
574 "Vector of atomic numbers not equal to the number of atoms");
575 } else {
576 this->atomicNrs = atmnrs;
577 }
578}

◆ setAtomIndex()

void eonc::Matter::setAtomIndex ( long int atom,
std::int64_t index )
inline

Definition at line 303 of file Matter.h.

303 {
304 atomIndex(atom) = index;
305 }

◆ setBiasForces()

void Matter::setBiasForces ( const AtomMatrix & bf)

Definition at line 318 of file Matter.cpp.

318 {
319 biasForces = bf.array() * getFree().array();
320}

◆ setBiasPotential()

void Matter::setBiasPotential ( BondBoost * bondBoost)

Definition at line 314 of file Matter.cpp.

314 {
315 biasPotential = bondBoost;
316}

◆ setCell()

void Matter::setCell ( const Matrix3d & newCell)

Definition at line 213 of file Matter.cpp.

213 {
214 cell = newCell;
215 cellInverse = cell.inverse();
216}

◆ setComputedPotential()

void Matter::setComputedPotential ( double energy,
double variance )

Set energy/variance from external batched evaluation and mark forces as up-to-date (recomputePotential = false).

Definition at line 643 of file Matter.cpp.

643 {
644 potentialEnergy = energy;
645 energyVariance = variance;
646 recomputePotential = false;
648 forceCalls++;
649
650 // Apply the same net force removal as computePotential()
651 if (isFixed.maxCoeff() < 0.5 && removeNetForce) {
652 Vector3d tempForce = forces.colwise().sum() / nAtoms;
653 for (long int i = 0; i < nAtoms; i++) {
654 forces.row(i) -= tempForce.transpose();
655 }
656 }
657}

◆ setFixed() [1/2]

void Matter::setFixed ( long int atom,
int axis,
int isFixed )

Set one Cartesian axis. axis is 0=x, 1=y, 2=z.

Definition at line 427 of file Matter.cpp.

427 {
428 isFixed(indexAtom, axis) = isFixed_passed ? 1.0 : 0.0;
429 recomputeFreeMask = true;
431}

◆ setFixed() [2/2]

void Matter::setFixed ( long int atom,
int isFixed )

Broadcast a whole-atom flag onto all three axes.

Definition at line 418 of file Matter.cpp.

418 {
419 const double v = isFixed_passed ? 1.0 : 0.0;
420 isFixed(indexAtom, 0) = v;
421 isFixed(indexAtom, 1) = v;
422 isFixed(indexAtom, 2) = v;
423 recomputeFreeMask = true;
425}

◆ setFixedMask()

void Matter::setFixedMask ( long int atom,
std::array< bool, 3 > mask )

Definition at line 433 of file Matter.cpp.

433 {
434 isFixed(indexAtom, 0) = mask[0] ? 1.0 : 0.0;
435 isFixed(indexAtom, 1) = mask[1] ? 1.0 : 0.0;
436 isFixed(indexAtom, 2) = mask[2] ? 1.0 : 0.0;
437 recomputeFreeMask = true;
439}

◆ setForces()

void Matter::setForces ( const AtomMatrix & f)

Definition at line 608 of file Matter.cpp.

608 {
609 forces = f.array() * getFree().array();
610}

◆ setHeaderCon()

void eonc::Matter::setHeaderCon ( const std::array< std::string, 5 > & headers)
inline

Definition at line 311 of file Matter.h.

311 {
312 headerCon = headers;
313 }

◆ setHeaderConLine()

void eonc::Matter::setHeaderConLine ( size_t i,
std::string line )
inline

Definition at line 314 of file Matter.h.

314 {
315 headerCon.at(i) = std::move(line);
316 }

◆ setMass()

void Matter::setMass ( long int atom,
double mass )

Definition at line 382 of file Matter.cpp.

382 {
383 masses[indexAtom] = mass;
384}

◆ setMasses()

void Matter::setMasses ( const VectorXd & massesIn)

Definition at line 386 of file Matter.cpp.

386 {
387 for (int i = 0; i < nAtoms; i++) {
388 masses[i] = massesIn[i];
389 }
390}

◆ setPbcConvention()

void eonc::Matter::setPbcConvention ( PbcConvention convention)
inline

Definition at line 202 of file Matter.h.

202 {
203 pbcConvention = convention;
204 }

◆ setPeriodic()

void eonc::Matter::setPeriodic ( bool periodic)
inline

Definition at line 321 of file Matter.h.

321 {
322 usePeriodicBoundaries = periodic;
323 recomputePotential = true;
325 }

◆ setPosition()

void Matter::setPosition ( long int atom,
int axis,
double position )

Definition at line 222 of file Matter.cpp.

222 {
223 positions(indexAtom, axis) = position;
226 }
227 recomputePotential = true;
229}

◆ setPositions()

void Matter::setPositions ( const AtomMatrix & pos)

Definition at line 273 of file Matter.cpp.

273 {
274 positions = pos;
277 }
278 recomputePotential = true;
280}

◆ setPositionsFree()

void Matter::setPositionsFree ( const AtomMatrix & pos)

Definition at line 287 of file Matter.cpp.

287 {
288 getFree(); // ensure freeIndices is up to date
289 for (size_t j = 0; j < freeIndices.size(); j++) {
290 positions.row(freeIndices[j]) = pos.row(static_cast<long>(j));
291 }
292 // Optimizers write free-atom coords only (TIP4P/SPCE and any PBC pot).
293 // Match setPositions: wrap the full configuration when PBC is on (#171).
296 }
297 recomputePotential = true;
299}

◆ setPositionsFreeV()

void Matter::setPositionsFreeV ( const VectorXd & pos)

Definition at line 301 of file Matter.cpp.

301 {
302 setPositionsFree(AtomMatrix::Map(pos.data(), numberOfFreeAtoms(), 3));
303}
void setPositionsFree(const AtomMatrix &pos)
Definition Matter.cpp:287

◆ setPositionsV()

void Matter::setPositionsV ( const VectorXd & pos)

Definition at line 283 of file Matter.cpp.

283 {
284 setPositions(AtomMatrix::Map(pos.data(), numberOfAtoms(), 3));
285}
void setPositions(const AtomMatrix &pos)
Definition Matter.cpp:273

◆ setPotential()

void Matter::setPotential ( std::shared_ptr< Potential > pot)

Definition at line 625 of file Matter.cpp.

625 {
626 this->potential = pot;
627 // Molecular QM backends (NWChem/ORCA) must not use PBC wraps (#188). Auto-off
628 // with a hard fail if code later forces PBC while this pot is attached.
629 if (potential && potential->requiresIsolatedMoleculeLayout() &&
631 usePeriodicBoundaries = false;
632 // Use EONC_LOG_* (not bare QUILL_LOG_* with eonc::log::get() as arg): the
633 // quill macros expand logger->… and choke on a call expression as the first
634 // macro argument on some GCC versions (CI: expected primary-expression).
636 "Disabled PBC for isolated-molecule potential (NWChem/ORCA-class); "
637 "re-enabling PBC will throw (issue #188)");
638 }
639 recomputePotential = true;
641}
#define EONC_LOG_WARNING(...)
Definition EonLogger.h:256

◆ setVelocities()

void Matter::setVelocities ( const AtomMatrix & v)

Definition at line 604 of file Matter.cpp.

604 {
605 velocities = v.array() * getFree().array();
606}

◆ setVelocity()

void Matter::setVelocity ( long int atom,
int axis,
double velocity )

Definition at line 231 of file Matter.cpp.

231 {
232 velocities(indexAtom, axis) = vel;
233}

◆ takeMovieFrames()

std::vector< readcon::ConFrame > eonc::Matter::takeMovieFrames ( )
inlinenodiscard

Take ownership of retained frames (leaves storage empty).

Definition at line 159 of file Matter.h.

159 {
160 return std::move(movie_frames_);
161 }

◆ writeTibble()

io::IoStatus eonc::Matter::writeTibble ( std::string filename)
inlinenodiscard

Definition at line 266 of file Matter.h.

266 {
267 return io::writeTibble(*this, filename);
268 }
IoStatus writeTibble(Matter &m, std::string fname)
Debug table (positions, optional cached forces). Not a structure format.

◆ io::con2matter

io::IoStatus io::con2matter ( Matter & ,
const readcon::ConFrame & ,
io::ConFrameMetadata *  )
friend

Member Data Documentation

◆ atomicNrs

VectorXi eonc::Matter::atomicNrs
private

Definition at line 373 of file Matter.h.

◆ atomIndex

Eigen::Matrix<std::int64_t, Eigen::Dynamic, 1> eonc::Matter::atomIndex
private

Definition at line 376 of file Matter.h.

◆ biasForces

AtomMatrix eonc::Matter::biasForces
private

Definition at line 370 of file Matter.h.

◆ biasPotential

BondBoost* eonc::Matter::biasPotential {nullptr}
private

Definition at line 371 of file Matter.h.

371{nullptr};

◆ cell

Matrix3d eonc::Matter::cell
private

Definition at line 382 of file Matter.h.

◆ cellInverse

Matrix3d eonc::Matter::cellInverse
private

Definition at line 383 of file Matter.h.

◆ energyVariance

double eonc::Matter::energyVariance
mutableprivate

Definition at line 384 of file Matter.h.

◆ forceCalls

long eonc::Matter::forceCalls
mutableprivate

Definition at line 351 of file Matter.h.

◆ forces

AtomMatrix eonc::Matter::forces
mutableprivate

Definition at line 369 of file Matter.h.

◆ freeIndices

std::vector<int> eonc::Matter::freeIndices
mutableprivate

Definition at line 379 of file Matter.h.

◆ freeMask

AtomMatrix eonc::Matter::freeMask
mutableprivate

Definition at line 377 of file Matter.h.

◆ headerCon

std::array<std::string, 5> eonc::Matter::headerCon
private

Definition at line 354 of file Matter.h.

◆ isFixed

AtomMatrix eonc::Matter::isFixed
private

Definition at line 374 of file Matter.h.

◆ m_log

eonc::log::Scoped eonc::Matter::m_log
private

Definition at line 340 of file Matter.h.

◆ maskedForces

AtomMatrix eonc::Matter::maskedForces
mutableprivate

Definition at line 378 of file Matter.h.

◆ masses

VectorXd eonc::Matter::masses
private

Definition at line 372 of file Matter.h.

◆ movie_frames_

std::vector<readcon::ConFrame> eonc::Matter::movie_frames_
private

Definition at line 385 of file Matter.h.

◆ nAtoms

long eonc::Matter::nAtoms
private

Definition at line 366 of file Matter.h.

◆ parameters

const Parameters* eonc::Matter::parameters
private

Definition at line 365 of file Matter.h.

◆ pbcConvention

PbcConvention eonc::Matter::pbcConvention
private

Definition at line 347 of file Matter.h.

◆ positions

AtomMatrix eonc::Matter::positions
private

Definition at line 367 of file Matter.h.

◆ potential

std::shared_ptr<Potential> eonc::Matter::potential
private

Definition at line 342 of file Matter.h.

◆ potentialEnergy

double eonc::Matter::potentialEnergy
mutableprivate

Definition at line 386 of file Matter.h.

◆ recomputeFreeMask

bool eonc::Matter::recomputeFreeMask {true}
mutableprivate

Definition at line 380 of file Matter.h.

380{true};

◆ recomputeMaskedForces

bool eonc::Matter::recomputeMaskedForces {true}
mutableprivate

Definition at line 381 of file Matter.h.

381{true};

◆ recomputePotential

bool eonc::Matter::recomputePotential
mutableprivate

Definition at line 348 of file Matter.h.

◆ removeNetForce

bool eonc::Matter::removeNetForce {true}
private

Definition at line 362 of file Matter.h.

362{true};

◆ structComp

Parameters::structure_comparison_options_t eonc::Matter::structComp
private

Definition at line 363 of file Matter.h.

◆ usePeriodicBoundaries

bool eonc::Matter::usePeriodicBoundaries
private

Definition at line 343 of file Matter.h.

◆ velocities

AtomMatrix eonc::Matter::velocities
private

Definition at line 368 of file Matter.h.


The documentation for this class was generated from the following files:
  • /home/runner/work/eOn/eOn/include/eon/Matter.h
  • /home/runner/work/eOn/eOn/client/Matter.cpp