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