input_dbl1d Function

private function input_dbl1d(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
real(kind=dp), intent(in), optional :: default_value(:)

default value in case of missing key

integer, intent(in), optional :: n

Return Value real(kind=dp), allocatable, (:)


Calls

proc~~input_dbl1d~~CallsGraph proc~input_dbl1d input_t%input_dbl1d interface~to_str to_str proc~input_dbl1d->interface~to_str proc~continue_if continue_if proc~input_dbl1d->proc~continue_if proc~get1d_hdf5 get1d_hdf5 proc~input_dbl1d->proc~get1d_hdf5 proc~input_has_key input_t%input_has_key proc~input_dbl1d->proc~input_has_key proc~input_node input_t%input_node proc~input_dbl1d->proc~input_node proc~select_scalar select_scalar proc~input_dbl1d->proc~select_scalar to_real to_real proc~input_dbl1d->to_real 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 proc~get1d_hdf5->proc~input_has_key h5dclose_f h5dclose_f proc~get1d_hdf5->h5dclose_f h5dopen_f h5dopen_f proc~get1d_hdf5->h5dopen_f h5dread_f h5dread_f proc~get1d_hdf5->h5dread_f h5fclose_f h5fclose_f proc~get1d_hdf5->h5fclose_f h5fopen_f h5fopen_f proc~get1d_hdf5->h5fopen_f h5ltget_dataset_info_f h5ltget_dataset_info_f proc~get1d_hdf5->h5ltget_dataset_info_f proc~input_str input_t%input_str proc~get1d_hdf5->proc~input_str 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 proc~input_str->proc~input_has_key proc~input_str->proc~input_node proc~input_str->proc~select_scalar

Called by

proc~~input_dbl1d~~CalledByGraph proc~input_dbl1d input_t%input_dbl1d proc~channel_init_part1 channel_init_part1 proc~channel_init_part1->proc~input_dbl1d proc~signal_init signal_t%signal_init proc~channel_init_part1->proc~signal_init proc~fslink_init_part2 FSlink_init_part2 proc~fslink_init_part2->proc~input_dbl1d proc~signal_init->proc~input_dbl1d proc~solid_init_part1 solid_init_part1 proc~solid_init_part1->proc~input_dbl1d proc~solid_init_part1->proc~signal_init proc~sssrclink_init_part2 SSsrcLink_init_part2 proc~sssrclink_init_part2->proc~input_dbl1d proc~strand_init_part1 strand_init_part1 proc~strand_init_part1->proc~input_dbl1d proc~strand_init_part1->proc~signal_init proc~boundary_init_part1 boundary_init_part1 proc~boundary_init_part1->proc~signal_init proc~mesh2d_init_part1 mesh2D_init_part1 proc~mesh2d_init_part1->proc~signal_init proc~sim_init simulation_t%sim_init proc~sim_init->proc~signal_init program~reims_p reims_p program~reims_p->proc~channel_init_part1 program~reims_p->proc~fslink_init_part2 program~reims_p->proc~solid_init_part1 program~reims_p->proc~sssrclink_init_part2 program~reims_p->proc~strand_init_part1 program~reims_p->proc~boundary_init_part1 program~reims_p->proc~mesh2d_init_part1 program~reims_p->proc~sim_init

Source Code

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

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

    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_dbl1d: scalar node requires "n" for key: '//key
        if (allocated(val)) deallocate(val)
        allocate(val(n))
        val = node%to_real(0.0_dp, 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_real(0.0_dp,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
    class is(type_dictionary)
        tmp%root => node
        if(get1d_hdf5(tmp,val)) return
    end select
    if(present(default_value)) return
    error stop 'Can not convert to 1d array of "double" for key: '//key
end function input_dbl1d