Line data Source code
1 : module edgetype_mod
2 :
3 : use shr_kind_mod, only: r8=>shr_kind_r8, i8=>shr_kind_i8
4 : use coordinate_systems_mod, only : cartesian3D_t
5 : use gbarriertype_mod, only : gbarrier_t
6 :
7 : implicit none
8 : private
9 : save
10 :
11 : integer, public :: initedgebuffer_callid = 0
12 :
13 : type, public :: rotation_t
14 : integer :: nbr ! nbr direction: north south east west
15 : integer :: reverse ! 0 = do not reverse order
16 : ! 1 = reverse order
17 : real (kind=r8), pointer :: R(:,:,:) => null() ! rotation matrix
18 : end type rotation_t
19 :
20 : type, public :: EdgeDescriptor_t
21 : integer :: use_rotation
22 : integer :: padding
23 : integer, pointer :: putmapP(:) => null()
24 : integer, pointer :: getmapP(:) => null()
25 : integer, pointer :: putmapP_ghost(:) => null()
26 : integer, pointer :: getmapP_ghost(:) => null()
27 : integer, pointer :: putmapS(:) => null()
28 : integer, pointer :: getmapS(:) => null()
29 : integer, pointer :: globalID(:) => null()
30 : integer, pointer :: loc2buf(:) => null()
31 : type(cartesian3D_t), pointer :: neigh_corners(:,:) => null()
32 : integer :: actual_neigh_edges
33 : logical, pointer :: reverse(:) => null()
34 : type (rotation_t), pointer :: rot(:) => null() ! Identifies list of edges
35 : ! that must be rotated, and how
36 : end type EdgeDescriptor_t
37 :
38 : type, public :: EdgeBuffer_t
39 : real (kind=r8), allocatable :: buf(:)
40 : real (kind=r8), allocatable :: receive(:)
41 : integer, pointer :: putmap(:,:) => null()
42 : integer, pointer :: getmap(:,:) => null()
43 : logical, pointer :: reverse(:,:) => null()
44 : integer, pointer :: moveLength(:) => null()
45 : integer, pointer :: movePtr(:) => null()
46 : integer, pointer :: rcountsFull(:) => null()
47 : integer, pointer :: scountsFull(:) => null()
48 : integer, pointer :: sdisplsFull(:) => null()
49 : integer, pointer :: rdisplsFull(:) => null()
50 : integer, pointer :: rcountsInter(:) => null()
51 : integer, pointer :: scountsInter(:) => null()
52 : integer, pointer :: sdisplsInter(:) => null()
53 : integer, pointer :: rdisplsInter(:) => null()
54 : integer, pointer :: rcountsIntra(:) => null()
55 : integer, pointer :: scountsIntra(:) => null()
56 : integer, pointer :: sdisplsIntra(:) => null()
57 : integer, pointer :: rdisplsIntra(:) => null()
58 : integer, pointer :: getDisplsFull(:) => null()
59 : integer, pointer :: putDisplsFull(:) => null()
60 : integer, allocatable :: Rrequest(:),Srequest(:)
61 : integer, allocatable :: status(:,:)
62 : type (gbarrier_t) :: gbarrier
63 : integer :: nlyr ! Number of layers
64 : integer :: nbuf ! total size of message passing buffer, includes vertical levels
65 : integer :: ndepth ! Depth of halo
66 : integer :: npoints ! length of edge
67 : integer :: lb,ub ! lower and upper bound of arrays
68 : integer :: nInter, nIntra
69 : integer :: id
70 : integer :: bndry_type
71 : integer :: tag
72 : integer :: win
73 : integer(kind=i8) :: winsize
74 : end type EdgeBuffer_t
75 :
76 : type, public :: LongEdgeBuffer_t
77 : integer :: nlyr
78 : integer :: nbuf
79 : integer, pointer :: buf(:,:) => null()
80 : integer, pointer :: receive(:,:) => null()
81 : end type LongEdgeBuffer_t
82 :
83 : type, public :: GhostBuffer3D_t
84 : real (kind=r8), dimension(:,:,:,:), pointer :: buf => null()
85 : real (kind=r8), dimension(:,:,:,:), pointer :: receive => null()
86 : integer :: nlyr ! Number of layers
87 : integer :: nhc ! Number of layers of ghost cells
88 : integer :: np ! Number of points in a cell
89 : integer :: nbuf ! size of the horizontal dimension of the buffers.
90 : integer :: elem_size ! size of 2D array (first two dimensions of buf())
91 : end type GhostBuffer3D_t
92 :
93 :
94 0 : end module edgetype_mod
|