The distribution archive contains parinputedited that corresponds to the test case [4]. Such a file describes the interatomic potentials. Units are CGS. Some knowledge of Python and of the Numerical extension (NumPy) is necessary. Interactions are book-keept by a Python dictionary. For example the dictionary entry
BK_L['O_G1']['Nd_G0']describes the longitudinal Born-Karman interactions between oxygen atoms of the equivalency group
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # Interactions between 'O_G1' and 'Nd_G0' # Shell N0 going from 2.327062 to 2.327062 like O7 in 0 and Nd2 in 0 0 0 # Shell N1 going from 4.584508 to 4.584508 like O7 in 0 and Nd2 in -1 0 0 # Shell N2 going from 5.192371 to 5.192371 like O7 in 0 and Nd1 in 0 0 1 BMpar.A= 2000 * ev_erg BMpar.R= 0.316 * A_cm distances= [ 2.327062 * A_cm ,4.584508* A_cm ] BMpar.ZZ= Z_['Nd_G0']*Z_['O_G0' ] print " ['Nd_G0']*Z_['O_G0' ] " BK_L['O_G1']['Nd_G0']=map(bm_L,distances) BK_T['O_G1']['Nd_G0']=map(bm_T,distances)
where is an user defined function (see input file)
of distance.
The parameters file specifies also other thing like, atom polarizability, Charges and analytical potentials. A few words should be spent on analytical potentials that can be of the Born-Mayer, Van der Walls, Lenard Jones type. They are specified by atom-dependent parameters, contrarily to the spring constants which are interaction (bond) dependent, .i.e. are given for each couple of interacting atom-types.
However in the literature one often finds analytical parameter that are bond dependent.
In this case on can include them as spring constant. this is done in our example perinputedited file,
where the function is mapped on the shell distances to get spring
constants.
Then the calculation is performed running dispersionDeb.py under Python with three arguments:
python dispersionDeb.py <parinputedited-filename> <cella-filename> <additional-filename>
The significance of parinputedited and cella has been explained before. The last parameter specifies a file containing some parameters concerning the q-points at which phonons are calculated and other parameters governing the treatement of coulomb interactions. This is an examples :
astar=2*math.pi/3.95 cstar=2*math.pi/12.06556 eps=0.0011 Q=Numeric.array( [ [astar*0.01*i+eps,-astar*0.01*i+eps,0] \ for i in range(1,100)]) debyerange=[8,8,2] debye=astar/4 SMcellrange=[2,2,2] cellrange= [-1,-1,-1] Kcellrange=[8,8,2] sigmacellrange=[8,8,2] sigmacharge=3 IS_IT_SCREENED=1 selectors=[(1.0,1.0,0.0), (1.0,-1.0,0.0), (1.0,0.0,1.0), (-1.0,1.0,0.0)]
The distribution archive contains an examples file (dispersionDebinput).
The q-points are defined by the variable Q, cstar and astar being just auxiliary variables.
When summing up the contributions from spring constants a loop is done over all atoms in several cells. The variable SMcellrange gives the extent of this loop over the unit cells
in the three directions a,b,c. Giving
, for example,
implies considering just the central unit-cell, but that might loose several interactions,
particularly in the considered case where we include also second neighbours.
For the example considered,
is enough.
The variable
specifies the extent of the summation of analytical potentials,
namely Born-Mayer, Van der Waals, Lennard Jones.
The variables
determines if the Coulomb interactions are screened or not.
In the case of unscreened interactions the summation shows convergence problems
that are cured by decomposing it partly in reciprocal space
and partly in real space thanks to an appropriate charge smearing ( see Unisoft manual
for details [5]). The Gaussian charge smearing is governed by
, given in
Angstroem.
The extensions of reciprocal-space and real-space summation are given by the
variables
and
respectively. Taking a large sigma for charge smearing will make Kcellrange smaller( faster reciprocal space convergence) but will give a bigger sigmacellrange.
Convergence has to be checked against these variables.
In the case of a screened potential, two variables have to be given : which multiplies
the distance in the exponential damping of the Coulomb potential and the extent of the real space
summation, debyerange.
Finally the variable gives a set of directions
against which the simmetry of the eigenmodes is checked.
The output is contained in three files : storeall, disp_res, disp_ressq. The ASCII files disp_res, disp_ressq contain the squares and the values of the phonon frequencies respectively. The file storeall stores in Python ``pickled'' form the calculated eigenvectors and frequencies. This file is finally used by the program scattering_shifted.py to calculate scattering intensities.
If the variable is set, an additional file, named polar_res,
where for each directions the index of the eigenvalues ( referring to the
ordering given in the output file) is given following the order of growing eigenvector
projections over the
direction. This can help to retrieve
eigenvectors of specific symmetries, whose signal is enhanced by
the experimental geometry.