Next: 8 File Formats
Up: User's Guide for the
Previous: 6 The routines of
Contents
If you plan to add something to the PHonon package follow these
simple rules:
- All quantities that do not require the perturbed wavefunctions, are
calculated in setup or by calling a separate routine in phq_init.
- The quantities that require the perturbed wavefunctions due to an
electric field are calculated by a separate routine after
solve_e in the routine phescf.
- The quantities that require the perturbed wavefunctions due to an
atomic displacement are accumulated by calling a separate routine
in phqscf after solve_linter.
NB: the perturbed wavefunctions are saved in a file that is rewritten at
each new irrep.
- After calculating a quantity, it has to be saved in the directory
outdir in an .xml file, by adding it to the list
of variables in the routine write_tensors
(preferable), or by writing a routine similar to write_tensors
that writes a separate file. The same quantity must be read by
read_tensors or by writing a separate routine.
- If you introduce the calculation of a new quantity in the phonon code
and save it in the .xml file, please add also the associated flags
that control the calculation:
lquantity is read in input and tells ph.x that that quantity must be
calculated, done_quantity tells ph.x that that quantity
was available in the .xml files and should not be recalculated,
comp_quantity can be introduced if the quantity depends on
q or on the frequency and tells ph.x that that quantity must be
calculated in this run. The image controller can divide the work among images
by setting the array comp_quantity. At each q point and
at each frequency the quantity must be saved in the .xml file.
Please update the image controller to add the additional work that the
calculation of your quantity involves and make a single image calculate it
or divide the work among different images.
- Please, try to avoid opening files inside routines.
Files must be opened in openfilq and closed in close_phq.
- Global variables must be allocated in allocate_phq, directly in the
routine, or by calling a separate routine that allocates all
your new variables. The same variables must be deallocated in
deallocate_phq, by a separate routine or by adding them to the
list of variables. Note that at each new q point these variables are
deallocated and reallocated.
- Variables that control the grid should not be deallocated at
each new q point must be allocated in allocate_grid_variables
and deallocated in destroy_status_run.
A few arrays that must be read from input are allocated in
phq_readin after reading their size and deallocated in
destroy_status_run.
- Preferably global variables are calculated by in a single routine
and used by the other routines. In particular routines are not allowed to
modify:
- The variables calculated by pw.x.
- The modes.
- The variables that describe the symmetry of the small group of q.
- The variables that describe the response of the ultrasoft quantities
(e.g. int1, int2, ..., alphasum,
becsum, dpqq, etc.).
If you need to modify these quantities, please allocate new variables
and copy the variables of the phonon on them.
- If you want to establish a new recover point, add the appropriate
rec_code in the list above. The point in which the code stopped
is saved in prefix.phsave/status_run.xml.
If you are searching for some interesting project to contribute to the
PHonon package, please read the header of phonon.f90
and implement some feature that is not yet ready. Ideally all quantities
should be at level [10], presently level [5] is still experimental and
some quantities are at level [1].
Next: 8 File Formats
Up: User's Guide for the
Previous: 6 The routines of
Contents
Filippo Spiga
2016-10-04