input_bin1d Function

private function input_bin1d(me, key, default_value, n) result(val)

Type Bound

input_t

Arguments

Type IntentOptional Attributes Name
class(input_t), intent(in) :: me
character(len=*), intent(in) :: key
logical, intent(in), optional :: default_value(:)

default value in case of missing key

integer, intent(in), optional :: n

Return Value logical, allocatable, (:)


Calls

proc~~input_bin1d~~CallsGraph proc~input_bin1d input_t%input_bin1d interface~to_str to_str proc~input_bin1d->interface~to_str proc~continue_if continue_if proc~input_bin1d->proc~continue_if proc~input_has_key input_t%input_has_key proc~input_bin1d->proc~input_has_key proc~input_node input_t%input_node proc~input_bin1d->proc~input_node proc~select_scalar select_scalar proc~input_bin1d->proc~select_scalar to_logical to_logical proc~input_bin1d->to_logical proc~str_from_int str_from_int interface~to_str->proc~str_from_int proc~str_from_real str_from_real interface~to_str->proc~str_from_real get get proc~input_has_key->get proc~select_dict select_dict proc~input_has_key->proc~select_dict proc~input_node->get proc~dictionary_traverse dictionary_traverse proc~input_node->proc~dictionary_traverse proc~input_node->proc~select_dict proc~dictionary_traverse->proc~dictionary_traverse get_dictionary get_dictionary proc~dictionary_traverse->get_dictionary proc~abort_if abort_if proc~dictionary_traverse->proc~abort_if

Called by

proc~~input_bin1d~~CalledByGraph proc~input_bin1d input_t%input_bin1d proc~solid_init_part1 solid_init_part1 proc~solid_init_part1->proc~input_bin1d program~reims_p reims_p program~reims_p->proc~solid_init_part1

Source Code

function input_bin1d(me,key,default_value,n) result(val)
    class(input_t), intent(in) :: me
    character(*), intent(in)   :: key
    logical, optional, intent(in) :: default_value(:) !! default value in case of missing key
    integer, optional, intent(in) :: n
    logical, allocatable :: val(:)

    type(type_list_item), pointer :: item
    type(type_scalar),    pointer :: element
    logical :: ok
    integer :: i

    if(present(default_value)) val = default_value
    if(.not.me%has_key(key) .and. present(default_value)) return
    select type(node=>me%node(key))
    class is(type_scalar)
        if (.not. present(n)) &
            error stop 'input_bin1d: scalar node requires "n" for key: '//key
        if (allocated(val)) deallocate(val)
        allocate(val(n))
        val = node%to_logical(.true., ok)
        call continue_if(node, ok)
        return
    class is(type_list)
        if (allocated(val)) deallocate(val)
        allocate(val(node%size()))
        item => node%first
        i = 1
        do while(associated(item))
            element => select_scalar(item%node);
            val(i) = element%to_logical(.true.,ok)
            call continue_if(element, ok)
            item => item%next
            i = i + 1
        enddo
        if (present(n)) then
            if (size(val) /= n) then
                print*, 'Expected '//to_str(n)//' elements for "'//key//'" but YAML has '//to_str(size(val))
                error stop 'Array size mismatch in YAML input.'
            endif
        endif
        return
    end select
    if(present(default_value)) return
    error stop 'Can not convert to 1d array of "logical" for key: '//key
end function input_bin1d