Skip to Content.
Sympa Menu

opal - Re: [Opal] Initial longitudinal momentum, thermal emittance, reference particle

opal AT

Subject: The OPAL Discussion Forum

List archive

Re: [Opal] Initial longitudinal momentum, thermal emittance, reference particle

Chronological Thread  
  • From: Zhi Li <zhili29882 AT>
  • To: Adelmann Andreas <andreas.adelmann AT>, opal AT
  • Subject: Re: [Opal] Initial longitudinal momentum, thermal emittance, reference particle
  • Date: Mon, 19 Dec 2022 14:20:29 -0600
  • Authentication-results:; iprev=pass ( smtp.remote-ip=; spf=pass; dkim=pass header.s=20210112 header.a=rsa-sha256; dmarc=pass

Hi Andreas,

If I want to parametrize the launch phase of E-field in my OPAL input file and do a scan of it to see how emittance change, for this I would have to use the script, correct? Right now I have some issues with making the example test files to run. I keep getting the error message: "Template and data filename do not match, {name}.data expected" but my .tmpl and .data files have the same name already. How do I fix this issue? Thanks! 


Best regards,


On Thu, Dec 15, 2022 at 1:53 AM Adelmann Andreas <andreas.adelmann AT> wrote:
Hi Zhi, yes Urand() is the uniform rng.

The lower Energy Limit is calculates and eZ is the z-component of the electric field at the cathode.
However this does not include space charge!

double phiEffective = (cathodeWorkFunc_m
                               - std::sqrt(std::max(0.0, (Physics::q_e * beam->getQ() * eZ) /
                                                    (4.0 * Physics::pi * Physics::epsilon_0))));
double lowEnergyLimit = cathodeFermiEnergy_m + phiEffective - laserEnergy_m;

Cheers A
Dr. sc. math. Andreas (Andy) Adelmann
Head a.i. Labor for Scientific Computing and Modelling 
Paul Scherrer Institut OHSA/D09 CH-5232 Villigen PSI
Phone Office: xx41 56 310 42 33 Fax: xx41 56 310 31 91
Zoom ID: 470-582-4086 Password: AdA
Zoom Link:

Friday: ETH HPK G 28   +41 44 633 3076
The more exotic, the more abstract the knowledge, 
the more profound will be its consequences.
Leon Lederman 

On 14 Dec 2022, at 19:53, Zhi Li <zhili29882 AT> wrote:

Hi Andreas, Joel, Philippe,

Thank you all for the great suggestions, I am currently in the process of checking all those things and may need your help with more questions soon.

Quick question for Andreas:
In regards to the applyEmissionModelNonEquil.pdf notes, is the lower energy limit (E_LL) for the function " applyEmissModelNonEquil()" user chosen? If so, where in my input file do I specify this value? Also "Urand()" is just a random integer generator, correct?

Best regards,


On Wed, Dec 14, 2022 at 4:32 AM Adelmann Andreas <andreas.adelmann AT> wrote:
Hi Zhi, the Schottky effect is not included. Also just to be sure: NONQUIL needs to be NONEQUIL.
Attached the notes on how we emit in NONEQUIL, be aware of the fact that the notes need to 

Cheers Andy 

On 13 Dec 2022, at 21:07, Zhi Li <zhili29882 AT> wrote:

Hi Mr. Adelmann,

Thank you very much for clarifying questions 1) and 3).

Now that I have done more searching, regarding the latter part of question 2), if I set my monitor position to be nanometers away from the cathode I should be expecting a captured value for emittance that is very close to a value calculated by the formula below, correct? NONQUIL model takes into account of Schotty effect right?

4) Recently my colleague made a simulation with the same field map, same distribution parameters using GPT and I realized that the normalized x-emittance plot looks very different. To my understanding, there was a benchmark done by  N. R. Neveu et al. and the results seem to agree between the two codes. Can you help take a guess what might be causing this discrepancy? I can send the input file for the GPT simulation if you need it. Thanks again for the help!

Best regards,



On Tue, Dec 6, 2022 at 3:05 PM Adelmann Andreas (PSI) <andreas.adelmann AT> wrote:
Hi Zhi, great that you are using OPAL! 


1) If I generate my initial distribution using the NONEQUIL emission model, does the longitudinal momentum of the particles from this override the longitudinal momentum (P0) define in the BEAM parameters? If yes, how do I set this BEAM parameter longitudinal momentum (P0) to 0?

Yes P0 is overwritten. In case you have problems setting P0=0.0, then try P0=1.0E-12.

2) Is there a way to have the thermal emittance value saved to the output file (.stat) from the emitted distribution by NONEQUIL? Perhaps I can define a monitor very close to the cathode and capture this value? So far the closest I can set the monitor to the cathode is one micrometer away, is there a way to set it to 0 so its right ontop of the cathode?

Yes with a monitor you can achieve this, however a distance of 0.0 will not work. The minimal distance is determined by the time step, the smaller 
the time step the closer you can put the monitor towards the cathode. 

What is the exact formula that OPAL uses to calculate this thermal emittance? I want to confirm the thermal emittance value captured by a monitor with theoretical calculation by plugging in laser energy, work function, cathode temp, and Fermi energy into an equation. 

I think I do not understand the question. In case of a monitor you have access to the phase space and can calculate the emittance “by hand”. Other
than that the emission process is described in chapter 15.4 of the manual ( ). 

3) In the output (.stat) file, I can plot the field seen by the reference particle. What is the exact definition of this reference particle? I don't seem to find a good description of this in the user manual. Is this the first particle emitted from the cathode or does it represent the average of every particle in the bunch?

If you plot against column 2, it uses the path length (m) in the floor coordinate system of the on-axis particle if I remember correctly. 
@Christof can you confirm please! 

Cheer Andy 

Best regards,


Here is my input file:


Title, string="Original AWA Photoinjector input file modified";

//Global Parameters

REAL rf_freq             = 2.998e3;     //RF frequency. (MHz)
REAL n_particles         = 1E3;      //Number of particles in simulation.
REAL beam_bunch_charge   = 1e-3;      //Charge of bunch. (C)

//Initial Momentum Calculation
REAL Edes    = 1e-9; //initial energy in GeV
REAL gamma   = (Edes+EMASS)/EMASS;
REAL beta    = sqrt(1-(1/gamma^2));
REAL P0      = gamma*beta*EMASS;    //inital z momentum

//Printing initial energy and momentum to terminal output.
value , {Edes, P0};

REAL gun_inj_phase = 0;  

GUN:    RFCavity, L = 0.1, VOLT = 110.26, ELEMEDGE = 0.0, TYPE = "STANDING",
        FMAPFN = "DriveGunGPTmap.T7", FREQ = 2998, LAG = (gun_inj_phase*Pi)/180.0,

myLine:  Line = (GUN);
//M: MONITOR, ELEMEDGE = 1e-9, OUTFN = 'mon';

// Complete accelerator
DRIVE: Line = (myLine);
 SIGMAR = 0.001,
 CUTOFFR = 2.0,
 SIGMAT = 1e-12,
 NBIN = 10,
 ELASER = 6.48,
 W = 4.31,
 FE = 7.0,
 CATHTEMP = 300,
FS_SC: Fieldsolver, FSTYPE = FFT,
            MX = 10, MY = 10, MT = 10,
            PARFFTX = True,
            PARFFTY = True,
            PARFFTT = True,
            BCFFTX = open,
            BCFFTY = open,
            BCFFTT = open,
            BBOXINCR = 1,
// Electron Beam Definition

BEAM1:  BEAM, PARTICLE = ELECTRON, pc = P0, NPART = n_particles,
        BFREQ = rf_freq,BCURRENT = beam_bunch_charge * rf_freq, CHARGE = -1;

    DT = {1.0e-13}, ZSTOP={0.12};



Archive powered by MHonArc 2.6.19.

Top of Page