input_dict1d Function

private function input_dict1d(me, key, filter_key, filter_value, empty) result(return_array)

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_dict1d~~CallsGraph proc~input_dict1d input_t%input_dict1d get_string get_string proc~input_dict1d->get_string proc~input_has_key input_t%input_has_key proc~input_dict1d->proc~input_has_key proc~input_node input_t%input_node proc~input_dict1d->proc~input_node proc~select_dict select_dict proc~input_dict1d->proc~select_dict proc~select_list select_list proc~input_dict1d->proc~select_list proc~input_has_key->proc~select_dict get get proc~input_has_key->get proc~input_node->proc~select_dict proc~input_node->get proc~dictionary_traverse dictionary_traverse proc~input_node->proc~dictionary_traverse 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_dict1d~~CalledByGraph proc~input_dict1d input_t%input_dict1d proc~circulator_init_part2 circulator_init_part2 proc~circulator_init_part2->proc~input_dict1d proc~ffsrclink_init_part1 FFsrcLink_init_part1 proc~ffsrclink_init_part1->proc~input_dict1d proc~ffsrclink_init_part2 FFsrcLink_init_part2 proc~ffsrclink_init_part2->proc~input_dict1d proc~fslink_init_part1 FSlink_init_part1 proc~fslink_init_part1->proc~input_dict1d proc~fslink_init_part2 FSlink_init_part2 proc~fslink_init_part2->proc~input_dict1d proc~input_dict input_t%input_dict proc~input_dict->proc~input_dict1d proc~junction_init_part1 junction_init_part1 proc~junction_init_part1->proc~input_dict1d proc~junction_init_part2 junction_init_part2 proc~junction_init_part2->proc~input_dict1d proc~mesh2d_init_part1 mesh2D_init_part1 proc~mesh2d_init_part1->proc~input_dict1d proc~signal_init signal_t%signal_init proc~mesh2d_init_part1->proc~signal_init proc~ssfluxlink_init_part2 SSfluxLink_init_part2 proc~ssfluxlink_init_part2->proc~input_dict1d proc~sssrclink_init_part1 SSsrcLink_init_part1 proc~sssrclink_init_part1->proc~input_dict1d proc~sssrclink_init_part2 SSsrcLink_init_part2 proc~sssrclink_init_part2->proc~input_dict1d program~reims_p reims_p program~reims_p->proc~input_dict1d program~reims_p->proc~circulator_init_part2 program~reims_p->proc~ffsrclink_init_part1 program~reims_p->proc~ffsrclink_init_part2 program~reims_p->proc~fslink_init_part1 program~reims_p->proc~fslink_init_part2 program~reims_p->proc~input_dict program~reims_p->proc~junction_init_part1 program~reims_p->proc~junction_init_part2 program~reims_p->proc~mesh2d_init_part1 program~reims_p->proc~ssfluxlink_init_part2 program~reims_p->proc~sssrclink_init_part1 program~reims_p->proc~sssrclink_init_part2 proc~strand_init_part1 strand_init_part1 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~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~signal_init->proc~input_dict proc~strand_init_part1->proc~input_dict proc~strand_init_part1->proc~signal_init proc~boundary_init_part1->proc~signal_init proc~channel_init_part1->proc~signal_init proc~sim_init->proc~signal_init proc~solid_init_part1->proc~signal_init

Source Code

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

    type(type_error),  allocatable :: err
    class(type_list),      pointer :: list
    type(type_dictionary), pointer :: element
    type(type_list_item),  pointer :: item
    integer :: i
    
    if(present(empty)) then
        if(.not.me%has_key(key) .and. empty) then
            allocate(return_array(0))
            return
        endif
    endif

    list => select_list(me%node(key))
    allocate(dict_array(list%size()))

    i = 0
    item => list%first
    do while(associated(item))
        element => select_dict(item%node);
        if (.not. present(filter_key) .or. &
            element%get_string(filter_key,'',err) == filter_value) then
            i = i + 1
            dict_array(i)%root => element
        endif
        item => item%next
    enddo
    allocate(return_array(i))
    return_array = dict_array(:i)
end function input_dict1d