Closed drobnyjt closed 2 years ago
I've tried adaptive
and, although there are some inconveniences with its use (it is really intended to be used in a notebook, it uses a relatively obscure plotting library (holoviews)...) it seems to be the best way forward. In any situation where it might be useful otherwise, the tradeoff in terms of development time for saved computer power does not seem worth it.
Is your feature request related to a problem? Please describe. A topic that has come up more than once in internal group discussions about the BCA is importance sampling. For example, if one is simulating near-threshold sputtering, nearly all of the incident ions will immediately be non-candidates for producing sputtered atoms. In one sense, this already exists in the BCA in the form of adjustable cutoff energies; if one sets the cutoff energy of atoms in the simulation to the surface binding energy of the atoms, then this will significantly reduce computational time. However, this does not take into account geometry, nor does it handle events such as displacements or tails of the implantation distribution.
Proposed solution This paper proposes an atom splitting technique: https://scholar.archive.org/search?q=key:work_ygv27aypgveerj6vhdznejdc4q
This Python library could be used as an external wrapper to
single_ion_bca()
(if the appropriate Python bindings can be generated for RustBCA) that, with a stochastic learner, handle importance sampling implicitly: https://adaptive.readthedocs.io/en/latest/Alternative solution(s) Before this is implemented, the cost of development must be weighed against the benefits.