double StepKernel::QuadraticMinimize( OpenMM::ContextImpl &context, const Integrator &integrator, const double energy ) { ProjectionVectors( integrator ); kNMLQuadraticMinimize( &quadmodule, data.contexts[0], integrator.getMaxEigenvalue(), energy, lastPE, *pPosqP, *modeWeights, *MinimizeLambda ); std::vector<float> tmp; tmp.resize( 1 ); MinimizeLambda->download( tmp ); return tmp[0]; }
void StepKernel::LinearMinimize( OpenMM::ContextImpl &context, const Integrator &integrator, const double energy ) { ProjectionVectors( integrator ); lastPE = energy; kNMLLinearMinimize( &linmodule, data.contexts[0], integrator.getNumProjectionVectors(), integrator.getMaxEigenvalue(), *pPosqP, *modes, *modeWeights ); }
void StepKernel::Integrate( OpenMM::ContextImpl &context, const Integrator &integrator ) { ProjectionVectors( integrator ); #ifdef FAST_NOISE // Add noise for step kFastNoise( &fastmodule, data.contexts[0], integrator.getNumProjectionVectors(), ( float )( BOLTZ * integrator.getTemperature() ), iterations, *modes, *modeWeights, integrator.getMaxEigenvalue(), *NoiseValues, *pPosqP, integrator.getStepSize() ); #endif // Calculate Constants const double friction = integrator.getFriction(); context.updateContextState(); // Do Step kNMLUpdate( &updatemodule, data.contexts[0], integrator.getStepSize(), friction == 0.0f ? 0.0f : 1.0f / friction, ( float )( BOLTZ * integrator.getTemperature() ), integrator.getNumProjectionVectors(), kIterations, *modes, *modeWeights, *NoiseValues ); // TMC setting parameters for this }