Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix infinite ADK rates #5206

Open
wants to merge 2 commits into
base: dev
Choose a base branch
from

Conversation

BrianMarre
Copy link
Member

@BrianMarre BrianMarre commented Nov 8, 2024

fixes an infinite loop in the AtomicPhysics FLYonPIC stage due to a numerical underflow of the atomicPhysics timestep due to very high ADK rates of BSI unbound states still being present, by moving the Removal of IPD unbound states before the filling of the rate cache.

@BrianMarre BrianMarre force-pushed the topic-fixInfiniteADKRates branch 4 times, most recently from 731f98c to fe87026 Compare November 8, 2024 14:54
@psychocoderHPC psychocoderHPC added this to the 0.8.0 / Next stable milestone Nov 11, 2024
@psychocoderHPC psychocoderHPC added bug a bug in the project's code component: core in PIConGPU (core application) labels Nov 11, 2024
@BrianMarre BrianMarre force-pushed the topic-fixInfiniteADKRates branch 4 times, most recently from d612faf to 81972cd Compare November 12, 2024 11:59
updateTimeRemaining(mappingDesc);
isSubSteppingComplete = isSubSteppingFinished(mappingDesc, deviceLocalReduce);
} // end atomicPhysics sub-stepping loop

// ensure no unbound states are visible to the rest of the loop
doIPDIonization(mappingDesc, currentStep, deviceLocalReduce);
Copy link
Member

Choose a reason for hiding this comment

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

Does the mean we execute the IPD ionization twice per pic time step? Because we call this already in line 540.

Copy link
Member Author

Choose a reason for hiding this comment

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

yes, that is intended and necessary.

The second call of doIPDIonization is necessary here since we need to make sure that we do not pass an unbound state with a too low charge state to the pusher and we need to call doIPDIonization again at the beginning of the next AtomicPhyiscs step since the we updated the field in between causing a possible change result of the call.

Also note calling doIPDIonization twice on the same particle set with an unchanged E-Field does not change particle set anymore after the first call.

previously did not consider excitation in the ionization energy
calcualtion in the ApplyIPDIonization kernel

ci: picongpu
this avoids very high to ADK rates due to BSI unbound states being still
present

ci: picongpu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug a bug in the project's code component: core in PIConGPU (core application)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants