OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
spmd_wrt_crk_xyznod.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_wrt_crk_xyznod (icrk, num, nodglobxfe)

Function/Subroutine Documentation

◆ spmd_wrt_crk_xyznod()

subroutine spmd_wrt_crk_xyznod ( integer icrk,
integer num,
integer, dimension(*) nodglobxfe )

Definition at line 33 of file spmd_wrt_crk_xyznod.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,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,EMPL
57 INTEGER SIZ,MSGTYP,I,K,NG,NREC,MSGOFF2,MSGTYP2,SIZ0,STEP
58C
59 REAL, DIMENSION(:,:), ALLOCATABLE :: BUFSR,XGLOB
60 INTEGER, DIMENSION(:), ALLOCATABLE :: IBUF
61C-----------------------------------------------
62 DATA msgoff/7064/
63 DATA msgoff2/7065/
64C-----------------------------------------------
65 ALLOCATE(bufsr(3,ncrknodg))
66 ALLOCATE(ibuf(ncrknodg))
67 ALLOCATE(xglob(3,num))
68C-----------------------------------------------
69
70 IF (ispmd/=0) THEN
71 siz = 0
72 step = 0
73 DO i=1,crknod(icrk)%CRKNUMNODS
74 step = crknod(icrk)%CRKNUMNODS*(icrk-1)
75 siz = siz + 1
76 ibuf(siz) = nodglobxfe(i+step)
77 bufsr(1,siz) = crkavx(icrk)%XX(1,i)
78 bufsr(2,siz) = crkavx(icrk)%XX(2,i)
79 bufsr(3,siz) = crkavx(icrk)%XX(3,i)
80 END DO
81C
82C a cause de la version simple precision, on ne peux pas metre l'entier
83C dans le buffer flottant car on n a que 2puiss 24 bits dispo ~ 16 Million
84C de noeuds au max
85C
86 msgtyp = msgoff2
87 CALL mpi_send(ibuf,siz,mpi_integer,it_spmd(1),msgtyp,
88 . spmd_comm_world,ierror)
89C
90 msgtyp = msgoff
91 CALL mpi_send(bufsr,3*siz,mpi_real4,it_spmd(1),msgtyp,
92 . spmd_comm_world,ierror)
93 ELSE
94 step = 0
95C
96C proc 0
97C
98 DO i=1,crknod(icrk)%CRKNUMNODS
99 step = crknod(icrk)%CRKNUMNODS*(icrk-1)
100 ng = nodglobxfe(i+step)
101 xglob(1,ng) = crkavx(icrk)%XX(1,i)
102 xglob(2,ng) = crkavx(icrk)%XX(2,i)
103 xglob(3,ng) = crkavx(icrk)%XX(3,i)
104cc CALL WRITE_R_C(XGLOB(1,NG),1)
105cc CALL WRITE_R_C(XGLOB(2,NG),1)
106cc CALL WRITE_R_C(XGLOB(3,NG),1)
107 ENDDO
108C------------
109 DO i=2,nspmd
110
111C Reception du buffer entier des adresses NODGLOB
112 msgtyp = msgoff2
113 CALL mpi_probe(it_spmd(i),msgtyp,
114 . spmd_comm_world,status,ierror)
115 CALL mpi_get_count(status,mpi_integer,siz,ierror)
116 CALL mpi_recv(ibuf,siz,mpi_integer,it_spmd(i),msgtyp,
117 . spmd_comm_world,status,ierror)
118c
119C Reception du buffer flottant des adresses NODGLOB
120c
121 msgtyp2 = msgoff
122c
123 CALL mpi_recv(bufsr,siz*3,mpi_real4,it_spmd(i),msgtyp2,
124 . spmd_comm_world,status,ierror)
125c
126 nrec = siz
127c
128 DO k = 1, nrec
129 ng = ibuf(k)
130 xglob(1,ng) = bufsr(1,k)
131 xglob(2,ng) = bufsr(2,k)
132 xglob(3,ng) = bufsr(3,k)
133cc CALL WRITE_R_C(XGLOB(1,NG),1)
134cc CALL WRITE_R_C(XGLOB(2,NG),1)
135cc CALL WRITE_R_C(XGLOB(3,NG),1)
136 ENDDO
137 ENDDO
138C
139c DO I=1,NUM
140cc DO I=1,NCRKNODG
141cc CALL WRITE_R_C(XGLOB(1,I),1)
142cc CALL WRITE_R_C(XGLOB(2,I),1)
143cc CALL WRITE_R_C(XGLOB(3,I),1)
144cc END DO
145C
146 DO i=1,ncrknodg
147 k=i+ncrknodg*(icrk-1)
148 CALL write_r_c(xglob(1,k),1)
149 CALL write_r_c(xglob(2,k),1)
150 CALL write_r_c(xglob(3,k),1)
151 ENDDO
152C
153 END IF
154C---
155C-----------------------------------------------
156 DEALLOCATE(bufsr)
157 DEALLOCATE(ibuf)
158 DEALLOCATE(xglob)
159C-----------------------------------------------
160#endif
161 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
type(xfem_avx_), dimension(:), allocatable crkavx
void write_r_c(float *w, int *len)