9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-12-21 11:03:29 +01:00

Documentation

This commit is contained in:
Anthony Scemama 2019-03-07 17:49:59 +01:00
parent 8b22e38c9c
commit c527a2bd29
11 changed files with 1848 additions and 1512 deletions

View File

@ -186,23 +186,28 @@ def generate_index(entities):
with open(rst_file,'w') as f: with open(rst_file,'w') as f:
rst = [ "Index of Providers", rst = [ "Index of Providers",
"------------------", "------------------",
"" ] "",
".. hlist::",
""]
for e in sorted(entities.keys()): for e in sorted(entities.keys()):
e = entities[e] e = entities[e]
if e["type"] == 'p': if e["type"] == 'p':
rst.append("* :c:data:`%s`" % (e["name"])) rst.append(" * :c:data:`%s`" % (e["name"]))
rst += [ "", rst += [ "","",
"Index of Subroutines/Functions", "Index of Subroutines/Functions",
"------------------------------", "------------------------------",
"",
".. hlist::",
"" ] "" ]
for e in sorted(entities.keys()): for e in sorted(entities.keys()):
e = entities[e] e = entities[e]
if e["type"] == 's': if e["type"] == 's':
rst.append("* :c:func:`%s`" % (e["name"])) rst.append(" * :c:func:`%s`" % (e["name"]))
rst.append("\n")
f.write(" \n".join(rst)) f.write(" \n".join(rst))

View File

@ -27,7 +27,6 @@
users_guide/natural_orbitals users_guide/natural_orbitals
users_guide/printing users_guide/printing
users_guide/plugins users_guide/plugins
users_guide/qp_plugins
users_guide/index users_guide/index

View File

@ -387,6 +387,320 @@ Providers
* :c:data:`energy_x_sr_pbe` * :c:data:`energy_x_sr_pbe`
.. c:var:: potential_sr_c_alpha_ao_lda
File : :file:`dft_utils_one_e/sr_pot_ao_lda.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_c_alpha_ao_lda (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_beta_ao_lda (ao_num,ao_num,N_states)
short range correlation alpha/beta potentials with LDA functional on the |AO| basis
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`aos_in_r_array`
* :c:data:`aos_sr_vc_alpha_lda_w`
* :c:data:`n_points_final_grid`
* :c:data:`n_states`
.. c:var:: potential_sr_c_alpha_ao_pbe
File : :file:`dft_utils_one_e/sr_pot_ao_pbe.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_x_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_x_beta_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_beta_ao_pbe (ao_num,ao_num,N_states)
exchange / correlation potential for alpha / beta electrons with the Perdew-Burke-Ernzerhof GGA functional
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`n_states`
* :c:data:`pot_sr_grad_x_alpha_ao_pbe`
* :c:data:`pot_sr_scal_x_alpha_ao_pbe`
.. c:var:: potential_sr_c_beta_ao_lda
File : :file:`dft_utils_one_e/sr_pot_ao_lda.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_c_alpha_ao_lda (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_beta_ao_lda (ao_num,ao_num,N_states)
short range correlation alpha/beta potentials with LDA functional on the |AO| basis
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`aos_in_r_array`
* :c:data:`aos_sr_vc_alpha_lda_w`
* :c:data:`n_points_final_grid`
* :c:data:`n_states`
.. c:var:: potential_sr_c_beta_ao_pbe
File : :file:`dft_utils_one_e/sr_pot_ao_pbe.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_x_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_x_beta_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_beta_ao_pbe (ao_num,ao_num,N_states)
exchange / correlation potential for alpha / beta electrons with the Perdew-Burke-Ernzerhof GGA functional
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`n_states`
* :c:data:`pot_sr_grad_x_alpha_ao_pbe`
* :c:data:`pot_sr_scal_x_alpha_ao_pbe`
.. c:var:: potential_sr_x_alpha_ao_lda
File : :file:`dft_utils_one_e/sr_pot_ao_lda.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_x_alpha_ao_lda (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_x_beta_ao_lda (ao_num,ao_num,N_states)
short range exchange alpha/beta potentials with LDA functional on the |AO| basis
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`aos_in_r_array`
* :c:data:`aos_sr_vc_alpha_lda_w`
* :c:data:`n_points_final_grid`
* :c:data:`n_states`
.. c:var:: potential_sr_x_alpha_ao_pbe
File : :file:`dft_utils_one_e/sr_pot_ao_pbe.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_x_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_x_beta_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_beta_ao_pbe (ao_num,ao_num,N_states)
exchange / correlation potential for alpha / beta electrons with the Perdew-Burke-Ernzerhof GGA functional
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`n_states`
* :c:data:`pot_sr_grad_x_alpha_ao_pbe`
* :c:data:`pot_sr_scal_x_alpha_ao_pbe`
.. c:var:: potential_sr_x_beta_ao_lda
File : :file:`dft_utils_one_e/sr_pot_ao_lda.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_x_alpha_ao_lda (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_x_beta_ao_lda (ao_num,ao_num,N_states)
short range exchange alpha/beta potentials with LDA functional on the |AO| basis
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`aos_in_r_array`
* :c:data:`aos_sr_vc_alpha_lda_w`
* :c:data:`n_points_final_grid`
* :c:data:`n_states`
.. c:var:: potential_sr_x_beta_ao_pbe
File : :file:`dft_utils_one_e/sr_pot_ao_pbe.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_x_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_x_beta_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_c_beta_ao_pbe (ao_num,ao_num,N_states)
exchange / correlation potential for alpha / beta electrons with the Perdew-Burke-Ernzerhof GGA functional
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`n_states`
* :c:data:`pot_sr_grad_x_alpha_ao_pbe`
* :c:data:`pot_sr_scal_x_alpha_ao_pbe`
.. c:var:: potential_sr_xc_alpha_ao_lda
File : :file:`dft_utils_one_e/sr_pot_ao_lda_smashed.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_xc_alpha_ao_lda (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_xc_beta_ao_lda (ao_num,ao_num,N_states)
short range exchange/correlation alpha/beta potentials with LDA functional on the AO basis
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`aos_in_r_array`
* :c:data:`aos_sr_vxc_alpha_lda_w`
* :c:data:`n_points_final_grid`
* :c:data:`n_states`
.. c:var:: potential_sr_xc_alpha_ao_pbe
File : :file:`dft_utils_one_e/sr_pot_ao_pbe_smashed.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_xc_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_xc_beta_ao_pbe (ao_num,ao_num,N_states)
exchange / correlation potential for alpha / beta electrons with the Perdew-Burke-Ernzerhof GGA functional
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`n_states`
* :c:data:`pot_sr_grad_xc_alpha_ao_pbe`
* :c:data:`pot_sr_scal_xc_alpha_ao_pbe`
.. c:var:: potential_sr_xc_beta_ao_lda
File : :file:`dft_utils_one_e/sr_pot_ao_lda_smashed.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_xc_alpha_ao_lda (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_xc_beta_ao_lda (ao_num,ao_num,N_states)
short range exchange/correlation alpha/beta potentials with LDA functional on the AO basis
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`aos_in_r_array`
* :c:data:`aos_sr_vxc_alpha_lda_w`
* :c:data:`n_points_final_grid`
* :c:data:`n_states`
.. c:var:: potential_sr_xc_beta_ao_pbe
File : :file:`dft_utils_one_e/sr_pot_ao_pbe_smashed.irp.f`
.. code:: fortran
double precision, allocatable :: potential_sr_xc_alpha_ao_pbe (ao_num,ao_num,N_states)
double precision, allocatable :: potential_sr_xc_beta_ao_pbe (ao_num,ao_num,N_states)
exchange / correlation potential for alpha / beta electrons with the Perdew-Burke-Ernzerhof GGA functional
Needs:
.. hlist::
:columns: 3
* :c:data:`ao_num`
* :c:data:`n_states`
* :c:data:`pot_sr_grad_xc_alpha_ao_pbe`
* :c:data:`pot_sr_scal_xc_alpha_ao_pbe`
.. c:var:: psi_dft_energy_h_core .. c:var:: psi_dft_energy_h_core

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,7 @@ excited states of different symmetries may enter in the calculation.
Note that it is possible to make state-average calculation of states Note that it is possible to make state-average calculation of states
with different symmetries and/or different spin multiplicities. with different symmetries and/or different spin multiplicities.
To include excited state of all possible symmetries, a simple trick is To include excited states of all possible symmetries, a simple trick is
to run a preliminary multi-state |CIS| calculation using the :ref:`CIS` to run a preliminary multi-state |CIS| calculation using the :ref:`CIS`
program, and then running the selected |FCI| restarting from the |CIS| program, and then running the selected |FCI| restarting from the |CIS|
states, setting :option:`determinants read_wf` to |true|. states, setting :option:`determinants read_wf` to |true|.
@ -34,6 +34,6 @@ convergence of excitation energies.
.. seealso:: .. seealso::
The documentation of the :c:func:`scf`, :c:func:`cis` and The documentation of the :ref:`scf`, :ref:`cis` and
:c:func:`fci` programs. :ref:`fci` programs.

View File

@ -8,7 +8,7 @@ To produce state-average natural orbitals, run ::
qp_run save_natorb file.ezfio qp_run save_natorb file.ezfio
The MOs will be replaced, so the two-electron integrals and the wave The |MOs| will be replaced, so the two-electron integrals and the wave
function are invalidated as well. function are invalidated as well.
@ -17,16 +17,16 @@ Extracting natural orbitals
--------------------------- ---------------------------
Once obtained the near |FCI| wave function, one can obtain many Once obtained the near |FCI| wave function, one can obtain many
Onquantities related to it. e of these quantities are the natural quantities related to it. One of these quantities are the natural
Onorbitals which have the properties of diagonalizing the one-body orbitals which have the propertiy of diagonalizing the one-body
Ondensity matrix: density matrix:
.. math:: .. math::
\rho_{ij} = \delta_{ij} \rho_{ij} = \delta_{ij}
where the element of the one-body density matrix :math:`\rho_{ij}` is where the element of the one-body density matrix :math:`\rho_{ij}` is
define as: defined as:
.. math:: .. math::
@ -50,7 +50,7 @@ Hands on
.. important:: .. important::
As the |MOs| are changed, for the sake of coherence of future As the |MOs| are changed, for the sake of coherence of future
calculations, the save_natorb program *automatically removes the calculations, the :ref:`save_natorb` program *automatically removes the
current wave function* stored in the |EZFIO| database and replaces current wave function* stored in the |EZFIO| database and replaces
it by a single Slater determinant corresponding to a |HF| occupation it by a single Slater determinant corresponding to a |HF| occupation
of the new spin orbitals. Also, all the keywords to read the one- of the new spin orbitals. Also, all the keywords to read the one-
@ -60,5 +60,5 @@ Hands on
.. seealso:: .. seealso::
The documentation of the :c:func:`save_natorb` program. The documentation of the :ref:`save_natorb` program.

View File

@ -23,20 +23,18 @@ Then, look for the word *hand* when you are in the :ref:`qp_edit`
mode. If the research is negative, then it means that the wave mode. If the research is negative, then it means that the wave
function stored in the |EZFIO| database is too large to be edited function stored in the |EZFIO| database is too large to be edited
interactively in :ref:`qp_edit` mode. An alternative is to use the interactively in :ref:`qp_edit` mode. An alternative is to use the
:command:`print_wf` command: :ref:`print_ci_vectors` program:
.. code:: .. code::
qp_run print_wf file.ezfio | tee file.ezfio.fci_natorb.wf qp_run print_ci_vectors file.ezfio > tee file.ezfio.wf
This program will, by default, print out the first :math:`10^4` This program will, by default, print out the full set of determinants, whatever
determinants whatever the size of the wave function stored in the the size of the wave function stored in the |EZFIO| directory.
|EZFIO| directory. If you want to change the number of printed Slater
determinants, just change the :option:`determinants n_det_print_wf`
keyword using the :ref:`qp_edit` tool.
.. seealso:: .. seealso::
The documentation of the :ref:`print_wf` program. To get some additional information on the wave function, you can use
the :ref:`print_wf` program.

View File

@ -4,7 +4,7 @@ Quick-start guide
This tutorial should teach you everything you need to get started with This tutorial should teach you everything you need to get started with
the the basics of the |qp|. As an example, we will run a frozen core the the basics of the |qp|. As an example, we will run a frozen core
|CIPSI| calculation on the HCN molecule in the 631-G basis set. |CIPSI| calculation on the HCN molecule in the 6-31G basis set.
Demo video Demo video
@ -33,24 +33,24 @@ Please execute in the current shell:
where :code:`${QP_ROOT}` is the path to the source files of the |QP| installed on your architecture. where :code:`${QP_ROOT}` is the path to the source files of the |QP| installed on your architecture.
The |QPSH| mode: a bash-like experience for quantum chemistry The |QPSH| mode: a Bash-like experience for quantum chemistry
------------------------------------------------------------- -------------------------------------------------------------
The |QP| has been designed pretty much as an *interactive* environment for quantum-chemistry calculations, The |QP| has been designed pretty much as an *interactive* environment for quantum-chemistry calculations,
in order to facilitate the user experience. in order to facilitate the user experience.
Just like in bash, there are many commands in the |QP| (see for instance :ref:`qp_edit` or :ref:`qp_run`) Just like in Bash, there are many commands in the |QP| (see for instance :ref:`qp_edit` or :ref:`qp_run`)
which help in handling useful data or running executables (see for instance :ref:`scf` or :ref:`fci`). which help in handling useful data or running executables (see for instance :ref:`scf` or :ref:`fci`).
All commands designed within the |qp| **begins** with `qp`, and are two ways of running a **command**: All commands designed within the |qp| **begin** with `qp`, and there are two ways of running a **command**:
* the *executable* associated to the command: * running the *executable* associated with the command:
.. code:: bash .. code:: bash
qp_command qp_command
or the *qp* command which calls the *executable* :code:`qp_command`: or executing the *qp* shell command which calls the *executable* :code:`qp_command`:
.. code:: bash .. code:: bash
@ -58,7 +58,7 @@ or the *qp* command which calls the *executable* :code:`qp_command`:
Usually, when using the :command:`qp` command, the name of the |EZFIO| database is omitted. Usually, when using the :command:`qp` command, the name of the |EZFIO| database is omitted.
The advantage or using :code:`qp command` is that you can, just like in bash, have: The advantage of using :code:`qp command` is that you can, just like in Bash, have:
* the :kbd:`Tab` key for the auto-completion for basically any command of the |QP| * the :kbd:`Tab` key for the auto-completion for basically any command of the |QP|
@ -147,13 +147,14 @@ The expected energy is ``-92.827856698`` au.
:ref:`scf` program. :ref:`scf` program.
This creates the |MOs| in the |EZFIO| database that will be used to This creates the |MOs| in the |EZFIO| database that will be used to
perform any other post-SCF method. The |qp| does not handle symmetry and in any other post-SCF method. The |qp| does not handle symmetry and
the |MOs| are stored by increasing order of Fock energies. the |MOs| are stored by increasing order of Fock energies.
Choose the target |MO| space Choose the target |MO| space
---------------------------- ----------------------------
Now, we will modify the |EZFIO| database to make |CIPSI| calculation only in the Now, we will modify the |EZFIO| database to make a |CIPSI| calculation only in the
full set of valence |MOs|, keeping the core |MOs| frozen. The simple full set of valence |MOs|, keeping the core |MOs| frozen. The simple
command :ref:`qp_set_frozen_core` does this automatically: command :ref:`qp_set_frozen_core` does this automatically:
@ -167,7 +168,7 @@ In the case of HCN molecule in the 631G basis, one has 20 |MOs| in total and the
.. code:: .. code::
qp set_mo_class --core "[1-2]" --act "[3-20]" qp set_mo_class --core="[1-2]" --act="[3-20]"
@ -193,7 +194,7 @@ The program will start with a single determinant and will iteratively:
:math:`E=E_\text{FCI} - \alpha\, E_\text{PT2}` :math:`E=E_\text{FCI} - \alpha\, E_\text{PT2}`
By default, the program will stop when more than one million determinants have By default, the program will stop when more than one million determinants have
entered in the internal space, or when the |PT2| energy is below :math:`10^{-4}`. entered in the internal space, or when the |PT2| energy is below :math:`10^{-4}` au.
To have a pictural illustration of the convergence of the |CIPSI| algorithm, just run To have a pictural illustration of the convergence of the |CIPSI| algorithm, just run
@ -201,7 +202,10 @@ To have a pictural illustration of the convergence of the |CIPSI| algorithm, jus
qp_e_conv_fci qp_e_conv_fci
This will create the files "hcn.fci.out.conv" containing the data of the convergence of the energy that can be plotted, together with the file "hcn.fci.out.conv.1.eps" which is obtained from the gnuplot plot file "hcn.fci.out.conv.plt". This will create the files :file:`hcn.fci.out.conv` containing the data of the
convergence of the energy that can be plotted, together with the file
:file:`hcn.fci.out.conv.1.eps` which is obtained from the gnuplot plot file
:file:`hcn.fci.out.conv.plt`.
The estimated |FCI| energy of HCN is ``-93.0501`` au. The estimated |FCI| energy of HCN is ``-93.0501`` au.

View File

@ -49,7 +49,7 @@ excited states of different symmetries may enter in the calculation.
Note that it is possible to make state\-average calculation of states Note that it is possible to make state\-average calculation of states
with different symmetries and/or different spin multiplicities. with different symmetries and/or different spin multiplicities.
.sp .sp
To include excited state of all possible symmetries, a simple trick is To include excited states of all possible symmetries, a simple trick is
to run a preliminary multi\-state CIS calculation using the CIS to run a preliminary multi\-state CIS calculation using the CIS
program, and then running the selected FCI restarting from the CIS program, and then running the selected FCI restarting from the CIS
states, setting \fBdeterminants read_wf\fP to \fBtrue\fP\&. states, setting \fBdeterminants read_wf\fP to \fBtrue\fP\&.
@ -61,8 +61,8 @@ convergence of excitation energies.
\fBSEE ALSO:\fP \fBSEE ALSO:\fP
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5
The documentation of the \fBscf()\fP, \fBcis()\fP and The documentation of the scf, cis and
\fBfci()\fP programs. fci programs.
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.SH AUTHOR .SH AUTHOR

View File

@ -49,9 +49,9 @@ function are invalidated as well.
.SH EXTRACTING NATURAL ORBITALS .SH EXTRACTING NATURAL ORBITALS
.sp .sp
Once obtained the near FCI wave function, one can obtain many Once obtained the near FCI wave function, one can obtain many
Onquantities related to it. e of these quantities are the natural quantities related to it. One of these quantities are the natural
Onorbitals which have the properties of diagonalizing the one\-body orbitals which have the propertiy of diagonalizing the one\-body
Ondensity matrix: density matrix:
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5
.sp .sp
@ -62,7 +62,7 @@ Ondensity matrix:
.UNINDENT .UNINDENT
.sp .sp
where the element of the one\-body density matrix \erho_{ij} is where the element of the one\-body density matrix \erho_{ij} is
define as: defined as:
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5
.sp .sp
@ -105,7 +105,7 @@ current set of MOs\&.
\fBSEE ALSO:\fP \fBSEE ALSO:\fP
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5
The documentation of the \fBsave_natorb()\fP program. The documentation of the save_natorb program.
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.SH AUTHOR .SH AUTHOR

View File

@ -60,28 +60,26 @@ Then, look for the word \fIhand\fP when you are in the qp_edit
mode. If the research is negative, then it means that the wave mode. If the research is negative, then it means that the wave
function stored in the \fI\%EZFIO\fP database is too large to be edited function stored in the \fI\%EZFIO\fP database is too large to be edited
interactively in qp_edit mode. An alternative is to use the interactively in qp_edit mode. An alternative is to use the
\fBprint_wf\fP command: print_ci_vectors program:
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5
.sp .sp
.nf .nf
.ft C .ft C
qp_run print_wf file.ezfio | tee file.ezfio.fci_natorb.wf qp_run print_ci_vectors file.ezfio > tee file.ezfio.wf
.ft P .ft P
.fi .fi
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.sp .sp
This program will, by default, print out the first 10^4 This program will, by default, print out the full set of determinants, whatever
determinants whatever the size of the wave function stored in the the size of the wave function stored in the \fI\%EZFIO\fP directory.
\fI\%EZFIO\fP directory. If you want to change the number of printed Slater
determinants, just change the \fBdeterminants n_det_print_wf\fP
keyword using the qp_edit tool.
.sp .sp
\fBSEE ALSO:\fP \fBSEE ALSO:\fP
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5
The documentation of the print_wf program. To get some additional information on the wave function, you can use
the print_wf program.
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.SH AUTHOR .SH AUTHOR