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

Go to the source code of this file.

Functions/Subroutines

subroutine spmd_gatheritab_crk (icrk, num, idmaxnod, nodglobxfe)

Function/Subroutine Documentation

◆ spmd_gatheritab_crk()

subroutine spmd_gatheritab_crk ( integer icrk,
integer num,
integer idmaxnod,
integer, dimension(*) nodglobxfe )

Definition at line 33 of file spmd_gatheritab_crk.F.

34C-----------------------------------------------
35 USE crackxfem_mod
36C-----------------------------------------------
37C I m p l i c i t T y p e s
38C-----------------------------------------------
39 USE spmd_comm_world_mod, ONLY : spmd_comm_world
40#include "implicit_f.inc"
41#include "spmd.inc"
42C-----------------------------------------------
43C C o m m o n B l o c k s
44C-----------------------------------------------
45#include "com01_c.inc"
46#include "task_c.inc"
47#include "param_c.inc"
48C-----------------------------------------------
49C D u m m y A r g u m e n t s
50C-----------------------------------------------
51 INTEGER ICRK,NUM,IDMAXNOD,NODGLOBXFE(*)
52C-----------------------------------------------
53C L O C A L V A R I A B L E S
54C-----------------------------------------------
55#ifdef MPI
56 INTEGER STATUS(MPI_STATUS_SIZE),IERROR,MSGOFF
57 INTEGER SIZ,MSGTYP,I,K,NG,NREC,STEP
58
59C Tableau utilise par proc 0
60 INTEGER, DIMENSION(:,:),ALLOCATABLE :: IBUF
61 INTEGER, DIMENSION(:),ALLOCATABLE :: XGLOB
62C-----------------------------------------------
63 DATA msgoff/7068/
64C-----------------------------------------------
65 ALLOCATE(ibuf(2,ncrknodg))
66 ALLOCATE(xglob(num))
67
68 IF(ispmd /= 0)THEN
69 siz = 0
70 step = 0
71 DO i=1,crknod(icrk)%CRKNUMNODS
72 siz = siz + 1
73 step = crknod(icrk)%CRKNUMNODS*(icrk-1)
74 ibuf(1,siz) = nodglobxfe(i+step)
75 ibuf(2,siz) = crknod(icrk)%XFECRKNODID(i)+idmaxnod
76 END DO
77C
78 msgtyp = msgoff
79 CALL mpi_send(ibuf,2*siz,mpi_integer,it_spmd(1),msgtyp,
80 . spmd_comm_world,ierror)
81 ELSE
82C proc 0
83 step = 0
84 DO i=1,crknod(icrk)%CRKNUMNODS
85 step = crknod(icrk)%CRKNUMNODS*(icrk-1)
86 ng = nodglobxfe(i+step)
87 xglob(ng) = crknod(icrk)%XFECRKNODID(i)+idmaxnod
88cc CALL WRITE_I_C(XGLOB(NG),1)
89 ENDDO
90C all the rest procs
91 DO i=2,nspmd
92C Reception du buffer entier des adresses NODGLOB
93 msgtyp = msgoff
94 CALL mpi_probe(it_spmd(i),msgtyp,
95 . spmd_comm_world,status,ierror)
96 CALL mpi_get_count(status,mpi_integer,siz,ierror)
97 CALL mpi_recv(ibuf,siz,mpi_integer,it_spmd(i),msgtyp,
98 . spmd_comm_world,status,ierror)
99C
100 nrec = siz/2
101 DO k = 1, nrec
102 ng = ibuf(1,k)
103 xglob(ng) = ibuf(2,k)
104cc CALL WRITE_I_C(XGLOB(NG),1)
105 ENDDO
106 ENDDO ! DO I=2,NSPMD
107cc CALL WRITE_I_C(XGLOB,NUM)
108C
109 DO i=1,ncrknodg
110 k=i+ncrknodg*(icrk-1)
111 CALL write_i_c(xglob(k),1)
112 ENDDO
113C
114 ENDIF
115C
116 DEALLOCATE(ibuf)
117 DEALLOCATE(xglob)
118#endif
119 RETURN
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
Definition mpi.f:461
subroutine mpi_get_count(status, datatype, cnt, ierr)
Definition mpi.f:296
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
Definition mpi.f:480
subroutine mpi_probe(source, tag, comm, status, ierr)
Definition mpi.f:449
type(xfem_nodes_), dimension(:), allocatable crknod
void write_i_c(int *w, int *len)