Class GeneralizedKirkwood

java.lang.Object
ffx.potential.nonbonded.GeneralizedKirkwood
All Implemented Interfaces:
LambdaInterface

public class GeneralizedKirkwood extends Object implements LambdaInterface
This Generalized Kirkwood class implements GK for the AMOEBA polarizable atomic multipole force field in parallel using a NeighborList.
Since:
1.0
Author:
Michael J. Schnieders
derived from:
TINKER code by Michael J. Schnieders and Jay W. Ponder
See Also:
  • Field Details

    • DEFAULT_DIELECTRIC_OFFSET

      public static final double DEFAULT_DIELECTRIC_OFFSET
      Default dielectric offset
      See Also:
    • electric

      public double electric
      Conversion from electron**2/Ang to kcal/mole.
    • DEFAULT_TANH_BETA0

      public static final double DEFAULT_TANH_BETA0
      Default value of beta0 for tanh scaling
      See Also:
    • DEFAULT_TANH_BETA1

      public static final double DEFAULT_TANH_BETA1
      Default value of beta1 for tanh scaling
      See Also:
    • DEFAULT_TANH_BETA2

      public static final double DEFAULT_TANH_BETA2
      Default value of beta2 for tanh scaling
      See Also:
    • DEFAULT_GKC

      public static final double DEFAULT_GKC
      Default constant for the Generalized Kirkwood cross-term.
      See Also:
    • gkc

      @FFXProperty(name="gkc", propertyGroup=ImplicitSolvent, defaultValue="2.455", description="The Generalized Kirkwood cross-term parameter.") public final double gkc
      The Generalized Kirkwood cross-term parameter.
    • probe

      public final double probe
      Water probe radius.
    • DEFAULT_SOLVENT_PRESSURE

      public static final double DEFAULT_SOLVENT_PRESSURE
      Default solvent pressure for apolar models with an explicit volume term.

      From work by Chandler et al., the following relationship for cavitation free energy as a function of spherical particle size was found: Cross-Over = 3 * S.T. / S.P.

      A S.P. of 0.0334 kcal/mol/A^3 was obtained using explicit AMOEBA water simulations and solvent excluded volumes.

      A S.P. of 0.0343 kcal/mol/A^3 is obtained assuming a macroscopic surface tension of 0.103 kcal/mol/A^3 and a cross-over of 9.0 (i.e. S.P. = 3 * S.T. / Cross-Over)

      Both values are in reasonably good agreement, and 0.0334 is chosen as our default.

      See Also:
    • DEFAULT_CAVDISP_SURFACE_TENSION

      public static final double DEFAULT_CAVDISP_SURFACE_TENSION
      Default surface tension for apolar models with an explicit dispersion term.

      Experimental value: 0.103 kcal/mol/Ang^2

      More physical value, used for simulations: 0.080 kcal/mol/Ang^2

      See Also:
    • DEFAULT_CROSSOVER

      public static final double DEFAULT_CROSSOVER
      Using a S.P. of 0.0334 kcal/mol/A^3, and a limiting surface tension of 0.103 kcal/mol/A^2, the cross-over point is 9.2515 A.

      Using a S.P. of 0.0334 kcal/mol/A^3, and a limiting surface tension of 0.08 (i.e. 80% of the experimentally observed surface tension of 0.103 kcal/mol/A^2), we derive a cross-over of:

      9.251 A = 3 * 0.103 kcal/mol/A^2 / 0.0334 kcal/mol/A^3.

      See Also:
  • Constructor Details

  • Method Details

    • getUsePerfectRadii

      public boolean getUsePerfectRadii()
      GK is using perfect radii where available.
      Returns:
      True if using perfect radii.
    • getPerfectRadii

      public double[] getPerfectRadii()
      Return perfect Born radii read in as keywords, or base radii if perfect radii are not available.
      Returns:
      Array of perfect Born radii.
    • getNonPolarModel

      public static GeneralizedKirkwood.NonPolarModel getNonPolarModel(String nonpolarModel)
      getNonPolarModel.
      Parameters:
      nonpolarModel - a String object.
      Returns:
      a GeneralizedKirkwood.NonPolarModel object.
    • computeBornRadii

      public void computeBornRadii()
      computeBornRadii
    • computeInducedGKField

      public void computeInducedGKField()
      computeInducedGKField
    • computePermanentGKField

      public void computePermanentGKField()
      computePermanentGKField
    • getBaseRadii

      public double[] getBaseRadii()
      getBaseRadii.
      Returns:
      an array of
      invalid reference
      double
      objects.
    • getDescreenRadii

      public double[] getDescreenRadii()
      getDescreenRadii.
      Returns:
      an array of
      invalid reference
      double
      objects.
    • getCavitationEnergy

      public double getCavitationEnergy()
      Returns the cavitation component of the solvation energy.
      Returns:
      Cavitation energy
    • getChandlerCavitation

      public ChandlerCavitation getChandlerCavitation()
      Return the Chandler Cavitation instance.
      Returns:
      ChandlerCavitation instance.
    • getCutoff

      public double getCutoff()
      Getter for the field cutoff.
      Returns:
      a double.
    • setCutoff

      public void setCutoff(double cutoff)
      Setter for the field cutoff.
      Parameters:
      cutoff - a double.
    • getDielecOffset

      public double getDielecOffset()
      Returns the dielectric offset (in Angstroms).
      Returns:
      Currently: 0.09 Angstroms.
    • getDescreenOffset

      public double getDescreenOffset()
      Return the descreening dielectric offset.
      Returns:
      The offset (A).
    • getDispersionEnergy

      public double getDispersionEnergy()
      Returns the dispersion component of the solvation energy.
      Returns:
      Dispersion energy
    • getDispersionRegion

      public DispersionRegion getDispersionRegion()
    • getFieldGK

      public AtomicDoubleArray3D getFieldGK()
    • getFieldGKCR

      public AtomicDoubleArray3D getFieldGKCR()
    • getSurfaceAreaRegion

      public SurfaceAreaRegion getSurfaceAreaRegion()
    • getGeneralizedKirkwoordEnergy

      public double getGeneralizedKirkwoordEnergy()
      Returns the GK component of the solvation energy.
      Returns:
      GK electrostatic energy
    • getGeneralizedKirkwoordPermanentEnergy

      public double getGeneralizedKirkwoordPermanentEnergy()
      Returns the GK component of the solvation energy.
      Returns:
      GK electrostatic energy
    • getGeneralizedKirkwoordPolariztionEnergy

      public double getGeneralizedKirkwoordPolariztionEnergy()
      Returns the GK component of the solvation energy.
      Returns:
      GK electrostatic energy
    • getGrad

      public AtomicDoubleArray3D getGrad()
    • getInteractions

      public int getInteractions()
      getInteractions
      Returns:
      a int.
    • getLambda

      public double getLambda()
      Get the current value of the state variable.
      Specified by:
      getLambda in interface LambdaInterface
      Returns:
      state
    • setLambda

      public void setLambda(double lambda)
      Set the current value of the state variable. May be ignored if lambda is not being applied.

      Updates the value of lPow.

      Specified by:
      setLambda in interface LambdaInterface
      Parameters:
      lambda - a double.
    • getNativeEnvironmentApproximation

      public boolean getNativeEnvironmentApproximation()
      Checks whether GK uses the Native Environment Approximation.

      This (previously known as born-use-all) is useful for rotamer optimization under continuum solvent. If a large number of sidechain atoms are completely removed from the GK/GB calculation, the remaining sidechains are overly solvated. The NEA says "we will keep all sidechains not under optimization in some default state and let them contribute to Born radii calculations, but still exclude their solvation energy components."

      Returns:
      Whether the NEA is in use.
    • getNonPolarModel

      public GeneralizedKirkwood.NonPolarModel getNonPolarModel()
      getNonPolarModel.
      Returns:
      a GeneralizedKirkwood.NonPolarModel object.
    • getOverlapScale

      public double[] getOverlapScale()
      Getter for the field overlapScale.
      Returns:
      an array of
      invalid reference
      double
      objects.
    • getNeckScale

      public double[] getNeckScale()
      Getter for the field neckScale.
      Returns:
      an array of
      invalid reference
      double
      objects.
    • getTanhCorrection

      public boolean getTanhCorrection()
    • getProbeRadius

      public double getProbeRadius()
      Returns the probe radius (typically 1.4 Angstroms).
      Returns:
      Radius of the solvent probe.
    • getSolventPermittivity

      public double getSolventPermittivity()
      Returns the solvent relative permittivity (typically 78.3).
      Returns:
      Relative permittivity of the solvent.
    • getSolutePermittivity

      public double getSolutePermittivity()
      Returns the solvent relative permittivity (typically 1.0).
      Returns:
      Relative permittivity of the solute.
    • getSurfaceTension

      public double getSurfaceTension()
      Getter for the field surfaceTension.
      Returns:
      a double.
    • getTorque

      public AtomicDoubleArray3D getTorque()
    • getd2EdL2

      public double getd2EdL2()
      Get the 2nd partial derivative of the energy with respect to lambda.

      The 2nd derivative is 0.0. (U=Lambda*Egk, dU/dL=Egk, d2U/dL2=0.0)

      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.

      These contributions are already aggregated into the arrays used by PME.

      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).
    • init

      public void init()
    • reduce

    • getSelfEnergy

      public AtomicDoubleArray getSelfEnergy()
    • getBorn

      public double[] getBorn()
    • setElementHCTScaleFactors

      public void setElementHCTScaleFactors(HashMap<Integer,Double> elementHCT)
      Setter for element-specific HCT overlap scale factors
      Parameters:
      elementHCT - HashMap containing element name keys and scale factor values
    • setAtoms

      public void setAtoms(Atom[] atoms)
      Setter for the field atoms.
      Parameters:
      atoms - an array of Atom objects.
    • setCrystal

      public void setCrystal(Crystal crystal)
      Setter for the field crystal.
      Parameters:
      crystal - a Crystal object.
    • setNeighborList

      public void setNeighborList(int[][][] neighbors)
      setNeighborList.
      Parameters:
      neighbors - an array of
      invalid reference
      int
      objects.
    • setUse

      public void setUse(boolean[] use)
      Setter for the field use.
      Parameters:
      use - an array of
      invalid reference
      boolean
      objects.
    • solvationEnergy

      public double solvationEnergy(boolean gradient, boolean print)
      solvationEnergy
      Parameters:
      gradient - a boolean.
      print - a boolean.
      Returns:
      a double.
    • solvationEnergy

      public double solvationEnergy(double gkInducedCorrectionEnergy, boolean gradient, boolean print)
      solvationEnergy
      Parameters:
      gkInducedCorrectionEnergy - GK vacuum to SCRF polarization energy cost.
      gradient - a boolean.
      print - a boolean.
      Returns:
      a double.
    • udpateSoluteParameters

      public void udpateSoluteParameters(int i)
      Update GK solute parameters for a given atom. This should only be called after each atom is assigned a "SoluteType".
      Parameters:
      i - The atom to update.
    • applySoluteRadii

      public void applySoluteRadii()
      Apply solute radii definitions used to calculate Born radii.
    • setSneck

      public void setSneck(double sneck_input)
    • getTanhBetas

      public double[] getTanhBetas()
    • setTanhBetas

      public void setTanhBetas(double[] betas)