parse_stream_name_fragment Function

private pure function parse_stream_name_fragment(stream_name_fragment) result(var_info_list)

Parse a stream name fragment and return the corresponding variable information as a list of var_info_type. A stream name fragment can be a predefined stream name (e.g., "invariant", "input", etc.) or a single variable name. (KCW, 2024-06-01)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: stream_name_fragment

Return Value type(var_info_type), allocatable, (:)


Called by

proc~~parse_stream_name_fragment~~CalledByGraph proc~parse_stream_name_fragment parse_stream_name_fragment proc~parse_stream_name parse_stream_name proc~parse_stream_name->proc~parse_stream_name_fragment proc~dyn_mpas_init_stream_with_pool mpas_dynamical_core_type%dyn_mpas_init_stream_with_pool proc~dyn_mpas_init_stream_with_pool->proc~parse_stream_name proc~dyn_mpas_read_write_stream mpas_dynamical_core_type%dyn_mpas_read_write_stream proc~dyn_mpas_read_write_stream->proc~parse_stream_name proc~dyn_mpas_read_write_stream->proc~dyn_mpas_init_stream_with_pool proc~dyn_init dyn_init proc~dyn_init->proc~dyn_mpas_read_write_stream proc~dyn_variable_dump dyn_variable_dump proc~dyn_variable_dump->proc~dyn_mpas_read_write_stream proc~model_grid_init model_grid_init proc~model_grid_init->proc~dyn_mpas_read_write_stream proc~dyn_final dyn_final proc~dyn_final->proc~dyn_variable_dump proc~stepon_final stepon_final proc~stepon_final->proc~dyn_final

Variables

Type Visibility Attributes Name Initial
type(var_info_type), private, allocatable :: var_info_list_buffer(:)
character(len=len(invariant_var_info_list%name)), private, allocatable :: var_name_list(:)

Source Code

    pure function parse_stream_name_fragment(stream_name_fragment) result(var_info_list)
        character(*), intent(in) :: stream_name_fragment
        type(var_info_type), allocatable :: var_info_list(:)

        character(len(invariant_var_info_list % name)), allocatable :: var_name_list(:)
        type(var_info_type), allocatable :: var_info_list_buffer(:)

        select case (trim(adjustl(stream_name_fragment)))
            case ('')
                allocate(var_info_list(0))
            case ('invariant')
                allocate(var_info_list, source=invariant_var_info_list)
            case ('input')
                allocate(var_info_list, source=input_var_info_list)
            case ('restart')
                allocate(var_info_list, source=restart_var_info_list)
            case ('output')
                allocate(var_info_list, source=output_var_info_list)
            case default
                allocate(var_info_list(0))

                var_name_list = invariant_var_info_list % name

                if (any(var_name_list == trim(adjustl(stream_name_fragment)))) then
                    var_info_list_buffer = pack(invariant_var_info_list, var_name_list == trim(adjustl(stream_name_fragment)))
                    var_info_list = [var_info_list, var_info_list_buffer]
                end if

                var_name_list = input_var_info_list % name

                if (any(var_name_list == trim(adjustl(stream_name_fragment)))) then
                    var_info_list_buffer = pack(input_var_info_list, var_name_list == trim(adjustl(stream_name_fragment)))
                    var_info_list = [var_info_list, var_info_list_buffer]
                end if

                var_name_list = restart_var_info_list % name

                if (any(var_name_list == trim(adjustl(stream_name_fragment)))) then
                    var_info_list_buffer = pack(restart_var_info_list, var_name_list == trim(adjustl(stream_name_fragment)))
                    var_info_list = [var_info_list, var_info_list_buffer]
                end if

                var_name_list = output_var_info_list % name

                if (any(var_name_list == trim(adjustl(stream_name_fragment)))) then
                    var_info_list_buffer = pack(output_var_info_list, var_name_list == trim(adjustl(stream_name_fragment)))
                    var_info_list = [var_info_list, var_info_list_buffer]
                end if
        end select
    end function parse_stream_name_fragment