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