Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical | :: | correct | ||||
integer | :: | rc |
subroutine test_mesh_create_from_med_EM_file(correct, rc) logical :: correct integer :: rc type(ESMF_Mesh) :: mesh integer :: petCount, localPet type(ESMF_VM) :: vm type(ESMF_DistGrid) :: nodeDistgrid, elemDistgrid integer, allocatable :: elemIds(:) integer :: numElems, numPerPet, numThisPet integer :: minId,maxId integer :: i, pos ! Init correct correct=.true. ! get global VM call ESMF_VMGetGlobal(vm, rc=rc) if (rc /= ESMF_SUCCESS) return call ESMF_VMGet(vm, localPet=localPet, petCount=petCount, rc=rc) if (rc /= ESMF_SUCCESS) return ! Number of elems in file numElems=936 ! Approx. number per PET numPerPet=numElems/petCount ! Figure out range for this PET minId=localPet*numPerPet+1 maxId=(localPet+1)*numPerPet ! If this Pet is last, put the rest there if (localPet .eq. petCount-1) maxId=numElems !write(*,*) localPet,"# ",minId,maxId ! Allocate elemIds allocate(elemIds(maxId-minId+1)) ! Fill pos=1 do i=minId,maxId elemIds(pos)=i pos=pos+1 enddo ! Create element Distgrid elemdistgrid=ESMF_DistGridCreate(elemIds, rc=rc) if (rc /= ESMF_SUCCESS) return ! Create Mesh from file mesh=ESMF_MeshCreate("data/ne4np4-esmf.nc", & fileformat=ESMF_FILEFORMAT_ESMFMESH, & elementDistgrid=elemDistgrid, & rc=rc) if (rc /= ESMF_SUCCESS) return !! Write mesh for debugging ! call ESMF_MeshWrite(mesh,"test_mesh",rc=rc) ! if (rc /= ESMF_SUCCESS) return ! Get rid of Mesh call ESMF_MeshDestroy(mesh, rc=rc) if (rc /= ESMF_SUCCESS) return ! Get rid of elemDistgrid call ESMF_DistGridDestroy(elemDistgrid, rc=rc) if (rc /= ESMF_SUCCESS) return ! Get rid of elemIds deallocate(elemIds) ! Return success rc=ESMF_SUCCESS end subroutine test_mesh_create_from_med_EM_file