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)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | stream_name_fragment |
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(:) |
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