xref: /petsc/src/sys/tutorials/ex9f.F90 (revision 3886731f808f6f9ca8348e6e791c818340d72f91)
14bb2516aSBarry Smith!
24bb2516aSBarry Smith!   Example of using PetscOptionsBegin in Fortran
34bb2516aSBarry Smithprogram ex9f
4ce78bad3SBarry Smith#include "petsc/finclude/petscsys.h"
5ce78bad3SBarry Smith    use petscsys
64bb2516aSBarry Smith    implicit none
74bb2516aSBarry Smith
84bb2516aSBarry Smith    PetscReal,Parameter                       :: PReal = 1.0
94bb2516aSBarry Smith    Integer,Parameter                         :: Pr = Selected_Real_Kind(Precision(PReal))
104bb2516aSBarry Smith    PetscInt,Parameter                        :: PInt = 1
114bb2516aSBarry Smith    Integer,Parameter                         :: Pi = kind(PInt)
124bb2516aSBarry Smith
134bb2516aSBarry Smith    PetscErrorCode                            :: ierr
144bb2516aSBarry Smith    PetscBool                                 :: flg
154bb2516aSBarry Smith    PetscInt                                  :: nopt = 3_Pi
164bb2516aSBarry Smith    PetscBool                                 :: bvalue, bdefault = PETSC_TRUE
174bb2516aSBarry Smith    PetscBool,dimension(:),pointer            :: barray
184bb2516aSBarry Smith    PetscEnum                                 :: evalue, edefault = 2
194bb2516aSBarry Smith    PetscInt                                  :: ivalue, idefault = 2_Pi
204bb2516aSBarry Smith    PetscInt,dimension(:),pointer             :: iarray
214bb2516aSBarry Smith    PetscReal                                 :: rvalue, rdefault = 1.23_Pr
224bb2516aSBarry Smith    PetscReal,dimension(:),pointer            :: rarray
234bb2516aSBarry Smith    PetscScalar                               :: svalue, sdefault = -4.56_Pr
244bb2516aSBarry Smith    PetscScalar,dimension(:),pointer          :: sarray
254bb2516aSBarry Smith    character(len=256)                        :: IOBuffer
264bb2516aSBarry Smith    character(len=256)                        :: stvalue,stdefault
274bb2516aSBarry Smith    character(len=256)                        :: list(6)
284bb2516aSBarry Smith
294bb2516aSBarry Smith    PetscCallA(PetscInitialize(ierr))
304bb2516aSBarry Smith    list(1)   = 'a123   '
314bb2516aSBarry Smith    list(2)   = 'b456   '
324bb2516aSBarry Smith    list(3)   = 'c789   '
334bb2516aSBarry Smith    list(4)   = 'list   '
344bb2516aSBarry Smith    list(5)   = 'prefix_'
354bb2516aSBarry Smith    list(6)   = ''
364bb2516aSBarry Smith    stdefault = 'oulala oulala'
374bb2516aSBarry Smith
384bb2516aSBarry Smith    Allocate(iarray(nopt),source=-1_Pi)
394bb2516aSBarry Smith    Allocate(rarray(nopt),source=-99.0_pr)
404bb2516aSBarry Smith    Allocate(barray(nopt),source=PETSC_FALSE)
414bb2516aSBarry Smith    Allocate(sarray(nopt))
424bb2516aSBarry Smith    sarray = 123.456_Pr
434bb2516aSBarry Smith
444bb2516aSBarry Smith    PetscCallA(PetscOptionsBegin(PETSC_COMM_WORLD,'prefix_','Setting options for my application','Section 1',ierr))
454bb2516aSBarry Smith        PetscCallA(PetscOptionsBool('-bool','Get an application bool','Man page',bdefault,bvalue,flg,ierr))
464bb2516aSBarry Smith        if (flg) then
474bb2516aSBarry Smith            write(IOBuffer,'("The bool value was set to ",L1,"\n")') bvalue
484bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr))
494bb2516aSBarry Smith        endif
504bb2516aSBarry Smith        PetscCallA(PetscOptionsBoolArray('-boolarray','Get an application bool array','Man page',barray,nopt,flg,ierr))
514bb2516aSBarry Smith        if (flg) then
524bb2516aSBarry Smith            write(IOBuffer,'("The bool array was set to ",*(L1," "))') barray
534bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,trim(IOBuffer)//"\n",ierr))
544bb2516aSBarry Smith        endif
554bb2516aSBarry Smith        PetscCallA(PetscOptionsEnum('-enum','Get an application enum','Man page',list,edefault,evalue,flg,ierr))
564bb2516aSBarry Smith        if (flg) then
574bb2516aSBarry Smith            write(IOBuffer,'("The bool value was set to ",A,"\n")') trim(list(evalue+1))
584bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr))
594bb2516aSBarry Smith        endif
604bb2516aSBarry Smith        PetscCallA(PetscOptionsInt('-int','Get an application int','Man page',idefault,ivalue,flg,ierr))
614bb2516aSBarry Smith        if (flg) then
624bb2516aSBarry Smith            write(IOBuffer,'("The integer value was set to ",I8,"\n")') ivalue
634bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr))
644bb2516aSBarry Smith        endif
654bb2516aSBarry Smith        PetscCallA(PetscOptionsIntArray('-intarray','Get an application int array','Man page',iarray,nopt,flg,ierr))
664bb2516aSBarry Smith        if (flg) then
674bb2516aSBarry Smith            write(IOBuffer, '("The integer array was set to ",*(I8," "))') iarray
684bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,trim(IOBuffer)//"\n",ierr))
694bb2516aSBarry Smith        endif
704bb2516aSBarry Smith        PetscCallA(PetscOptionsReal('-real','Get an application real','Man page',rdefault,rvalue,flg,ierr))
714bb2516aSBarry Smith        if (flg) then
724bb2516aSBarry Smith            write(IOBuffer,'("The real value was set to ",ES12.5,"\n")') rvalue
734bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr))
744bb2516aSBarry Smith        endif
754bb2516aSBarry Smith        PetscCallA(PetscOptionsRealArray('-realarray','Get an application real array','Man page',rarray,nopt,flg,ierr))
764bb2516aSBarry Smith        if (flg) then
774bb2516aSBarry Smith            write(IOBuffer,'("The real array was set to ",*(ES12.5," "))') rarray
784bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,trim(IOBuffer)//"\n",ierr))
794bb2516aSBarry Smith        endif
804bb2516aSBarry Smith        PetscCallA(PetscOptionsScalar('-scalar','Get an application scalar','Man page',sdefault,svalue,flg,ierr))
814bb2516aSBarry Smith        if (flg) then
824bb2516aSBarry Smith            write(IOBuffer,'("The scalar value was set to ",ES12.5,"\n")') svalue
834bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr))
844bb2516aSBarry Smith        endif
854bb2516aSBarry Smith        PetscCallA(PetscOptionsScalarArray('-scalararray','Get an application scalar array','Man page',sarray,nopt,flg,ierr))
864bb2516aSBarry Smith        if (flg) then
874bb2516aSBarry Smith            write(IOBuffer,'("The scalar array was set to ",*(ES12.5," "))') sarray
884bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,trim(IOBuffer)//"\n",ierr))
894bb2516aSBarry Smith        endif
904bb2516aSBarry Smith        PetscCallA(PetscOptionsString('-string','Get an application string','Man page',stdefault,stvalue,flg,ierr))
914bb2516aSBarry Smith        if (flg) then
924bb2516aSBarry Smith            write(IOBuffer,'("The string value was set to ",A,"\n")') trim(stvalue)
934bb2516aSBarry Smith            PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr))
944bb2516aSBarry Smith        endif
954bb2516aSBarry Smith    PetscCallA(PetscOptionsEnd(ierr))
964bb2516aSBarry Smith
974bb2516aSBarry Smith    deallocate(iarray)
984bb2516aSBarry Smith    deallocate(rarray)
994bb2516aSBarry Smith    deallocate(barray)
1004bb2516aSBarry Smith    deallocate(sarray)
1014bb2516aSBarry Smith    PetscCallA(PetscFinalize(ierr))
1024bb2516aSBarry Smithend program ex9f
1034bb2516aSBarry Smith
1044bb2516aSBarry Smith!
1054bb2516aSBarry Smith!/*TEST
1064bb2516aSBarry Smith!
1074bb2516aSBarry Smith!   build:
1084bb2516aSBarry Smith!      requires: defined(PETSC_USING_F2003) defined(PETSC_USING_F90FREEFORM) !complex
1094bb2516aSBarry Smith!
1104bb2516aSBarry Smith!   test:
111*3886731fSPierre Jolivet!      output_file: output/empty.out
1124bb2516aSBarry Smith!
1134bb2516aSBarry Smith!   test:
1144bb2516aSBarry Smith!      suffix: 2
1154bb2516aSBarry 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
1164bb2516aSBarry Smith!
1174bb2516aSBarry Smith!TEST*/
118