input_open_yaml Subroutine

private recursive subroutine input_open_yaml(me, file_name, included)

Type Bound

input_t

Arguments

Type IntentOptional Attributes Name
class(input_t), intent(inout) :: me
character(len=*), intent(in) :: file_name
logical, intent(in), optional :: included

ignore it - only present for included files


Calls

proc~~input_open_yaml~~CallsGraph proc~input_open_yaml input_t%input_open_yaml get get proc~input_open_yaml->get parse parse proc~input_open_yaml->parse proc~allocate_components allocate_components proc~input_open_yaml->proc~allocate_components proc~fill_components fill_components proc~input_open_yaml->proc~fill_components proc~rename_components rename_components proc~input_open_yaml->proc~rename_components proc~scan_yaml scan_yaml proc~input_open_yaml->proc~scan_yaml proc~select_dict select_dict proc~input_open_yaml->proc~select_dict set set proc~allocate_components->set to_integer to_integer proc~allocate_components->to_integer proc~fill_components->get proc~fill_components->proc~fill_components proc~fill_components->proc~select_dict cmp_arr cmp_arr proc~fill_components->cmp_arr get_string get_string proc~fill_components->get_string key key proc~fill_components->key proc~abort_if abort_if proc~fill_components->proc~abort_if proc~increment_int_dict increment_int_dict proc~fill_components->proc~increment_int_dict set_path set_path proc~fill_components->set_path proc~rename_components->proc~rename_components proc~rename_components->proc~select_dict get_integer get_integer proc~rename_components->get_integer proc~rename_components->get_string proc~rename_components->key proc~rename_components->proc~abort_if proc~rename_components->proc~increment_int_dict proc~rename_id rename_id proc~rename_components->proc~rename_id set_string set_string proc~rename_components->set_string proc~scan_yaml->proc~scan_yaml append append proc~scan_yaml->append get_dictionary get_dictionary proc~scan_yaml->get_dictionary get_list get_list proc~scan_yaml->get_list proc~scan_yaml->get_string proc~scan_yaml->set proc~increment_int_dict->get_integer proc~increment_int_dict->proc~abort_if proc~increment_int_dict->set_string interface~to_str to_str proc~increment_int_dict->interface~to_str proc~rename_id->proc~select_dict proc~rename_id->get_dictionary proc~rename_id->get_list proc~rename_id->get_string proc~rename_id->proc~rename_id proc~rename_id->set_string 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

Source Code

recursive subroutine input_open_yaml(me,file_name,included)
    class(input_t), intent(inout) :: me
    character(*),      intent(in) :: file_name
    logical, optional, intent(in) :: included  !! ignore it - only present for included files

    class(type_node), pointer :: cmp_tree
    character(:), allocatable :: error,folder
    type(type_dictionary)     :: no_cmp
    type(type_dictionary), pointer :: root_dict
    logical :: file_exists

    folder = file_name(:index(file_name,'/',.true.))

    inquire(file=file_name, exist=file_exists)
    if (.not. file_exists) error stop 'Input file not found: '//file_name

    call me%file%parse(file_name, error)
    if (allocated(error)) error stop 'YAML parse error in "'//file_name//'": '//error

    me%root => me%file%root
    call scan_yaml(me%file%root,folder)

    if (.not.present(included)) then
        root_dict => select_dict(me%root);
        ! It is top level input file
        cmp_tree => root_dict%get('components')
        call rename_components(cmp_tree,no_cmp,'','')
        call allocate_components(me,no_cmp)
        call fill_components(me,cmp_tree,no_cmp)
    endif    
end subroutine input_open_yaml