OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i9wal2.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 i9wal2 (x, v, w, a, crst, nsv, iloc, irtl, icode, iskew, skew, msr, lmsr, nseg, irects, irect, upw, ixq, elbuf_tab, iparg, pm, nale, ee, ieles, ielem, tstif, intth, ieult, stens, isizes, isizem, nrts, nrtm, nsn, nmn)

Function/Subroutine Documentation

◆ i9wal2()

subroutine i9wal2 ( 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(nixq,*) ixq,
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,
integer isizes,
integer isizem,
integer, intent(in) nrts,
integer, intent(in) nrtm,
integer, intent(in) nsn,
integer, intent(in) nmn )

Definition at line 37 of file i9wal2.F.

44C-----------------------------------------------
45C M o d u l e s
46C-----------------------------------------------
47 USE elbufdef_mod
48C-----------------------------------------------
49C I m p l i c i t T y p e s
50C-----------------------------------------------
51#include "implicit_f.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
55#include "com01_c.inc"
56#include "com08_c.inc"
57#include "scr08_a_c.inc"
58#include "param_c.inc"
59#include "task_c.inc"
60C-----------------------------------------------
61C D u m m y A r g u m e n t s
62C-----------------------------------------------
63 INTEGER, INTENT(IN) :: NRTS, NRTM,NSN,NMN
64 INTEGER IRECT(4,*), NSV(NSN), ILOC(*), IRTL(NSN), ICODE(*), ISKEW(*),
65 . MSR(*), IRECTS(4,*), LMSR(*), NSEG(*),IXQ(NIXQ,*),
66 . IPARG(NPARG,*), IELES(*), IELEM(*),NALE(*) ,
67 . INTTH, IEULT, ISIZES, ISIZEM
68C REAL
70 . upw, tstif,ttt, stens,
71 . x(3,*), v(3,*), w(3,*), a(3,*), crst(2,*), skew(lskew,*),
72 . pm(npropm,*),ee(*)
73 TYPE (ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
74C-----------------------------------------------
75C L o c a l V a r i a b l e s
76C-----------------------------------------------
77 INTEGER II, N, L, JJ, NN, LL, LL1, LL2, LG, KK, KKK, K1, K2,
78 . I1, I2, IERR, IGROU, IELN,
79 . IXX(4), IPERM(2), JPERM(2),
80 . ITEMP(2), IS, IM, ILEN,
81 . TAGS(ISIZES),TAGM(ISIZEM), LISTS(ISIZES),LISTM(ISIZEM),
82 . ICOMERR(ISIZEM+ISIZES),ICOMNGR(ISIZEM+ISIZES),
83 . ICOMNEL(ISIZEM+ISIZES)
84C REAL
85 my_real h(2),
86 . vmx, vmy, vmz, vx, vy, vz, vv, nx, ny, nz, vt,
87 . nnx, nny, nnz, fac, p, x1, y1, z1,x2, y2, z2, tx, ty, tz,
88 . efric, vols, volm, ts, tm ,tstifm, tstifs, dvn,
89 . tstift, phi, areas, aream, vn, wn, stensy, stensz,
90 . comarea(isizem+isizes),comstf(isizem+isizes),
91 . comt(isizem+isizes),comvol(isizem+isizes),combuf(isizem+isizes)
92 TYPE(G_BUFEL_) ,POINTER :: GBUF
93c
94 DATA iperm/ 2, 1/,jperm/ 1, -1/
95C-----------------------------------------------
96C
97C Phase de Preparation pour SPMD
98C
99 IF(intth/=zero) THEN
100 IF(ispmd==0) THEN
101 DO ii = 1, nrts
102 tags(ii) = 0
103 ENDDO
104 DO ii = 1, nrtm
105 tagm(ii) = 0
106 ENDDO
107 is = 0
108 im = 0
109 DO ii = 1, nsn
110 l = irtl(ii)
111 IF(iloc(ii)>0.AND.nmn>0)THEN
112 IF(tagm(l)==0)THEN
113 im = im + 1
114 listm(im) = l
115 tagm(l) = im
116 END IF
117 ll1=nseg(ii)
118 ll2=nseg(ii+1)-1
119 DO ll=ll1,ll2
120 lg = lmsr(ll)
121 IF(tags(lg)==0) THEN
122 is = is + 1
123 lists(is) = lg
124 tags(lg) = is
125 ENDIF
126 ENDDO
127 ENDIF
128 ENDDO
129C
130C Compactage listes elem
131C
132 itemp(1) = is
133 itemp(2) = im
134 ENDIF
135C
136C Envoi liste facettes seconds/mains en contact
137C
138 IF(nspmd > 1) THEN
139 CALL spmd_ibcast(itemp,itemp,1,2,0,2)
140 is = itemp(1)
141 im = itemp(2)
142 ilen = im+is
143 CALL spmd_ibcast(listm,listm,1,im,0,2)
144 CALL spmd_ibcast(lists,lists,1,is,0,2)
145 END IF
146 DO ii = 1, im
147 l = listm(ii)
148 ix(1) = msr(irect(1,l))
149 ix(2) = msr(irect(2,l))
150 IF(ielem(l)>0) THEN
151 CALL i9grd2(
152 1 ierr ,comarea(ii),comstf(ii),comt(ii),comvol(ii),
153 2 ielem(l) ,x ,ixq(1,ielem(l)),ix ,
154 3 iparg,pm ,elbuf_tab , igrou ,ieln )
155 icomerr(ii) = ierr
156 icomngr(ii) = igrou
157 icomnel(ii) = ieln
158 ELSE
159 comarea(ii) = zero
160 comstf(ii) = zero
161 comt(ii) = zero
162 comvol(ii) = zero
163 icomerr(ii) = 0
164 icomngr(ii) = 0
165 icomnel(ii) = 0
166 ENDIF
167 combuf(ii) = zero
168 ENDDO
169C
170 DO ii = 1, is
171 l = lists(ii)
172 ixx(1)=nsv(irects(1,l))
173 ixx(2)=nsv(irects(2,l))
174 IF(ieles(l)>0) THEN
175 CALL i9grd2(
176 1 ierr ,comarea(im+ii),comstf(im+ii),comt(im+ii),comvol(im+ii),
177 2 ieles(l) ,x ,ixq(1,ieles(l)) ,ixx ,
178 3 iparg,pm ,elbuf_tab ,igrou ,ieln )
179 icomerr(im+ii) = ierr
180 icomngr(im+ii) = igrou
181 icomnel(im+ii) = ieln
182 ELSE
183 comarea(im+ii) = zero
184 comstf(im+ii) = zero
185 comt(im+ii) = zero
186 comvol(im+ii) = zero
187 icomerr(im+ii) = 0
188 icomngr(im+ii) = 0
189 icomnel(im+ii) = 0
190 ENDIF
191 combuf(im+ii) = zero
192 ENDDO
193C
194 IF (nspmd > 1) THEN
195C
196C gather des valeurs
197C
198 CALL spmd_glob_dsum9(comarea,ilen)
199 CALL spmd_glob_dsum9(comstf,ilen)
200 CALL spmd_glob_dsum9(comt,ilen)
201 CALL spmd_glob_dsum9(comvol,ilen)
202 CALL spmd_glob_isum9(icomerr,ilen)
203 CALL spmd_glob_isum9(icomngr,ilen)
204 CALL spmd_glob_isum9(icomnel,ilen)
205C partie noeud sur P0 uniquement
206 IF(ispmd/=0) GOTO 900
207 END IF
208C interface traitee par p0
209 ELSE
210 IF(ispmd/=0) RETURN
211 ENDIF
212C
213 DO 800 ii=1,nsn
214 ll1=nseg(ii)
215 ll2=nseg(ii+1)-1
216 n=nsv(ii)
217 IF(iloc(ii)>0.AND.nmn>0)THEN
218C---------------------------------
219C CONTACT
220C---------------------------------
221 l=irtl(ii)
222 DO 10 jj=1,2
223 nn=irect(jj,l)
224 10 ix(jj)=msr(nn)
225C
226 h(1) = half*(one - crst(1,ii))
227 h(2) = half*(one + crst(1,ii))
228C---------------------------------
229C VITESSE DE MAILLAGE
230C---------------------------------
231 vmy=zero
232 vmz=zero
233C
234 DO jj=1,2
235 vmy=vmy+w(2,ix(jj))*h(jj)
236 vmz=vmz+w(3,ix(jj))*h(jj)
237 ENDDO
238C
239 w(2,n)=vmy
240 w(3,n)=vmz
241C---------------------------------
242C PONT THERMIQUE
243C---------------------------------
244 IF(intth/=zero)THEN
245 kk = tagm(l)
246 efric = half * ee(ii) / (ll2-ll1+1)
247 ierr = icomerr(kk)
248 aream = comarea(kk)
249 tstifm = comstf(kk)
250 tm = comt(kk)
251 volm = comvol(kk)
252 IF(ierr==0) THEN
253 DO ll = ll1,ll2
254 lg = lmsr(ll)
255 jj = tags(lg) + im
256 ierr = icomerr(jj)
257 areas = comarea(jj)
258 tstifs = comstf(jj)
259 ts = comt(jj)
260 vols = comvol(jj)
261 IF(ierr==0) THEN
262 tstift = tstifm + tstifs + tstif
263 phi = areas * dt1 * (tm-ts) / tstift
264 combuf(jj) = combuf(jj)
265 + + (efric+phi)/vols
266 combuf(kk) = combuf(kk)
267 + + (efric-phi)/volm
268 ENDIF
269 ENDDO
270 ENDIF
271c ENDIF
272 ENDIF
273C
274 ELSEIF(iloc(ii)<0.OR.nmn==0)THEN
275C---------------------------------------
276C PAS DE CONTACT => SURFACE LIBRE
277C---------------------------------------
278 iloc(ii) = -iloc(ii)
279C
280 vy = v(2,n) - w(2,n)
281 vz = v(3,n) - w(3,n)
282 vv = max(em30,sqrt(vy**2+vz**2))
283 nny = zero
284 nnz = zero
285C------------------------------------------------------
286C BOUCLE SUR LES FACETTES CONNECTEES AU NOEUD II
287C------------------------------------------------------
288 DO 300 ll=ll1,ll2
289 lg=lmsr(ll)
290 DO 200 kkk=1,2
291 kk=kkk
292 200 IF(irects(kk,lg)==ii) GO TO 250
293 250 CONTINUE
294C------------------------------------------------------
295C CALCUL DE LA NORMALE AVEC UPWIND SUR L'AMONT
296C------------------------------------------------------
297 k1 = iperm(kk)
298 i1 = nsv(irects(k1,lg))
299 ty = x(2,i1) - x(2,n)
300 tz = x(3,i1) - x(3,n)
301 ttt = max(em30,sqrt(ty**2+tz**2))
302C VT = VY*TY + VZ*TZ
303 vt = v(2,n)*ty + v(3,n)*tz
304 p = onep0001 - upw*(half + sign(half,vt))
305 ny = tz
306 nz =-ty
307C FAC = P / MAX(EM30,SQRT(NY**2+NZ**2))
308 fac = p * jperm(kk)
309 nny = nny + ny*fac
310 nnz = nnz + nz*fac
311C-------------------------------------
312C TENSION DE SURFACE
313C-------------------------------------
314 stensy = stens * ty / ttt
315 stensz = stens * tz / ttt
316 a(2,n) = a(2,n) + stensy
317 a(3,n) = a(3,n) + stensz
318 300 CONTINUE
319 fac = max(em30,sqrt(nny**2+nnz**2))
320 nny = nny/fac
321 nnz = nnz/fac
322C---------------------------------
323C BCS DE GRILLE
324C---------------------------------
325 IF(icode(n)/=0)THEN
326C---------------------------------
327C W LAGRANGIEN SUIVANT N
328C---------------------------------
329 dvn = vy * nny + vz * nnz
330 w(2,n) = w(2,n) + dvn * nny
331 w(3,n) = w(3,n) + dvn * nnz
332 CALL bcs2(w(1,n),skew(1,iskew(n)),iskew(n),icode(n))
333 vn = v(2,n)*nny + v(3,n)*nnz
334 wn = w(2,n)*nny + w(3,n)*nnz
335C-------------------------------------
336C W LAGRANGIEN SUIVANT N + BCS
337C-------------------------------------
338 IF(abs(wn)>em30)THEN
339 fac = vn / wn
340 w(2,n) = w(2,n) * fac
341 w(3,n) = w(3,n) * fac
342 ENDIF
343 ELSEIF(ieult/=0)THEN
344C-------------------------------------
345C W LAGRANGIEN SUIVANT N
346C W EULERIEN SUIVANT T
347C---------------------------------
348 vn = v(2,n) * nny + v(3,n) * nnz
349 w(2,n) = vn * nny
350 w(3,n) = vn * nnz
351 ELSE
352C-------------------------------------
353C W LAGRANGIEN SUIVANT N
354C LIBRE SUIVANT T
355C---------------------------------
356 dvn = vy * nny + vz * nnz
357 w(2,n) = w(2,n) + dvn * nny
358 w(3,n) = w(3,n) + dvn * nnz
359 ENDIF
360 ENDIF
361C
362 800 CONTINUE
363C
364C Phase de Finalisation pour SPMD
365C
366 900 CONTINUE
367 IF(intth/=zero) THEN
368 IF(nspmd > 1) THEN
369C
370C Envoi buffer elems updates
371C
372 CALL spmd_rbcast(combuf,combuf,1,ilen,0,2)
373 END IF
374C
375C Mise a jour ELBUF local
376C
377 DO ii = 1, im
378 l = listm(ii)
379 IF(ielem(l)>0) THEN
380 igrou = icomngr(ii)
381 ieln = icomnel(ii)
382 elbuf_tab(igrou)%GBUF%EINT(ieln) =
383 . elbuf_tab(igrou)%GBUF%EINT(ieln) + combuf(ii)
384 ENDIF
385 ENDDO
386C
387 DO ii = 1, is
388 l = lists(ii)
389 IF(ieles(l)>0) THEN
390 igrou = icomngr(im+ii)
391 ieln = icomnel(im+ii)
392 elbuf_tab(igrou)%GBUF%EINT(ieln) =
393 . elbuf_tab(igrou)%GBUF%EINT(ieln) + combuf(im+ii)
394 ENDIF
395 ENDDO
396 ENDIF
397C
398 RETURN
subroutine bcs2(a, b, j, k)
Definition bcs2.F:32
#define my_real
Definition cppsort.cpp:32
subroutine i9grd2(ierr, area, tstif, t, vol, ii, x, ixq, ix, iparg, pm, elbuf_tab, igrou, ieln)
Definition i9grd2.F:36
#define max(a, b)
Definition macros.h:21
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:380
subroutine spmd_glob_isum9(v, len)
Definition spmd_th.F:523