... use JAC immediately with Binder in the cloud.
We here provide a first public version of JAC, the Jena Atomic Calculator and an open-source Julia package for doing atomic computations. JAC is a (relativistic) electronic structure code for the computation of (atomic many-electron) interaction amplitudes, properties as well as a large number of excitation and decay processes for open-shell atoms and ions across the whole periodic table. In forthcoming years, moreover, JAC will -- more and more -- facilitate also studies on atomic cascades, responses to external fields and particles, the time-evolution of atoms and ions as well as selected symbolic computations of expressions from Racah's algebra.
A primary guiding philosophy of JAC was to develop a general and easy-to-use toolbox for the atomic physics community, including an interface that is equally accessible for working spectroscopiests, theoreticians and code developers. Beside of its simple use, however, I also wish to provide a modern code design, a reasonable detailed documentation of the code as well as features for integrated testing. In particular, many typical computations and the handling of atomic data should appear within the code similar to how they would appear in spoken or written language. Shortly speaking, JAC aims to provide a powerful platform for daily use and to extent atomic theory towards new applications or, in short, a community platform for Just Atomic Computations.
Remark: Although major efforts have been undertaken during the past four years, JAC is still in an early state of development and includes various features that are only partly implemented or have not yet tested in good detail. Despite of possible failures and deficiencies of the present code, however, I here annouce JAC and kindly ask potential users and developers for response, support and encouragement.
In some more detail, JAC distinguishes and aims to support (partly still within the future) nine kinds of computations which can be summarized as follows (Figure):
A detailed User Guide, Compendium & Theoretical Background to JAC is available that describes the use and underlying atomic theory of the JAC code. News about recent developments of JAC are summarized here.
The code in this repository is distributed under the MIT licence. The associated User Guide, Compendium & Theoretical Background to JAC is distributed under the Creative Commons Attribution 4.0 International (CC BY 4.0) license.
For reference to (using) this code, please, use the Computer Physics Communications publication on JAC:
See also CITATION.bib
for the relevant references(s).
In Julia, you can install the JAC package like any other package by by just entering the package manager (with
pkg> add https://github.com/OpenJAC/JAC.jl
Moreover, to run the tutorials, you will need to have Jupyter notebooks running.typing
If you haven't used Julia and Jupyter before, you can also run under Linux or Windows either the script Install Julia, Jupyter & JAC via julialang.org or ... via snap.
JAC also works for Apple's MAC system, though there is less experience from our side. Please, see the Installation Guides Mac or ...
If you found a good solution for still other operating systems and/or hardware architectures, where the hints above do not work, please, send useful comments and email to s.fritzsche@gsi.de. I will be happy too add them here to further facilitate the use.
The JAC code makes use of:
The 'simplest access' to the JAC toolbox is by using Binder in the cloud. If you click here:
you will get a Jupyter notebook where you can call 'using JAC' in order to have Julia and JAC (completely) installed. -- Then you can run all examples and calls like on your own computer, just a bit slower (say, by a factor 3..5). This will help you to run a few first examples (as shown in the example folder above) and in order to decide of whether you wish to install the code locally.
You can also directly access the Getting started with JAC tutorial in the cloud, and similar for other tutorials that are distributed together with the code. Further details can then be found from the User Guide, Compendium & Theoretical Background to JAC. Make use the index or a full-text search to find selected items in this (.pdf) User Guide.
A very simple example has been discussed in the CPC reference
above and just refers to the low-lying level structure and the Einstein A and B coefficients of the
3s 3p^6 + 3s^2 3p^4 3d -> 3s^2 3p^5 transition array for Fe^{9+} ions, also known as the spectrum Fe X.
To perform such a computation within the framework of JAC, one needs to specify the initial- and final-state
configurations by an instance of an Atomic.Computation
, together with the specifier process=Radiative()
.
We here also provide a title (line), the multipoles (default E1) and the gauge forms for the coupling of the
radiation field that are to be applied in these calculations:
grid = Radial.Grid(true); setDefaults("standard grid", grid)
defaultsSettings = PhotoEmission.Settings()
photoSettings = PhotoEmission.Settings(defaultsSettings, multipoles=[E1, M1], gauges=[UseCoulomb, UseBabushkin], printBefore=true)
comp = Atomic.Computation(Atomic.Computation(), name="Energies and Einstein coefficients for the spectrum Fe X",
grid = grid, nuclearModel = Nuclear.Model(26.);
initialConfigs = [Configuration("[Ne] 3s 3p^6"), Configuration("[Ne] 3s^2 3p^4 3d")],
finalConfigs = [Configuration("[Ne] 3s^2 3p^5")],
processSettings = photoSettings );
perform(comp::Atomic.Computation)
This example is discussed also in one of the tutorials below or directly in the cloud.
For another (quick) start, you can make use of a large number of examples in the corresponding directory. Call include("../examples/examples.jl") at REPL to see which computations and test cases have been considered in the past years and how they can be used for some present task. Later, for instance, simply call include("../examples/example-Da.jl") to invoke such test cases explicitly in some working directory. Since this example directory was originally set-up for tests & development, you can either simply copy the code from some branch or need to set the requested branch to true. Since these examples have been utilized for development, unfortunately, they might not work (run through) immediately. However, they typically provide a good and useful starting point in order to understand the required input and to prepare short scripts for dealing with different applications of JAC. Because of the (very) large number of potential applications of this toolbox, it has been found difficult (not to say, impossible) to keep all these examples up-do-date.
The following IJulia/jupyter notebooks introduce the reader to JAC and demonstrate several features of this toolbox. --- They can be explored statically at GitHub or can be run locally after the software repository has been cloned and installed. In order to modify the cell-output of the notebooks and to better print wide tables, you can create or modify the file ~/.jupyter/custom/custom.css in your home directory and add the line: div.output_area pre { font-size: 7pt;} .
Although JAC has been designed for all atoms and ions across the periodic table, a number of limitations occur:
The scope of JAC is much wider than what I can (and plan to) implement myself here in Jena. With JAC's upload to GitHub, I therefore wish to encourage the users to fork the code and to report improvements, failures, bugs, etc. Non-trivial changes to the code can be made available via pull requests, i.e. by submitting code for review (by other users) prior to their merger with the master code.
In particular, I like to encourage contributions from the atomic physics community if the overall style of the package is maintained and if consensus exists how to add new features to the code. The goal should be to avoid duplication and inhomogeneity across the package as well as to implement (too) specific features that may cause issues in the future. External support by developers may include incremental improvements as well as multiple approaches for algorithms and modules in order to provide well-tested alternatives, for instance, if some particular approach does not work properly in all applications. Moreover, emphasis will be placed first on all those applications that receive enough attention by the community.
In contrast, I shall not support those developments which appears too sophisticated or detrimental to a long-term maintenance of the code. Other specialized parts might be incorporated later if the code has left its early stage of development and becomes robust enough.
Although a good number of tests have been made on JAC, this is still a very first implementation, and no code is error free. I shall therefore appreciate reports from the users if problems are encountered or, more helpful, if solutions are provided. One of the simplest way to start contributing to JAC is writing a tutorial, in addition to those provided above, in order to navigate others to the task of a new user. Also, new graphical user interface and plotting features on different outcomes of atomic computations will be very helpful for the community. A few further suggestions for extending and improving JAC can be found in section 1.7 in the User Guide, Compendium & Theoretical Background to JAC.