subroutine process_query(lstring, lname, tag, symbol_loc, localrc)
!---------------------------------------------------------------------------
! routine checks the input test string for a method specifier. Acceptable
! methods include:
! REDIST (-->), BILINEAR REMAP (=B=>), CONSERVATIVE REMAP (=C=>),
! SECOND ORDER CONSERVATIVE REMAP (=S=>), NEAREST NEIGHBOR REMAP (=N=>),
! EXCHANGE GRID CONSERVATIVE REMAPPING (=E=>), and a USER SPECIFIED REMAP
! METHOD (=U=>).
!
!---------------------------------------------------------------------------
! arguments
character(len=*), intent(in ) :: lstring
character(len=*), intent(inout) :: lname
integer, intent( out) :: tag
integer, intent( out) :: symbol_loc(2)
integer, intent( out) :: localrc
! local variables
character(THARN_MAXSTR) :: pattern
integer :: iredist, iregrid, direction, ib
! initialize variables
localrc = ESMF_RC_NOT_IMPL
!---------------------------------------------------------------------------
! Determine the Process type (REDISTRIBUTION or REMAPPING)
! Search for the two signifiers and determine which, if any applies.
!---------------------------------------------------------------------------
iredist = index(lstring,'-->')
iregrid = index(lstring,'=>')
if( (iredist /= 0).and.(iregrid == 0) ) then
! redistribution
lname = 'REDISTRIBUTION'
tag = Harness_Redist
symbol_loc(1) = iredist -1
symbol_loc(2) = iredist +3
elseif( (iredist == 0).and.(iregrid /= 0) ) then
! regrid, now determine what type
direction = -1
! find beginning of process symbol
ib = findblank( lstring, iregrid, direction )
pattern = lstring(ib:iregrid+1)
select case ( trim(adjustL(pattern)) )
case('=B=>')
! remap method Bilinear
lname = 'Bilinear REGRID'
tag = Harness_BilinearRegrid
symbol_loc(1) = ib
symbol_loc(2) = iregrid +2
case('=P=>')
! remap method Bilinear
lname = 'patch REGRID'
tag = Harness_PatchRegrid
symbol_loc(1) = ib
symbol_loc(2) = iregrid +2
case('=C=>')
! remap method first order conservative
lname = 'Conservative REGRID'
tag = Harness_ConservRegrid
symbol_loc(1) = ib
symbol_loc(2) = iregrid +2
case('=S=>')
! remap method second order conservative
lname = '2nd Order Conservative REGRID'
tag = Harness_2ndConservRegrid
symbol_loc(1) = ib
symbol_loc(2) = iregrid +2
case('=E=>')
! remap method exchange grid
lname = 'Exchange Grid REGRID'
tag = Harness_ExchangeRegrid
symbol_loc(1) = ib
symbol_loc(2) = iregrid +2
case('=N=>')
! remap method nearest neighbor
lname = 'Nearest Neighbor REGRID'
tag = Harness_NearNeighRegrid
symbol_loc(1) = ib
symbol_loc(2) = iregrid +2
case('=U=>')
! remap method undefined/user provided
lname = 'User Provided REGRID'
tag = Harness_UserProvRegrid
symbol_loc(1) = ib
symbol_loc(2) = iregrid +2
case default
! syntax error - no recognized method specified
call ESMF_LogSetError( ESMF_FAILURE, &
msg="process symbol not recognized", &
rcToReturn=localrc)
lname = 'ERROR'
tag = Harness_Error
symbol_loc(1) = 0
symbol_loc(2) = 0
return
end select ! remap type
elseif( (iredist == 0).and.(iregrid == 0) ) then
! syntax error - no action
call ESMF_LogSetError( ESMF_FAILURE, &
msg="no process symbol found", &
rcToReturn=localrc)
lname = 'ERROR'
tag = Harness_Error
return
elseif( (iredist /= 0).and.(iregrid /= 0) ) then
! syntax error - multiple actions
call ESMF_LogSetError( ESMF_FAILURE, &
msg="more than one process symbol found", &
rcToReturn=localrc)
lname = 'ERROR'
tag = Harness_Error
return
endif ! process test
!---------------------------------------------------------------------------
! if I've gotten this far without an error, then the routine has succeeded.
!---------------------------------------------------------------------------
localrc = ESMF_SUCCESS
!---------------------------------------------------------------------------
end subroutine process_query