xref: /petsc/src/sys/tutorials/ex9f.F90 (revision 9b88ac225e01f016352a5f4cd90e158abe5f5675)
1!
2!   Example of using PetscOptionsBegin in Fortran
3#include "petsc/finclude/petscsys.h"
4program ex9f
5  use petscsys
6  implicit none
7
8  PetscReal, parameter                       :: PReal = 1.0
9  integer, parameter                         :: Pr = Selected_Real_Kind(precision(PReal))
10  PetscInt, parameter                        :: PInt = 1
11  integer, parameter                         :: Pi = kind(PInt)
12
13  PetscErrorCode                            :: ierr
14  PetscBool                                 :: flg
15  PetscInt                                  :: nopt = 3_Pi
16  PetscBool                                 :: bvalue, bdefault = PETSC_TRUE
17  PetscBool, dimension(:), pointer            :: barray
18  PetscEnum                                 :: evalue, edefault = 2
19  PetscInt                                  :: ivalue, idefault = 2_Pi
20  PetscInt, dimension(:), pointer             :: iarray
21  PetscReal                                 :: rvalue, rdefault = 1.23_Pr
22  PetscReal, dimension(:), pointer            :: rarray
23  PetscScalar                               :: svalue, sdefault = -4.56_Pr
24  PetscScalar, dimension(:), pointer          :: sarray
25  character(len=256)                        :: IOBuffer
26  character(len=256)                        :: stvalue, stdefault
27  character(len=256)                        :: list(6)
28
29  PetscCallA(PetscInitialize(ierr))
30  list(1) = 'a123   '
31  list(2) = 'b456   '
32  list(3) = 'c789   '
33  list(4) = 'list   '
34  list(5) = 'prefix_'
35  list(6) = ''
36  stdefault = 'oulala oulala'
37
38  allocate (iarray(nopt), source=-1_Pi)
39  allocate (rarray(nopt), source=-99.0_pr)
40  allocate (barray(nopt), source=PETSC_FALSE)
41  allocate (sarray(nopt))
42  sarray = 123.456_Pr
43
44  PetscCallA(PetscOptionsBegin(PETSC_COMM_WORLD, 'prefix_', 'Setting options for my application', 'Section 1', ierr))
45  PetscCallA(PetscOptionsBool('-bool', 'Get an application bool', 'Man page', bdefault, bvalue, flg, ierr))
46  if (flg) then
47    write (IOBuffer, '("The bool value was set to ",L1,"\n")') bvalue
48    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, IOBuffer, ierr))
49  end if
50  PetscCallA(PetscOptionsBoolArray('-boolarray', 'Get an application bool array', 'Man page', barray, nopt, flg, ierr))
51  if (flg) then
52    write (IOBuffer, '("The bool array was set to ",*(L1," "))') barray
53    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, trim(IOBuffer)//"\n", ierr))
54  end if
55  PetscCallA(PetscOptionsEnum('-enum', 'Get an application enum', 'Man page', list, edefault, evalue, flg, ierr))
56  if (flg) then
57    write (IOBuffer, '("The bool value was set to ",A,"\n")') trim(list(evalue + 1))
58    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, IOBuffer, ierr))
59  end if
60  PetscCallA(PetscOptionsInt('-int', 'Get an application int', 'Man page', idefault, ivalue, flg, ierr))
61  if (flg) then
62    write (IOBuffer, '("The integer value was set to ",I8,"\n")') ivalue
63    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, IOBuffer, ierr))
64  end if
65  PetscCallA(PetscOptionsIntArray('-intarray', 'Get an application int array', 'Man page', iarray, nopt, flg, ierr))
66  if (flg) then
67    write (IOBuffer, '("The integer array was set to ",*(I8," "))') iarray
68    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, trim(IOBuffer)//"\n", ierr))
69  end if
70  PetscCallA(PetscOptionsReal('-real', 'Get an application real', 'Man page', rdefault, rvalue, flg, ierr))
71  if (flg) then
72    write (IOBuffer, '("The real value was set to ",ES12.5,"\n")') rvalue
73    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, IOBuffer, ierr))
74  end if
75  PetscCallA(PetscOptionsRealArray('-realarray', 'Get an application real array', 'Man page', rarray, nopt, flg, ierr))
76  if (flg) then
77    write (IOBuffer, '("The real array was set to ",*(ES12.5," "))') rarray
78    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, trim(IOBuffer)//"\n", ierr))
79  end if
80  PetscCallA(PetscOptionsScalar('-scalar', 'Get an application scalar', 'Man page', sdefault, svalue, flg, ierr))
81  if (flg) then
82    write (IOBuffer, '("The scalar value was set to ",ES12.5,"\n")') svalue
83    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, IOBuffer, ierr))
84  end if
85  PetscCallA(PetscOptionsScalarArray('-scalararray', 'Get an application scalar array', 'Man page', sarray, nopt, flg, ierr))
86  if (flg) then
87    write (IOBuffer, '("The scalar array was set to ",*(ES12.5," "))') sarray
88    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, trim(IOBuffer)//"\n", ierr))
89  end if
90  PetscCallA(PetscOptionsString('-string', 'Get an application string', 'Man page', stdefault, stvalue, flg, ierr))
91  if (flg) then
92    write (IOBuffer, '("The string value was set to ",A,"\n")') trim(stvalue)
93    PetscCallA(PetscPrintf(PETSC_COMM_WORLD, IOBuffer, ierr))
94  end if
95  PetscCallA(PetscOptionsEnd(ierr))
96
97  deallocate (iarray)
98  deallocate (rarray)
99  deallocate (barray)
100  deallocate (sarray)
101  PetscCallA(PetscFinalize(ierr))
102end program ex9f
103
104!
105!/*TEST
106!
107!   build:
108!      requires: !complex
109!
110!   test:
111!      output_file: output/empty.out
112!
113!   test:
114!      suffix: 2
115!      args: -prefix_int 22 -prefix_intarray 2-5 -prefix_real 2.34 -prefix_realarray -3,-4,5.5 -prefix_scalar 7.89 -prefix_scalararray 1.,2.,3. -prefix_bool no -prefix_boolarray 1,no,true -prefix_string This_is_a_test_of_the_emergency_alert_system
116!
117!TEST*/
118