xref: /petsc/src/sys/objects/ftn-src/optionenum.F90 (revision bfe80ac4a46d58cb7760074b25f5e81b2f541d8a)
1#include "petsc/finclude/petscsys.h"
2
3#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
4!DEC$ ATTRIBUTES DLLEXPORT::PetscOptionsGetEnum
5!DEC$ ATTRIBUTES DLLEXPORT::PetscOptionsEnum
6#endif
7
8Subroutine PetscOptionsGetEnum(po,pre,name,FArray,opt,set,ierr)
9  use,intrinsic :: iso_c_binding
10  use petscsysdef
11  implicit none
12
13  character(*)                pre,name
14  character(*)                FArray(*)
15  PetscEnum                   :: opt
16  PetscBool                   :: set
17  PetscOptions                :: po
18  PetscErrorCode,intent(out)  :: ierr
19
20  Type(C_Ptr),Dimension(:),Pointer :: CArray
21  character(kind=c_char),pointer   :: nullc => null()
22  PetscInt   :: i,Len
23  Character(kind=C_char,len=99),Dimension(:),Pointer::list1
24
25  Len=0
26  do i=1,100
27    if (len_trim(Farray(i)) .eq. 0) then
28      Len = i-1
29      goto 100
30    endif
31  enddo
32100  continue
33
34  Allocate(list1(Len),stat=ierr)
35  if (ierr .ne. 0) return
36  Allocate(CArray(Len+1),stat=ierr)
37  if (ierr .ne. 0) return
38  do i=1,Len
39      list1(i) = trim(FArray(i))//C_NULL_CHAR
40      CArray(i) = c_loc(list1(i))
41  enddo
42
43  CArray(Len+1) = c_loc(nullc)
44  call PetscOptionsGetEnumPrivate(po,pre,name,CArray,opt,set,ierr)
45  DeAllocate(CArray)
46  DeAllocate(list1)
47End Subroutine
48
49Subroutine PetscOptionsEnum(opt,text,man,Flist,curr,ivalue,set,ierr)
50  use,intrinsic :: iso_c_binding
51  use petscsysdef
52  implicit none
53
54  character(*)                opt,text,man
55  character(*)                Flist(*)
56  PetscEnum                   :: curr,ivalue
57  PetscBool                   :: set
58  PetscErrorCode,intent(out)  :: ierr
59
60  Type(C_Ptr),Dimension(:),Pointer :: CArray
61  character(kind=c_char),pointer   :: nullc => null()
62  PetscInt   :: i,Len
63  Character(kind=C_char,len=99),Dimension(:),Pointer::list1
64
65  Len=0
66  do i=1,100
67    if (len_trim(Flist(i)) .eq. 0) then
68      Len = i-1
69      goto 100
70    endif
71  enddo
72100  continue
73
74  Allocate(list1(Len),stat=ierr)
75  if (ierr .ne. 0) return
76  Allocate(CArray(Len+1),stat=ierr)
77  if (ierr .ne. 0) return
78  do i=1,Len
79      list1(i) = trim(Flist(i))//C_NULL_CHAR
80      CArray(i) = c_loc(list1(i))
81  enddo
82
83  CArray(Len+1) = c_loc(nullc)
84  call PetscOptionsEnumPrivate(opt,text,man,CArray,curr,ivalue,set,ierr)
85
86  DeAllocate(CArray)
87  DeAllocate(list1)
88End Subroutine PetscOptionsEnum
89