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

Go to the source code of this file.

Functions/Subroutines

subroutine spmd_anim_ply_xyznod (nodglob, iply, idply, nod_pxfem, x, zi_ply, empsizpl)

Function/Subroutine Documentation

◆ spmd_anim_ply_xyznod()

subroutine spmd_anim_ply_xyznod ( integer, dimension(*) nodglob,
integer iply,
integer idply,
integer, dimension(*) nod_pxfem,
x,
zi_ply,
integer empsizpl )

Definition at line 33 of file spmd_anim_ply_xyznod.F.

35C-----------------------------------------------
36C M o d u l e s
37C-----------------------------------------------
38 USE plyxfem_mod
39 USE spmd_mod
40C-----------------------------------------------
41C I m p l i c i t T y p e s
42C-----------------------------------------------
43#include "implicit_f.inc"
44C-----------------------------------------------------------------
45C M e s s a g e P a s s i n g
46C-----------------------------------------------
47#include "spmd.inc"
48C-----------------------------------------------
49C C o m m o n B l o c k s
50C-----------------------------------------------
51#include "com01_c.inc"
52#include "param_c.inc"
53#include "task_c.inc"
54C-----------------------------------------------
55C D u m m y A r g u m e n t s
56C-----------------------------------------------
57 INTEGER NODGLOB(*),NOD_PXFEM(*),EMPSIZPL
58 INTEGER IPLY,IDPLY
60 . x(3,*),zi_ply(nplyxfe,*)
61C-----------------------------------------------
62C L O C A L V A R I A B L E S
63C-----------------------------------------------
64#ifdef MPI
65 INTEGER MSGOFF,MSGOFF2,STAT(MPI_STATUS_SIZE,NSPMD-1), IERR
66C-----------------------------------------------
67 DATA msgoff/7055/
68 DATA msgoff2/7056/
69C-----------------------------------------------
70 INTEGER I,N,II,ND,EMPL,P,ITAG
71 INTEGER PLYSIZ
73 . vn,val,norm
74C
75 REAL , DIMENSION(:,:), ALLOCATABLE :: WRTBUF
77 * , DIMENSION(:,:), ALLOCATABLE :: fsendbuf,frecbuf
78 INTEGER, DIMENSION(:), ALLOCATABLE :: ISENDBUF,IRECBUF
79C-----------------------------------------------
80
81 ii = idply
82C
83
84 IF (ispmd ==0) THEN
85 plysiz = plynod(iply)%PLYNUMNODS
86 ALLOCATE(wrtbuf(3,plysizg(iply)))
87
88C The plynods of proc 0
89 DO nd=1,plysiz
90 i = plynod(iply)%NODES(nd)
91 n = nod_pxfem(i)
92 norm = sqrt(vn_nod(1,n)**2+vn_nod(2,n)**2+vn_nod(3,n)**2)
93 norm = one/max(em20,norm)
94 empl = plynod(iply)%PLYNODID(nd)-empsizpl
95
96 vn = vn_nod(1,n)*norm
97 val = x(1,i)+zi_ply(n,iply)*vn + ply(iply)%U(1,n)
98 wrtbuf(1,empl)= val
99
100 vn = vn_nod(2,n)*norm
101 val = x(2,i)+zi_ply(n,iply)*vn + ply(iply)%U(2,n)
102 wrtbuf(2,empl)= val
103
104 vn = vn_nod(3,n)*norm
105 val = x(3,i)+zi_ply(n,iply)*vn + ply(iply)%U(3,n)
106 wrtbuf(3,empl)= val
107 END DO
108C The plynods of other procs
109 DO p=2,nspmd
110 IF (plyiadnod(iply,p)>0)THEN
111 ALLOCATE(irecbuf(plyiadnod(iply,p)))
112 ALLOCATE(frecbuf(3,plyiadnod(iply,p)))
113 itag=msgoff
114 CALL mpi_recv(irecbuf,plyiadnod(iply,p), mpi_integer,
115 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
116 itag=msgoff2
117 CALL mpi_recv(frecbuf,plyiadnod(iply,p)*3, real,
118 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
119 DO i=1,plyiadnod(iply,p)
120 empl = irecbuf(i)-empsizpl
121 wrtbuf(1,empl)=frecbuf(1,i)
122 wrtbuf(2,empl)=frecbuf(2,i)
123 wrtbuf(3,empl)=frecbuf(3,i)
124 ENDDO
125 DEALLOCATE(irecbuf,frecbuf)
126 ENDIF
127 ENDDO
128
129 CALL write_r_c(wrtbuf,3*plysizg(iply))
130 DEALLOCATE(wrtbuf)
131 empsizpl=empsizpl+plysizg(iply)
132 ELSE
133 plysiz = plynod(iply)%PLYNUMNODS
134 ALLOCATE (fsendbuf(3,plysiz))
135 ALLOCATE (isendbuf(plysiz))
136 IF (plysiz > 0) THEN
137 DO nd=1,plysiz
138 i = plynod(iply)%NODES(nd)
139 n = nod_pxfem(i)
140 norm = sqrt(vn_nod(1,n)**2+vn_nod(2,n)**2+vn_nod(3,n)**2)
141 norm = one/max(em20,norm)
142 vn = vn_nod(1,n)*norm
143 fsendbuf(1,nd) = x(1,i)+zi_ply(n,iply)*vn + ply(iply)%U(1,n)
144 vn = vn_nod(2,n)*norm
145 fsendbuf(2,nd) = x(2,i)+zi_ply(n,iply)*vn + ply(iply)%U(2,n)
146 vn = vn_nod(3,n)*norm
147 fsendbuf(3,nd) = x(3,i)+zi_ply(n,iply)*vn + ply(iply)%U(3,n)
148 isendbuf(nd) = plynod(iply)%PLYNODID(nd)
149 END DO
150 itag=msgoff
151 CALL mpi_send(isendbuf,plysiz,mpi_integer,it_spmd(1),
152 . itag,spmd_comm_world,ierr)
153
154 itag=msgoff2
155 CALL mpi_send(fsendbuf,plysiz*3,real,it_spmd(1),
156 . itag,spmd_comm_world,ierr)
157C
158 DEALLOCATE(isendbuf,fsendbuf)
159 ENDIF
160 ENDIF
161C-----------------------------------------------
162
163#endif
164 RETURN
#define my_real
Definition cppsort.cpp:32
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
#define max(a, b)
Definition macros.h:21
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
Definition mpi.f:461
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
Definition mpi.f:480
type(plynods), dimension(:), allocatable plynod
Definition plyxfem_mod.F:44
type(ply_data), dimension(:), allocatable ply
Definition plyxfem_mod.F:92
integer, dimension(:), allocatable plysizg
integer, dimension(:,:), allocatable plyiadnod
Definition plyxfem_mod.F:46
void write_r_c(float *w, int *len)