![]() |
|
High-precision calculations for one- and two-valence atomic systems
|
Calculate matrix elements of various operators.
Here, we'll see how to use an ampsci Module to calculate matrix elements of various opertors.
This assumes you already have ampsci compiled, and are familiar with running basic calculations.
Above, we ran ampsci, which calculated the atomic wavefunctions and printed their energies to screen. If we want to actually do anything with the wavefunctions, we have to run one or more modules. We do this by adding a module block to the input file, which has the form Module::ModuleName{}. We can see a list of all available modules with the -m command-line option:
The general usage of the code is to first use the main blocks to construct the atomic wavefunction and basis states, then to add as many Module:: blocks as required. Each module is a separate routine that will take the calculated wavefunction and compute any desired property (e.g., matrix elements). They are independent and do not talk to each other, though may write output to the disk. There are several available modules, here we will just focus on calculating matrix elements. The code is designed so that anyone can write a new Module to calculate anything else they may desire.
ampsci -m to see a list of available modulesWhen we ran ./ampsci -m, we would have seen a large list of available modules. One of them would have been called matrixElements. We tell ampsci to run this module by adding it as an input block to the input file. Let's walk through a complete example for Cs: compute the wavefunctions at Hartree-Fock level, then the E1 matrix elements (with core polarisation, RPA) between the valence states:
Run this in the usual way (./ampsci example.in). After the Hartree-Fock output, the module runs and prints:
The first lines show what is being calculated and how well the RPA (TDHF) equations converged. Then, for each pair of valence states allowed by the selection rules: the transition frequency w_ab (in au), the lowest-order (Hartree-Fock) reduced matrix element t0_ab, and the value including the RPA correction.
Most modules take input options; list them by giving the module name after -m on the command-line (the output is in input-file format, so you can copy+paste it):
See Matrix Elements for the full set of options (RPA methods, frequencies, core states, etc.).
The operator option names the operator; see a list with the -o command-line option:
The options{} sub-block holds operator-specific options. Most operators have none (like E1 above); some, e.g. the hyperfine operator hfs, have many – list them by passing the operator name: ./ampsci -o hfs. For example, hyperfine A constants with a "ball" nuclear magnetisation distribution, for the diagonal matrix elements only:
which outputs (note the units: for hyperfine, constants in MHz are printed rather than reduced matrix elements):
Note we may add as many Module:: blocks as we like; they are run one-by-one in order. See Operators for more detail and examples (E1, hyperfine, PNC).
Core polarisation (RPA) is included in the matrix elements with the rpa option, as above. The best method to use is TDHF (the default), which is numerically stable, and includes contributions from negative energy states automatically; the diagram and basis methods are also available (these require a basis). The omega option sets the frequency the RPA is solved at (omega = each; re-solves at each transition frequency; the frequency dependence is usually small). See ampsci.pdf for a description of RPA.
To improve the accuracy of matrix elements, structure radiation and normalisation corrections should be included. These are calculated with the separate Structure Radiation module (Module::StructureRadiation{}), which also gives the Brueckner orbital corrections.
If a Qk_file filename is given, the program will first calculate all required Q^k Coulomb integrals before calculating structure radiation. This speeds up the calculation, at a great memory cost.
Note: this can take a significant amount of memory. You can estimate the memory required using the ampsci -z command-line option. For example, if using a basis of 30spdfg for Structure Radiation,
Should return something like: