Skip to content

Conversation

@n01r
Copy link
Member

@n01r n01r commented May 3, 2017

The BSIHydrogenLike model was much too narrow since it was only applicable
to hydrogenlike states, i.e. states that have charge (Z-1)+.
The following replacement was done in

F_BSI = E_i^2 / (4*Z)

Z (nuclear charge) --> Z_i (ion residual charge)

That means that in a naive way the inner electrons shield the nuclear charge
from the electron that is to be ionized.

@n01r n01r added the refactoring code change to improve performance or to unify a concept but does not change public API label May 3, 2017
@n01r n01r added this to the 0.3.0: Release Candidate milestone May 3, 2017
@n01r n01r requested a review from ax3l May 3, 2017 15:00
@n01r n01r force-pushed the topic-replaceBSIHydrogenLike branch from bdab947 to d7a9774 Compare May 3, 2017 15:01
The `BSIHydrogenLike` model was much too narrow since it was only applicable
to hydrogenlike states, i.e. states that have charge (Z-1)+.
The following replacement was done in

    F_BSI = E_i^2 / (4*Z)

    Z (nuclear charge) --> Z_i (ion residual charge)

That means that in a naive way the inner electrons shield the nuclear charge
from the electron that is to be ionized.

---

Also the documentation has been refined to better describe the assumptions.
@n01r n01r force-pushed the topic-replaceBSIHydrogenLike branch from d7a9774 to 4d41698 Compare May 3, 2017 15:08
Copy link
Member

@PrometheusPi PrometheusPi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some minor changes in the code but please update the comment and used schemes in all speciedDefinition.param e.g. here

/* ionization potential in atomic units */
const float_X iEnergy = GetIonizationEnergies<ParticleType>::type()[cs];
/* the charge that attracts the electron that is to be ionized:
+ * equals `protonNumber - #allInnerElectrons`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OPTIONAL:
perhaps just write number instead of #

Copy link
Member

@ax3l ax3l May 8, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or no. for number of

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that would be fine too

* of ionization energies according to strong external electric fields
* - This model accounts for naive ion charge shielding by inner electrons
* as it assumes that the charge the electron 'feels' is equal to
* `Z - #NumberOfBoundInnerShellElectrons`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REQUIRED:
you are using both # and number - please just use number

@PrometheusPi PrometheusPi self-assigned this May 4, 2017
@PrometheusPi
Copy link
Member

@n01r What happens now to BSIEffectiveZ? Where is the difference between the new BSI and BSIEffectiveZ?

@n01r
Copy link
Member Author

n01r commented May 4, 2017

@PrometheusPi The difference lies in how the residual ion charge is determined.
In the simple BSI case one would naively say: The charge the electron sees comes from the proton number reduced by the number of other bound electrons. This reduces the residual ion to a single point and neglects all geometric effects. So when I introduced BSIEffectiveZ I tried to account for that by using effective charges that were calculated from shielding and considering orbital structure.

Just for illustration (this will also find its way into the documentation).
2017_05_04_effective_potentials
You see here nuclear potentials influenced by a homogenous external electric field. The potentials are created just by varying the charge Z. We compare Hydrogen with Carbon-1+ (often denoted as C-II). The external electric field is the same in all three cases and is just exactly the BSI field strength that you would calculate with BSIEffectiveZ. It becomes apparent that even though the outermost electron in C-II lies energetically lower than the one in Hydrogen both will become classically ionized in the BSIEffectiveZ model. The simple BSI model sets the barrier to a larger value and thus does not allow ionization at this point. That does not make it better, though. Other effects are neglected as well in both models, e.g. Stark upshift of ionization energies which would deepen the potential well and increase the necessary field strength for ionization. Both of these models should just be used as a simple continuation from the tunneling regime to the barrier suppression regime when one increases external field strength. There are other empirical models for this purpose as well, though.

Copy link
Member

@ax3l ax3l left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me besides Richard comments about updating all input files in examples, too.

I think you can move BSIEffectiveZ up to the "normal" models, too.

@PrometheusPi
Copy link
Member

@n01r Could you please add the changes.

@n01r
Copy link
Member Author

n01r commented May 8, 2017

Sorry for the delay.

Changes have been implemented. Please check if you're okay with them, @ax3l and @PrometheusPi .

@ax3l ax3l changed the title Rename BSIHydrogenLike to BSI and fix charge Z Rm BSIHydrogenLike, Add BSI with charge Z May 8, 2017
@PrometheusPi
Copy link
Member

@n01r thank you for the fast reply, I will have a look at the code today

@ax3l
Copy link
Member

ax3l commented May 8, 2017

@PrometheusPi looks good to me, if you are ok I can review and merge it

@PrometheusPi
Copy link
Member

I am fine with that. Go ahead.

@ax3l ax3l dismissed PrometheusPi’s stale review May 8, 2017 09:10

all comments addressed

Copy link
Member

@ax3l ax3l left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does not compile, see comments inline

+ float_X effectiveCharge = chargeState + float_X(1.0);
/* critical field strength in atomic units */
float_X critField = iEnergy*iEnergy / (float_X(4.0) * protonNumber);
float_X critField = iEnergy*iEnergy / (float_X(4.0) * effectiveCharge);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be a float_X const

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is a + in front of this line

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oO where the hell did that come from?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

copied from a diff?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mmh, must be it 🤕

/* the charge that attracts the electron that is to be ionized:
+ * equals `protonNumber - no. allInnerElectrons`
*/
+ float_X effectiveCharge = chargeState + float_X(1.0);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • this should be a float_X const
  • there is a + in front of this line

/* ionization potential in atomic units */
const float_X iEnergy = GetIonizationEnergies<ParticleType>::type()[cs];
/* the charge that attracts the electron that is to be ionized:
+ * equals `protonNumber - no. allInnerElectrons`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is a + in front if this line

/* verify that ion is not completely ionized */
if (chargeState < protonNumber)
{
uint32_t cs = math::float2int_rd(chargeState);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be uint32_t const cs = ...

@ax3l ax3l self-assigned this May 8, 2017
Move the `BSIEffectiveZ` model up from the R&D section to the usable models.

Also: implement changes to comments requested in PR 2013.
@n01r n01r force-pushed the topic-replaceBSIHydrogenLike branch from a4ec604 to d7eb57c Compare May 8, 2017 11:20
@n01r
Copy link
Member Author

n01r commented May 8, 2017

fixed the 4 lines and amended the commit

Copy link
Member

@PrometheusPi PrometheusPi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@PrometheusPi PrometheusPi merged commit 32f679d into ComputationalRadiationPhysics:dev May 9, 2017
ax3l added a commit to ax3l/picongpu that referenced this pull request May 11, 2017
Adds the following changes to the `release-0.3.0` branch:

- Multiple ionizers per species:
  `ionizer< ... >` became a sequence of `ionizers< ... >` ComputationalRadiationPhysics#1999
- Thomas-Fermi:
  - fixes in domain decomposition ComputationalRadiationPhysics#2007
  - fixes compile issue (missing include) ComputationalRadiationPhysics#2003
- BSI models restructured ComputationalRadiationPhysics#2013
- ADK: fix effective principal quantum number `nEff` ComputationalRadiationPhysics#2011
- multiple ionization algorithms can be applied per species,
  e.g. cut-off barrier suppression ionization (BSI),
  probabilistic field ionization (ADK) and collisional ionization ComputationalRadiationPhysics#1999
- FieldTmp: Gather support to fill GUARD ComputationalRadiationPhysics#2009
- Fix undefined device variable in tilted laser pulse ComputationalRadiationPhysics#2017
- CompileTime Accessor: Type (::type) ComputationalRadiationPhysics#1998
- TBG Macros: Outdated Comment ComputationalRadiationPhysics#2004

Increases the state of the `0.3.0` release candidate to `rc3`.
ax3l added a commit to ax3l/picongpu that referenced this pull request May 11, 2017
Adds the following changes to the `release-0.3.0` branch:

- Multiple ionizers per species:
  `ionizer< ... >` became a sequence of `ionizers< ... >` ComputationalRadiationPhysics#1999
- Thomas-Fermi:
  - fixes in domain decomposition ComputationalRadiationPhysics#2007
  - fixes compile issue (missing include) ComputationalRadiationPhysics#2003
- BSI models restructured ComputationalRadiationPhysics#2013
- ADK: fix effective principal quantum number `nEff` ComputationalRadiationPhysics#2011
- multiple ionization algorithms can be applied per species,
  e.g. cut-off barrier suppression ionization (BSI),
  probabilistic field ionization (ADK) and collisional ionization ComputationalRadiationPhysics#1999
- FieldTmp: Gather support to fill GUARD ComputationalRadiationPhysics#2009
- Fix undefined device variable in tilted laser pulse ComputationalRadiationPhysics#2017
- CompileTime Accessor: Type (::type) ComputationalRadiationPhysics#1998
- TBG Macros: Outdated Comment ComputationalRadiationPhysics#2004

Increases the state of the `0.3.0` release candidate to `rc3`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoring code change to improve performance or to unify a concept but does not change public API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants