|
ampsci
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 amplsci to run this module by adding it as an input block to the input file:
Most modules will take input options. To see the available options for this module, list the block name after -m on the command-line:
(or ./ampsci -i Module::matrixElements), which prints:
The first option, operator is which operator we want to calculate matrix elements of. You can see a list of operators with the -o command-line option:
The second option, which is a sub-input-block, options is the set of options for the given operator. Most operators have no extra options, so this can be left blank. Some (e.g., hyperfine operator hfs have many available options). Like above, you can see the available options by further passing the operator name after -o. For example:
Here we will consider the simpler E1 operator. To our above example.in file, we can add the following block (note we may add as many Module:: blocks as we like, they will all be run one-by-one in order):
The omega = 0.0; option means we have solved RPA equations for each transition at zero frequency. It is also possible to automatically solve RPA for each transition frequency by setting: omega = each;. See ampsci.pdf for description of RPA.
The output format will depend on the specific module. In this case, we are shown the extent to which the RPA (/TDHF) equations converged, and then the valued of the reduced matrix elements are printed (at the Hartree-Fock, first-order core-polarisation, and all-orders RPA levels)
Core polarisation (RPA) is included in the matrix elements.
The best method to use is TDHF, which is numerically stable, and includes contribution from negative energy states automatically.
To improve tha accuracy of matrix elements, structure radiation and normalisation corrections should be included. There is an option to do this in the MatrixElements module. There is also a Module::StructureRad module, which gives some finer control.
If a Qk filename is given, program will first calculate all required Q^k Coulomb integrals before calculating structure radiation. This speeds up the calculation, at a great memory cost.