OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
Classes | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
GreenWakeFunction Class Reference

#include <GreenWakeFunction.h>

Inheritance diagram for GreenWakeFunction:
Inheritance graph
[legend]
Collaboration diagram for GreenWakeFunction:
Collaboration graph
[legend]

Classes

class  Wake
 

Public Member Functions

 ~GreenWakeFunction ()
 
 GreenWakeFunction (const std::string &name, std::vector< Filter * > filters, int NBIN, double Z0, double radius, double sigma, int acMode, double tau, WakeDirection direction, bool constLength, std::string fname)
 
std::pair< int, int > distrIndices (int vectLen)
 given a vector of length N, distribute the indexes among the available processors More...
 
void apply (PartBunchBase< double, 3 > *bunch) override
 
void setWakeFromFile (int NBin, double spacing)
 reads in the wakefield from file More...
 
virtual WakeType getType () const override
 
- Public Member Functions inherited from WakeFunction
 WakeFunction (std::string name, unsigned int n)
 
virtual ~WakeFunction ()
 
virtual void initialize (const ElementBase *)
 
virtual void apply (PartBunchBase< double, 3 > *bunch)=0
 
virtual WakeType getType () const =0
 
const std::string & getName () const
 

Private Member Functions

template<class F >
double simpson (F &f, double a, double b, unsigned int N)
 Simpson-Integration from the function f from a to b with N steps. More...
 
void compEnergy (const double K, const double charge, const double *lambda, double *OutEnergy)
 just a Testfunction! Calculate the energy of the Wakefunction with the lambda More...
 
void compEnergy (const double K, const double charge, std::vector< double > lambda, double *OutEnergy)
 Calculate the energy of the Wakefunction with the lambda. More...
 
void CalcWakeFFT (double spacing)
 Calculate the FFT of the Wakefunction. More...
 

Static Private Member Functions

static std::string getWakeDirectionString (const WakeDirection &direction)
 

Private Attributes

std::vector< double > lineDensity_m
 save the line Density of the particle bunch More...
 
std::vector< double > FftWField_m
 FFT of the zero padded wakefield. More...
 
int NBin_m
 divides the particle bunch in NBin slices More...
 
double Z0_m
 impedance More...
 
double radius_m
 radius More...
 
double sigma_m
 material constant More...
 
int acMode_m
 conductivity either 1="AC" or 2="DC" More...
 
double tau_m
 material constant More...
 
WakeDirection direction_m
 direction either "Longitudinal" - "Transversal" More...
 
bool constLength_m
 true if the length of the particle bunch is considered as constant More...
 
std::string filename_m
 filename of the wakefield More...
 
std::vector< Filter * > filters_m
 

Static Private Attributes

static const std::map< WakeDirection, std::string > wakeDirectiontoString_s
 

Additional Inherited Members

- Protected Attributes inherited from WakeFunction
const unsigned int nBins_m
 

Detailed Description

Definition at line 42 of file GreenWakeFunction.h.

Constructor & Destructor Documentation

◆ ~GreenWakeFunction()

GreenWakeFunction::~GreenWakeFunction ( )

Definition at line 89 of file #GreenWakeFunction.cpp#.

◆ GreenWakeFunction()

GreenWakeFunction::GreenWakeFunction ( const std::string &  name,
std::vector< Filter * >  filters,
int  NBIN,
double  Z0,
double  radius,
double  sigma,
int  acMode,
double  tau,
WakeDirection  direction,
bool  constLength,
std::string  fname 
)
Todo:

In this code one can only apply either the longitudinal wakefield or the transversal wakefield. One should implement that both wakefields can be applied to the particle beam

NBins must be set equal to MT of the fieldsolver. This should be changed. (the length of lineDensity_m must be NBins and not to MT)

Parameters
[in]NBINnumber of Bins
[in]Z0impedance of the tube
[in]radiusradius of the tube
[in]sigmamaterial constant
[in]acMode1 for AC and 2 for DC
[in]taumaterial constant
[in]direction0 for transversal and 1 for Longitudinal
[in]constLengthtrue if the length of the particle bunch is considered as constant
[in]fnameread wake from file
Todo:

In this code one can only apply either the longitudinal wakefield or the transversal wakefield. One should implement that both wakefields can be applied to the particle beam

NBins must be set equal to MT of the fieldsolver. This should be changed. (the length of lineDensity_m must be NBins and not to MT)

Parameters
[in]NBINnumber of Bins
[in]Z0impedance of the tube
[in]radiusradius of the tube
[in]sigmamaterial constant
[in]acMode1 for AC and 2 for DC
[in]taumaterial constant
[in]direction0 for transversal and 1 for Longitudinal
[in]constLengthtrue if the length of the particle bunch is considered as constant
[in]fnameread wake from file

Definition at line 58 of file #GreenWakeFunction.cpp#.

References endl(), and gmsg.

Here is the call graph for this function:

Member Function Documentation

◆ apply()

void GreenWakeFunction::apply ( PartBunchBase< double, 3 > *  bunch)
overridevirtual

◆ CalcWakeFFT()

void GreenWakeFunction::CalcWakeFFT ( double  spacing)
private

Calculate the FFT of the Wakefunction.

Parameters
[in]spacingdistance between 2 slice in the line distribution

Calculate the Wakefield on all processors

Reduce the results

Definition at line 378 of file #GreenWakeFunction.cpp#.

References a, acMode_m, direction_m, distrIndices(), FftWField_m, NBin_m, radius_m, real(), reduce(), sigma_m, simpson(), tau_m, and Z0_m.

Referenced by apply().

Here is the call graph for this function:

◆ compEnergy() [1/2]

void GreenWakeFunction::compEnergy ( const double  K,
const double  charge,
const double *  lambda,
double *  OutEnergy 
)
private

just a Testfunction! Calculate the energy of the Wakefunction with the lambda

Parameters
[in]Ka constant
[in]chargea constant
[in]lambdathe distribution of the Particles
[out]OutEnergythis is the Output

Definition at line 261 of file #GreenWakeFunction.cpp#.

References FftWField_m, NBin_m, and real().

Referenced by apply().

Here is the call graph for this function:

◆ compEnergy() [2/2]

void GreenWakeFunction::compEnergy ( const double  K,
const double  charge,
std::vector< double >  lambda,
double *  OutEnergy 
)
private

Calculate the energy of the Wakefunction with the lambda.

Parameters
[in]Ka constant
[in]chargea constant
[in]lambdathe distribution of the Particles
[out]OutEnergythis is the Output

Definition at line 321 of file #GreenWakeFunction.cpp#.

References FftWField_m, NBin_m, and real().

Here is the call graph for this function:

◆ distrIndices()

std::pair< int, int > GreenWakeFunction::distrIndices ( int  vectLen)

given a vector of length N, distribute the indexes among the available processors

Todo:
make this function general available
Parameters
[in]lengthof vector
[out]firstlowIndex, second: hiIndex
Todo:
make this function general available
Parameters
[in]lengthof vector
[out]firstlowIndex, second: hiIndex

Definition at line 106 of file #GreenWakeFunction.cpp#.

References IpplInfo::getNodes(), and IpplInfo::myNode().

Referenced by CalcWakeFFT().

Here is the call graph for this function:

◆ getType()

WakeType GreenWakeFunction::getType ( ) const
overridevirtual

Implements WakeFunction.

Definition at line 535 of file #GreenWakeFunction.cpp#.

References GreenWakeFunction.

◆ getWakeDirectionString()

std::string GreenWakeFunction::getWakeDirectionString ( const WakeDirection direction)
staticprivate

Definition at line 539 of file #GreenWakeFunction.cpp#.

References wakeDirectiontoString_s.

◆ setWakeFromFile()

void GreenWakeFunction::setWakeFromFile ( int  NBin,
double  spacing 
)

reads in the wakefield from file

Definition at line 458 of file #GreenWakeFunction.cpp#.

References endl(), FftWField_m, filename_m, Hypervolume::fs, name, NBin_m, and real().

Referenced by apply().

Here is the call graph for this function:

◆ simpson()

template<class F >
double GreenWakeFunction::simpson ( F &  f,
double  a,
double  b,
unsigned int  N 
)
inlineprivate

Simpson-Integration from the function f from a to b with N steps.

Parameters
[in]fthe function to integrate
[in]aintegrate from a
[in]bintegrate to b
[in]NNumber of integration points
Returns
function value of the integration

Definition at line 141 of file GreenWakeFunction.h.

References a, and PAssert.

Referenced by CalcWakeFFT().

Member Data Documentation

◆ acMode_m

int GreenWakeFunction::acMode_m
private

conductivity either 1="AC" or 2="DC"

Definition at line 175 of file GreenWakeFunction.h.

Referenced by CalcWakeFFT().

◆ constLength_m

bool GreenWakeFunction::constLength_m
private

true if the length of the particle bunch is considered as constant

Definition at line 181 of file GreenWakeFunction.h.

Referenced by apply().

◆ direction_m

WakeDirection GreenWakeFunction::direction_m
private

direction either "Longitudinal" - "Transversal"

Definition at line 179 of file GreenWakeFunction.h.

Referenced by apply(), and CalcWakeFFT().

◆ FftWField_m

std::vector<double> GreenWakeFunction::FftWField_m
private

FFT of the zero padded wakefield.

Definition at line 164 of file GreenWakeFunction.h.

Referenced by apply(), CalcWakeFFT(), compEnergy(), and setWakeFromFile().

◆ filename_m

std::string GreenWakeFunction::filename_m
private

filename of the wakefield

Definition at line 183 of file GreenWakeFunction.h.

Referenced by apply(), and setWakeFromFile().

◆ filters_m

std::vector<Filter*> GreenWakeFunction::filters_m
private

Definition at line 185 of file GreenWakeFunction.h.

Referenced by apply().

◆ lineDensity_m

std::vector<double> GreenWakeFunction::lineDensity_m
private

save the line Density of the particle bunch

Definition at line 162 of file GreenWakeFunction.h.

Referenced by apply().

◆ NBin_m

int GreenWakeFunction::NBin_m
private

divides the particle bunch in NBin slices

Definition at line 167 of file GreenWakeFunction.h.

Referenced by apply(), CalcWakeFFT(), compEnergy(), and setWakeFromFile().

◆ radius_m

double GreenWakeFunction::radius_m
private

radius

Definition at line 171 of file GreenWakeFunction.h.

Referenced by CalcWakeFFT().

◆ sigma_m

double GreenWakeFunction::sigma_m
private

material constant

Definition at line 173 of file GreenWakeFunction.h.

Referenced by CalcWakeFFT().

◆ tau_m

double GreenWakeFunction::tau_m
private

material constant

Definition at line 177 of file GreenWakeFunction.h.

Referenced by CalcWakeFFT().

◆ wakeDirectiontoString_s

const std::map< WakeDirection, std::string > GreenWakeFunction::wakeDirectiontoString_s
staticprivate
Initial value:
= {
{WakeDirection::TRANSVERSAL, "TRANSVERSAL"},
{WakeDirection::LONGITUDINAL, "LONGITUDINAL"},
}

Definition at line 187 of file GreenWakeFunction.h.

Referenced by getWakeDirectionString().

◆ Z0_m

double GreenWakeFunction::Z0_m
private

impedance

Definition at line 169 of file GreenWakeFunction.h.

Referenced by apply(), and CalcWakeFFT().


The documentation for this class was generated from the following files: