xref: /petsc/src/binding/petsc4py/docs/source/petsc_options.rst (revision 7f296bb328fcd4c99f2da7bfe8ba7ed8a4ebceee)
155a74a43SLisandro Dalcin.. _petsc_options:
255a74a43SLisandro Dalcin
3671e90c6SJose E. RomanWorking with PETSc options
4671e90c6SJose E. Roman==========================
555a74a43SLisandro Dalcin
66f336411SStefano ZampiniA very powerful feature of PETSc is that objects can be configured via command-line options.
76f336411SStefano ZampiniIn this way, one can choose the method to be used or set different parameters without changing the source code.
8*7f296bb3SBarry SmithSee the PETSc `manual <the_options_database>` for additional information.
9671e90c6SJose E. Roman
10671e90c6SJose E. RomanIn order to use command-line options in a petsc4py program, it is important to initialize the module as follows:
11671e90c6SJose E. Roman
12671e90c6SJose E. Roman.. code-block:: python
13671e90c6SJose E. Roman
14671e90c6SJose E. Roman  # We first import petsc4py and sys to initialize PETSc
15671e90c6SJose E. Roman  import sys, petsc4py
16671e90c6SJose E. Roman  petsc4py.init(sys.argv)
17671e90c6SJose E. Roman
18671e90c6SJose E. Roman  # Import the PETSc module
19671e90c6SJose E. Roman  from petsc4py import PETSc
20671e90c6SJose E. Roman
216f336411SStefano ZampiniThen one can provide command-line options when running a script:
22671e90c6SJose E. Roman
23671e90c6SJose E. Roman.. code-block:: console
24671e90c6SJose E. Roman
256f336411SStefano Zampini  $ python foo.py -ksp_type gmres -ksp_gmres_restart 100 -ksp_view
26671e90c6SJose E. Roman
276f336411SStefano ZampiniWhen the above initialization method is not possible, PETSc options can be also specified via environment variables or configuration files, e.g.:
28671e90c6SJose E. Roman
296f336411SStefano Zampini.. code-block:: console
30671e90c6SJose E. Roman
316f336411SStefano Zampini  $ PETSC_OPTIONS='-ksp_type gmres -ksp_gmres_restart 100 -ksp_view' python foo.py
32671e90c6SJose E. Roman
336f336411SStefano ZampiniCommand-line options can be read via an instance of the ``Options`` class. For instance:
34671e90c6SJose E. Roman
35671e90c6SJose E. Roman.. code-block:: python
36671e90c6SJose E. Roman
37671e90c6SJose E. Roman  OptDB = PETSc.Options()
38671e90c6SJose E. Roman  n     = OptDB.getInt('n', 16)
39671e90c6SJose E. Roman  eta   = OptDB.getReal('eta', 0.014)
40671e90c6SJose E. Roman  alpha = OptDB.getScalar('alpha', -12.3)
41671e90c6SJose E. Roman
426f336411SStefano ZampiniIn this way, if the script is run with
43671e90c6SJose E. Roman
44671e90c6SJose E. Roman.. code-block:: console
45671e90c6SJose E. Roman
466f336411SStefano Zampini  $ python foo.py -n 50 -alpha 8.8
47671e90c6SJose E. Roman
486f336411SStefano Zampinithe options, ``n`` and ``alpha`` will get the values ``50`` and ``8.8``, respectively, while ``eta`` will be assigned the value specified as default, ``0.014``.
496f336411SStefano Zampini
506f336411SStefano ZampiniThe options database is accessible also as a Python dictionary, so that one can for instance override, insert or delete an option:
51671e90c6SJose E. Roman
52671e90c6SJose E. Roman.. code-block:: python
53671e90c6SJose E. Roman
54671e90c6SJose E. Roman  OptDB['draw_pause'] = 1
556f336411SStefano Zampini  del OptDB['draw_pause']
56