/usr/include/CLHEP/GenericFunctions/ClassicalSolver.hh is in libclhep-dev 2.1.2.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | // This is a class the creates an N-Dimensional Phase Space //
// It is for use in computing the time development of classical //
// Hamiltonian Systems. //
// Joe Boudreau October 2011 //
//--------------------------------------------------------------//
#ifndef _ClassicalSolver_h__
#define _ClassicalSolver_h__
#include "CLHEP/GenericFunctions/PhaseSpace.hh"
#include "CLHEP/GenericFunctions/Variable.hh"
#include "CLHEP/GenericFunctions/Parameter.hh"
namespace Genfun {
class EnergyFunction;
}
namespace Classical {
class Solver {
public:
//
// Constructor--takes a hamiltonian and a point in p-space:
//
Solver(){};
//
// Destructor:
//
virtual ~Solver(){};
//
// Returns the time evolution for a variable (q_i or p_i)
//
virtual Genfun::GENFUNCTION equationOf(const Genfun::Variable & v) const=0;
//
// Returns the phase space
//
virtual const PhaseSpace & phaseSpace() const=0;
//
// Returns the Hamiltonian (function of the 2N phase space variables).
//
virtual Genfun::GENFUNCTION hamiltonian() const=0;
//
// Returns the energy (function of time).
//
virtual Genfun::GENFUNCTION energy() const=0;
//
// This is in the rare case that the user needs to edit starting values.
// or parameterize the Hamiltonian. Most users: can ignore.
virtual Genfun::Parameter *takeQ0(unsigned int index)=0;
virtual Genfun::Parameter *takeP0(unsigned int index)=0;
virtual Genfun::Parameter *createControlParameter(const std::string & variableName="anon",
double defStartingValue=0.0,
double startingValueMin=0.0,
double startingValueMax=0.0) const = 0;
private:
// Illegal Operations:
Solver (const Solver &);
Solver & operator=(const Solver &);
};
}
namespace Genfun {
class EnergyFunction: public Genfun::AbsFunction {
FUNCTION_OBJECT_DEF(EnergyFunction)
public:
// Constructor
EnergyFunction(const Classical::Solver &);
// Destructor
virtual ~EnergyFunction();
// Copy constructor
EnergyFunction(const EnergyFunction &right);
// Retreive function value
virtual double operator ()(double argument) const;
virtual double operator ()(const Argument & a) const {return operator() (a[0]);}
private:
// It is illegal to assign a EnergyFunction
const EnergyFunction & operator=(const EnergyFunction &right);
const Classical::Solver & solver;
};
}
#endif
|