Finds the value of the required keyword.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | keyword | Keyword to examine |
||
logical, | intent(out) | :: | found | Is keyword present |
||
character(len=*), | intent(inout), | optional | :: | c_value | Keyword value |
|
logical, | intent(inout), | optional | :: | l_value | Keyword value |
|
integer, | intent(inout), | optional | :: | i_value | Keyword value |
|
real(kind=dp), | intent(inout), | optional | :: | r_value | Keyword value |
subroutine param_get_keyword(keyword, found, c_value, l_value, i_value, r_value)
!===========================================================================!
! !
!! Finds the value of the required keyword.
! !
!===========================================================================!
use w90_io, only: io_error
implicit none
character(*), intent(in) :: keyword
!! Keyword to examine
logical, intent(out) :: found
!! Is keyword present
character(*), optional, intent(inout) :: c_value
!! Keyword value
logical, optional, intent(inout) :: l_value
!! Keyword value
integer, optional, intent(inout) :: i_value
!! Keyword value
real(kind=dp), optional, intent(inout) :: r_value
!! Keyword value
integer :: kl, in, loop, itmp
character(len=maxlen) :: dummy
kl = len_trim(keyword)
found = .false.
do loop = 1, num_lines
in = index(in_data(loop), trim(keyword))
if (in == 0 .or. in > 1) cycle
itmp = in + len(trim(keyword))
if (in_data(loop) (itmp:itmp) /= '=' &
.and. in_data(loop) (itmp:itmp) /= ':' &
.and. in_data(loop) (itmp:itmp) /= ' ') cycle
if (found) then
call io_error('Error: Found keyword '//trim(keyword)//' more than once in input file')
endif
found = .true.
dummy = in_data(loop) (kl + 1:)
in_data(loop) (1:maxlen) = ' '
dummy = adjustl(dummy)
if (dummy(1:1) == '=' .or. dummy(1:1) == ':') then
dummy = dummy(2:)
dummy = adjustl(dummy)
end if
end do
if (found) then
if (present(c_value)) c_value = dummy
if (present(l_value)) then
if (index(dummy, 't') > 0) then
l_value = .true.
elseif (index(dummy, 'f') > 0) then
l_value = .false.
else
call io_error('Error: Problem reading logical keyword '//trim(keyword))
endif
endif
if (present(i_value)) read (dummy, *, err=220, end=220) i_value
if (present(r_value)) read (dummy, *, err=220, end=220) r_value
end if
return
220 call io_error('Error: Problem reading keyword '//trim(keyword))
end subroutine param_get_keyword