subroutine setServices(gridcomp, rc)
type(ESMF_GridComp) :: gridcomp
integer, intent(out) :: rc
type(ESMF_HConfig) :: hconfig, collections_config, child_hconfig
character(len=:), allocatable :: child_name, collection_name
type(ESMF_HConfigIter) :: iter, iter_begin, iter_end
logical :: has_active_collections
class(logger), pointer :: lgr
integer :: num_collections, status
! Set entry points
call MAPL_GridCompSetEntryPoint(gridcomp, ESMF_METHOD_INITIALIZE, init, phase_name="GENERIC::INIT_USER", _RC)
call MAPL_GridCompSetEntryPoint(gridcomp, ESMF_METHOD_RUN, run, phase_name='run', _RC)
! Determine collections
call MAPL_GridCompGet(gridcomp, hconfig=hconfig, _RC)
has_active_collections = ESMF_HConfigIsDefined(hconfig, keyString='active_collections', _RC)
if (.not. has_active_collections) then
call MAPL_GridCompGet(gridcomp,logger=lgr, _RC)
call lgr%warning("no active collection specified in History")
_RETURN(_SUCCESS)
end if
collections_config = ESMF_HConfigCreateAt(hconfig, keystring='active_collections', _RC)
num_collections = ESMF_HConfigGetSize(collections_config, _RC)
_RETURN_UNLESS(num_collections > 0)
iter_begin = ESMF_HConfigIterBegin(collections_config,_RC)
iter_end = ESMF_HConfigIterEnd(collections_config, _RC)
iter = iter_begin
do while (ESMF_HConfigIterLoop(iter, iter_begin, iter_end, rc=status))
_VERIFY(status)
collection_name = ESMF_HConfigAsString(iter, _RC)
child_hconfig = make_child_hconfig(hconfig, collection_name, _RC)
child_name = make_child_name(collection_name, _RC)
call MAPL_AddChild(gridcomp, child_name, user_setservices(collection_setServices), child_hconfig, _RC)
!call ESMF_HConfigDestroy(child_hconfig, _RC)
end do
_RETURN(_SUCCESS)
end subroutine setServices