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

    • potential

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

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

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

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

      protected final int nVariables
      Number of variables.
    • molecularAssembly

      protected MolecularAssembly molecularAssembly
      The MolecularAssembly being simulated.
    • state

      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

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

    • OrthogonalSpaceTempering

      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

    • addHistogram

      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

      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

      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

      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

      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

      public double[] getAcceleration(double[] acceleration)
      getAcceleration.
      Specified by:
      getAcceleration in interface Potential
      Parameters:
      acceleration - an array of
      invalid reference
      double
      objects.
      Returns:
      an array of
      invalid reference
      double
      objects.
    • getAllHistograms

      public OrthogonalSpaceTempering.Histogram[] getAllHistograms()
    • getCoordinates

      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

      public Crystal getCrystal()
      Specified by:
      getCrystal in interface CrystalPotential
    • setCrystal

      public void setCrystal(Crystal crystal)
      Specified by:
      setCrystal in interface CrystalPotential
    • getEnergyCount

      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

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

      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

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

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

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

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

      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

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

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

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

      public double[] getPreviousAcceleration(double[] previousAcceleration)
      getPreviousAcceleration.
      Specified by:
      getPreviousAcceleration in interface Potential
      Parameters:
      previousAcceleration - an array of
      invalid reference
      double
      objects.
      Returns:
      an array of
      invalid reference
      double
      objects.
    • getScaling

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

      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

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

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

      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

      public double[] getVelocity(double[] velocity)
      getVelocity.
      Specified by:
      getVelocity in interface Potential
      Parameters:
      velocity - an array of
      invalid reference
      double
      objects.
      Returns:
      an array of
      invalid reference
      double
      objects.
    • getd2EdL2

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

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

      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

      public void logOutputFiles(int index)
    • setAcceleration

      public void setAcceleration(double[] acceleration)
      setAcceleration.
      Specified by:
      setAcceleration in interface Potential
      Parameters:
      acceleration - an array of
      invalid reference
      double
      objects.
    • setHardWallConstraint

      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

      public void setMolecularAssembly(MolecularAssembly molecularAssembly)
    • setPreviousAcceleration

      public void setPreviousAcceleration(double[] previousAcceleration)
      setPreviousAcceleration.
      Specified by:
      setPreviousAcceleration in interface Potential
      Parameters:
      previousAcceleration - an array of
      invalid reference
      double
      objects.
    • setPropagateLambda

      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

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

      public void setVelocity(double[] velocity)
      setVelocity.
      Specified by:
      setVelocity in interface Potential
      Parameters:
      velocity - an array of
      invalid reference
      double
      objects.
    • switchHistogram

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

      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.