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