Scine::Readuct  5.0.0
This is the SCINE module ReaDuct.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
CommonTerms.h
Go to the documentation of this file.
1 
8 #ifndef READUCT_ELEMENTARYSTEPOPTIMIZATION_COSTCALCULATORS_COMMONTERMS_H
9 #define READUCT_ELEMENTARYSTEPOPTIMIZATION_COSTCALCULATORS_COMMONTERMS_H
10 
11 #include <Eigen/Core>
12 #include <vector>
13 
14 // TODO: Improve documentation
15 
16 namespace Scine {
17 
18 namespace Utils {
19 namespace AutomaticDifferentiation {
20 class FirstND;
21 }
22 } // namespace Utils
23 
24 namespace Utils {
25 namespace BSplines {
26 class BSpline;
27 }
28 } // namespace Utils
29 
30 namespace Readuct {
31 
32 namespace ElementaryStepOptimization {
33 class RecurringProfileCalculator;
34 
35 namespace CostBasedOptimization {
36 
41 class CommonTerms {
42  public:
43  static Utils::AutomaticDifferentiation::FirstND squaredNormOfSplineDerivative(const Utils::BSplines::BSpline& spline,
44  double u);
45  static Utils::AutomaticDifferentiation::FirstND singlePointEnergy(const Utils::BSplines::BSpline& spline, double u,
46  double energy, const Eigen::VectorXd& gradients);
47  static Utils::AutomaticDifferentiation::FirstND squaredNormOfGradient(const Utils::BSplines::BSpline& spline,
48  double u, const Eigen::VectorXd& gradients,
49  const Eigen::MatrixXd& hessian);
51  dotProductOfGradientAndSplineDerivative(const Utils::BSplines::BSpline& spline, double u,
52  const Eigen::VectorXd& gradients, const Eigen::MatrixXd& hessian);
54  dotProductOfPositionAndSplineDerivative(const Utils::BSplines::BSpline& spline, double uPosition, double uTangent);
55  static Utils::AutomaticDifferentiation::FirstND distanceSquared(const Utils::BSplines::BSpline& spline, double uA, double uB);
56  static Utils::AutomaticDifferentiation::FirstND distanceSquaredToPosition(const Utils::BSplines::BSpline& spline,
57  double u, const Eigen::VectorXd& pos);
58 
59  static Utils::AutomaticDifferentiation::FirstND dotProductOfPositions(const Utils::BSplines::BSpline& spline,
60  double uA, double uB);
61 
63  energyOfHighestPointFromQuadraticInterpolation(RecurringProfileCalculator& profileCalculator,
64  const std::vector<double>& energies, const Utils::BSplines::BSpline& spline);
65 
66  static Utils::AutomaticDifferentiation::FirstND energyAlongSpline(RecurringProfileCalculator& profileCalculator,
67  const Utils::BSplines::BSpline& spline, double u);
70  double u);
71 
72  private:
73  static double interpolateExtremumUValue(double u0, double u1, double u2, double e0, double e1, double e2);
74  static int getIndexForHighestEnergy(const std::vector<double>& energies);
75  static double getUValueWithMaxEnergy(const std::vector<double>& coordinates, const std::vector<double>& energies, int maxIndex);
76 };
77 
78 } // namespace CostBasedOptimization
79 
80 } // namespace ElementaryStepOptimization
81 
82 } // namespace Readuct
83 } // namespace Scine
84 #endif // ELEMENTARYSTEPOPTIMIZATION_COSTCALCULATION_COMMONTERMS_H
static Utils::AutomaticDifferentiation::FirstND derivativeOfSquaredTangentNorm(const Utils::BSplines::BSpline &spline, double u)
Definition: CommonTerms.cpp:125