user_comp_recreate Subroutine

public subroutine user_comp_recreate(gComp, compSetVM, compReg, startPet, endPet, mapper, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_GridComp), intent(inout) :: gComp
procedure(compSetVMInterface) :: compSetVM
procedure(compRegInterface) :: compReg
integer, intent(in) :: startPet
integer, intent(in) :: endPet
type(ESMF_Mapper), intent(in) :: mapper
integer, intent(out) :: rc

Calls

proc~~user_comp_recreate~~CallsGraph proc~user_comp_recreate user_comp_recreate esmf_gridcompsetservices esmf_gridcompsetservices proc~user_comp_recreate->esmf_gridcompsetservices esmf_gridcompsetvm esmf_gridcompsetvm proc~user_comp_recreate->esmf_gridcompsetvm proc~esmf_gridcompcreate ESMF_GridCompCreate proc~user_comp_recreate->proc~esmf_gridcompcreate proc~esmf_gridcompdestroy ESMF_GridCompDestroy proc~user_comp_recreate->proc~esmf_gridcompdestroy proc~esmf_gridcompget ESMF_GridCompGet proc~user_comp_recreate->proc~esmf_gridcompget c_esmc_vmaddfobject c_esmc_vmaddfobject proc~esmf_gridcompcreate->c_esmc_vmaddfobject proc~esmf_clockgetinit ESMF_ClockGetInit proc~esmf_gridcompcreate->proc~esmf_clockgetinit proc~esmf_compconstruct ESMF_CompConstruct proc~esmf_gridcompcreate->proc~esmf_compconstruct proc~esmf_configgetinit ESMF_ConfigGetInit proc~esmf_gridcompcreate->proc~esmf_configgetinit proc~esmf_gridcompset ESMF_GridCompSet proc~esmf_gridcompcreate->proc~esmf_gridcompset proc~esmf_gridgetinit ESMF_GridGetInit proc~esmf_gridcompcreate->proc~esmf_gridgetinit proc~esmf_hconfiggetinit ESMF_HConfigGetInit proc~esmf_gridcompcreate->proc~esmf_hconfiggetinit proc~esmf_imerr ESMF_IMErr proc~esmf_gridcompcreate->proc~esmf_imerr proc~esmf_logfoundallocerror ESMF_LogFoundAllocError proc~esmf_gridcompcreate->proc~esmf_logfoundallocerror proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_gridcompcreate->proc~esmf_logfounderror proc~esmf_basesetstatus ESMF_BaseSetStatus proc~esmf_gridcompdestroy->proc~esmf_basesetstatus proc~esmf_compdestruct ESMF_CompDestruct proc~esmf_gridcompdestroy->proc~esmf_compdestruct proc~esmf_compisdualconnected ESMF_CompIsDualConnected proc~esmf_gridcompdestroy->proc~esmf_compisdualconnected proc~esmf_gridcompgetinit ESMF_GridCompGetInit proc~esmf_gridcompdestroy->proc~esmf_gridcompgetinit proc~esmf_gridcompdestroy->proc~esmf_imerr proc~esmf_gridcompdestroy->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~esmf_gridcompdestroy->proc~esmf_logseterror proc~esmf_compget ESMF_CompGet proc~esmf_gridcompget->proc~esmf_compget proc~esmf_compstatusget ESMF_CompStatusGet proc~esmf_gridcompget->proc~esmf_compstatusget proc~esmf_gridcompget->proc~esmf_gridcompgetinit proc~esmf_gridcompget->proc~esmf_imerr proc~esmf_gridcompget->proc~esmf_logfounderror

Called by

proc~~user_comp_recreate~~CalledByGraph proc~user_comp_recreate user_comp_recreate program~mappersimpletwoconcurrentcomps MapperSimpleTwoConcurrentComps program~mappersimpletwoconcurrentcomps->proc~user_comp_recreate

Source Code

  subroutine user_comp_recreate(gComp, compSetVM, compReg, startPet, endPet, mapper, rc)
! !ARGUMENTS:
    type(ESMF_GridComp), intent(inout)        :: gComp
    procedure(compSetVMInterface) :: compSetVM
    procedure(compRegInterface) :: compReg
    integer, intent(in) :: startPet
    integer, intent(in) :: endPet
    type(ESMF_Mapper), intent(in)    :: mapper
    integer,             intent(out)          :: rc

    integer :: localrc, userrc, i
    integer, dimension(:), allocatable      :: petlist
    integer :: npets
    character(len=ESMF_MAXSTR) :: cname
    type(ESMF_VM) :: vm

    print *, "Getting info about the gComp : name"
    call ESMF_GridCompGet(gComp, name=cname, rc=rc)
    if(rc  /= ESMF_SUCCESS) then
      print *, "Getting info about gComp failed"
      return
    end if

    print *, "Destroying old gComp"
    call ESMF_GridCompDestroy(gComp, rc=rc)
    if(rc  /= ESMF_SUCCESS) then
      print *, "Destroying gComp failed"
      return
    end if

    !call ESMF_MapperGet(mapper, gCompInfo, npets=npets, rc=rc)
    !if(rc  /= ESMF_SUCCESS) then
    !  print *, "Getting comp info from mapper failed"
    !  return
    !end if
    npets = endPet - startPet + 1;
    allocate(petlist(npets))
    do i=1,npets
      petlist(i) = startPet + i - 1
    end do

    !call ESMF_MapperGet(mapper, gCompInfo, petList=petlist, rc=rc)
    !if(rc  /= ESMF_SUCCESS) then
    !  print *, "Getting comp petlist from mapper failed"
    !  return
    !end if

    print *, "Recreating gComp : petlist = ", petList
    gComp = ESMF_GridCompCreate(name=cname, petList=petList, rc=rc)
    if(rc  /= ESMF_SUCCESS) then
      print *, "Recreating gComp failed"
      return
    end if

    print *, "Successfully recreated gComp :", trim(cname)

    call ESMF_GridCompSetVM(gComp, userRoutine=compSetVM, &
      userRc=userrc, rc=localrc)
    print *, "Comp SetVM finished, rc= ", localrc, userrc
    if((localrc  /= ESMF_SUCCESS) .or. (userrc /= ESMF_SUCCESS)) then
      print *, "Setting setvm routine failed"
      rc = localrc
      return
    end if

    call ESMF_GridCompSetServices(gComp, userRoutine=compReg, &
      userRc=userrc, rc=localrc)
    print *, "Comp SetServices finished, rc= ", localrc, userrc
    if((localrc  /= ESMF_SUCCESS) .or. (userrc /= ESMF_SUCCESS)) then
      print *, "Setting reg routine failed"
      rc = localrc
      return
    end if

    ! return successfully
    rc = ESMF_SUCCESS

  end subroutine user_comp_recreate