31 SUBROUTINE c_seatbelts(N_SLIPRING_L,N_RETRACTOR_L,P,NODLOCAL,ELBUF_TAB,
32 . IPARG,N_ANCHOR_REMOTE_L,N_ANCHOR_REMOTE_SEND_L,ANCHOR_REMOTE_L,ANCHOR_REMOTE_SEND_L,
33 . N_SEATBELT_L,N_SEATBELT_2D_L,CEP,OFF)
40#include "implicit_f.inc"
46 INTEGER N_SLIPRING_L,N_RETRACTOR_L,P,IPARG(NPARG,*),NODLOCAL(*),N_ANCHOR_REMOTE_L
48TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
49 TYPE(SEATBELT_REMOTE_NODES_STRUCT) ANCHOR_REMOTE_L,ANCHOR_REMOTE_SEND_L
58 INTEGER I,J,K,NN,PROC,ITY,MTN,NEL,NG,LOCAL_SLIP(NSLIPRING),LOCAL_RETR(NRETRACTOR),PP
59 . N_ANCHOR_REMOTE_SEND,PP,N_REC_PROC(NSPMD),N_SEND_PROC(NSPMD),COMPT,TAG_PROC(2,NSPMD),
61 TYPE(g_bufel_) ,
POINTER :: GBUF
74 n_seatbelt_l = n_seatbelt_l + 1
75 IF (
seatbelt_tab(i)%NFRAM > 1) n_seatbelt_2d_l = n_seatbelt_2d_l + 1
83 IF (nlocal(
slipring(i)%FRAM(1)%NODE(2),p)==1)
THEN
85 n_slipring_l = n_slipring_l + 1
86 local_slip(i) = n_slipring_l
90 IF (nlocal(
slipring(i)%FRAM(j)%NODE(2),p)==1)
THEN
92 IF ((pp /= p).AND.(nlocal(
slipring(i)%FRAM(j)%ANCHOR_NODE,pp)==1))
THEN
94 n_anchor_remote_send_l = n_anchor_remote_send_l + 1
96 n_send_proc(pp) = n_send_proc(pp) + 1
99 ELSEIF (nlocal(
slipring(i)%FRAM(j)%ANCHOR_NODE,p)==1)
THEN
101 n_anchor_remote_l = n_anchor_remote_l + 1
104 IF ((pp /= p).AND.(nlocal(
slipring(i)%FRAM(j)%NODE(2),pp)==1))
THEN
106 n_rec_proc(pp) = n_rec_proc(pp) +
116 IF (nlocal(
retractor(i)%NODE(2),p)==1)
THEN
118 n_retractor_l = n_retractor_l + 1
119 local_retr(i) = n_retractor_l
121 IF ((pp /= p).AND.(nlocal(
retractor(i)%ANCHOR_NODE,pp)==1))
THEN
123 n_anchor_remote_send_l = n_anchor_remote_send_l + 1
125 n_send_proc(pp) = n_send_proc(pp) + 1
128 ELSEIF (nlocal(
retractor(i)%ANCHOR_NODE,p)==1)
THEN
130 n_anchor_remote_l = n_anchor_remote_l + 1
132 IF ((pp /= p).AND.(nlocal(
retractor(i)%NODE(2),pp)==1))
THEN
134 n_rec_proc(pp) = n_rec_proc(pp) + 1
142 ALLOCATE(anchor_remote_l%ADD_PROC(nspmd+1))
143 ALLOCATE(anchor_remote_l%NODE(n_anchor_remote_l))
146 ALLOCATE(anchor_remote_send_l%ADD_PROC(nspmd+1))
147 ALLOCATE(anchor_remote_send_l%NODE(n_anchor_remote_send_l))
149 IF (n_anchor_remote_l > 0)
THEN
150 anchor_remote_l%ADD_PROC(1) = 1
152 anchor_remote_l%ADD_PROC(pp+1) = anchor_remote_l%ADD_PROC(pp) + n_rec_proc(pp)
156 IF (n_anchor_remote_send_l > 0)
THEN
157 anchor_remote_send_l%ADD_PROC(1) = 1
159 anchor_remote_send_l%ADD_PROC(pp+1) = anchor_remote_send_l%ADD_PROC(pp) + n_send_proc(pp)
168 IF (nlocal(
slipring(i)%FRAM(j)%NODE(2),p)==1)
THEN
169 IF (
slipring(i)%FRAM(j)%N_REMOTE_PROC > 0)
THEN
173 IF ((pp /= p).AND.(nlocal(
slipring(i)%FRAM(j)%ANCHOR_NODE,pp)==1))
THEN
175 anchor_remote_send_l%NODE(anchor_remote_send_l%ADD_PROC(pp)+n_send_proc(pp)) = nn
176 n_send_proc(pp) = n_send_proc(pp) + 1
180 ELSEIF (nlocal(
slipring(i)%FRAM(j)%ANCHOR_NODE,p)==1)
THEN
183 anchor_remote_l%NODE(compt) = nodlocal(
slipring(i)%FRAM(j)%ANCHOR_NODE)
189 IF (nlocal(
retractor(i)%NODE(2),p)==1)
THEN
194 IF ((pp /= p).AND.(nlocal(
retractor(i)%ANCHOR_NODE,pp)==1))
THEN
196 anchor_remote_send_l%NODE(anchor_remote_send_l%ADD_PROC(pp)+n_send_proc(pp)) = nn
197 n_send_proc(pp) = n_send_proc(pp) + 1
201 ELSEIF (nlocal(
retractor(i)%ANCHOR_NODE,p)==1)
THEN
204 anchor_remote_l%NODE(compt) = nodlocal(
retractor
209 IF ((nspmd > 1).AND.(p == 1))
THEN
216 IF ((pp /= p).AND.(nlocal(
slipring(i)%FRAM(1)%NODE(2),pp)==1)) tag_proc(1,pp) = 1
219 IF ((pp /= p).AND.(nlocal(
retractor(i)%NODE(2),pp)==1)) tag_proc(2,pp) = 1
229 IF (tag_proc(1,pp) + tag_proc(2,pp) > 0)
THEN
236 IF ((pp /= p).AND.(nlocal(
slipring(i)%FRAM(1)%NODE(2),pp)==1))
THEN
242 IF ((pp /= p).AND.(nlocal(
retractor(i)%NODE(2),pp)==1))
THEN
255 IF (n_slipring_l + n_retractor_l > 0)
THEN
263 iseatbelt = iparg(91,ng)
265 IF ((p == proc + 1).AND.(ity==6).AND.(mtn==114))
THEN
266 gbuf => elbuf_tab(ng)%GBUF
268 IF (gbuf%ADD_NODE(i) > 0) gbuf%ADD_NODE(i) = nodlocal(gbuf%ADD_NODE(i))
269 IF (gbuf%ADD_NODE(nel+i) > 0) gbuf%ADD_NODE(nel+i) = nodlocal(gbuf%ADD_NODE(nel+i))
270 IF (gbuf%SLIPRING_ID(i) > 0) gbuf%SLIPRING_ID(i) = local_slip(gbuf%SLIPRING_ID(i))
271 IF (gbuf%RETRACTOR_ID(i) > 0) gbuf%RETRACTOR_ID(i) = local_retr(gbuf%RETRACTOR_ID(i))
274 ELSEIF ((p == proc + 1).AND.(ity==3).AND.(iseatbelt==1))
THEN
275 gbuf => elbuf_tab(ng)%GBUF
277 DO j=1,gbuf%G_ADD_NODE
279 IF (gbuf%ADD_NODE(k+i) > 0) gbuf%ADD_NODE(k+i) = nodlocal(gbuf%ADD_NODE(k+i))