parse_constituent_list Subroutine

private subroutine parse_constituent_list(list, cat_idx, nconst, ierr)

Tokenize a whitespace/comma-separated constituent list into catalog indices (case-insensitive). Unknown tokens fail loud; nconst is the count of recognised entries.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: list
integer, intent(out) :: cat_idx(:)
integer, intent(out) :: nconst
integer, intent(out), optional :: ierr

Non-zero on an unrecognised constituent token when present; absent behaves as today (error stop).


Calls

proc~~parse_constituent_list~~CallsGraph proc~parse_constituent_list parse_constituent_list proc~fail fail proc~parse_constituent_list->proc~fail proc~tide_name_index tide_name_index proc~parse_constituent_list->proc~tide_name_index error error proc~fail->error proc~error_ring_push error_ring_push proc~fail->proc~error_ring_push proc~upcase2 upcase2 proc~tide_name_index->proc~upcase2

Called by

proc~~parse_constituent_list~~CalledByGraph proc~parse_constituent_list parse_constituent_list proc~configure_ocean_tides configure_ocean_tides proc~configure_ocean_tides->proc~parse_constituent_list proc~engine_setup engine_setup proc~engine_setup->proc~configure_ocean_tides proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_setup proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_setup proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~rdb_ocean_create_finalize->proc~complete_ocean_create proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~complete_ocean_create

Variables

Type Visibility Attributes Name Initial
character(len=len), private :: buf
integer, private :: i
integer, private :: i0
integer, private :: idx
logical, private :: in_tok
integer, private :: n

Source Code

   subroutine parse_constituent_list(list, cat_idx, nconst, ierr)
      !! Tokenize a whitespace/comma-separated constituent list into
      !! catalog indices (case-insensitive).  Unknown tokens fail loud;
      !! `nconst` is the count of recognised entries.
      character(len=*), intent(in) :: list
      integer, intent(out) :: cat_idx(:)
      integer, intent(out) :: nconst
      integer, intent(out), optional :: ierr
         !! Non-zero on an unrecognised constituent token when present;
         !! absent behaves as today (`error stop`).
      integer :: i, n, i0, idx
      character(len=len(list)) :: buf
      logical :: in_tok

      buf = list
      ! Normalise commas to spaces.
      do i = 1, len(buf)
         if (buf(i:i) == ",") buf(i:i) = " "
      end do

      nconst = 0
      n = len_trim(buf)
      in_tok = .false.
      i0 = 1
      do i = 1, n + 1
         if (i <= n .and. buf(i:i) /= " ") then
            if (.not. in_tok) then
               in_tok = .true.
               i0 = i
            end if
         else
            if (in_tok) then
               in_tok = .false.
               idx = tide_name_index(buf(i0:i - 1))
               if (idx < 1) then
                  call fail("ocean_tides_nml: unknown constituent '"// &
                            trim(buf(i0:i - 1))//"'", ierr, OCEAN_STATUS_ERR_SETUP)
                  return
               end if
               nconst = nconst + 1
               cat_idx(nconst) = idx
            end if
         end if
      end do
      if (present(ierr)) ierr = OCEAN_STATUS_OK
   end subroutine parse_constituent_list