ComputationalRadiationPhysics / picongpu

Performance-Portable Particle-in-Cell Simulations for the Exascale Era :sparkles:
https://picongpu.readthedocs.io
Other
693 stars 218 forks source link

TODOs in Thomas-Fermi ionization #4486

Open pordyna opened 1 year ago

pordyna commented 1 year ago

I found some TODOs in the Thomas-Fermi algorithm, but couldn't find any open issues for them:

1

This one actually looks like it could be a problem when running a simulation with not all species having the same shape, which is allowed. https://github.com/ComputationalRadiationPhysics/picongpu/blob/c9eeba455f522684a485a58231daf5915b54777a/include/picongpu/particles/ionization/byCollision/ThomasFermi/ThomasFermi_Impl.hpp#L64-L77

2

These two are related. It looks like we only consider collisions within one ion species? I don't know if a simple sum over densities would be sufficient, but the new dynamic Coulomb logarithm implementation provides tools for calculating a scalar field that combines contributions from multiple species. Maybe something similar could be done here. This could maybe be a nice project for an SHK student, if really needed. https://github.com/ComputationalRadiationPhysics/picongpu/blob/c9eeba455f522684a485a58231daf5915b54777a/include/picongpu/particles/ionization/byCollision/ThomasFermi/ThomasFermi_Impl.hpp#L139-L143 https://github.com/ComputationalRadiationPhysics/picongpu/blob/c9eeba455f522684a485a58231daf5915b54777a/include/picongpu/particles/ionization/byCollision/ThomasFermi/ThomasFermi_Impl.hpp#L154-L158

3

Not exactly sure what this is about, but I include it for completeness ;) https://github.com/ComputationalRadiationPhysics/picongpu/blob/c9eeba455f522684a485a58231daf5915b54777a/include/picongpu/particles/ionization/byCollision/ThomasFermi/ThomasFermi_Impl.hpp#L307-L309

@BrianMarre Again, this looks like sth you could know more about^^ @psychocoderHPC @steindev

BrianMarre commented 1 year ago

regarding 3) I have already come across that one before, but did not yet find time to fix it, the intention is correct but the result is wrong. Upon ionization we are spawning one macro electron with velocity equal to parent macro-ion, this means that the physical impulse of the parent is reduced since the new electron was previously co-moving with the bound electron. Therefore it seems natural too insure momentum conservation by reducing the momentum of the macro-ion by the momentum of the newly spawned macro-electron, but this is only true if the macro-ion mass also changes, which it does not. In PIConGPU the ion mass is a compile time constant, therefore what we are doing is that we reducing the macro-ion velocity, but it is hard to notice since the momentum of the electron is supressed by a factor of ~(A*1900).

The alternative solution might be to not change the ion momentum at all and accept the small breaking of momentum conservation.

regarding 1 and 2) yes you are right, those should be relatively easy.

psychocoderHPC commented 1 year ago

Is point 3 a bug? If so please give me a sign and I add the bug label.

BrianMarre commented 1 year ago

Yes, a physics bug

PrometheusPi commented 1 year ago

Added bug label