real_array_parse Subroutine

private subroutine real_array_parse(this, values, err_msg)

Type Bound

nml_real_array_key_t

Arguments

Type IntentOptional Attributes Name
class(nml_real_array_key_t), intent(inout) :: this
character(len=*), intent(in) :: values(:)
character(len=:), intent(out), allocatable :: err_msg

Calls

proc~~real_array_parse~~CallsGraph proc~real_array_parse nml_real_array_key_t%real_array_parse proc~fmt_int fmt_int proc~real_array_parse->proc~fmt_int

Variables

Type Visibility Attributes Name Initial
integer, private :: i
character(len=128), private :: imsg
integer, private :: ios
real(kind=rk), private :: v

Source Code

   subroutine real_array_parse(this, values, err_msg)
      class(nml_real_array_key_t), intent(inout) :: this
      character(len=*), intent(in) :: values(:)
      character(len=:), allocatable, intent(out) :: err_msg
      real(rk) :: v
      integer :: i, ios
      character(len=128) :: imsg

      if (size(values) > size(this%tgt)) then
         err_msg = "key '"//this%name//"' accepts at most "//fmt_int(size(this%tgt))// &
                   " values, got "//fmt_int(size(values))
         return
      end if
      if (size(values) < 1) then
         err_msg = "key '"//this%name//"' expects at least 1 value"
         return
      end if
      do i = 1, size(values)
         read (values(i), *, iostat=ios, iomsg=imsg) v
         if (ios /= 0) then
            err_msg = "key '"//this%name//"': cannot parse real from '"//trim(values(i))// &
                      "' (element "//fmt_int(i)//")"
            return
         end if
         this%tgt(i) = v
      end do
   end subroutine real_array_parse