Open Qmin
0.8.0
GPU-accelerated Q-tensor-based liquid crystal simulations
|
Implement energy minimization via the FIRE algorithm. More...
#include <energyMinimizerGradientDescent.h>
Public Member Functions | |
energyMinimizerGradientDescent () | |
The basic constructor. More... | |
energyMinimizerGradientDescent (shared_ptr< simpleModel > system) | |
The basic constructor that feeds in a target system to minimize. More... | |
virtual void | initializeParameters () |
Sets a bunch of default parameters that do not depend on the number of degrees of freedom. More... | |
void | initializeFromModel () |
Set a bunch of default initialization parameters (if the State is available to determine the size of vectors) More... | |
void | setGradientDescentParameters (scalar deltaT, scalar forceCutoff) |
Set a lot of parameters! More... | |
void | setForceCutoff (scalar fc) |
Set the force cutoff. More... | |
void | gradientDescentStep () |
an interface to call either the CPU or GPU FIRE algorithm More... | |
void | gradientDescentCPU () |
Perform a velocity Verlet step on the CPU. More... | |
void | gradientDescentGPU () |
Perform a velocity Verlet step on the GPU. More... | |
void | minimize () |
Minimize to either the force tolerance or the maximum number of iterations. More... | |
virtual void | performUpdate () |
The "intergate equatios of motion just calls minimize. More... | |
virtual scalar | getMaxForce () |
Return the maximum force. More... | |
virtual scalar | getClassSize () |
virtual void | integrateEquationOfMotion () |
virtual void | integrateEOMGPU () |
virtual void | integrateEOMCPU () |
virtual void | Update (int timestep) |
The fundamental function that a controlling Simulation can call. More... | |
void | setSimulation (shared_ptr< basicSimulation > _sim) |
set the simulation More... | |
virtual void | setModel (shared_ptr< simpleModel > _model) |
virtual function to allow the model to be a derived class More... | |
void | setPeriod (int _p) |
set the period More... | |
void | setPhase (int _p) |
set the phase More... | |
virtual void | spatialSorting () |
allow for spatial sorting to be called if necessary... More... | |
virtual void | setReproducible (bool rep) |
Allow for a reproducibility call to be made. More... | |
virtual void | setGPU (bool _useGPU=true) |
Enforce GPU operation. More... | |
int | getNdof () |
Get the number of degrees of freedom of the equation of motion. More... | |
void | setNdof (int _n) |
Set the number of degrees of freedom of the equation of motion. More... | |
virtual void | setDeltaT (scalar dt) |
allow all updaters to potentially implement an internal time scale More... | |
virtual void | setNThreads (int n) |
allow for setting multiple threads More... | |
void | setMaximumIterations (int maxIt) |
Set the maximum number of iterations before terminating (or set to -1 to ignore) More... | |
int | getCurrentIterations () |
int | getMaxIterations () |
void | setCurrentIterations (int newIterations) |
int | getNTotal () |
communicate the number of non-object sites across ranks More... | |
Public Attributes | |
GPUArray< dVec > | displacement |
an array of displacements More... | |
shared_ptr< basicSimulation > | sim |
A pointer to the governing simulation. More... | |
shared_ptr< simpleModel > | model |
A pointer to a simpleModel that the updater acts on. More... | |
vector< scalar > | updaterData |
int | iterations |
The number of iterations performed. More... | |
Protected Attributes | |
scalar | forceMax |
sqrt(force.force) / N_{dof} More... | |
scalar | forceCutoff |
The cutoff value of the maximum force. More... | |
shared_ptr< kernelTuner > | dotProductTuner |
kernel tuner for performance More... | |
GPUArray< scalar > | sumReductionIntermediate |
Utility array for simple reductions. More... | |
GPUArray< scalar > | sumReductionIntermediate2 |
int | nThreads =1 |
number of threads to use More... | |
int | Period |
The period of the updater... the updater will work every Period timesteps. More... | |
int | Phase |
The phase of the updater... the updater will work every Period timesteps offset by a phase. More... | |
bool | useGPU |
whether the updater does its work on the GPU or not More... | |
bool | neverGPU |
whether the updater never does work on the GPU More... | |
int | Ndof |
some measure of the number of degrees of freedom the equations of motion might need to know about locally More... | |
int | nTotal |
the total number of non-object sites across all ranks More... | |
bool | reproducible |
whether the RNGs give reproducible results More... | |
scalar | deltaT |
The internal time step size. More... | |
int | maxIterations |
The maximum number of iterations allowed. More... | |
Implement energy minimization via the FIRE algorithm.
This class uses a simple gradient descent algorithm The class is in the same framework as the simpleEquationOfMotion class, so it is called by calling performTimestep on a Simulation object that has been given the minimizer and the configuration to minimize. Each timestep, though, is a complete minimization (i.e. will run for the maximum number of iterations, or until a target tolerance has been acheived, or whatever stopping condition the user sets.
|
inline |
The basic constructor.
References initializeParameters().
energyMinimizerGradientDescent::energyMinimizerGradientDescent | ( | shared_ptr< simpleModel > | system | ) |
The basic constructor that feeds in a target system to minimize.
Initialize the minimizer with a reference to a target system, set a bunch of default parameters. Of note, the current default is CPU operation
References initializeFromModel(), initializeParameters(), and updater::setModel().
|
virtual |
Sets a bunch of default parameters that do not depend on the number of degrees of freedom.
Initialize the minimizer with some default parameters. that do not depend on Ndof
References dotProductTuner, updater::iterations, updater::setDeltaT(), setForceCutoff(), updater::setGPU(), updater::setMaximumIterations(), and updater::updaterData.
Referenced by energyMinimizerGradientDescent().
|
virtual |
Set a bunch of default initialization parameters (if the State is available to determine the size of vectors)
Initialize the minimizer with some default parameters.
Reimplemented from equationOfMotion.
References equationOfMotion::displacement, updater::model, updater::Ndof, updater::neverGPU, GPUArray< T >::noGPU, GPUArray< T >::resize(), sumReductionIntermediate, and sumReductionIntermediate2.
Referenced by energyMinimizerGradientDescent(), and minimize().
void energyMinimizerGradientDescent::setGradientDescentParameters | ( | scalar | deltaT, |
scalar | forceCutoff | ||
) |
Set a lot of parameters!
References updater::deltaT, forceCutoff, updater::setDeltaT(), and setForceCutoff().
|
inline |
Set the force cutoff.
References forceCutoff.
Referenced by initializeParameters(), and setGradientDescentParameters().
void energyMinimizerGradientDescent::gradientDescentStep | ( | ) |
an interface to call either the CPU or GPU FIRE algorithm
Call the correct FIRE step routine
References gradientDescentCPU(), gradientDescentGPU(), and updater::useGPU.
Referenced by minimize().
void energyMinimizerGradientDescent::gradientDescentCPU | ( | ) |
Perform a velocity Verlet step on the CPU.
Perform a GD minimization step on the CPU
References updater::deltaT, dot(), forceMax, updater::model, updater::Ndof, updater::nTotal, scalar, updater::sim, and updater::updaterData.
Referenced by gradientDescentStep().
void energyMinimizerGradientDescent::gradientDescentGPU | ( | ) |
Perform a velocity Verlet step on the GPU.
Perform a GD minimization step on the GPU
References updater::deltaT, forceMax, gpu_gpuarray_dVec_dot_products(), updater::model, updater::Ndof, updater::nTotal, scalar, updater::sim, sumReductionIntermediate, sumReductionIntermediate2, and updater::updaterData.
Referenced by gradientDescentStep().
void energyMinimizerGradientDescent::minimize | ( | ) |
Minimize to either the force tolerance or the maximum number of iterations.
Perform a GD minimization sequence...attempts to get attain: (1/N)\sum_i|f_i|^2 < forceCutoff
References forceCutoff, forceMax, gradientDescentStep(), initializeFromModel(), updater::iterations, updater::model, updater::Ndof, and updater::sim.
Referenced by performUpdate().
|
inlinevirtual |
The "intergate equatios of motion just calls minimize.
Reimplemented from equationOfMotion.
References minimize().
|
inlinevirtual |
|
inlinevirtual |
Reimplemented from equationOfMotion.
References equationOfMotion::getClassSize(), GPUArray< T >::getNumElements(), scalar, sumReductionIntermediate, and sumReductionIntermediate2.
|
inlinevirtualinherited |
|
inlinevirtualinherited |
Reimplemented in velocityVerlet.
Referenced by equationOfMotion::integrateEquationOfMotion().
|
inlinevirtualinherited |
Reimplemented in velocityVerlet.
Referenced by equationOfMotion::integrateEquationOfMotion().
|
inlinevirtualinherited |
The fundamental function that a controlling Simulation can call.
References updater::performUpdate(), updater::Period, and updater::Phase.
|
inlineinherited |
set the simulation
References updater::sim.
|
inlinevirtualinherited |
virtual function to allow the model to be a derived class
References updater::initializeFromModel(), and updater::model.
Referenced by energyMinimizerFIRE::energyMinimizerFIRE(), energyMinimizerGradientDescent(), energyMinimizerLoLBFGS::energyMinimizerLoLBFGS(), and energyMinimizerNesterovAG::energyMinimizerNesterovAG().
|
inlineinherited |
set the period
References updater::Period.
|
inlineinherited |
set the phase
References updater::Phase.
|
inlinevirtualinherited |
allow for spatial sorting to be called if necessary...
|
inlinevirtualinherited |
Allow for a reproducibility call to be made.
References updater::reproducible.
|
inlinevirtualinherited |
Enforce GPU operation.
References updater::useGPU.
Referenced by energyMinimizerNesterovAG::initializeParameters(), energyMinimizerLoLBFGS::initializeParameters(), initializeParameters(), and energyMinimizerFIRE::initializeParameters().
|
inlineinherited |
Get the number of degrees of freedom of the equation of motion.
References updater::Ndof.
|
inlineinherited |
Set the number of degrees of freedom of the equation of motion.
References updater::Ndof.
|
inlinevirtualinherited |
allow all updaters to potentially implement an internal time scale
Reimplemented in energyMinimizerFIRE.
References updater::deltaT.
Referenced by initializeParameters(), and setGradientDescentParameters().
|
inlinevirtualinherited |
allow for setting multiple threads
References n, and updater::nThreads.
|
inlineinherited |
Set the maximum number of iterations before terminating (or set to -1 to ignore)
References updater::maxIterations.
Referenced by energyMinimizerNesterovAG::initializeParameters(), energyMinimizerLoLBFGS::initializeParameters(), initializeParameters(), and energyMinimizerFIRE::initializeParameters().
|
inlineinherited |
References updater::iterations.
|
inlineinherited |
References updater::maxIterations.
|
inlineinherited |
References updater::iterations.
|
inherited |
communicate the number of non-object sites across ranks
References access_location::host, updater::model, updater::Ndof, updater::nTotal, access_mode::read, updater::sim, and updater::updaterData.
|
protected |
sqrt(force.force) / N_{dof}
Referenced by getMaxForce(), gradientDescentCPU(), gradientDescentGPU(), and minimize().
|
protected |
The cutoff value of the maximum force.
Referenced by minimize(), setForceCutoff(), and setGradientDescentParameters().
|
protected |
kernel tuner for performance
Referenced by initializeParameters().
Utility array for simple reductions.
Referenced by getClassSize(), gradientDescentGPU(), and initializeFromModel().
Referenced by getClassSize(), gradientDescentGPU(), and initializeFromModel().
|
inherited |
an array of displacements
Referenced by energyMinimizerAdam::adamStepCPU(), energyMinimizerAdam::adamStepGPU(), equationOfMotion::getClassSize(), energyMinimizerAdam::initializeFromModel(), equationOfMotion::initializeFromModel(), initializeFromModel(), energyMinimizerFIRE::initializeFromModel(), velocityVerlet::integrateEOMCPU(), and velocityVerlet::integrateEOMGPU().
|
inherited |
A pointer to the governing simulation.
Referenced by energyMinimizerAdam::adamStepCPU(), energyMinimizerAdam::adamStepGPU(), energyMinimizerFIRE::fireStepCPU(), energyMinimizerFIRE::fireStepGPU(), updater::getNTotal(), gradientDescentCPU(), gradientDescentGPU(), velocityVerlet::integrateEOMCPU(), velocityVerlet::integrateEOMGPU(), energyMinimizerLoLBFGS::lineSearchCPU(), energyMinimizerLoLBFGS::LoLBFGSStepCPU(), energyMinimizerLoLBFGS::LoLBFGSStepGPU(), energyMinimizerAdam::minimize(), energyMinimizerNesterovAG::minimize(), minimize(), energyMinimizerFIRE::minimize(), energyMinimizerNesterovAG::nesterovStepCPU(), energyMinimizerNesterovAG::nesterovStepGPU(), updater::performUpdate(), and updater::setSimulation().
|
inherited |
A pointer to a simpleModel that the updater acts on.
Referenced by energyMinimizerAdam::adamStepCPU(), energyMinimizerAdam::adamStepGPU(), energyMinimizerFIRE::fireStepCPU(), energyMinimizerFIRE::fireStepGPU(), updater::getNTotal(), gradientDescentCPU(), gradientDescentGPU(), energyMinimizerAdam::initializeFromModel(), energyMinimizerNesterovAG::initializeFromModel(), energyMinimizerLoLBFGS::initializeFromModel(), equationOfMotion::initializeFromModel(), initializeFromModel(), energyMinimizerFIRE::initializeFromModel(), updater::initializeFromModel(), velocityVerlet::integrateEOMCPU(), velocityVerlet::integrateEOMGPU(), equationOfMotion::integrateEquationOfMotion(), energyMinimizerLoLBFGS::lineSearchCPU(), energyMinimizerLoLBFGS::LoLBFGSStepCPU(), energyMinimizerLoLBFGS::LoLBFGSStepGPU(), energyMinimizerAdam::minimize(), energyMinimizerNesterovAG::minimize(), energyMinimizerLoLBFGS::minimize(), minimize(), energyMinimizerFIRE::minimize(), energyMinimizerNesterovAG::nesterovStepCPU(), energyMinimizerNesterovAG::nesterovStepGPU(), and updater::setModel().
|
inherited |
|
inherited |
The number of iterations performed.
Referenced by energyMinimizerFIRE::fireStepCPU(), energyMinimizerFIRE::fireStepGPU(), updater::getCurrentIterations(), energyMinimizerAdam::initializeFromModel(), energyMinimizerNesterovAG::initializeParameters(), energyMinimizerLoLBFGS::initializeParameters(), initializeParameters(), energyMinimizerFIRE::initializeParameters(), energyMinimizerLoLBFGS::LoLBFGSStepCPU(), energyMinimizerLoLBFGS::LoLBFGSStepGPU(), energyMinimizerAdam::minimize(), energyMinimizerNesterovAG::minimize(), energyMinimizerLoLBFGS::minimize(), minimize(), energyMinimizerFIRE::minimize(), and updater::setCurrentIterations().
|
protectedinherited |
number of threads to use
Referenced by updater::setNThreads().
|
protectedinherited |
The period of the updater... the updater will work every Period timesteps.
Referenced by updater::setPeriod(), updater::Update(), and updater::updater().
|
protectedinherited |
The phase of the updater... the updater will work every Period timesteps offset by a phase.
Referenced by updater::setPhase(), updater::Update(), and updater::updater().
|
protectedinherited |
whether the updater does its work on the GPU or not
Referenced by energyMinimizerFIRE::fireStep(), gradientDescentStep(), equationOfMotion::integrateEquationOfMotion(), energyMinimizerAdam::minimize(), energyMinimizerNesterovAG::minimize(), energyMinimizerLoLBFGS::minimize(), updater::setGPU(), and updater::updater().
|
protectedinherited |
whether the updater never does work on the GPU
Referenced by equationOfMotion::initializeFromModel(), initializeFromModel(), and energyMinimizerFIRE::initializeFromModel().
|
protectedinherited |
some measure of the number of degrees of freedom the equations of motion might need to know about locally
Referenced by energyMinimizerAdam::adamStepCPU(), energyMinimizerAdam::adamStepGPU(), energyMinimizerFIRE::fireStepCPU(), energyMinimizerFIRE::fireStepGPU(), updater::getNdof(), updater::getNTotal(), gradientDescentCPU(), gradientDescentGPU(), energyMinimizerAdam::initializeFromModel(), energyMinimizerNesterovAG::initializeFromModel(), energyMinimizerLoLBFGS::initializeFromModel(), equationOfMotion::initializeFromModel(), initializeFromModel(), energyMinimizerFIRE::initializeFromModel(), updater::initializeFromModel(), energyMinimizerFIRE::initializeParameters(), velocityVerlet::integrateEOMCPU(), velocityVerlet::integrateEOMGPU(), equationOfMotion::integrateEquationOfMotion(), energyMinimizerLoLBFGS::lineSearchCPU(), energyMinimizerLoLBFGS::LoLBFGSStepCPU(), energyMinimizerLoLBFGS::LoLBFGSStepGPU(), energyMinimizerAdam::minimize(), energyMinimizerNesterovAG::minimize(), energyMinimizerLoLBFGS::minimize(), minimize(), energyMinimizerFIRE::minimize(), energyMinimizerNesterovAG::nesterovStepCPU(), energyMinimizerNesterovAG::nesterovStepGPU(), and updater::setNdof().
|
protectedinherited |
the total number of non-object sites across all ranks
Referenced by energyMinimizerFIRE::fireStepCPU(), energyMinimizerFIRE::fireStepGPU(), updater::getNTotal(), gradientDescentCPU(), gradientDescentGPU(), and energyMinimizerFIRE::initializeParameters().
|
protectedinherited |
whether the RNGs give reproducible results
Referenced by updater::setReproducible(), and updater::updater().
|
protectedinherited |
The internal time step size.
Referenced by energyMinimizerAdam::adamStepCPU(), energyMinimizerAdam::adamStepGPU(), energyMinimizerFIRE::fireStepCPU(), energyMinimizerFIRE::fireStepGPU(), gradientDescentCPU(), gradientDescentGPU(), velocityVerlet::integrateEOMCPU(), velocityVerlet::integrateEOMGPU(), energyMinimizerLoLBFGS::minimize(), energyMinimizerFIRE::minimize(), energyMinimizerNesterovAG::nesterovStepCPU(), energyMinimizerNesterovAG::nesterovStepGPU(), energyMinimizerAdam::setAdamParameters(), energyMinimizerFIRE::setDeltaT(), updater::setDeltaT(), energyMinimizerFIRE::setFIREParameters(), setGradientDescentParameters(), energyMinimizerLoLBFGS::setLoLBFGSParameters(), and energyMinimizerNesterovAG::setNesterovAGParameters().
|
protectedinherited |
The maximum number of iterations allowed.
Referenced by updater::getMaxIterations(), energyMinimizerAdam::minimize(), energyMinimizerNesterovAG::minimize(), energyMinimizerLoLBFGS::minimize(), and updater::setMaximumIterations().