OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
spmd_i7curvcom.F File Reference
#include "implicit_f.inc"
#include "spmd.inc"
#include "task_c.inc"
#include "com01_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine spmd_i7curvcom (iad_elem, fr_elem, adskyt, fskyt, isdsiz, ircsiz, itag, lenr, lens)

Function/Subroutine Documentation

◆ spmd_i7curvcom()

subroutine spmd_i7curvcom ( integer, dimension(2,*) iad_elem,
integer, dimension(*) fr_elem,
integer, dimension(0:*) adskyt,
fskyt,
integer, dimension(*) isdsiz,
integer, dimension(*) ircsiz,
integer, dimension(*) itag,
integer lenr,
integer lens )

Definition at line 36 of file spmd_i7curvcom.F.

38C-----------------------------------------------
39C I m p l i c i t T y p e s
40C-----------------------------------------------
41 USE spmd_comm_world_mod, ONLY : spmd_comm_world
42#include "implicit_f.inc"
43C-----------------------------------------------
44C M e s s a g e P a s s i n g
45C-----------------------------------------------
46#include "spmd.inc"
47C-----------------------------------------------
48C C o m m o n B l o c k s
49C-----------------------------------------------
50#include "task_c.inc"
51#include "com01_c.inc"
52C-----------------------------------------------
53C D u m m y A r g u m e n t s
54C-----------------------------------------------
55 INTEGER LENR,LENS,ITAG(*),
56 . IAD_ELEM(2,*), FR_ELEM(*), ISDSIZ(*), IRCSIZ(*),
57 . ADSKYT(0:*)
59 . fskyt(3,*)
60C-----------------------------------------------
61C L o c a l V a r i a b l e s
62C-----------------------------------------------
63#ifdef MPI
64 INTEGER I ,J ,N1, N2, N3, N4,IERROR, IAD, IAD1, IAD2, SIZ, NB,
65 . MSGTYP, LOC_PROC, CC, MSGOFF,
66 . STATUS(MPI_STATUS_SIZE),REQ_R(NSPMD)
67C REAL
69 . bufr(lenr), bufs(lens)
70 DATA msgoff/195/
71C-----------------------------------------------
72C
73 loc_proc = ispmd+1
74C
75 iad = 1
76 DO i=1,nspmd
77 siz = ircsiz(i)
78 IF(siz>0)THEN
79 siz = siz*3+iad_elem(1,i+1)-iad_elem(1,i)
80 msgtyp = msgoff
81 CALL mpi_irecv(
82 s bufr(iad),siz,real,it_spmd(i),msgtyp,
83 g spmd_comm_world,req_r(i),ierror)
84 iad = iad + siz
85 ENDIF
86 END DO
87
88 DO i=1,nspmd
89 IF(isdsiz(i)>0)THEN
90 iad = 0
91#include "vectorize.inc"
92 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
93 n1 = fr_elem(j)
94 iad1 = itag(n1)
95 iad2 = adskyt(n1)-1
96 nb = iad2-iad1+1
97 iad = iad + 1
98 bufs(iad) = nb
99 DO cc = iad1, iad2
100 iad = iad + 1
101 bufs(iad) = fskyt(1,cc)
102 iad = iad + 1
103 bufs(iad) = fskyt(2,cc)
104 iad = iad + 1
105 bufs(iad) = fskyt(3,cc)
106 END DO
107 END DO
108
109 siz = 3*isdsiz(i)+iad_elem(1,i+1)-iad_elem(1,i)
110 msgtyp = msgoff
111 CALL mpi_send(
112 s bufs,siz,real,it_spmd(i),msgtyp,
113 g spmd_comm_world,ierror)
114 END IF
115 END DO
116C
117 iad = 0
118 DO i = 1, nspmd
119 IF(ircsiz(i)>0)THEN
120 CALL mpi_wait(req_r(i),status,ierror)
121 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
122 n1 = fr_elem(j)
123 iad = iad + 1
124 nb = nint(bufr(iad))
125 DO cc = 1, nb
126 iad1 = adskyt(n1)
127 adskyt(n1) = adskyt(n1)+1
128 iad = iad + 1
129 fskyt(1,iad1) = bufr(iad)
130 iad = iad + 1
131 fskyt(2,iad1) = bufr(iad)
132 iad = iad + 1
133 fskyt(3,iad1) = bufr(iad)
134 END DO
135 END DO
136 END IF
137 END DO
138C
139#endif
140 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine mpi_wait(ireq, status, ierr)
Definition mpi.f:525
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
Definition mpi.f:480
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
Definition mpi.f:372