input_dict Function

private function input_dict(me, key, filter_key, filter_value, empty) result(out_dict)

Type Bound

input_t

Arguments

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

Return Value class(input_t), allocatable


Calls

proc~~input_dict~~CallsGraph proc~input_dict input_t%input_dict proc~input_dict1d input_t%input_dict1d proc~input_dict->proc~input_dict1d proc~input_has_key input_t%input_has_key proc~input_dict->proc~input_has_key proc~input_node input_t%input_node proc~input_dict->proc~input_node proc~input_dict1d->proc~input_has_key proc~input_dict1d->proc~input_node get_string get_string proc~input_dict1d->get_string proc~select_dict select_dict proc~input_dict1d->proc~select_dict proc~select_list select_list proc~input_dict1d->proc~select_list get get proc~input_has_key->get 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_dict~~CalledByGraph proc~input_dict input_t%input_dict proc~signal_init signal_t%signal_init proc~signal_init->proc~input_dict proc~strand_init_part1 strand_init_part1 proc~strand_init_part1->proc~input_dict proc~strand_init_part1->proc~signal_init program~reims_p reims_p program~reims_p->proc~input_dict program~reims_p->proc~strand_init_part1 proc~boundary_init_part1 boundary_init_part1 program~reims_p->proc~boundary_init_part1 proc~channel_init_part1 channel_init_part1 program~reims_p->proc~channel_init_part1 proc~mesh2d_init_part1 mesh2D_init_part1 program~reims_p->proc~mesh2d_init_part1 proc~sim_init simulation_t%sim_init program~reims_p->proc~sim_init proc~solid_init_part1 solid_init_part1 program~reims_p->proc~solid_init_part1 proc~boundary_init_part1->proc~signal_init proc~channel_init_part1->proc~signal_init proc~mesh2d_init_part1->proc~signal_init proc~sim_init->proc~signal_init proc~solid_init_part1->proc~signal_init

Source Code

function input_dict(me,key,filter_key,filter_value,empty) result(out_dict)
    class(input_t),         intent(in) :: me
    character(*),           intent(in) :: key
    character(*), optional, intent(in) :: filter_key, filter_value
    logical,      optional, intent(in) :: empty
    class(input_t), allocatable        :: out_dict

    class(type_dictionary), allocatable, target :: empty_dict
    type(type_dictionary)       :: dict
    class(input_t), allocatable :: dict_array(:)

    allocate(out_dict)
    if (present(filter_key) .and. present(filter_value)) then
        dict_array = input_dict1d(me,key,filter_key,filter_value)
        if (size(dict_array) == 0) then
            error stop "Couldn't match key,value: "//filter_key//','//filter_value
        endif
        if (size(dict_array) > 1) then
            error stop "Key,value pair match multiple times: "//filter_key// &
                            ','//filter_value
        endif
        out_dict%root => dict_array(1)%root
    else
        if(present(empty) .and. .not. me%has_key(key)) then
            if(empty) then
                allocate(empty_dict)
                out_dict%root => empty_dict
                return
            endif
        endif
        out_dict%root => me%node(key)
        if (.not.same_type_as(out_dict%root,dict)) &
            error stop 'Value in key: "'//key//'" is not dictionary.'
    endif
end function input_dict