OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i9wal3.F File Reference
#include "implicit_f.inc"
#include "com01_c.inc"
#include "com08_c.inc"
#include "scr08_a_c.inc"
#include "param_c.inc"
#include "task_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine i9wal3 (x, v, w, a, crst, nsv, iloc, irtl, icode, iskew, skew, msr, lmsr, nseg, irects, irect, upw, ixs, elbuf_tab, iparg, pm, nale, ee, ieles, ielem, tstif, intth, ieult, stens, nor, isizes, isizem, nrts, nrtm, nsn, nmn)

Function/Subroutine Documentation

◆ i9wal3()

subroutine i9wal3 ( x,
v,
w,
a,
crst,
integer, dimension(nsn) nsv,
integer, dimension(*) iloc,
integer, dimension(nsn) irtl,
integer, dimension(*) icode,
integer, dimension(*) iskew,
skew,
integer, dimension(*) msr,
integer, dimension(*) lmsr,
integer, dimension(*) nseg,
integer, dimension(4,*) irects,
integer, dimension(4,*) irect,
upw,
integer, dimension(nixs,*) ixs,
type (elbuf_struct_), dimension(ngroup), target elbuf_tab,
integer, dimension(nparg,*) iparg,
pm,
integer, dimension(*) nale,
ee,
integer, dimension(*) ieles,
integer, dimension(*) ielem,
tstif,
integer intth,
integer ieult,
stens,
nor,
integer isizes,
integer isizem,
integer, intent(in) nrts,
integer, intent(in) nrtm,
integer, intent(in) nsn,
integer, intent(in) nmn )

Definition at line 39 of file i9wal3.F.

46C-----------------------------------------------
47C M o d u l e s
48C-----------------------------------------------
49 USE elbufdef_mod
50 use element_mod , only : nixs
51C-----------------------------------------------
52C I m p l i c i t T y p e s
53C-----------------------------------------------
54#include "implicit_f.inc"
55C-----------------------------------------------
56C C o m m o n B l o c k s
57C-----------------------------------------------
58#include "com01_c.inc"
59#include "com08_c.inc"
60#include "scr08_a_c.inc"
61#include "param_c.inc"
62#include "task_c.inc"
63C-----------------------------------------------
64C D u m m y A r g u m e n t s
65C-----------------------------------------------
66 INTEGER, INTENT(IN) :: NRTS, NRTM, NSN,NMN
67 INTEGER IRECT(4,*), NSV(NSN), ILOC(*), IRTL(NSN), ICODE(*), ISKEW(*),
68 . MSR(*), IRECTS(4,*), LMSR(*), NSEG(*),IXS(NIXS,*),
69 . IPARG(NPARG,*), IELES(*), IELEM(*),NALE(*) ,
70 . INTTH, IEULT, ISIZES, ISIZEM
71C REAL
73 . upw, tstif,ttt, stens,
74 . x(3,*), v(3,*), w(3,*), a(3,*), crst(2,*), skew(lskew,*),
75 . pm(npropm,*),ee(*),nor(3,*)
76 TYPE (ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 INTEGER II, N, L, JJ, NN, LL, LL1, LL2, LG, KK, KKK, K1, K2,
81 . I1, I2, IERR, IGROU, IELN,
82 . IXX(4), IPERM(0:5),
83 . ITEMP(2), IS, IM, ILEN,
84 . TAGS(ISIZES),TAGM(ISIZEM), LISTS(ISIZES),LISTM(ISIZEM),
85 . ICOMERR(ISIZEM+ISIZES),ICOMNGR(ISIZEM+ISIZES),
86 . ICOMNEL(ISIZEM+ISIZES)
87C REAL
89 . h(4), vmx, vmy, vmz, vx, vy, vz, vv, nx, ny, nz, vt,
90 . nnx, nny, nnz, fac, p, x1, y1, z1,x2, y2, z2, tx, ty, tz,
91 . efric, vols, volm, ts, tm ,tstifm, tstifs, dvn, tt2, tt3,
92 . tstift, phi, areas, aream, vn, wn, t2x, t2y, t2z, t2t,
93 . t3x, t3y, t3z, stensx, stensy, stensz,
94 . comarea(isizem+isizes),comstf(isizem+isizes),
95 . comt(isizem+isizes),comvol(isizem+isizes),combuf(isizem+isizes)
96
97c
98 DATA iperm/ 4, 1, 2, 3, 4, 1/
99C-----------------------------------------------
100C
101C preparation phase for spmd
102C
103 IF(intth/=zero) THEN
104 IF(ispmd==0) THEN
105 DO ii = 1, nrts
106 tags(ii) = 0
107 ENDDO
108 DO ii = 1, nrtm
109 tagm(ii) = 0
110 ENDDO
111 is = 0
112 im = 0
113 DO ii = 1, nsn
114 l = irtl(ii)
115 IF(iloc(ii)>0.AND.nmn>0.AND.tagm(l)==0)THEN
116 im = im + 1
117 listm(im) = l
118 tagm(l) = im
119 ll1=nseg(ii)
120 ll2=nseg(ii+1)-1
121 DO ll=ll1,ll2
122 lg = lmsr(ll)
123 IF(tags(lg)==0) THEN
124 is = is + 1
125 lists(is) = lg
126 tags(lg) = is
127 ENDIF
128 ENDDO
129 ENDIF
130 ENDDO
131C
132C Elem lists compacting
133C
134 itemp(1) = is
135 itemp(2) = im
136 ENDIF
137C
138C Sending second/mains facet list in contact
139C
140 IF(nspmd > 1) THEN
141 CALL spmd_ibcast(itemp,itemp,1,2,0,2)
142 is = itemp(1)
143 im = itemp(2)
144 ilen = im+is
145 CALL spmd_ibcast(listm,listm,1,im,0,2)
146 CALL spmd_ibcast(lists,lists,1,is,0,2)
147 END IF
148 DO ii = 1, im
149 l = listm(ii)
150 ix(1) = msr(irect(1,l))
151 ix(2) = msr(irect(2,l))
152 ix(3) = msr(irect(3,l))
153 ix(4) = msr(irect(4,l))
154 IF(ielem(l)>0) THEN
155 CALL i9grd3(
156 1 ierr ,comarea(ii),comstf(ii),comt(ii),comvol(ii),
157 2 ielem(l) ,x ,ixs(1,ielem(l)), ix,
158 3 iparg,pm ,elbuf_tab ,igrou ,ieln )
159 icomerr(ii) = ierr
160 icomngr(ii) = igrou
161 icomnel(ii) = ieln
162 ELSE
163 comarea(ii) = zero
164 comstf(ii) = zero
165 comt(ii) = zero
166 comvol(ii) = zero
167 icomerr(ii) = 0
168 icomngr(ii) = 0
169 icomnel(ii) = 0
170 ENDIF
171 combuf(ii) = zero
172 ENDDO
173C
174 DO ii = 1, is
175 l = lists(ii)
176 ixx(1)=nsv(irects(1,l))
177 ixx(2)=nsv(irects(2,l))
178 ixx(3)=nsv(irects(3,l))
179 ixx(4)=nsv(irects(4,l))
180 IF(ieles(l)>0) THEN
181 CALL i9grd3(
182 1 ierr ,comarea(im+ii),comstf(im+ii),comt(im+ii),comvol(im+ii),
183 2 ieles(l) ,x,ixs(1,ieles(l)) ,ixx ,
184 3 iparg,pm ,elbuf_tab ,igrou ,ieln )
185 icomerr(im+ii) = ierr
186 icomngr(im+ii) = igrou
187 icomnel(im+ii) = ieln
188 ELSE
189 comarea(im+ii) = zero
190 comstf(im+ii) = zero
191 comt(im+ii) = zero
192 comvol(im+ii) = zero
193 icomerr(im+ii) = 0
194 icomngr(im+ii) = 0
195 icomnel(im+ii) = 0
196 ENDIF
197 combuf(im+ii) = zero
198 ENDDO
199C
200 IF (nspmd > 1) THEN
201C
202C gather values
203C
204 CALL spmd_glob_dsum9(comarea,ilen)
205 CALL spmd_glob_dsum9(comstf,ilen)
206 CALL spmd_glob_dsum9(comt,ilen)
207 CALL spmd_glob_dsum9(comvol,ilen)
208 CALL spmd_glob_isum9(icomerr,ilen)
209 CALL spmd_glob_isum9(icomngr,ilen)
210 CALL spmd_glob_isum9(icomnel,ilen)
211C node part on P0 only
212 IF(ispmd/=0) GOTO 900
213 END IF
214C interface processed by p0
215 ELSE
216 IF(ispmd/=0) RETURN
217 ENDIF
218C
219 DO 800 ii=1,nsn
220 ll1=nseg(ii)
221 ll2=nseg(ii+1)-1
222 n=nsv(ii)
223 IF(iloc(ii)>0.AND.nmn>0)THEN
224C---------------------------------
225C CONTACT
226C---------------------------------
227 l=irtl(ii)
228 DO 10 jj=1,4
229 nn=irect(jj,l)
230 10 ix(jj)=msr(nn)
231C
232 CALL shapeh(h,crst(1,ii),crst(2,ii))
233C---------------------------------
234C mesh velocity
235C---------------------------------
236 vmx=zero
237 vmy=zero
238 vmz=zero
239C
240 DO 30 jj=1,4
241 vmx=vmx+w(1,ix(jj))*h(jj)
242 vmy=vmy+w(2,ix(jj))*h(jj)
243 30 vmz=vmz+w(3,ix(jj))*h(jj)
244C
245 dvn = (vmx-w(1,n)) * nor(1,ii)
246 . + (vmy-w(2,n)) * nor(2,ii)
247 . + (vmz-w(3,n)) * nor(3,ii)
248 w(1,n) = w(1,n) + dvn * nor(1,ii)
249 w(2,n) = w(2,n) + dvn * nor(2,ii)
250 w(3,n) = w(3,n) + dvn * nor(3,ii)
251C
252C---------------------------------
253C PONT THERMIQUE
254C---------------------------------
255 IF(intth/=zero)THEN
256 kk = tagm(l)
257 efric = half * ee(ii) / (ll2-ll1+1)
258 ierr = icomerr(kk)
259 aream = comarea(kk)
260 tstifm = comstf(kk)
261 tm = comt(kk)
262 volm = comvol(kk)
263 IF(ierr==0) THEN
264 DO ll = ll1,ll2
265 lg = lmsr(ll)
266 jj = tags(lg) + im
267 ierr = icomerr(jj)
268 areas = comarea(jj)
269 tstifs = comstf(jj)
270 ts = comt(jj)
271 vols = comvol(jj)
272 IF(ierr==0) THEN
273 tstift = tstifm + tstifs + tstif
274 phi = areas * dt1 * (tm-ts) / tstift
275 combuf(jj) = combuf(jj)
276 + + (efric+phi)/vols
277 combuf(kk) = combuf(kk)
278 + + (efric-phi)/volm
279 ENDIF
280 ENDDO
281 ENDIF
282c ENDIF
283 ENDIF
284C
285 ELSEIF(iloc(ii)<0.OR.nmn==0)THEN
286C------------------------------------------------------
287C loop over facets connected to node ii
288C------------------------------------------------------
289 iloc(ii) = -iloc(ii)
290C
291 vx = v(1,n) - w(1,n)
292 vy = v(2,n) - w(2,n)
293 vz = v(3,n) - w(3,n)
294 vv = max(em30,sqrt(vx**2+vy**2+vz**2))
295 nnx = zero
296 nny = zero
297 nnz = zero
298C------------------------------------------------------
299C loop over facets connected to node ii
300C------------------------------------------------------
301 DO 300 ll=ll1,ll2
302 lg=lmsr(ll)
303 DO 200 kkk=1,4
304 kk=kkk
305 200 IF(irects(kk,lg)==ii) GO TO 250
306 250 CONTINUE
307C------------------------------------------------------
308C calculation of the normal with upwind on the upstream side
309C------------------------------------------------------
310 k1 = iperm(kk-1)
311 k2 = iperm(kk+1)
312 i1 = nsv(irects(k1,lg))
313 i2 = nsv(irects(k2,lg))
314 x1 = x(1,i1) - x(1,n)
315 y1 = x(2,i1) - x(2,n)
316 z1 = x(3,i1) - x(3,n)
317 x2 = x(1,i2) - x(1,n)
318 y2 = x(2,i2) - x(2,n)
319 z2 = x(3,i2) - x(3,n)
320 tx = x1 + x2
321 ty = y1 + y2
322 tz = z1 + z2
323 ttt = max(em30,sqrt(tx**2+ty**2+tz**2))
324 vt = v(1,n)*tx + v(2,n)*ty + v(3,n)*tz
325 p = onep0001 - upw*(half + sign(half,vt))
326 nx = y1 * z2 - z1 * y2
327 ny = z1 * x2 - x1 * z2
328 nz = x1 * y2 - y1 * x2
329C FAC = P / MAX(EM30,SQRT(NX**2+NY**2+NZ**2))
330 fac = p
331 nnx = nnx + nx*fac
332 nny = nny + ny*fac
333 nnz = nnz + nz*fac
334C-------------------------------------
335C surface tension
336C-------------------------------------
337 IF(stens>zero)THEN
338 t2x = -x1 + x2
339 t2y = -y1 + y2
340 t2z = -z1 + z2
341 tt2 = max(em30,t2x**2+t2y**2+t2z**2)
342 t2t = (t2x*tx + t2y*ty +t2z*tz) / tt2
343 t3x = tx - t2x * t2t
344 t3y = ty - t2y * t2t
345 t3z = tz - t2z * t2t
346 tt3 = stens * sqrt(tt2/max(em30,t3x**2+t3y**2+t3z**2))
347 stensx = t3x * tt3
348 stensy = t3y * tt3
349 stensz = t3z * tt3
350 a(1,n) = a(1,n) + stensx
351 a(2,n) = a(2,n) + stensy
352 a(3,n) = a(3,n) + stensz
353 ENDIF
354 300 CONTINUE
355 fac = max(em30,sqrt(nnx**2+nny**2+nnz**2))
356 nnx = nnx/fac
357 nny = nny/fac
358 nnz = nnz/fac
359C
360C---------------------------------
361C W LAGRANGIEN ACCORDING TO N
362C---------------------------------
363C---------------------------------
364C grid boundary conditions
365C---------------------------------
366 IF(icode(n)/=0)THEN
367 dvn = vx * nnx + vy * nny + vz * nnz
368 w(1,n) = w(1,n) + dvn * nnx
369 w(2,n) = w(2,n) + dvn * nny
370 w(3,n) = w(3,n) + dvn * nnz
371 CALL bcs2(w(1,n),skew(1,iskew(n)),iskew(n),icode(n))
372 vn = v(1,n)*nnx + v(2,n)*nny + v(3,n)*nnz
373 wn = w(1,n)*nnx + w(2,n)*nny + w(3,n)*nnz
374C-------------------------------------
375C W LAGRANGIEN ACCORDING TO N + BCS
376C-------------------------------------
377 IF(abs(wn)>em30)THEN
378 fac = vn / wn
379 w(1,n) = w(1,n) * fac
380 w(2,n) = w(2,n) * fac
381 w(3,n) = w(3,n) * fac
382 ENDIF
383 ELSEIF(ieult/=0)THEN
384C-------------------------------------
385C W LAGRANGIEN ACCORDING TO N
386C W EULERIEN ACCORDING TO T
387C---------------------------------
388 vn = v(1,n)*nnx + v(2,n)*nny + v(3,n)*nnz
389 w(1,n) = vn * nnx
390 w(2,n) = vn * nny
391 w(3,n) = vn * nnz
392 ELSE
393C-------------------------------------
394C W LAGRANGIEN ACCORDING TO N
395C LIBRE ACCORDING TO T
396C---------------------------------
397 dvn = vx * nnx + vy * nny + vz * nnz
398 w(1,n) = w(1,n) + dvn * nnx
399 w(2,n) = w(2,n) + dvn * nny
400 w(3,n) = w(3,n) + dvn * nnz
401 ENDIF
402 ENDIF
403C
404 800 CONTINUE
405C
406C finalization phase for spmd
407C
408 900 CONTINUE
409 IF(intth/=zero) THEN
410 IF(nspmd > 1) THEN
411C
412C Envoi buffer elements updates
413C
414 CALL spmd_rbcast(combuf,combuf,1,ilen,0,2)
415 END IF
416C
417C Local Elbuf update
418C
419 DO ii = 1, im
420 l = listm(ii)
421 IF(ielem(l)>0) THEN
422 igrou = icomngr(ii)
423 ieln = icomnel(ii)
424 elbuf_tab(igrou)%GBUF%EINT(ieln) =
425 . elbuf_tab(igrou)%GBUF%EINT(ieln) + combuf(ii)
426 ENDIF
427 ENDDO
428C
429 DO ii = 1, is
430 l = lists(ii)
431 IF(ieles(l)>0) THEN
432 igrou = icomngr(im+ii)
433 ieln = icomnel(im+ii)
434 elbuf_tab(igrou)%GBUF%EINT(ieln) =
435 . elbuf_tab(igrou)%GBUF%EINT(ieln) + combuf(im+ii)
436 ENDIF
437 ENDDO
438 ENDIF
439C
440 RETURN
subroutine bcs2(a, b, j, k)
Definition bcs2.F:32
#define my_real
Definition cppsort.cpp:32
subroutine i9grd3(ierr, area, tstif, t, vol, ii, x, ixs, ix, iparg, pm, elbuf_tab, igrou, ieln)
Definition i9grd3.F:37
#define max(a, b)
Definition macros.h:21
subroutine shapeh(h, s, t)
Definition shapeh.F:34
subroutine spmd_ibcast(tabi, tabr, n1, n2, from, add)
Definition spmd_ibcast.F:57
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
Definition spmd_rbcast.F:62
subroutine spmd_glob_dsum9(v, len)
Definition spmd_th.F:379
subroutine spmd_glob_isum9(v, len)
Definition spmd_th.F:520