test8 Subroutine

subroutine test8(rc)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: rc

Calls

proc~~test8~~CallsGraph proc~test8 test8 interface~esmf_vmget ESMF_VMGet proc~test8->interface~esmf_vmget interface~esmf_xgridget ESMF_XGridGet proc~test8->interface~esmf_xgridget proc~createtestmesh2x2ee_1 CreateTestMesh2x2EE_1 proc~test8->proc~createtestmesh2x2ee_1 proc~createtestmesh2x2ee_2 CreateTestMesh2x2EE_2 proc~test8->proc~createtestmesh2x2ee_2 proc~esmf_logfounderror ESMF_LogFoundError proc~test8->proc~esmf_logfounderror proc~esmf_meshdestroy ESMF_MeshDestroy proc~test8->proc~esmf_meshdestroy proc~esmf_vmgetcurrent ESMF_VMGetCurrent proc~test8->proc~esmf_vmgetcurrent proc~esmf_xgridcreate ESMF_XGridCreate proc~test8->proc~esmf_xgridcreate proc~esmf_xgriddestroy ESMF_XGridDestroy proc~test8->proc~esmf_xgriddestroy

Called by

proc~~test8~~CalledByGraph proc~test8 test8 program~esmf_xgridutest ESMF_XGridUTest program~esmf_xgridutest->proc~test8

Source Code

  subroutine test8(rc)
    integer, intent(out)                :: rc
    integer                             :: localrc, i, npet
    type(ESMF_XGrid)                    :: xgrid
    type(ESMF_Mesh)                     :: mesh1, mesh2, smesh
    type(ESMF_VM)                       :: vm
    real(ESMF_KIND_R8)                  :: xgrid_area(12), B_area(2,2)

    rc = ESMF_SUCCESS
    localrc = ESMF_SUCCESS

    call ESMF_VMGetCurrent(vm=vm, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
      ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    call ESMF_VMGet(vm, petcount=npet, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
      ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    ! Create Mesh using easy mesh create
    call CreateTestMesh2x2EE_1(mesh1, rc=localrc) ! Easy element create
  ! call CreateTestMesh2x2_1(mesh1, rc=localrc) ! Non-easy element create
    if (ESMF_LogFoundError(localrc, &
         ESMF_ERR_PASSTHRU, &
         ESMF_CONTEXT, rcToReturn=rc)) return   

    ! Create Mesh using normal mesh create
     call CreateTestMesh2x2EE_2(mesh2, rc=localrc) ! Easy element create
   ! call CreateTestMesh2x2_2(mesh2, rc=localrc) ! Non-easy element create
    if (ESMF_LogFoundError(localrc, &
         ESMF_ERR_PASSTHRU, &
         ESMF_CONTEXT, rcToReturn=rc)) return

    ! Create XGrid
    xgrid = ESMF_XGridCreate(sideAMesh=(/mesh1/), &
         sideBMesh=(/mesh2/), &
      storeOverlay = .true., &
      rc=localrc)
    if (ESMF_LogFoundError(localrc, &
      ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    ! Get super mesh
    call ESMF_XGridGet(xgrid, mesh=smesh, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
      ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    ! Write super mesh for debugging
   ! call ESMF_MeshWrite(smesh,"smesh",rc=localrc)
   ! if (ESMF_LogFoundError(localrc, &
   !   ESMF_ERR_PASSTHRU, &
   !   ESMF_CONTEXT, rcToReturn=rc)) return

    ! Free the XGrid
    call ESMF_XGridDestroy(xgrid,rc=localrc)
    if (ESMF_LogFoundError(localrc, &
      ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    ! Free the meshes
    call ESMF_MeshDestroy(mesh1, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
      ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

    ! Free the meshes
    call ESMF_MeshDestroy(mesh2, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
      ESMF_ERR_PASSTHRU, &
      ESMF_CONTEXT, rcToReturn=rc)) return

  end subroutine test8