54 nodeconn,elpart,numprocpernd,procndlist,maxnumberofprocstosharenode,&
55 numelperproc,numndperproc)
63 INTEGER ::
i,
j,
k,
m, npart,icnt
69 integer :: maxnumberofprocstosharenode
71 INTEGER,
DIMENSION(1:NumVertex,1:NumEl) :: nodeconn
72 INTEGER,
DIMENSION(1:NumEl) :: elpart
73 INTEGER,
DIMENSION(1:NumNP) :: numprocpernd
75 INTEGER,
DIMENSION(1:NumNP,1:MaxNumberOfProcsToShareNode) :: procndlist
76 INTEGER,
DIMENSION(1:NumProcs) :: numelperproc, numndperproc
77 INTEGER :: locnodenum, elid
78 LOGICAL ::
debug = .true.
80 INTEGER,
DIMENSION(:),
POINTER :: proc_list
85 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: nproc_neigh_lst
87 TYPE(procelemlist_data_ptr
),
pointer ::
ptr
89 ALLOCATE(id_sendto(1:numprocs,1:numprocs))
91 id_sendto(1:numprocs,1:numprocs)%num_border_comm = 0
108 allocate(procelemlist(1:numprocs))
110 nullify(procelemlist(
i)%head,procelemlist(
i)%tail)
116 allocate(procelem_item)
117 procelem_item%GlbElNum =
i
118 CALL
add_procelemlist(procelem_item,procelemlist(npart)%head,procelemlist(npart)%tail)
141 ptr => procelemlist(
i)%head
143 DO WHILE(
ASSOCIATED(
ptr))
145 numelperproc(
i) = numelperproc(
i) + 1
150 locnodenum = nodeconn(
k,elid)
151 DO m = 1, numprocpernd(locnodenum)
152 IF(procndlist(locnodenum,
m).EQ.
i)
THEN
156 numprocpernd(locnodenum) = numprocpernd(locnodenum) + 1
157 IF(numprocpernd(locnodenum).GT.maxnumberofprocstosharenode)
THEN
158 print*,
'Error in NewCommlist'
159 print*,
'Greater then ',maxnumberofprocstosharenode, &
160 ' processors share a node on the boundary'
161 print*,
'Increase MaxNumberOfProcsToShareNode'
162 print*,
'MaxNumberOfProcsToShareNode =', maxnumberofprocstosharenode
163 print*,
' Needed Size= ', numprocpernd(locnodenum)
167 procndlist(locnodenum,numprocpernd(locnodenum)) =
i
168 numndperproc(
i) = numndperproc(
i) + 1
186 nullify(id_sendto(
i,
j)%comm_head )
187 nullify(id_sendto(
i,
j)%comm_tail )
192 IF(numprocpernd(
i).NE.1)
THEN
193 DO j = 1, numprocpernd(
i)
194 DO k = 1, numprocpernd(
i)
subroutine newcommlist(NumEl, NumNP, NumProcs, NumVertex, NodeConn, ElPart, NumProcPerNd, ProcNdList, MaxNumberOfProcsToShareNode, NumElPerProc, NumNdPerProc)
subroutine addcommnd(arg_b, comm_item)
subroutine add_procelemlist(new, head, tail)