4 #ifndef CPPQEDELEMENTS_FREES_PARTICLE__H_INCLUDED
5 #define CPPQEDELEMENTS_FREES_PARTICLE__H_INCLUDED
7 #include "Particle_Fwd.h"
9 #include "ParsParticle.h"
11 #include "QM_PictureFwd.h"
12 #include "StateVectorFwd.h"
14 #include "ModeFunction.h"
21 #include <boost/shared_ptr.hpp>
28 typedef boost::shared_ptr<const ParticleBase>
Ptr;
30 typedef boost::shared_ptr<const PumpedParticleBase> PtrPumped;
34 const Tridiagonal expINKX(particle::Ptr, ptrdiff_t);
36 inline const Tridiagonal sinNKX(particle::Ptr
particle, ptrdiff_t nK) {
return (expINKX(particle,nK)-expINKX(particle,-nK))/(2.*
DCOMP_I);}
37 inline const Tridiagonal cosNKX(particle::Ptr particle, ptrdiff_t nK) {
return (expINKX(particle,nK)+expINKX(particle,-nK))/ 2. ;}
39 const Tridiagonal mfNKX (particle::Ptr,
const ModeFunction&);
40 const Tridiagonal mfNKX_AbsSqr(particle::Ptr,
const ModeFunction&);
48 const Tridiagonal mfComposition(particle::Ptr particle,
49 const ModeFunction& modeFunction1,
50 const ModeFunction& modeFunction2);
53 const StateVector wavePacket(
const InitialCondition&,
const Spatial&,
bool kFlag=
true);
54 const StateVector wavePacket(
const Pars &,
bool kFlag=
true);
55 const StateVector wavePacket(
const ParsPumped&,
bool kFlag=
true);
57 const StateVector hoState(
int n,
const InitialCondition&,
const Spatial&,
bool kFlag=
true);
58 const StateVector hoState(
const Pars &,
bool Kflag=
true);
59 const StateVector hoState(
const ParsPumped&,
bool Kflag=
true);
63 Ptr
make(
const Pars&, QM_Picture);
65 PtrPumped makePumped(
const ParsPumped&, QM_Picture);
70 typedef boost::tuple<const Spatial&, double> Storage;
80 using details::Storage::get;
85 bool applicableInMaster_v()
const {
return true;}
87 const Diagonal factorExponents_;
92 namespace details {
struct EmptyBase {}; }
95 template<
bool IS_TIME_DEPENDENT>
98 public mpl::if_c<IS_TIME_DEPENDENT,Exact,details::EmptyBase>::type
104 Hamiltonian(
const Spatial&,
double omrec, mpl::bool_<IS_TIME_DEPENDENT> =mpl::false_());
116 explicit Spatial(
size_t,
double deltaK=1);
118 size_t getFinesse ()
const {
return fin_;}
119 size_t getDimension()
const {
return x_.size();}
122 double x(
size_t i)
const {
return x_(i);}
123 double k(
size_t i)
const {
return k_(i);}
125 const Array& getX()
const {
return x_;}
126 const Array& getK()
const {
return k_;}
128 void header(std::ostream&)
const;
133 const double xMax_, deltaX_, kMax_, deltaK_;
148 const Spatial& getSpace()
const {
return space_;}
152 void process_v( Averages&)
const;
184 double getV_Class()
const {
return vClass_;}
186 const ModeFunction& getMF()
const {
return mf_;}
193 const double vClass_;
194 const ModeFunction mf_ ;
203 explicit Particle(
const particle::Pars&);
233 #endif // CPPQEDELEMENTS_FREES_PARTICLE__H_INCLUDED
boost::shared_ptr< const Base > Ptr
const dcomp DCOMP_I(0, 1)
std::list< CF > ComplexFreqs
blitz::Array< double, RANK > DArray
const StateVector init(const Pars &)
Dispatcher for initial condition.
std::list< RF > RealFreqs
const Ptr make(const IA &ia)