Actual source code: ex9f.F90

  1: !
  2: !   Example of using PetscOptionsBegin in Fortran
  3: program ex9f
  4: #include "petsc/finclude/petscsys.h"
  5:   use petscsys
  6:   implicit none

  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)

 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)

 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'

 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

 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))

 97:   deallocate (iarray)
 98:   deallocate (rarray)
 99:   deallocate (barray)
100:   deallocate (sarray)
101:   PetscCallA(PetscFinalize(ierr))
102: end program ex9f

104: !
105: !/*TEST
106: !
107: !   build:
108: !      requires: defined(PETSC_USING_F2003) defined(PETSC_USING_F90FREEFORM) !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*/