OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
multi_i18_force_pon.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "mvsiz_p.inc"
#include "parit_c.inc"
#include "com04_c.inc"
#include "lockon.inc"
#include "lockoff.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine multi_i18_force_pon (jlt, ix1, ix2, ix3, ix4, nsvg, h1, h2, h3, h4, stif, fx1, fy1, fz1, fx2, fy2, fz2, fx3, fy3, fz3, fx4, fy4, fz4, fxi, fyi, fzi, fskyi, isky, niskyfi, nin, noint, multi_fvm, dt, jtask)

Function/Subroutine Documentation

◆ multi_i18_force_pon()

subroutine multi_i18_force_pon ( integer jlt,
integer, dimension(mvsiz) ix1,
integer, dimension(mvsiz) ix2,
integer, dimension(mvsiz) ix3,
integer, dimension(mvsiz) ix4,
integer, dimension(mvsiz) nsvg,
h1,
h2,
h3,
h4,
stif,
fx1,
fy1,
fz1,
fx2,
fy2,
fz2,
fx3,
fy3,
fz3,
fx4,
fy4,
fz4,
fxi,
fyi,
fzi,
fskyi,
integer, dimension(*) isky,
integer niskyfi,
integer nin,
integer noint,
type(multi_fvm_struct), intent(inout) multi_fvm,
dt,
integer jtask )

Definition at line 36 of file multi_i18_force_pon.F.

42!$COMMENT
43! MULTI_I18_FORCE_PON description
44! accumulation of force for local and remote nodes
45!
46! MULTI_I18_FORCE_PON organization :
47! - secondary nodes:
48! * if nsv > 0 --> local node(phantom node id = nsv - numnod)
49! accumulation in FORC_INT array
50! * if NSV < 0 --> remote node
51! accumulation in AFI array
52! for each secondary node, a float_to_6_float operation is performed
53! in order to guarantee the parith/on
54!$ENDCOMMENT
55C-----------------------------------------------
56C M o d u l e s
57C-----------------------------------------------
58 USE tri7box
59 USE message_mod
60 USE multi_fvm_mod
61C-----------------------------------------------
62C I m p l i c i t T y p e s
63C-----------------------------------------------
64#include "implicit_f.inc"
65#include "comlock.inc"
66C-----------------------------------------------
67C G l o b a l P a r a m e t e r s
68C-----------------------------------------------
69#include "mvsiz_p.inc"
70C-----------------------------------------------
71C C o m m o n B l o c k s
72C-----------------------------------------------
73#include "parit_c.inc"
74#include "com04_c.inc"
75C-----------------------------------------------
76C D u m m y A r g u m e n t s
77C-----------------------------------------------
78 INTEGER JLT,NISKYFI,NIN,NOINT,INTTH,
79 . ISKY(*),JTASK,
80 . IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),IX4(MVSIZ),NSVG(MVSIZ)
82 . h1(mvsiz),h2(mvsiz),h3(mvsiz),h4(mvsiz),stif(mvsiz),
83 . fx1(mvsiz),fy1(mvsiz),fz1(mvsiz),
84 . fx2(mvsiz),fy2(mvsiz),fz2(mvsiz),
85 . fx3(mvsiz),fy3(mvsiz),fz3(mvsiz),
86 . fx4(mvsiz),fy4(mvsiz),fz4(mvsiz),
87 . fxi(mvsiz),fyi(mvsiz),fzi(mvsiz),
88 . fskyi(lskyi,nfskyi),dt
89 TYPE(MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
90C-----------------------------------------------
91C L o c a l V a r i a b l e s
92C-----------------------------------------------
93 INTEGER I, J1, IG, NISKYL1, NISKYL,IGP,IGM,IDR,NISKYFIL
94 INTEGER :: NODFI
95 REAL(kind=8), dimension(6,3*mvsiz) :: local_dp,remote_dp
96 my_real, DIMENSION(3*MVSIZ) :: f_local, f_remote
97 INTEGER :: NINDEX_LOCAL,NINDEX_REMOTE
98 INTEGER, DIMENSION(MVSIZ) :: INDEX_LOCAL,INDEX_REMOTE
99 INTEGER :: SHIFT_FORCE_INT
100C
101 niskyl1 = 0
102 DO i = 1, jlt
103 IF (h1(i)/=zero) niskyl1 = niskyl1 + 1
104 ENDDO
105 DO i = 1, jlt
106 IF (h2(i)/=zero) niskyl1 = niskyl1 + 1
107 ENDDO
108 DO i = 1, jlt
109 IF (h3(i)/=zero) niskyl1 = niskyl1 + 1
110 ENDDO
111 DO i = 1, jlt
112 IF (h4(i)/=zero) niskyl1 = niskyl1 + 1
113 ENDDO
114C
115C Precalcul impact locaux / remote
116C
117 igp = 0
118 igm = 0
119C
120#include "lockon.inc"
121 niskyl = nisky
122 nisky = nisky + niskyl1 + igp
123 niskyfil = niskyfi
124 niskyfi = niskyfi + igm
125#include "lockoff.inc"
126C
127 IF (niskyl+niskyl1+igp > lskyi) THEN
128 CALL ancmsg(msgid=26,anmode=aninfo)
129 CALL arret(2)
130 ENDIF
131 IF (niskyfil+igm > nlskyfi(nin)) THEN
132 CALL ancmsg(msgid=26,anmode=aninfo)
133 CALL arret(2)
134 ENDIF
135 DO i=1,jlt
136 IF (h1(i)/=0.) THEN
137 niskyl = niskyl + 1
138 fskyi(niskyl,1)=fx1(i)
139 fskyi(niskyl,2)=fy1(i)
140 fskyi(niskyl,3)=fz1(i)
141 fskyi(niskyl,4)=stif(i)*abs(h1(i))
142 isky(niskyl) = ix1(i)
143 ENDIF
144 ENDDO
145 DO i=1,jlt
146 IF (h2(i)/=zero) THEN
147 niskyl = niskyl + 1
148 fskyi(niskyl,1)=fx2(i)
149 fskyi(niskyl,2)=fy2(i)
150 fskyi(niskyl,3)=fz2(i)
151 fskyi(niskyl,4)=stif(i)*abs(h2(i))
152 isky(niskyl) = ix2(i)
153 ENDIF
154 ENDDO
155 DO i=1,jlt
156 IF (h3(i)/=zero) THEN
157 niskyl = niskyl + 1
158 fskyi(niskyl,1)=fx3(i)
159 fskyi(niskyl,2)=fy3(i)
160 fskyi(niskyl,3)=fz3(i)
161 fskyi(niskyl,4)=stif(i)*abs(h3(i))
162 isky(niskyl) = ix3(i)
163 ENDIF
164 ENDDO
165 DO i=1,jlt
166 IF (h4(i)/=zero) THEN
167 niskyl = niskyl + 1
168 fskyi(niskyl,1)=fx4(i)
169 fskyi(niskyl,2)=fy4(i)
170 fskyi(niskyl,3)=fz4(i)
171 fskyi(niskyl,4)=stif(i)*abs(h4(i))
172 isky(niskyl) = ix4(i)
173 ENDIF
174 ENDDO
175C
176 nindex_local = 0
177 nindex_remote = 0
178 DO i=1,jlt
179 ig = nsvg(i)
180 ! --------------------
181 ! local node
182 IF(ig>0) THEN
183 ig = ig - numnod
184 nindex_local = nindex_local + 1
185 index_local(nindex_local) = ig
186 f_local( 3*(nindex_local-1)+ 1 ) = -dt * fxi(i)
187 f_local( 3*(nindex_local-1)+ 2 ) = -dt * fyi(i)
188 f_local( 3*(nindex_local-1)+ 3 ) = -dt * fzi(i)
189 ! --------------------
190 ! remote node
191 ELSE
192 ig = -ig
193 nindex_remote = nindex_remote + 1
194 index_remote(nindex_remote) = ig
195 f_remote( 3*(nindex_remote-1)+ 1 ) = -dt * fxi(i)
196 f_remote( 3*(nindex_remote-1)+ 2 ) = -dt * fyi(i)
197 f_remote( 3*(nindex_remote-1)+ 3 ) = -dt * fzi(i)
198 ENDIF
199 ! --------------------
200 ENDDO
201
202 ! --------------------
203 ! local value
204 CALL foat_to_6_float(1,3*nindex_local,f_local,local_dp)
205 shift_force_int = (jtask-1)*numels
206 DO i=1,nindex_local
207 ig=index_local(i)
208 multi_fvm%FORCE_INT_PON(1,1:6,ig+shift_force_int) =
209 . multi_fvm%FORCE_INT_PON(1,1:6,ig+shift_force_int) + local_dp(1:6,3*(i-1)+1)
210 multi_fvm%FORCE_INT_PON(2,1:6,ig+shift_force_int) =
211 . multi_fvm%FORCE_INT_PON(2,1:6,ig+shift_force_int) + local_dp(1:6,3*(i-1)+2)
212 multi_fvm%FORCE_INT_PON(3,1:6,ig+shift_force_int) =
213 . multi_fvm%FORCE_INT_PON(3,1:6,ig+shift_force_int) + local_dp(1:6,3*(i-1)+3)
214 ENDDO
215 ! --------------------
216 ! remote node
217 CALL foat_to_6_float(1,3*nindex_remote,f_remote,remote_dp)
218
219 nodfi = multi_fvm%R_AFI(nin)%NODFI
220 shift_force_int = (jtask-1)*nodfi
221 DO i=1,nindex_remote
222 ig=index_remote(i)
223 multi_fvm%R_AFI(nin)%R_FORCE_INT(1,1:6,ig+shift_force_int) =
224 . multi_fvm%R_AFI(nin)%R_FORCE_INT(1,1:6,ig+shift_force_int) +
225 . remote_dp(1:6,3*(i-1)+1)
226 multi_fvm%R_AFI(nin)%R_FORCE_INT(2,1:6,ig+shift_force_int) =
227 . multi_fvm%R_AFI(nin)%R_FORCE_INT(2,1:6,ig+shift_force_int) +
228 . remote_dp(1:6,3*(i-1)+2)
229 multi_fvm%R_AFI(nin)%R_FORCE_INT(3,1:6,ig+shift_force_int) =
230 . multi_fvm%R_AFI(nin)%R_FORCE_INT(3,1:6,ig+shift_force_int) +
231 . remote_dp(1:6,3*(i-1)+3)
232 ENDDO
233 ! --------------------
234 RETURN
#define my_real
Definition cppsort.cpp:32
initmumps id
integer, dimension(:), allocatable nlskyfi
Definition tri7box.F:512
subroutine foat_to_6_float(jft, jlt, f, f6)
Definition parit.F:225
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889
subroutine arret(nn)
Definition arret.F:87