append_unique_layer_id_from_meta_key Subroutine

subroutine append_unique_layer_id_from_meta_key(meta_key, ids)

Append a layer id parsed from athena_gnn_node_ or athena_nop_node_ if not already present.

Arguments

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

Metadata key potentially containing a layer id

integer, intent(inout), allocatable :: ids(:)

Unique set of discovered layer ids


Source Code

  subroutine append_unique_layer_id_from_meta_key(meta_key, ids)
    !! Append a layer id parsed from athena_gnn_node_<id> or
    !! athena_nop_node_<id> if not already present.
    implicit none

    ! Arguments
    character(*), intent(in) :: meta_key
    !! Metadata key potentially containing a layer id
    integer, allocatable, intent(inout) :: ids(:)
    !! Unique set of discovered layer ids

    ! Local variables
    integer :: layer_id, pos, stat, i
    !! Parsed id, prefix position, read status and loop index
    character(128) :: rest
    !! Metadata suffix containing the candidate id
    logical :: exists
    !! Whether the id already exists in ids

    pos = index(trim(meta_key), 'athena_gnn_node_')
    if(pos .eq. 0) pos = index(trim(meta_key), 'athena_nop_node_')
    if(pos .eq. 0) return

    rest = adjustl(trim(meta_key(pos+16:)))
    read(rest, *, iostat=stat) layer_id
    if(stat .ne. 0) return

    exists = .false.
    do i = 1, size(ids)
       if(ids(i) .eq. layer_id)then
          exists = .true.
          exit
       end if
    end do
    if(.not.exists) ids = [ids, layer_id]

  end subroutine append_unique_layer_id_from_meta_key