Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
248a01f4
Commit
248a01f4
authored
Nov 23, 2009
by
Mark Friedrichs
Browse files
Library to check that forces agree across platforms
parent
4cbb82d4
Changes
4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
3270 additions
and
0 deletions
+3270
-0
libraries/validate/include/ValidateOpenMM.h
libraries/validate/include/ValidateOpenMM.h
+541
-0
libraries/validate/include/ValidateOpenMMForces.h
libraries/validate/include/ValidateOpenMMForces.h
+382
-0
libraries/validate/src/ValidateOpenMM.cpp
libraries/validate/src/ValidateOpenMM.cpp
+1470
-0
libraries/validate/src/ValidateOpenMMForces.cpp
libraries/validate/src/ValidateOpenMMForces.cpp
+877
-0
No files found.
libraries/validate/include/ValidateOpenMM.h
0 → 100644
View file @
248a01f4
#ifndef VALIDATE_OPENMM_H_
#define VALIDATE_OPENMM_H_
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2008 Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* -------------------------------------------------------------------------- */
#include "OpenMM.h"
#include "../../../platforms/reference/include/ReferencePlatform.h"
#include "openmm/Context.h"
#include "openmm/System.h"
// free-energy plugin includes
//#define INCLUDE_FREE_ENERGY_PLUGIN
#ifdef INCLUDE_FREE_ENERGY_PLUGIN
#include "../../../plugins/freeEnergy/openmmapi/include/OpenMMFreeEnergy.h"
#include "../../../plugins/freeEnergy/openmmapi/include/openmm/freeEnergyKernels.h"
#include "../../../plugins/freeEnergy/platforms/reference/include/ReferenceFreeEnergyPlatform.h"
#endif
#include <sstream>
#include <typeinfo>
#ifdef _MSC_VER
#define isinf !_finite
#define isnan _isnan
#endif
namespace
OpenMM
{
typedef
std
::
map
<
std
::
string
,
int
>
StringIntMap
;
typedef
StringIntMap
::
iterator
StringIntMapI
;
typedef
StringIntMap
::
const_iterator
StringIntMapCI
;
typedef
std
::
map
<
std
::
string
,
double
>
StringDoubleMap
;
typedef
StringDoubleMap
::
iterator
StringDoubleMapI
;
typedef
StringDoubleMap
::
const_iterator
StringDoubleMapCI
;
typedef
std
::
map
<
std
::
string
,
unsigned
int
>
StringUIntMap
;
typedef
StringUIntMap
::
iterator
StringUIntMapI
;
typedef
StringUIntMap
::
const_iterator
StringUIntMapCI
;
typedef
std
::
vector
<
std
::
string
>
StringVector
;
typedef
StringVector
::
iterator
StringVectorI
;
typedef
StringVector
::
const_iterator
StringVectorCI
;
typedef
std
::
vector
<
int
>
IntVector
;
typedef
IntVector
::
iterator
IntVectorI
;
typedef
IntVector
::
const_iterator
IntVectorCI
;
typedef
std
::
map
<
std
::
string
,
std
::
vector
<
std
::
string
>
>
StringStringVectorMap
;
typedef
StringStringVectorMap
::
iterator
StringStringVectorMapI
;
typedef
StringStringVectorMap
::
const_iterator
StringStringVectorMapCI
;
/**
* Base class w/ common functionality
*/
class
ValidateOpenMM
{
public:
ValidateOpenMM
(
void
);
~
ValidateOpenMM
();
// force names
static
const
std
::
string
HARMONIC_BOND_FORCE
;
static
const
std
::
string
HARMONIC_ANGLE_FORCE
;
static
const
std
::
string
PERIODIC_TORSION_FORCE
;
static
const
std
::
string
RB_TORSION_FORCE
;
static
const
std
::
string
NB_FORCE
;
static
const
std
::
string
NB_SOFTCORE_FORCE
;
static
const
std
::
string
NB_EXCEPTION_FORCE
;
static
const
std
::
string
NB_EXCEPTION_SOFTCORE_FORCE
;
static
const
std
::
string
GBSA_OBC_FORCE
;
static
const
std
::
string
GBSA_OBC_SOFTCORE_FORCE
;
static
const
std
::
string
GBVI_FORCE
;
static
const
std
::
string
GBVI_SOFTCORE_FORCE
;
static
const
std
::
string
CM_MOTION_REMOVER
;
static
const
std
::
string
ANDERSEN_THERMOSTAT
;
static
const
std
::
string
CUSTOM_BOND_FORCE
;
static
const
std
::
string
CUSTOM_EXTERNAL_FORCE
;
static
const
std
::
string
CUSTOM_NONBONDED_FORCE
;
/**
* Return true if input number is nan
*
* @param number number to test
*
* @return true if number is nan
*/
static
int
isNan
(
double
number
);
/**
* Get force name
*
* @param force OpenMM system force
*
* @return force name or "NA" if force is not recognized
*/
std
::
string
getForceName
(
const
Force
&
force
)
const
;
/**
* Copy force
*
* @param force OpenMM system force to copy
*
* @return force or NULL if not recognized
*/
Force
*
copyForce
(
const
Force
&
force
)
const
;
/**
* Get copy of input system, but omit forces
*
* @param systemToCopy system to copy
*
* @return copy of system but w/o forces
*/
System
*
copySystemExcludingForces
(
const
System
&
systemToCopy
)
const
;
/**
*
* Set the velocities/positions of context2 to those of context1
*
* @param context1 context1
* @param context2 context2
*
* @return 0
*/
void
synchContexts
(
const
Context
&
context1
,
Context
&
context2
)
const
;
/**
*
* Get log FILE* reference
*
* @return log
*
*/
FILE
*
getLog
(
)
const
;
/**
*
* Set log FILE* reference
*
* @param log log
*
*/
void
setLog
(
FILE
*
log
);
/**---------------------------------------------------------------------------------------
Copy harmonic bond force
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
Force
*
copyHarmonicBondForce
(
const
HarmonicBondForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy harmonic angle
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
Force
*
copyHarmonicAngleForce
(
const
HarmonicAngleForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy PeriodicTorsionForce
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
Force
*
copyPeriodicTorsionForce
(
const
PeriodicTorsionForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy RBTorsionForce
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
Force
*
copyRBTorsionForce
(
const
RBTorsionForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy NonbondedException force
@param forceToCopy force to copy
@param nonbondedForce force to copy execeptions to
@param log log file pointer -- may be NULL
--------------------------------------------------------------------------------------- */
void
copyNonbondedExceptions
(
const
NonbondedForce
&
forceToCopy
,
NonbondedForce
*
nonbondedForce
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy NonbondedSoftcoreExceptions force (free energy plugin force)
@param forceToCopy force to copy
@param nonbondedForce force to copy execeptions to
@param log log file pointer -- may be NULL
--------------------------------------------------------------------------------------- */
#ifdef INCLUDE_FREE_ENERGY_PLUGIN
void
copyNonbondedSoftcoreExceptions
(
const
NonbondedSoftcoreForce
&
forceToCopy
,
NonbondedSoftcoreForce
*
nonbondedForce
,
FILE
*
log
=
NULL
)
const
;
#endif
/**---------------------------------------------------------------------------------------
Copy NonbondedForce
@param forceToCopy force to copy
@param nonbondedForce force to copy execeptions to
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
Force
*
copyNonbondedForce
(
const
NonbondedForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy NonbondedSoftcoreForce (free energy plugin force)
@param forceToCopy force to copy
@param nonbondedForce force to copy execeptions to
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
#ifdef INCLUDE_FREE_ENERGY_PLUGIN
Force
*
copyNonbondedSoftcoreForce
(
const
NonbondedSoftcoreForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
#endif
/**---------------------------------------------------------------------------------------
Copy GBSAOBCForce
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
Force
*
copyGBSAOBCForce
(
const
GBSAOBCForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy GBSAOBCSoftcoreForce (free energy plugin force)
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
#ifdef INCLUDE_FREE_ENERGY_PLUGIN
Force
*
copyGBSAOBCSoftcoreForce
(
const
GBSAOBCSoftcoreForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
#endif
/**---------------------------------------------------------------------------------------
Copy GBVIForce
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
Force
*
copyGBVIForce
(
const
GBVIForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Copy GBVISoftcoreForce (free energy plugin force)
@param forceToCopy force to copy
@param log log file pointer -- may be NULL
@return copy of force
--------------------------------------------------------------------------------------- */
#ifdef INCLUDE_FREE_ENERGY_PLUGIN
Force
*
copyGBVISoftcoreForce
(
const
GBVISoftcoreForce
&
forceToCopy
,
FILE
*
log
=
NULL
)
const
;
#endif
/**---------------------------------------------------------------------------------------
Copy constraints
@param systemToCopy system whose constraints are to be copied
@param system system to add constraints to
@param log log file pointer -- may be NULL
--------------------------------------------------------------------------------------- */
void
copyConstraints
(
const
System
&
systemToCopy
,
System
*
system
,
FILE
*
log
=
NULL
)
const
;
/**---------------------------------------------------------------------------------------
Get force dependencies
@param forceName force to check if there exist any dependencies
@param returnVector vector of forces the input force is dependent on (example: GBSAOBC force requires Nonbonded force since
on Cuda platofrm they are computed in same loop and hence are inseparable)
--------------------------------------------------------------------------------------- */
void
getForceDependencies
(
std
::
string
forceName
,
StringVector
&
returnVector
)
const
;
/**
* Write masses to parameter file
*
* @param filePtr file to write masses to
* @param system write masses in system
*/
void
writeMasses
(
FILE
*
filePtr
,
const
System
&
system
)
const
;
/**
* Write constraints to parameter file
*
* @param filePtr file to write constraints to
* @param system write constraints in system
*
*/
void
writeConstraints
(
FILE
*
filePtr
,
const
System
&
system
)
const
;
/**
* Write harmonicBondForce parameters to file
*
* @param filePtr file to write forces to
* @param harmonicBondForce write harmonicBondForce parameters
*
*/
void
writeHarmonicBondForce
(
FILE
*
filePtr
,
const
HarmonicBondForce
&
harmonicBondForce
)
const
;
/**
* Write harmonicAngleForce parameters to file
*
* @param filePtr file to write forces to
* @param harmonicAngleForce write harmonicAngleForce parameters
*
*/
void
writeHarmonicAngleForce
(
FILE
*
filePtr
,
const
HarmonicAngleForce
&
harmonicAngleForce
)
const
;
/**
* Write rbTorsionForce parameters to file
*
* @param filePtr file to write forces to
* @param rbTorsionForce write rbTorsionForce parameters
*
*/
void
writeRbTorsionForce
(
FILE
*
filePtr
,
const
RBTorsionForce
&
rbTorsionForce
)
const
;
/**
* Write periodicTorsionForce parameters to file
*
* @param filePtr file to write forces to
* @param periodicTorsionForce write periodicTorsionForce parameters
*
*/
void
writePeriodicTorsionForce
(
FILE
*
filePtr
,
const
PeriodicTorsionForce
&
periodicTorsionForce
)
const
;
/**
* Write nonbonded parameters to file
*
* @param filePtr file to write forces to
* @param nonbondedForce write nonbondedForce parameters
*
*/
void
writeNonbondedForce
(
FILE
*
filePtr
,
const
NonbondedForce
&
nonbondedForce
)
const
;
/**
* Write GBSAOBCForce parameters to file
*
* @param filePtr file to write forces to
* @param gbsaObcForce write gbsaObcForce parameters
*
*/
void
writeGbsaObcForce
(
FILE
*
filePtr
,
const
GBSAOBCForce
&
gbsaObcForce
)
const
;
/**
* Write GBSA GB/VI Force parameters to file
*
* @param filePtr file to write forces to
* @param gbviObcForce write gbviObcForce parameters
*
*/
void
writeGBVIForce
(
FILE
*
filePtr
,
const
GBVIForce
&
gbviForce
)
const
;
#ifdef INCLUDE_FREE_ENERGY_PLUGIN
/**
* Write nonbonded softcore parameters to file
*
* @param filePtr file to write forces to
* @param nonbondedForce write nonbondedForce parameters
*/
void
writeNonbondedSoftcoreForce
(
FILE
*
filePtr
,
const
NonbondedSoftcoreForce
&
nonbondedSoftcoreForce
)
const
;
/**
* Write GBSAOBCSoftcoreForce parameters to file
*
* @param filePtr file to write forces to
* @param gbsaObcForce write gbsaObcForce parameters
*
*/
void
writeGbsaObcSoftcoreForce
(
FILE
*
filePtr
,
const
GBSAOBCSoftcoreForce
&
gbsaObcForce
)
const
;
/**
* Write GBSA GB/VI softcore force parameters to file
*
* @param filePtr file to write forces to
* @param gbviObcForce write gbviObcForce parameters
*
*/
void
writeGBVISoftcoreForce
(
FILE
*
filePtr
,
const
GBVISoftcoreForce
&
gbviSoftcoreForce
)
const
;
#endif
/**
* Write coordinates, velocities, ... to file
*
* @param filePtr file to write Vec3 entries to
* @param vect3Array write array of Vec3
*
*/
void
writeVec3
(
FILE
*
filePtr
,
const
std
::
vector
<
Vec3
>&
vect3Array
)
const
;
/**
* Write context info to file (positions, velocities, forces, energies)
*
* @param filePtr file to write entries to
* @param context write context positions, velocities, forces, energies to file
*
*/
void
writeContext
(
FILE
*
filePtr
,
const
Context
&
context
)
const
;
/**
* Write integrator
*
* @param filePtr file to write integrator info to
* @param integrator write integrator info (time step, seed, ... as applicable)
*
*/
void
writeIntegrator
(
FILE
*
filePtr
,
const
Integrator
&
integrator
)
const
;
/**
* Write parameter file
* @param context context whose entries are to be written to file
* @param parameterFileName file name
*
*/
void
writeParameterFile
(
const
Context
&
context
,
const
std
::
string
&
parameterFileName
)
const
;
private:
FILE
*
_log
;
// map of force dependencies (e.g., GBSAObc requires NB force on CudaPlatform)
StringStringVectorMap
_forceDependencies
;
};
}
// namespace OpenMM
#endif
/*VALIDATE_OPENMM_H_*/
libraries/validate/include/ValidateOpenMMForces.h
0 → 100644
View file @
248a01f4
#ifndef VALIDATE_OPENMM_FORCES_H_
#define VALIDATE_OPENMM_FORCES_H_
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2008 Stanford University and the Authors. *
* Authors: Mark Friedrichs *
* Contributors: *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* -------------------------------------------------------------------------- */
#include "ValidateOpenMM.h"
namespace
OpenMM
{
typedef
std
::
map
<
int
,
int
>
MapIntInt
;
typedef
MapIntInt
::
iterator
MapIntIntI
;
typedef
MapIntInt
::
const_iterator
MapIntIntCI
;
// Helper class for ValidateOpenMMForces class used to store force results and facitilitate comparisons of
// resulting forces
class
ForceValidationResult
{
public:
ForceValidationResult
(
const
Context
&
context1
,
const
Context
&
context2
,
StringUIntMap
&
forceNamesMap
);
~
ForceValidationResult
();
/**
* Get potential energy at specified platform index (0 || 1)
*
* @return potential energy for spercifed platform
*
* @throws OpenMMException if energyIndex is not 0 or 1
*/
double
getPotentialEnergy
(
int
energyIndex
)
const
;
/**
* Get array of forces at specified platform index (0 || 1)
*
* @return array of force norms
*
* @throws OpenMMException if forceIndex is not 0 or 1
*/
std
::
vector
<
double
>
getForceNorms
(
int
forceIndex
)
const
;
/**
* Get array of forces at platform index (0 || 1)
*
* @return force array
*
* @throws OpenMMException if forceIndex is not 0 or 1
*/
std
::
vector
<
Vec3
>
getForces
(
int
forceIndex
)
const
;
/**
* Get maximum delta in force norm
*
* @param maxIndex return atom index of entry with maximum delta norm (optional)
*
* @return max delta in norm of forces
*/
double
getMaxDeltaForceNorm
(
int
*
maxIndex
=
NULL
)
const
;
/**
* Get maximum relative delta in force norm
*
* @param maxIndex return atom index of entry w/ maximum relative delta norm (optional)
*
* @return max relative delta in norm of forces
*/
double
getMaxRelativeDeltaForceNorm
(
int
*
maxIndex
=
NULL
)
const
;
/**
* Get maximum dot product between forces
*
* @param maxIndex return atom index of entry w/ maximum dot product between forces (optional)
*
* @return max dot product between forces
*/
double
getMaxDotProduct
(
int
*
maxIndex
=
NULL
)
const
;
/**
* Get name of force associated w/ computed results
*
* @return force name(s); if more than one force active in computation,
* then names are concatenated and separated by '::' (e.g., 'NB_FORCE::GBSA_OBC_FORCE')
*/
std
::
string
getForceName
(
void
)
const
;
/**
* Get platform name
*
* @param index index of platform (0 or 1)
*
* @return platform name
*
* @throws OpenMMException if index is not 0 or 1
*/
std
::
string
getPlatformName
(
int
index
)
const
;
/**
* Register index of two entries that differ by a specified tolerance
*
* @param index inconsistent index
*
*/
void
registerInconsistentForceIndex
(
int
index
,
int
value
=
1
);
/**
* Clear list of entries that differ by a specified tolerance
*
*/
void
clearInconsistentForceIndexList
(
void
);
/**
* Get list of entries that differ by a specified tolerance
*
*/
void
getInconsistentForceIndexList
(
std
::
vector
<
int
>&
inconsistentIndices
)
const
;
/**
* Get number of entries in inconsistent index list
*
*/
int
getNumberOfInconsistentForceEntries
(
void
)
const
;
/**
* Return true if nans were detected
*
* @return true if nans were detected
*/
int
nansDetected
(
void
)
const
;
/**
* Determine if force norms are valid
*
* @param tolerance tolerance
*/
void
compareForceNorms
(
double
tolerance
);
/**
* Determine if forces are valid
*
* @param tolerance tolerance
*/
void
compareForces
(
double
tolerance
);
private:
// computed potential energies and forces fror two platforms
double
_potentialEnergies
[
2
];
std
::
vector
<
Vec3
>
_forces
[
2
];
// platform and force names
std
::
string
_platforms
[
2
];
std
::
vector
<
std
::
string
>
_forceNames
;
// force norms and stat entries
std
::
vector
<
double
>
_norms
[
2
];
std
::
vector
<
double
>
_normStatVectors
[
2
];
// map of indicies w/ inconsistent force entries
std
::
map
<
int
,
int
>
_inconsistentForceIndicies
;
// if set, then nans detected
int
_nansDetected
;
/**
* Calculate norms of vectors
*
*/
void
_calculateNorms
(
void
);
/**
* Calculate norms of specified vector
*
*/
void
_calculateNormOfForceVector
(
int
forceIndex
);
// stat indices
static
const
int
STAT_AVG
=
0
;
static
const
int
STAT_STD
=
1
;
static
const
int
STAT_MIN
=
2
;
static
const
int
STAT_ID1
=
3
;
static
const
int
STAT_MAX
=
4
;
static
const
int
STAT_ID2
=
5
;
static
const
int
STAT_CNT
=
6
;
static
const
int
STAT_END
=
7
;
/**
* Find vector stats
*
*/
void
_findStatsForDouble
(
const
std
::
vector
<
double
>&
array
,
std
::
vector
<
double
>&
statVector
)
const
;
};
// Class used to compare forces/potential energies on two platforms
class
ValidateOpenMMForces
:
public
ValidateOpenMM
{
public:
ValidateOpenMMForces
(
void
);
~
ValidateOpenMMForces
();
/**
* Validate force/energy by comparing the results between the forces/energies computed on user-provided context platform
* with Reference platform
*
* @param context context reference
* @param summaryString output summary string of results of comparison (optional)
*
* @return number of inconsistent entries
*/
int
compareWithReferencePlatform
(
Context
&
context
,
std
::
string
*
summaryString
=
NULL
);
/**
* Validate force/energy by comparing the results between the forces/energies computed on two different platforms
*
* @param context context reference
* @param compareForces indices of force to be tested
* @param platform1 first platform to compute forces
* @param platform2 second platform to compute forces
*
* @return ForceValidationResult reference containing results of force/energy computations
* on the two input platforms
*/
ForceValidationResult
*
compareForce
(
Context
&
context
,
std
::
vector
<
int
>&
compareForces
,
Platform
&
platform1
,
Platform
&
platform2
)
const
;
/**
* Compare individual forces by comparing calculations across two platforms (platform associated w/ input context and
* comparisonPlatform)
*
* @param context context reference
* @param platform comparsion platform reference
* @param forceValidationResults output vector of ForceValidationResult ptrs (user is responsible for deleting
* individual ForceValidationResult objects)
*/
void
compareOpenMMForces
(
Context
&
context
,
Platform
&
comparisonPlatform
,
std
::
vector
<
ForceValidationResult
*>&
forceValidationResults
)
const
;
/**
* Determine if results are consistent
*
* @param forceValidationResults vector of ForceValidationResult ptrs to check if forces are consistent
*/
void
checkForInconsistentForceEntries
(
std
::
vector
<
ForceValidationResult
*>&
forceValidationResults
)
const
;
/**
* Get total number of force entries that are inconsistent
*
* @param forceValidationResults vector of ForceValidationResult ptrs to check if forces are consistent
*/
int
getTotalNumberOfInconsistentForceEntries
(
std
::
vector
<
ForceValidationResult
*>&
forceValidationResults
)
const
;
/**
* Get summary string of results
*
* @param forceValidationResults vector of ForceValidationResult ptrs
*/
std
::
string
getSummary
(
std
::
vector
<
ForceValidationResult
*>&
forceValidationResults
)
const
;
/**
* Set force tolerance
*
* @param tolerance force tolerance
*/
void
setForceTolerance
(
double
tolerance
);
/**
* Get force tolerance
*
* @return force tolerance
*/
double
getForceTolerance
(
void
)
const
;
/*
* Get force tolerance for specified force
*
* @param forceName name of force
*
* @return force tolerance
*
* */
double
getForceTolerance
(
const
std
::
string
&
forceName
)
const
;
/*
* Get max errors to print in summary string
*
* @return max errors to print
*
* */
int
getMaxErrorsToPrint
(
void
)
const
;
/*
* Set max errors to print in summary string
*
* @param maxErrorsToPrint max errors to print
*
* */
void
setMaxErrorsToPrint
(
int
maxErrorsToPrint
);
/*
* Return true if force is not to be validated (Andersen thermostat, CM motion remover, ...)
*
* @param forceName force name
*
* @return true if force is not currently validated
**/
int
isExcludedForce
(
std
::
string
forceName
)
const
;
private:
// initialize class entries
void
_initialize
(
void
);
/*
* Format output line
*
* @param tab tab
* @param description description
* @param value value
*
* @return string containing contents
*
* */
std
::
string
_getLine
(
const
std
::
string
&
tab
,
const
std
::
string
&
description
,
const
std
::
string
&
value
)
const
;
std
::
vector
<
ForceValidationResult
*>
_forceValidationResults
;
// max errors to print
int
_maxErrorsToPrint
;
// tolerence
double
_forceTolerance
;
// map of force tolerances to type (name)
StringDoubleMap
_forceTolerances
;
// forces to be excluded from validation
StringIntMap
_forcesToBeExcluded
;
};
}
// namespace OpenMM
#endif
/*VALIDATE_OPENMM_FORCES_H_*/
libraries/validate/src/ValidateOpenMM.cpp
0 → 100644
View file @
248a01f4
This diff is collapsed.
Click to expand it.
libraries/validate/src/ValidateOpenMMForces.cpp
0 → 100644
View file @
248a01f4
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment