34
36
37
38
39 USE spmd_comm_world_mod, ONLY : spmd_comm_world
40#include "implicit_f.inc"
41
42
43
44#include "spmd.inc"
45
46
47
48#include "com01_c.inc"
49#include "task_c.inc"
50#include "param_c.inc"
51
52
53
54#ifdef MPI
55 INTEGER MSGTYP,MSGOFF,IERROR,LOC_PROC,NN,L,I,K,M,N,II,J,
56 . IDEB,SIZ,A_AR,NBIRECV,INDEX,
57 . IRINDEX(NSPMD),REQ_R(NSPMD),IAD_RECV(NSPMD),
58 . STATUS(MPI_STATUS_SIZE)
60 . sbuf(7*nslipring+4*nretractor),rbuf(7*nslipring_g+4*nretractor_g),fac
61 DATA msgoff/203/
62
63
64
65 loc_proc = ispmd + 1
66
67 IF (loc_proc==1) THEN
68 ideb = 1
69
72 iad_recv(i) = ideb
73 irindex(ii) = i
75 msgtyp = msgoff
77 s rbuf(ideb),siz,real,it_spmd(i),msgtyp,
78 g spmd_comm_world,req_r(ii),ierror)
79 ideb = ideb + siz
80 END DO
81
84 i = irindex(index)
85 l = iad_recv(i)
86
88 k = nint(rbuf(l))
89 DO m=1,6
90 th_slipring(k,m) = rbuf(l+m)
91 ENDDO
92 l = l + 7
93 END DO
94
96 k = nint(rbuf(l))
97 DO m=1,3
98 th_retractor(k,m) = rbuf(l+m)
99 ENDDO
100 l = l + 4
101 END DO
102 END DO
103
104 ELSE
105
106 k = 0
107 sbuf = 0
108
109 DO n = 1, nslipring
110
111 k = k + 1
114
115 sbuf(k+1) = sbuf(k+1) + fac*
slipring(n)%FRAM(l)%RINGSLIP
116 sbuf(k+2) = sbuf(k+2) +
slipring(n)%FRAM(l)%SLIP_FORCE(3)
117 sbuf(k+3) = sbuf(k+3) +
slipring(n)%FRAM(l)%SLIP_FORCE(1)
118 sbuf(k+4) = sbuf(k+4) +
slipring(n)%FRAM(l)%SLIP_FORCE(2)
119 sbuf(k+5) = sbuf(k+5) + fac*
slipring(n)%FRAM(l)%BETA
120 sbuf(k+6) = sbuf(k+6) + fac*
slipring(n)%FRAM(l)%ORIENTATION_ANGLE
121 END DO
122 k = k + 6
123 END DO
124
125 DO n = 1, nretractor
130 k = k + 4
131 END DO
132
133 siz = k
134 IF (siz > 0) THEN
135 msgtyp=msgoff
136 CALL mpi_send(sbuf,siz,real,it_spmd(1),msgtyp,
137 g spmd_comm_world,ierror)
138 ENDIF
139
140 END IF
141
142#endif
143 RETURN
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
subroutine mpi_waitany(cnt, array_of_requests, index, status, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
integer nseatbelt_th_proc
type(retractor_struct), dimension(:), allocatable retractor
type(seatbelt_th_exch_struct), dimension(:), allocatable seatbelt_th_exch
type(slipring_struct), dimension(:), allocatable slipring