Class OrthogonalSpaceTempering

java.lang.Object
ffx.algorithms.thermodynamics.OrthogonalSpaceTempering
All Implemented Interfaces:
CrystalPotential, OptimizationInterface, Potential, LambdaInterface

public class OrthogonalSpaceTempering extends Object implements CrystalPotential, LambdaInterface
An implementation of the Orthogonal Space Tempering algorithm.

This only partially implements the LambdaInterface, since it does not return 2nd lambda derivatives. The 2nd derivatives of the bias require 3rd derivatives of the underlying Hamiltonian (not these derivatives are not needed for OST MD).

Since:
1.0
Author:
Michael J. Schnieders, James Dama, Wei Yang and Pengyu Ren
  • Field Details Link icon

    • potential Link icon

      protected final CrystalPotential potential
      The potential energy of the system.
    • barostat Link icon

      protected final Barostat barostat
      Reference to the Barostat in use; if present this must be turned off during optimization.
    • algorithmListener Link icon

      protected final AlgorithmListener algorithmListener
      The AlgorithmListener is called each time a count is added.
    • print Link icon

      protected final boolean print
      Print detailed energy information.
      See Also:
    • nVariables Link icon

      protected final int nVariables
      Number of variables.
    • molecularAssembly Link icon

      protected MolecularAssembly molecularAssembly
      The MolecularAssembly being simulated.
    • state Link icon

      protected Potential.STATE state
      Are FAST varying energy terms being computed, SLOW varying energy terms, or BOTH. OST is not active when only FAST varying energy terms are being propagated.
    • forceFieldEnergy Link icon

      protected double forceFieldEnergy
      Force Field Potential Energy (i.e. with no bias terms added).
  • Constructor Details Link icon

    • OrthogonalSpaceTempering Link icon

      public OrthogonalSpaceTempering(LambdaInterface lambdaInterface, CrystalPotential potential, HistogramData histogramData, LambdaData lambdaData, org.apache.commons.configuration2.CompositeConfiguration properties, DynamicsOptions dynamicsOptions, LambdaParticleOptions lambdaParticleOptions, AlgorithmListener algorithmListener)
      OST Constructor.
      Parameters:
      lambdaInterface - defines Lambda and dU/dL.
      potential - defines the Potential energy.
      histogramData - contains histogram restart data.
      lambdaData - contains lambda restart data.
      properties - defines System properties.
      dynamicsOptions - defines molecular dynamics parameters.
      lambdaParticleOptions - defines lambda particle parameters.
      algorithmListener - the AlgorithmListener to be notified of progress.
  • Method Details Link icon

    • addHistogram Link icon

      public void addHistogram(HistogramData histogramData, LambdaData lambdaData)
      Add an alternate Histogram this OST can use.
      Parameters:
      histogramData - Settings to use for the new Histogram.
    • dEdLZeroAtEnds Link icon

      public boolean dEdLZeroAtEnds()
      Returns true if dUdL is guaranteed to be zero at 0 and 1. Default implementation is to return false.
      Specified by:
      dEdLZeroAtEnds in interface LambdaInterface
      Returns:
      True if dUdL is guaranteed 0 at endpoints.
    • destroy Link icon

      public boolean destroy()
      Destroys this Potential and frees up any associated resources, particularly worker Threads. Default implementation is to return true (assume destruction successful).
      Specified by:
      destroy in interface OptimizationInterface
      Returns:
      If resource reclamation successful, or resources already reclaimed.
    • energy Link icon

      public double energy(double[] x)
      Compute the force field + bias energy.
      Specified by:
      energy in interface OptimizationInterface
      Parameters:
      x - Input parameters.
      Returns:
      Function value at x.
    • energyAndGradient Link icon

      public double energyAndGradient(double[] x, double[] gradient)
      This method is called repeatedly to compute the function energy and gradient.
      Specified by:
      energyAndGradient in interface OptimizationInterface
      Parameters:
      x - Input parameters.
      gradient - Output gradients with respect to each parameter.
      Returns:
      Function value at x.
    • getAcceleration Link icon

      public double[] getAcceleration(double[] acceleration)
      getAcceleration.
      Specified by:
      getAcceleration in interface Potential
      Parameters:
      acceleration - an array of double values.
      Returns:
      an array of double values.
    • getAllHistograms Link icon

      public OrthogonalSpaceTempering.Histogram[] getAllHistograms()
    • getCoordinates Link icon

      public double[] getCoordinates(double[] doubles)
      Load the current value of the parameters. If the supplied array is null or not large enough, a new one should be created. The filled array is returned.
      Specified by:
      getCoordinates in interface OptimizationInterface
      Parameters:
      doubles - Supplied array.
      Returns:
      The array filled with parameter values.
    • getCrystal Link icon

      public Crystal getCrystal()
      Get the Crystal instance that specifies the periodic boundary conditions and symmetry.
      Specified by:
      getCrystal in interface CrystalPotential
      Returns:
      a Crystal instance.
    • setCrystal Link icon

      public void setCrystal(Crystal crystal)
      Set the Crystal instance that specifies the periodic boundary conditions and symmetry.
      Specified by:
      setCrystal in interface CrystalPotential
      Parameters:
      crystal - a Crystal instance.
    • getEnergyCount Link icon

      public long getEnergyCount()
      Returns the number of energy evaluations performed by this OST, including those picked up in the lambda file.
      Returns:
      Number of energy steps taken by this walker.
    • getEnergyTermState Link icon

      public Potential.STATE getEnergyTermState()
      Get the Potential Energy terms that is active.
      Specified by:
      getEnergyTermState in interface Potential
      Returns:
      the STATE
    • setEnergyTermState Link icon

      public void setEnergyTermState(Potential.STATE state)
      Set the Potential Energy terms that should be active.
      Specified by:
      setEnergyTermState in interface Potential
      Parameters:
      state - include FAST varying energy terms, SLOW varying energy terms or BOTH.
    • getForceFieldEnergy Link icon

      public double getForceFieldEnergy()
      Getter for the field forceFieldEnergy.
      Returns:
      a double.
    • getHistogram Link icon

      public OrthogonalSpaceTempering.Histogram getHistogram()
      Return the current 2D Histogram of counts.
      Returns:
      the Histogram.
    • getLambda Link icon

      public double getLambda()
      Getter for the field lambda.
      Specified by:
      getLambda in interface LambdaInterface
      Returns:
      a double.
    • setLambda Link icon

      public void setLambda(double lambda)
      Setter for the field lambda.
      Specified by:
      setLambda in interface LambdaInterface
      Parameters:
      lambda - a double.
    • getMass Link icon

      public double[] getMass()
      Get the mass of each degree of freedom. This is required for molecular dynamics.
      Specified by:
      getMass in interface Potential
      Returns:
      The mass of each degree of freedom.
    • getNumberOfVariables Link icon

      public int getNumberOfVariables()
      Get the number of variables being operated on.
      Specified by:
      getNumberOfVariables in interface OptimizationInterface
      Returns:
      Number of variables.
    • getOptimizationParameters Link icon

      public OrthogonalSpaceTempering.OptimizationParameters getOptimizationParameters()
      Return the OST optimization information.
      Returns:
      The OST optimization parameters.
    • getPotentialEnergy Link icon

      public Potential getPotentialEnergy()
      getPotentialEnergy.
      Returns:
      a Potential object.
    • getPreviousAcceleration Link icon

      public double[] getPreviousAcceleration(double[] previousAcceleration)
      getPreviousAcceleration.
      Specified by:
      getPreviousAcceleration in interface Potential
      Parameters:
      previousAcceleration - an array of double values.
      Returns:
      an array of double values.
    • getScaling Link icon

      public double[] getScaling()
      Get the problem scaling.
      Specified by:
      getScaling in interface OptimizationInterface
      Returns:
      The scaling value used for each variable.
    • setScaling Link icon

      public void setScaling(double[] scaling)
      Scale the problem. A good choice for optimization is the square root of the median eigenvalue of a typical Hessian.
      Specified by:
      setScaling in interface OptimizationInterface
      Parameters:
      scaling - The scaling value to use for each variable.
    • getTotalEnergy Link icon

      public double getTotalEnergy()
      Get the total energy of the system
      Specified by:
      getTotalEnergy in interface OptimizationInterface
      Returns:
      the total energy
    • getTotaldEdLambda Link icon

      public double getTotaldEdLambda()
      getTotaldEdLambda.
      Returns:
      a double.
    • getVariableTypes Link icon

      public Potential.VARIABLE_TYPE[] getVariableTypes()
      Get the type of all variables.

      Return a reference to each variables type.

      Specified by:
      getVariableTypes in interface Potential
      Returns:
      The VARIABLE_TYPE of each variable.
    • getVelocity Link icon

      public double[] getVelocity(double[] velocity)
      getVelocity.
      Specified by:
      getVelocity in interface Potential
      Parameters:
      velocity - an array of double values.
      Returns:
      an array of double values.
    • getd2EdL2 Link icon

      public double getd2EdL2()
      Get the 2nd partial derivative of the energy with respect to lambda.
      Specified by:
      getd2EdL2 in interface LambdaInterface
      Returns:
      d2EdL2
    • getdEdL Link icon

      public double getdEdL()
      Get the partial derivative of the energy with respect to lambda.
      Specified by:
      getdEdL in interface LambdaInterface
      Returns:
      dEdL
    • getdEdXdL Link icon

      public void getdEdXdL(double[] gradient)
      Get the gradient of dEdL with respect to each parameter.
      Specified by:
      getdEdXdL in interface LambdaInterface
      Parameters:
      gradient - - A double array of length the number of parameters in the model (commonly 3 * number of atoms).
    • logOutputFiles Link icon

      public void logOutputFiles(int index)
    • setAcceleration Link icon

      public void setAcceleration(double[] acceleration)
      setAcceleration.
      Specified by:
      setAcceleration in interface Potential
      Parameters:
      acceleration - an array of double values.
    • setHardWallConstraint Link icon

      public void setHardWallConstraint(boolean hardWallConstraint)
      If this flag is true, (lambda, dU/dL) Monte Carlo samples that have no weight in the Histogram are rejected.
      Parameters:
      hardWallConstraint - If true, MC samples outside the current range are rejected.
    • setMolecularAssembly Link icon

      public void setMolecularAssembly(MolecularAssembly molecularAssembly)
    • setPreviousAcceleration Link icon

      public void setPreviousAcceleration(double[] previousAcceleration)
      setPreviousAcceleration.
      Specified by:
      setPreviousAcceleration in interface Potential
      Parameters:
      previousAcceleration - an array of double values.
    • setPropagateLambda Link icon

      public void setPropagateLambda(boolean propagateLambda)
      Indicate if the Lambda extended system particle should be propagated using Langevin dynamics.
      Parameters:
      propagateLambda - If true, Lambda will be propagated using Langevin dynamics.
    • getPropagateLambda Link icon

      public boolean getPropagateLambda()
      If true, the Lambda extended system particle is propagated using Langevin dynamics.
    • setVelocity Link icon

      public void setVelocity(double[] velocity)
      setVelocity.
      Specified by:
      setVelocity in interface Potential
      Parameters:
      velocity - an array of double values.
    • switchHistogram Link icon

      public void switchHistogram(int index)
      Switch to an alternate Histogram.
      Parameters:
      index - Index of the Histogram to use.
    • writeAdditionalRestartInfo Link icon

      public void writeAdditionalRestartInfo(boolean recursive)
      Description copied from interface: Potential
      Writes additional restart information, if any (e.g. OST histogram and lambda restart files). The recursive flag should generally only be true for the top-level Potential called.
      Specified by:
      writeAdditionalRestartInfo in interface Potential
      Parameters:
      recursive - Whether to have all underlying Potentials write additional restart info.