Snapshot::Snapshot(int nAtoms, int nRigidbodies, int nCutoffGroups) : atomData(nAtoms), rigidbodyData(nRigidbodies), cgData(nCutoffGroups, DataStorage::dslPosition), orthoTolerance_(1e-6) { frameData.id = -1; frameData.currentTime = 0; frameData.hmat = Mat3x3d(0.0); frameData.invHmat = Mat3x3d(0.0); frameData.orthoRhombic = false; frameData.bondPotential = 0.0; frameData.bendPotential = 0.0; frameData.torsionPotential = 0.0; frameData.inversionPotential = 0.0; frameData.lrPotentials = potVec(0.0); frameData.surfacePotential = 0.0; frameData.reciprocalPotential = 0.0; frameData.selfPotential = 0.0; frameData.excludedPotentials = potVec(0.0); frameData.restraintPotential = 0.0; frameData.rawPotential = 0.0; frameData.xyArea = 0.0; frameData.volume = 0.0; frameData.thermostat = make_pair(0.0, 0.0); frameData.electronicThermostat = make_pair(0.0, 0.0); frameData.barostat = Mat3x3d(0.0); frameData.stressTensor = Mat3x3d(0.0); frameData.conductiveHeatFlux = Vector3d(0.0, 0.0, 0.0); clearDerivedProperties(); }
NPT::NPT(SimInfo* info) : VelocityVerletIntegrator(info), etaTolerance(1e-6), chiTolerance(1e-6), maxIterNum_(4) { Globals* simParams = info_->getSimParams(); if (!simParams->getUseIntialExtendedSystemState()) { Snapshot* currSnapshot = info_->getSnapshotManager()->getCurrentSnapshot(); currSnapshot->setThermostat(make_pair(0.0, 0.0)); currSnapshot->setBarostat(Mat3x3d(0.0)); } if (!simParams->haveTargetTemp()) { sprintf(painCave.errMsg, "You can't use the NVT integrator without a targetTemp!\n"); painCave.isFatal = 1; painCave.severity = OPENMD_ERROR; simError(); } else { targetTemp = simParams->getTargetTemp(); } // We must set tauThermostat if (!simParams->haveTauThermostat()) { sprintf(painCave.errMsg, "If you use the constant temperature\n" "\tintegrator, you must set tauThermostat.\n"); painCave.severity = OPENMD_ERROR; painCave.isFatal = 1; simError(); } else { tauThermostat = simParams->getTauThermostat(); } if (!simParams->haveTargetPressure()) { sprintf(painCave.errMsg, "NPT error: You can't use the NPT integrator\n" " without a targetPressure!\n"); painCave.isFatal = 1; simError(); } else { targetPressure = simParams->getTargetPressure(); } if (!simParams->haveTauBarostat()) { sprintf(painCave.errMsg, "If you use the NPT integrator, you must set tauBarostat.\n"); painCave.severity = OPENMD_ERROR; painCave.isFatal = 1; simError(); } else { tauBarostat = simParams->getTauBarostat(); } tt2 = tauThermostat * tauThermostat; tb2 = tauBarostat * tauBarostat; updateSizes(); }
void Snapshot::clearDerivedProperties() { frameData.totalEnergy = 0.0; frameData.translationalKinetic = 0.0; frameData.rotationalKinetic = 0.0; frameData.kineticEnergy = 0.0; frameData.potentialEnergy = 0.0; frameData.shortRangePotential = 0.0; frameData.longRangePotential = 0.0; frameData.pressure = 0.0; frameData.temperature = 0.0; frameData.pressureTensor = Mat3x3d(0.0); frameData.systemDipole = Vector3d(0.0); frameData.systemQuadrupole = Mat3x3d(0.0); frameData.convectiveHeatFlux = Vector3d(0.0, 0.0, 0.0); frameData.electronicTemperature = 0.0; frameData.COM = V3Zero; frameData.COMvel = V3Zero; frameData.COMw = V3Zero; hasTotalEnergy = false; hasTranslationalKineticEnergy = false; hasRotationalKineticEnergy = false; hasKineticEnergy = false; hasShortRangePotential = false; hasLongRangePotential = false; hasPotentialEnergy = false; hasXYarea = false; hasVolume = false; hasPressure = false; hasTemperature = false; hasElectronicTemperature = false; hasCOM = false; hasCOMvel = false; hasCOMw = false; hasPressureTensor = false; hasSystemDipole = false; hasSystemQuadrupole = false; hasConvectiveHeatFlux = false; hasInertiaTensor = false; hasGyrationalVolume = false; hasHullVolume = false; hasConservedQuantity = false; hasBoundingBox = false; }
void MomentumCorrFunc::preCorrelate() { // Fill the histogram with empty 3x3 matrices: std::fill(histogram_.begin(), histogram_.end(), Mat3x3d(0.0)); // count array set to zero std::fill(count_.begin(), count_.end(), 0); }