read_variable Subroutine

private subroutine read_variable(var)

Arguments

Type IntentOptional Attributes Name
type(CFG_var_t), intent(inout) :: var

Calls

proc~~read_variable~~CallsGraph proc~read_variable read_variable proc~get_fields_string~2 get_fields_string proc~read_variable->proc~get_fields_string~2 proc~handle_error handle_error proc~read_variable->proc~handle_error proc~resize_storage resize_storage proc~read_variable->proc~resize_storage

Called by

proc~~read_variable~~CalledByGraph proc~read_variable read_variable proc~add_int add_int proc~add_int->proc~read_variable proc~add_int_array add_int_array proc~add_int_array->proc~read_variable proc~add_logic add_logic proc~add_logic->proc~read_variable proc~add_logic_array add_logic_array proc~add_logic_array->proc~read_variable proc~add_real add_real proc~add_real->proc~read_variable proc~add_real_array add_real_array proc~add_real_array->proc~read_variable proc~add_string add_string proc~add_string->proc~read_variable proc~add_string_array add_string_array proc~add_string_array->proc~read_variable proc~cfg_read_file CFG_read_file proc~cfg_read_file->proc~read_variable interface~cfg_add CFG_add interface~cfg_add->proc~add_int interface~cfg_add->proc~add_int_array interface~cfg_add->proc~add_logic interface~cfg_add->proc~add_logic_array interface~cfg_add->proc~add_real interface~cfg_add->proc~add_real_array interface~cfg_add->proc~add_string interface~cfg_add->proc~add_string_array proc~add_get_int add_get_int proc~add_get_int->proc~add_int proc~add_get_int_array add_get_int_array proc~add_get_int_array->proc~add_int_array proc~add_get_logic add_get_logic proc~add_get_logic->proc~add_logic proc~add_get_logic_array add_get_logic_array proc~add_get_logic_array->proc~add_logic_array proc~add_get_real add_get_real proc~add_get_real->proc~add_real proc~add_get_real_array add_get_real_array proc~add_get_real_array->proc~add_real_array proc~add_get_string add_get_string proc~add_get_string->proc~add_string proc~add_get_string_array add_get_string_array proc~add_get_string_array->proc~add_string_array proc~cfg_update_from_arguments CFG_update_from_arguments proc~cfg_update_from_arguments->proc~cfg_read_file interface~cfg_add_get CFG_add_get interface~cfg_add_get->proc~add_get_int interface~cfg_add_get->proc~add_get_int_array interface~cfg_add_get->proc~add_get_logic interface~cfg_add_get->proc~add_get_logic_array interface~cfg_add_get->proc~add_get_real interface~cfg_add_get->proc~add_get_real_array interface~cfg_add_get->proc~add_get_string interface~cfg_add_get->proc~add_get_string_array

Source Code

  subroutine read_variable(var)
    type(CFG_var_t), intent(inout)            :: var
    integer                                   :: n, n_entries
    integer                                   :: ix_start(CFG_max_array_size)
    integer                                   :: ix_end(CFG_max_array_size)

    ! Get the start and end positions of the line content, and the number of entries
    call get_fields_string(var%stored_data, CFG_separators, CFG_max_array_size,&
        n_entries, ix_start, ix_end)

    if (var%var_size /= n_entries) then
       if (.not. var%dynamic_size) then
          call handle_error("read_variable: variable [" // &
               & trim(var%var_name) // "] has the wrong size")
       else
          var%var_size = n_entries
          call resize_storage(var)
       end if
    end if

    do n = 1, n_entries
       select case (var%var_type)
       case (CFG_integer_type)
          read(var%stored_data(ix_start(n):ix_end(n)), *) var%int_data(n)
       case (CFG_real_type)
          read(var%stored_data(ix_start(n):ix_end(n)), *) var%real_data(n)
       case (CFG_string_type)
          var%char_data(n) = trim(var%stored_data(ix_start(n):ix_end(n)))
       case (CFG_logic_type)
          read(var%stored_data(ix_start(n):ix_end(n)), *) var%logic_data(n)
       end select
    end do
  end subroutine read_variable