xref: /petsc/src/sys/objects/ftn-src/optionenum.F90 (revision d47c0497e3b52bb8681c9d2e1026ce8506d72f69)
16dd63270SBarry Smith#include "petsc/finclude/petscsys.h"
26dd63270SBarry Smith
36dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
46dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PetscOptionsGetEnum
56dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PetscOptionsEnum
66dd63270SBarry Smith#endif
76dd63270SBarry Smith
802c639afSMartin Diehlsubroutine PetscOptionsGetEnum(po, pre, name, FArray, opt, set, ierr)
96dd63270SBarry Smith  use, intrinsic :: iso_c_binding
106dd63270SBarry Smith  use petscsysdef
116dd63270SBarry Smith  implicit none
126dd63270SBarry Smith
136dd63270SBarry Smith  character(*) pre, name
146dd63270SBarry Smith  character(*) FArray(*)
156dd63270SBarry Smith  PetscEnum                   :: opt
166dd63270SBarry Smith  PetscBool                   :: set
176dd63270SBarry Smith  PetscOptions                :: po
186dd63270SBarry Smith  PetscErrorCode, intent(out)  :: ierr
196dd63270SBarry Smith
2002c639afSMartin Diehl  type(C_Ptr), dimension(:), pointer :: CArray
216dd63270SBarry Smith  character(kind=c_char), pointer   :: nullc => null()
226dd63270SBarry Smith  PetscInt   :: i, Len
2302c639afSMartin Diehl  character(kind=C_char, len=99), dimension(:), pointer::list1
246dd63270SBarry Smith
256dd63270SBarry Smith  Len = 0
266dd63270SBarry Smith  do i = 1, 100
274820e4eaSBarry Smith    if (len_trim(Farray(i)) == 0) then
286dd63270SBarry Smith      Len = i - 1
29*057526baSMartin Diehl      exit
306dd63270SBarry Smith    end if
316dd63270SBarry Smith  end do
326dd63270SBarry Smith
3302c639afSMartin Diehl  allocate (list1(Len), stat=ierr)
344820e4eaSBarry Smith  if (ierr /= 0) return
3502c639afSMartin Diehl  allocate (CArray(Len + 1), stat=ierr)
364820e4eaSBarry Smith  if (ierr /= 0) return
376dd63270SBarry Smith  do i = 1, Len
386dd63270SBarry Smith    list1(i) = trim(FArray(i))//C_NULL_CHAR
396dd63270SBarry Smith    CArray(i) = c_loc(list1(i))
406dd63270SBarry Smith  end do
416dd63270SBarry Smith
426dd63270SBarry Smith  CArray(Len + 1) = c_loc(nullc)
436dd63270SBarry Smith  call PetscOptionsGetEnumPrivate(po, pre, name, CArray, opt, set, ierr)
4402c639afSMartin Diehl  deallocate (CArray)
4502c639afSMartin Diehl  deallocate (list1)
4602c639afSMartin Diehlend subroutine
476dd63270SBarry Smith
4802c639afSMartin Diehlsubroutine PetscOptionsEnum(opt, text, man, Flist, curr, ivalue, set, ierr)
496dd63270SBarry Smith  use, intrinsic :: iso_c_binding
506dd63270SBarry Smith  use petscsysdef
516dd63270SBarry Smith  implicit none
526dd63270SBarry Smith
536dd63270SBarry Smith  character(*) opt, text, man
546dd63270SBarry Smith  character(*) Flist(*)
556dd63270SBarry Smith  PetscEnum                   :: curr, ivalue
566dd63270SBarry Smith  PetscBool                   :: set
576dd63270SBarry Smith  PetscErrorCode, intent(out)  :: ierr
586dd63270SBarry Smith
5902c639afSMartin Diehl  type(C_Ptr), dimension(:), pointer :: CArray
606dd63270SBarry Smith  character(kind=c_char), pointer   :: nullc => null()
616dd63270SBarry Smith  PetscInt   :: i, Len
6202c639afSMartin Diehl  character(kind=C_char, len=99), dimension(:), pointer::list1
636dd63270SBarry Smith
646dd63270SBarry Smith  Len = 0
656dd63270SBarry Smith  do i = 1, 100
664820e4eaSBarry Smith    if (len_trim(Flist(i)) == 0) then
676dd63270SBarry Smith      Len = i - 1
68*057526baSMartin Diehl      exit
696dd63270SBarry Smith    end if
706dd63270SBarry Smith  end do
716dd63270SBarry Smith
7202c639afSMartin Diehl  allocate (list1(Len), stat=ierr)
734820e4eaSBarry Smith  if (ierr /= 0) return
7402c639afSMartin Diehl  allocate (CArray(Len + 1), stat=ierr)
754820e4eaSBarry Smith  if (ierr /= 0) return
766dd63270SBarry Smith  do i = 1, Len
776dd63270SBarry Smith    list1(i) = trim(Flist(i))//C_NULL_CHAR
786dd63270SBarry Smith    CArray(i) = c_loc(list1(i))
796dd63270SBarry Smith  end do
806dd63270SBarry Smith
816dd63270SBarry Smith  CArray(Len + 1) = c_loc(nullc)
826dd63270SBarry Smith  call PetscOptionsEnumPrivate(opt, text, man, CArray, curr, ivalue, set, ierr)
836dd63270SBarry Smith
8402c639afSMartin Diehl  deallocate (CArray)
8502c639afSMartin Diehl  deallocate (list1)
8602c639afSMartin Diehlend subroutine PetscOptionsEnum
87