subroutine ESMF_SetName(base, name, namespace, rc)
!
! !ARGUMENTS:
type(ESMF_Base) :: base
character (len = *), intent(in), optional :: name
character (len = *), intent(in), optional :: namespace
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! Associate a name with any object in the system.
!
! \begin{description}
! \item [base]
! In the Fortran interface this must be an {\tt ESMF\_Base}
! derived type object. It is expected that all specialized
! derived types will include a {\tt ESMF\_Base} object as the
! first entry.
! \item [{[name]}]
! Object name. An error will be returned if a duplicate name
! is specified. If a name is not given a unique name will be
! generated and can be queried by the {\tt ESMF\_GetName} routine.
! \item [{[namespace]}]
! Object namespace (e.g. "Application", "Component", "IGrid", etc).
! If given, the name will be checked that it is unique within
! this namespace. If not given, the generated name will be
! unique within this namespace. If namespace is not specified,
! a default "global" namespace will be assumed and the same rules
! for names will be followed.
! \item [{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!
!EOPI
logical :: rcpresent ! Return code present
integer :: localrc
! Initialize return code; assume routine not implemented
rcpresent = .FALSE.
if(present(rc)) then
rcpresent = .TRUE.
rc = ESMF_RC_NOT_IMPL
endif
localrc = ESMF_RC_NOT_IMPL
! TODO: remove this once everyone is initializing their Base objects.
! cheat for old code for now.
if (base%isInit .ne. ESMF_INIT_CREATED) then
call ESMF_BaseCreate(base, namespace, name, 0, rc=localrc)
if (rcpresent) rc = localrc
return
endif
! end cheat
call c_ESMC_SetName(base , namespace, name, localrc)
if (rcpresent) rc = localrc
end subroutine ESMF_SetName