xref: /petsc/src/sys/tutorials/ex9f.F90 (revision c5e229c2f66f66995aed5443a26600af2aec4a3f) !
14bb2516aSBarry Smith!
24bb2516aSBarry Smith!   Example of using PetscOptionsBegin in Fortran
3ce78bad3SBarry Smith#include "petsc/finclude/petscsys.h"
4*c5e229c2SMartin Diehlprogram ex9f
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  end if
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  end if
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  end if
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  end if
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  end if
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  end if
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  end if
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  end if
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  end if
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  end if
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:
1113886731fSPierre 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