parse_meta_layer_id Subroutine

subroutine parse_meta_layer_id(meta_key, layer_id, found)

Parse athena_gnn_node_ or athena_nop_node_ metadata key layer id.

Arguments

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

Metadata key potentially containing a layer id

integer, intent(out) :: layer_id

Parsed layer id value

logical, intent(out) :: found

Whether parsing succeeded


Source Code

  subroutine parse_meta_layer_id(meta_key, layer_id, found)
    !! Parse athena_gnn_node_<id> or athena_nop_node_<id> metadata key layer id.
    implicit none

    ! Arguments
    character(*), intent(in) :: meta_key
    !! Metadata key potentially containing a layer id
    integer, intent(out) :: layer_id
    !! Parsed layer id value
    logical, intent(out) :: found
    !! Whether parsing succeeded

    ! Local variables
    integer :: pos, stat
    !! Prefix position and read status
    character(128) :: rest
    !! Metadata suffix containing the candidate id

    layer_id = -1
    found = .false.

    pos = index(trim(meta_key), 'athena_gnn_node_')
    if(pos .gt. 0)then
       rest = adjustl(trim(meta_key(pos+16:)))
       read(rest, *, iostat=stat) layer_id
       if(stat .eq. 0 .and. layer_id .gt. 0) found = .true.
       return
    end if

    pos = index(trim(meta_key), 'athena_nop_node_')
    if(pos .gt. 0)then
       rest = adjustl(trim(meta_key(pos+16:)))
       read(rest, *, iostat=stat) layer_id
       if(stat .eq. 0 .and. layer_id .gt. 0) found = .true.
       return
    end if

  end subroutine parse_meta_layer_id