OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i10lagm.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| i10lagm ../engine/source/interfaces/int16/i10lagm.F
25!||--- called by ------------------------------------------------------
26!|| i16main ../engine/source/interfaces/int16/i16main.F
27!||--- calls -----------------------------------------------------
28!|| i10lll ../engine/source/interfaces/int16/i10lagm.F
29!||====================================================================
30 SUBROUTINE i10lagm(X ,V ,LLL ,JLL ,SLL ,
31 2 XLL ,CANDN ,CANDE ,I_STOK,IXS ,
32 3 IXS10 ,IADLL ,EMINX ,NSV ,NELEM ,
33 4 N_MUL_MX,ITASK ,A ,ITIED ,
34 5 NINT ,NKMAX ,COMNTAG )
35C-----------------------------------------------
36C I m p l i c i t T y p e s
37C-----------------------------------------------
38#include "implicit_f.inc"
39C-----------------------------------------------
40C G l o b a l P a r a m e t e r s
41C-----------------------------------------------
42#include "mvsiz_p.inc"
43C-----------------------------------------------
44C C o m m o n B l o c k s
45C-----------------------------------------------
46#include "task_c.inc"
47#include "com04_c.inc"
48#include "com08_c.inc"
49C-----------------------------------------------
50C D u m m y A r g u m e n t s
51C-----------------------------------------------
52 INTEGER I_STOK,N_MUL_MX,ITASK,ITIED,NINT,NKMAX ,
53 . LLL(*),JLL(*),SLL(*),CANDN(*),CANDE(*),COMNTAG(*),
54 . IXS(NIXS,*),IXS10(6,*),IADLL(*),NSV(*) ,NELEM(*)
55C REAL
57 . x(3,*),v(3,*),xll(*),
58 . eminx(6,*),a(3,*)
59C-----------------------------------------------
60C L o c a l V a r i a b l e s
61C-----------------------------------------------
62 INTEGER I,J,K,IK,IE,IS,IC,NK,III(MVSIZ,7),LLT,NFT,LE,FIRST,LAST,
63 . I10
64 my_real
65 . XX(MVSIZ,7),YY(MVSIZ,7),ZZ(MVSIZ,7),
66 . aa,xmin,ymin,zmin,xmax,ymax,zmax,dist
67C-----------------------------------------------
68C
69C
70C | M | Lt| | a | M ao
71C |---+---| | = |
72C | L | 0 | | la | bo
73C
74C [M] a + [L]t la = [M] ao
75C [L] a = bo
76C
77C a = -[M]-1[L]t la + ao
78C [L][M]-1[L]t la = [L] ao - bo
79C
80C on pose:
81C [H] = [L][M]-1[L]t
82C b = [L] ao - bo
83C
84C [H] la = b
85C
86C a = ao - [M]-1[L]t la
87C-----------------------------------------------
88C
89C la : LAMBDA(NC)
90C ao : A(NUMNOD)
91C L : XLL(NK,NC)
92C M : MAS(NUMNOD)
93C [L][M]-1[L]t la : HLA(NC)
94C [L] ao - b : B(NC)
95C [M]-1[L]t la : LTLA(NUMNOD)
96C
97C NC : nombre de contact
98C NK : nombre de noeud pour un contact (8+1,16+1,8+8,16+16)
99C
100C IC : numero du contact (1,NC)
101C IK : numero de noeud local a un contact (1,NK)
102C I : numero global du noeud (1,NUMNOD)
103C
104C IADLL(NC) : IAD = IADLL(IC)
105C LLL(NC*(7,21)) : I = LLL(IAD+1,2...IADNEXT-1)
106C-----------------------------------------------
107C evaluation de b:
108C
109C Vs = Somme(Ni Vi)
110C Vs_ + dt As = Somme(Ni Vi_) + Somme(dt Ni Ai)
111C Somme(dt Ni Ai) - dt As = Vs_ -Somme(Ni Vi_)
112C [L] = dt {N1,N2,..,N15,-1}
113C bo = [L] a = -[L]/dt v_
114C b = [L] ao - bo
115C b = [L] ao + [L]/dt v_ = [L] (v_ + ao dt)/dt
116C-----------------------------------------------
117C b = [L] vo+/dt + vout
118C-----------------------------------------------
119C-----------------------------------------------------------------------
120C boucle sur les candidats au contact
121C-----------------------------------------------------------------------
122 first = 1 + i_stok * itask / nthread
123 last = i_stok*(itask+1) / nthread
124 llt = 0
125 nft=llt+1
126 DO ic=first,last
127 le = cande(ic)
128 ie = nelem(le)
129 i10 = ie - numels8
130C-----------------------------------------------------------------------
131C test si shell 16
132C-----------------------------------------------------------------------
133 IF(i10.ge .1.AND.i10.le .numels10)THEN
134 is = nsv(candn(ic))
135 dist = -1.e30
136 dist = max(eminx(1,le)-x(1,is)-dt2*(v(1,is)+dt12*a(1,is)),
137 . x(1,is)+dt2*(v(1,is)+dt12*a(1,is))-eminx(4,le),dist)
138 dist = max(eminx(2,le)-x(2,is)-dt2*(v(2,is)+dt12*a(2,is)),
139 . x(2,is)+dt2*(v(2,is)+dt12*a(2,is))-eminx(5,le),dist)
140 dist = max(eminx(3,le)-x(3,is)-dt2*(v(3,is)+dt12*a(3,is)),
141 . x(3,is)+dt2*(v(3,is)+dt12*a(3,is))-eminx(6,le),dist)
142c IF (DIST<0.) CANDN(I) = -CANDN(I)
143C-----------------------------------------------------------------------
144C test si dans la boite
145C-----------------------------------------------------------------------
146 IF(dist.le .zero)THEN
147c
148c print *, "dans la boite",XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX
149c
150 llt = llt+1
151 iii(llt,7)=is
152 xx(llt,7)=x(1,is)
153 yy(llt,7)=x(2,is)
154 zz(llt,7)=x(3,is)
155 iii(llt,1)=ixs(2,ie)
156 iii(llt,2)=ixs(4,ie)
157 iii(llt,3)=ixs(6,ie)
158 iii(llt,4)=ixs(7,ie)
159 DO k=1,6
160 iii(llt,k+8)=ixs10(k,i10)
161 ENDDO
162 DO k=1,7
163 i = iii(llt,k)
164 xx(llt,k)=x(1,i)
165 yy(llt,k)=x(2,i)
166 zz(llt,k)=x(3,i)
167 ENDDO
168c
169C-----------------------------------------------------------------------
170C calcul de [L] par paquet de mvsiz
171C-----------------------------------------------------------------------
172 IF(llt==mvsiz-1)THEN
173 CALL i10lll(
174 1 llt ,lll ,jll ,sll ,xll ,v ,
175 2 xx ,yy ,zz ,iii ,iadll ,
176 3 n_mul_mx ,a ,x ,itied ,nint ,nkmax ,
177 4 comntag )
178 nft=llt+1
179 llt = 0
180 ENDIF
181 ELSE
182c debug
183 k=0
184 ENDIF
185 ENDIF
186 ENDDO
187C-----------------------------------------------------------------------
188C calcul de [L] pour dernier paquet
189C-----------------------------------------------------------------------
190 IF(llt/=0) CALL i10lll(
191 1 llt ,lll ,jll ,sll ,xll ,v ,
192 2 xx ,yy ,zz ,iii ,iadll ,
193 3 n_mul_mx ,a ,x ,itied ,nint ,nkmax ,
194 4 comntag )
195C
196C-----------------------------------------------
197 RETURN
198 END
199!||====================================================================
200!|| i10lll ../engine/source/interfaces/int16/i10lagm.F
201!||--- called by ------------------------------------------------------
202!|| i10lagm ../engine/source/interfaces/int16/i10lagm.F
203!||--- calls -----------------------------------------------------
204!|| ancmsg ../engine/source/output/message/message.F
205!|| arret ../engine/source/system/arret.F
206!|| i10rst ../engine/source/interfaces/int16/i10lagm.F
207!||--- uses -----------------------------------------------------
208!|| message_mod ../engine/share/message_module/message_mod.F
209!||====================================================================
210 SUBROUTINE i10lll(LLT ,LLL ,JLL ,SLL ,XLL ,V ,
211 2 XX ,YY ,ZZ ,III ,IADLL ,
212 3 N_MUL_MX,A ,X ,ITIED,NINT ,NKMAX ,
213 4 COMNTAG )
214C-----------------------------------------------
215C M o d u l e s
216C-----------------------------------------------
217 USE message_mod
218C-----------------------------------------------
219C I m p l i c i t T y p e s
220C-----------------------------------------------
221#include "implicit_f.inc"
222#include "comlock.inc"
223C-----------------------------------------------
224C G l o b a l P a r a m e t e r s
225C-----------------------------------------------
226#include "mvsiz_p.inc"
227C-----------------------------------------------
228C C o m m o n B l o c k s
229C-----------------------------------------------
230#include "com08_c.inc"
231 COMMON /LAGGLOB/N_MULT
232 INTEGER N_MULT
233C-----------------------------------------------
234C D u m m y A r g u m e n t s
235C-----------------------------------------------
236 INTEGER LLT,N_MUL_MX,ITIED,NINT ,NKMAX
237 INTEGER LLL(*),JLL(*),SLL(*),COMNTAG(*),
238 . III(MVSIZ,7),IADLL(*)
239C REAL
240 my_real
241 . XLL(*),V(3,*),A(3,*)
242 my_real
243 . XX(MVSIZ,7),YY(MVSIZ,7),ZZ(MVSIZ,7),X(3,*)
244C-----------------------------------------------
245C L o c a l V a r i a b l e s
246C-----------------------------------------------
247 INTEGER I,J,IK,NK,I1,I2,I3,I4,IAD,NN
248 my_real
249 . VX,VY,VZ,VN,AA
250 my_real
251 . R(MVSIZ),S(MVSIZ),T(MVSIZ),
252 . NX(MVSIZ), NY(MVSIZ), NZ(MVSIZ),
253 . NI(MVSIZ,7)
254C-----------------------------------------------
255C calcul de r,s,t
256C-----------------------------------------------
257c
258c print *, "XX(1,1),XX(1,9)",XX(1,1),XX(1,9)
259c
260 CALL I10RST(LLT ,R ,S ,T ,NI ,
261 2 NX ,NY ,NZ ,XX ,YY ,ZZ )
262C-----------------------------------------------
263C calcul de [L]
264C-----------------------------------------------
265 IF(ITIED==0)THEN
266 DO I=1,LLT
267C-----------------------------------------------
268C test si contact
269C-----------------------------------------------
270.AND..AND..AND. IF(R(I)>=-ONES(I)>=-ONET(I)>=-ONE
271.AND..AND. . R(I)<= ONES(I)<= ONET(I)<= ONE)THEN
272C
273 NK = 7
274 VX = ZERO
275 VY = ZERO
276 VZ = ZERO
277 DO IK=1,NK
278 VX = VX - (V(1,III(I,IK))+DT12*A(1,III(I,IK)))*NI(I,IK)
279 VY = VY - (V(2,III(I,IK))+DT12*A(2,III(I,IK)))*NI(I,IK)
280 VZ = VZ - (V(3,III(I,IK))+DT12*A(3,III(I,IK)))*NI(I,IK)
281 ENDDO
282c
283c
284 VN = NX(I)*VX + NY(I)*VY + NZ(I)*VZ
285C-----------------------------------------------
286C test si vitesse entrante en s
287C-----------------------------------------------
288 IF(S(I)*VN<=ZERO)THEN
289c
290c print *, "vitesse entrante",vn
291c print *, "s = ",S(I)
292c
293 AA = ONE/SQRT(NX(I)*NX(I)+NY(I)*NY(I)+NZ(I)*NZ(I))
294 NX(I) = NX(I)*AA
295 NY(I) = NY(I)*AA
296 NZ(I) = NZ(I)*AA
297#include "lockon.inc"
298 N_MULT=N_MULT+1
299 IF(N_MULT>N_MUL_MX)THEN
300#include "lockoff.inc"
301 CALL ANCMSG(MSGID=84,ANMODE=ANINFO)
302 CALL ARRET(2)
303 ENDIF
304 IADLL(N_MULT+1)=IADLL(N_MULT) + 21
305 IF(IADLL(N_MULT+1)-1>NKMAX)THEN
306#include "lockoff.inc"
307 CALL ANCMSG(MSGID=84,ANMODE=ANINFO)
308 CALL ARRET(2)
309 ENDIF
310 IAD = IADLL(N_MULT) - 1
311 DO IK=1,7
312 LLL(IAD+IK) = III(I,IK)
313 JLL(IAD+IK) = 1
314 SLL(IAD+IK) = 0
315 XLL(IAD+IK) = NX(I)*NI(I,IK)
316 LLL(IAD+IK+7) = III(I,IK)
317 JLL(IAD+IK+7) = 2
318 SLL(IAD+IK+7) = 0
319 XLL(IAD+IK+7) = NY(I)*NI(I,IK)
320 LLL(IAD+IK+14) = III(I,IK)
321 JLL(IAD+IK+14) = 3
322 SLL(IAD+IK+14) = 0
323 XLL(IAD+IK+14) = NZ(I)*NI(I,IK)
324 NN = LLL(IAD+IK)
325 COMNTAG(NN) = COMNTAG(NN) + 1
326 ENDDO
327 SLL(IAD+7) = NINT
328 SLL(IAD+14) = NINT
329 SLL(IAD+21) = NINT
330#include "lockoff.inc"
331 ENDIF
332 ENDIF
333 ENDDO
334 ELSEIF(ITIED==1)THEN
335C-----------------------------------------------
336C ITIED = 1
337C-----------------------------------------------
338 DO I=1,LLT
339C-----------------------------------------------
340C test si contact
341C-----------------------------------------------
342.AND..AND..AND. IF(R(I)>=-ONES(I)>=-ONET(I)>=-ONE
343.AND..AND. . R(I)<= ONES(I)<= ONET(I)<= ONE)THEN
344C
345 NK = 7
346 VX = ZERO
347 VY = ZERO
348 VZ = ZERO
349 DO IK=1,NK
350 VX = VX - (V(1,III(I,IK))+DT12*A(1,III(I,IK)))*NI(I,IK)
351 VY = VY - (V(2,III(I,IK))+DT12*A(2,III(I,IK)))*NI(I,IK)
352 VZ = VZ - (V(3,III(I,IK))+DT12*A(3,III(I,IK)))*NI(I,IK)
353 ENDDO
354c
355c print *, "vx,vy,vz s-m",vx,vy,vz
356c print *, "nx,ny,nz ", NX(I),NY(I),NZ(I)
357c
358 VN = NX(I)*VX + NY(I)*VY + NZ(I)*VZ
359C-----------------------------------------------
360C test si vitesse entrante en s
361C-----------------------------------------------
362 IF(S(I)*VN<=ZERO)THEN
363c
364c print *, "vitesse entrante",vn
365c print *, "s = ",S(I)
366c
367#include "lockon.inc"
368 IF(N_MULT+3>N_MUL_MX)THEN
369#include "lockoff.inc"
370 CALL ANCMSG(MSGID=84,ANMODE=ANINFO)
371 CALL ARRET(2)
372 ENDIF
373 IF(IADLL(N_MULT+1)-1+7*3>NKMAX)THEN
374#include "lockoff.inc"
375 CALL ANCMSG(MSGID=84,ANMODE=ANINFO)
376 CALL ARRET(2)
377 ENDIF
378C
379 N_MULT=N_MULT+1
380 IADLL(N_MULT+1)=IADLL(N_MULT) + 7
381 IAD = IADLL(N_MULT) - 1
382 DO IK=1,7
383 LLL(IAD+IK) = III(I,IK)
384 JLL(IAD+IK) = 1
385 SLL(IAD+IK) = 0
386 XLL(IAD+IK) = NI(I,IK)
387 NN = LLL(IAD+IK)
388 COMNTAG(NN) = COMNTAG(NN) + 1
389 ENDDO
390 SLL(IAD+7) = NINT
391C
392 N_MULT=N_MULT+1
393 IADLL(N_MULT+1)=IADLL(N_MULT) + 7
394 IAD = IADLL(N_MULT) - 1
395 DO IK=1,7
396 LLL(IAD+IK) = III(I,IK)
397 JLL(IAD+IK) = 2
398 SLL(IAD+IK) = 0
399 XLL(IAD+IK) = NI(I,IK)
400 NN = LLL(IAD+IK)
401 COMNTAG(NN) = COMNTAG(NN) + 1
402 ENDDO
403 SLL(IAD+7) = NINT
404C
405 N_MULT=N_MULT+1
406 IADLL(N_MULT+1)=IADLL(N_MULT) + 7
407 IAD = IADLL(N_MULT) - 1
408 DO IK=1,7
409 LLL(IAD+IK) = III(I,IK)
410 JLL(IAD+IK) = 3
411 SLL(IAD+IK) = 0
412 XLL(IAD+IK) = NI(I,IK)
413 NN = LLL(IAD+IK)
414 COMNTAG(NN) = COMNTAG(NN) + 1
415 ENDDO
416 SLL(IAD+7) = NINT
417#include "lockoff.inc"
418 ENDIF
419 ENDIF
420 ENDDO
421 ELSE
422C-----------------------------------------------
423C ITIED = 2
424C-----------------------------------------------
425 DO I=1,LLT
426C-----------------------------------------------
427C test si contact
428C-----------------------------------------------
429.AND..AND..AND. IF(R(I)>=-ONES(I)>=-ONET(I)>=-ONE
430.AND..AND. . R(I)<= ONES(I)<= ONET(I)<= ONE)THEN
431C
432 NK = 7
433C-----------------------------------------------
434c print *, "s = ",S(I)
435c
436#include "lockon.inc"
437 IF(N_MULT+3>N_MUL_MX)THEN
438#include "lockoff.inc"
439 CALL ANCMSG(MSGID=84,ANMODE=ANINFO)
440 CALL ARRET(2)
441 ENDIF
442 IF(IADLL(N_MULT+1)-1+7*3>NKMAX)THEN
443#include "lockoff.inc"
444 CALL ANCMSG(MSGID=84,ANMODE=ANINFO)
445 CALL ARRET(2)
446 ENDIF
447 N_MULT=N_MULT+1
448 IADLL(N_MULT+1)=IADLL(N_MULT) + 7
449 IAD = IADLL(N_MULT) - 1
450 DO IK=1,7
451 LLL(IAD+IK) = III(I,IK)
452 JLL(IAD+IK) = 1
453 SLL(IAD+IK) = 0
454 XLL(IAD+IK) = NI(I,IK)
455 NN = LLL(IAD+IK)
456 COMNTAG(NN) = COMNTAG(NN) + 1
457 ENDDO
458 SLL(IAD+7) = NINT
459C
460 N_MULT=N_MULT+1
461 IADLL(N_MULT+1)=IADLL(N_MULT) + 7
462 IAD = IADLL(N_MULT) - 1
463 DO IK=1,7
464 LLL(IAD+IK) = III(I,IK)
465 JLL(IAD+IK) = 2
466 SLL(IAD+IK) = 0
467 XLL(IAD+IK) = NI(I,IK)
468 NN = LLL(IAD+IK)
469 COMNTAG(NN) = COMNTAG(NN) + 1
470 ENDDO
471 SLL(IAD+7) = NINT
472C
473 N_MULT=N_MULT+1
474 IADLL(N_MULT+1)=IADLL(N_MULT) + 7
475 IAD = IADLL(N_MULT) - 1
476 DO IK=1,7
477 LLL(IAD+IK) = III(I,IK)
478 JLL(IAD+IK) = 3
479 SLL(IAD+IK) = 0
480 XLL(IAD+IK) = NI(I,IK)
481 NN = LLL(IAD+IK)
482 COMNTAG(NN) = COMNTAG(NN) + 1
483 ENDDO
484 SLL(IAD+7) = NINT
485C
486#include "lockoff.inc"
487 ENDIF
488 ENDDO
489 ENDIF
490c
491c print *, "r,s,t",r(1),s(1),t(1)
492C
493 RETURN
494 END
495C
496!||====================================================================
497!|| i10rst ../engine/source/interfaces/int16/i10lagm.F
498!||--- called by ------------------------------------------------------
499!|| i10lll ../engine/source/interfaces/int16/i10lagm.F
500!||--- calls -----------------------------------------------------
501!|| i10deri ../engine/source/interfaces/int16/i10lagm.F
502!|| i10ni ../engine/source/interfaces/int16/i10lagm.F
503!|| i10rstn ../engine/source/interfaces/int16/i10lagm.F
504!||====================================================================
505 SUBROUTINE I10RST(LLT,R ,S ,T ,NI ,
506 2 NX ,NY ,NZ ,XX ,YY ,ZZ )
507C-----------------------------------------------
508C I m p l i c i t T y p e s
509C-----------------------------------------------
510#include "implicit_f.inc"
511C-----------------------------------------------
512C G l o b a l P a r a m e t e r s
513C-----------------------------------------------
514#include "mvsiz_p.inc"
515C-----------------------------------------------
516C D u m m y A r g u m e n t s
517C-----------------------------------------------
518 INTEGER LLT
519C REAL
520 my_real
521 . XX(MVSIZ,7),YY(MVSIZ,7),ZZ(MVSIZ,7)
522 my_real
523 . R(MVSIZ),S(MVSIZ),T(MVSIZ),NI(MVSIZ,7) ,
524 . NX(MVSIZ),NY(MVSIZ),NZ(MVSIZ)
525C-----------------------------------------------
526C L o c a l V a r i a b l e s
527C-----------------------------------------------
528 INTEGER I,J,IK,NK,ITER,NITERMAX,JTER,NJTERMAX,CONV
529 my_real
530 . VX,VY,VZ,VN
531 my_real
532 . DRDX(MVSIZ),DRDY(MVSIZ),DRDZ(MVSIZ),
533 . DSDX(MVSIZ),DSDY(MVSIZ),DSDZ(MVSIZ),
534 . DTDX(MVSIZ),DTDY(MVSIZ),DTDZ(MVSIZ),
535 . DXDR(MVSIZ),DYDR(MVSIZ),DZDR(MVSIZ),
536 . DXDT(MVSIZ),DYDT(MVSIZ),DZDT(MVSIZ),
537 . RR(MVSIZ),SS(MVSIZ),TT(MVSIZ)
538C-----------------------------------------------
539C
540C r=s=t=0
541C
542C +---> iter
543C |
544C | Ni(r,s,t) =
545C | dNi/dr =
546C | ... _
547C | \
548C | dx/dr = /_ (xi * dNi/dr)
549C | ...
550C |
551C | [dx/dr dy/dr dz/dr]
552C | [J] = |dx/ds dy/ds dz/ds|
553C | [dx/dt dy/dt dz/dt]
554C |
555C | +--> jter
556C | | _
557C | | \
558C | | x(r,s,t) = /_ (xi * Ni(r,s,t))
559C | | ...
560C | |
561C | | |r| |r| -1 |xs-x(r,s,t)|
562C | | {s} = {s} + [J] {ys-y(r,s,t)}
563C | | |t| |t| |zs-z(r,s,t)|
564C | |
565C | | Ni(r,s,t) =
566C +-+---
567C-----------------------------------------------
568 NITERMAX = 3
569 NJTERMAX = 3
570 CONV = 0
571C
572 DO I=1,LLT
573 RR(I) = ZERO
574 SS(I) = ZERO
575 TT(I) = ZERO
576 ENDDO
577C-----------------------------------------------
578C calcul de r,s,t et Ni(r,s,t)
579C-----------------------------------------------
580 DO ITER=1,NITERMAX
581c
582c print *, "iter",iter
583c
584C-----------------------------------------------
585C calcul de Ni(r,s,t); [J]; [J]-1
586C-----------------------------------------------
587 CALL I10DERI(LLT,RR ,SS ,TT ,NI ,
588 2 DRDX ,DRDY ,DRDZ ,DSDX ,DSDY ,DSDZ ,
589 3 DTDX ,DTDY ,DTDZ ,DXDR ,DYDR ,DZDR ,
590 4 DXDT ,DYDT ,DZDT ,XX ,YY ,ZZ )
591C
592 DO JTER=1,NJTERMAX
593c
594c print *, "jter",jter
595c
596C-----------------------------------------------
597C calcul de r,s,t new
598C-----------------------------------------------
599 CALL I10RSTN(LLT,RR,SS ,TT ,NI ,CONV ,
600 2 DRDX ,DRDY ,DRDZ ,DSDX ,DSDY ,DSDZ ,
601 3 DTDX ,DTDY ,DTDZ ,XX ,YY ,ZZ ,
602 4 R ,S ,T )
603c
604c print *, "r,s,t",r(1),s(1),t(1)
605c print *, "rr,ss,tt",rr(1),ss(1),tt(1)
606c
607C-----------------------------------------------
608C calcul de Ni(-1<r<1 , -1<s<1 , -1<t<1)
609C-----------------------------------------------
610 CALL I10NI(LLT,RR ,SS ,TT ,NI )
611C pb de parith on si conv fonction de mvsiz !!!!!!!
612C IF(CONV/=0)RETURN
613C
614 ENDDO
615 ENDDO
616C
617 DO I=1,LLT
618 NX(I) = DYDT(I)*DZDR(I) - DZDT(I)*DYDR(I)
619 NY(I) = DZDT(I)*DXDR(I) - DXDT(I)*DZDR(I)
620 NZ(I) = DXDT(I)*DYDR(I) - DYDT(I)*DXDR(I)
621 ENDDO
622C
623 RETURN
624 END
625!||====================================================================
626!|| i10ni ../engine/source/interfaces/int16/i10lagm.F
627!||--- called by ------------------------------------------------------
628!|| i10rst ../engine/source/interfaces/int16/i10lagm.F
629!||====================================================================
630 SUBROUTINE I10NI(LLT,RR ,SS ,TT ,NI )
631C-----------------------------------------------
632C I m p l i c i t T y p e s
633C-----------------------------------------------
634#include "implicit_f.inc"
635C-----------------------------------------------
636C G l o b a l P a r a m e t e r s
637C-----------------------------------------------
638#include "mvsiz_p.inc"
639C-----------------------------------------------
640C D u m m y A r g u m e n t s
641C-----------------------------------------------
642 INTEGER LLT
643 my_real
644 . RR(MVSIZ),SS(MVSIZ),TT(MVSIZ),NI(MVSIZ,7)
645C-----------------------------------------------
646C L o c a l V a r i a b l e s
647C-----------------------------------------------
648 INTEGER I
649 my_real
650 . U_M_R,U_P_R,U_M_S,U_P_S,U_M_T,U_P_T,
651 . UMS_UMT,UMS_UPT,UPS_UMT,UPS_UPT,
652 . UMR_UMS,UMR_UPS,UPR_UMS,UPR_UPS,
653 . UMT_UMR,UMT_UPR,UPT_UMR,UPT_UPR,
654 . A,R05,S05,T05
655C-----------------------------------------------------------------------
656C calcul de Ni
657C-----------------------------------------------------------------------
658 DO I=1,LLT
659C
660 R05 = HALF*RR(I)
661 S05 = HALF*SS(I)
662 T05 = HALF*TT(I)
663C
664 U_M_R = HALF - R05
665 U_P_R = HALF + R05
666C
667 U_M_S = HALF - S05
668 U_P_S = HALF + S05
669C
670 U_M_T = HALF - T05
671 U_P_T = HALF + T05
672C
673 UMS_UMT = U_M_S * U_M_T
674 UMS_UPT = U_M_S * U_P_T
675 UPS_UMT = U_P_S * U_M_T
676 UPS_UPT = U_P_S * U_P_T
677C
678 UMR_UMS = U_M_R * U_M_S
679 UMR_UPS = U_M_R * U_P_S
680 UPR_UMS = U_P_R * U_M_S
681 UPR_UPS = U_P_R * U_P_S
682C
683 UMT_UMR = U_M_T * U_M_R
684 UMT_UPR = U_M_T * U_P_R
685 UPT_UMR = U_P_T * U_M_R
686 UPT_UPR = U_P_T * U_P_R
687C
688 A = -RR(I)-TT(I)-ONE
689 NI(I,1) = U_M_R * UMS_UMT * A
690 NI(I,2) = U_M_R * UMS_UPT * A
691 NI(I,3) = U_P_R * UMS_UPT * A
692 NI(I,4) = U_P_R * UMS_UMT * A
693 NI(I,5) = U_M_R * UPS_UMT * A
694 NI(I,6) = U_M_R * UPS_UPT * A
695C------------------------------------
696 NI(I,7) = -1.
697C------------------------------------
698 ENDDO
699C-----------------------------------------------
700 RETURN
701 END
702!||====================================================================
703!|| i10rstn ../engine/source/interfaces/int16/i10lagm.F
704!||--- called by ------------------------------------------------------
705!|| i10rst ../engine/source/interfaces/int16/i10lagm.F
706!||====================================================================
707 SUBROUTINE I10RSTN(LLT,RR,SS ,TT ,NI ,CONV ,
708 2 DRDX ,DRDY ,DRDZ ,DSDX ,DSDY ,DSDZ ,
709 3 DTDX ,DTDY ,DTDZ ,XX ,YY ,ZZ ,
710 4 R ,S ,T )
711C-----------------------------------------------
712C I m p l i c i t T y p e s
713C-----------------------------------------------
714c#include "implicit_f.inc"
715 implicit none
716C-----------------------------------------------
717C G l o b a l P a r a m e t e r s
718C-----------------------------------------------
719#include "mvsiz_p.inc"
720#include "constant.inc"
721C-----------------------------------------------
722C D u m m y A r g u m e n t s
723C-----------------------------------------------
724 INTEGER LLT,CONV
725 my_real
726 . R(MVSIZ),S(MVSIZ),T(MVSIZ),NI(MVSIZ,7) ,
727 . RR(MVSIZ),SS(MVSIZ),TT(MVSIZ),
728 . XX(MVSIZ,7) ,YY(MVSIZ,7) ,ZZ(MVSIZ,7) ,
729 . DRDX(MVSIZ),DRDY(MVSIZ),DRDZ(MVSIZ),
730 . DSDX(MVSIZ),DSDY(MVSIZ),DSDZ(MVSIZ),
731 . DTDX(MVSIZ),DTDY(MVSIZ),DTDZ(MVSIZ)
732C-----------------------------------------------
733C L o c a l V a r i a b l e s
734C-----------------------------------------------
735 INTEGER I
736 my_real
737 . DX ,DY,DZ,DR ,DS,DT,ERR
738C
739 ERR=ZERO
740C-----------------------------------------------
741 DO I=1,LLT
742C
743 DX = XX(I,7)
744 + - NI(I, 1)*XX(I, 1) - NI(I, 2)*XX(I, 2) - NI(I, 3)*XX(I, 3)
745 + - NI(I, 4)*XX(I, 4) - NI(I, 5)*XX(I, 5) - NI(I, 6)*XX(I, 6)
746 DY = YY(I,7)
747 + - NI(I, 1)*YY(I, 1) - NI(I, 2)*YY(I, 2) - NI(I, 3)*YY(I, 3)
748 + - NI(I, 4)*YY(I, 4) - NI(I, 5)*YY(I, 5) - NI(I, 6)*YY(I, 6)
749 DZ = ZZ(I,7)
750 + - NI(I, 1)*ZZ(I, 1) - NI(I, 2)*ZZ(I, 2) - NI(I, 3)*ZZ(I, 3)
751 + - NI(I, 4)*ZZ(I, 4) - NI(I, 5)*ZZ(I, 5) - NI(I, 6)*ZZ(I, 6)
752C
753 DR = DRDX(I)*DX + DRDY(I)*DY + DRDZ(I)*DZ
754 DS = DSDX(I)*DX + DSDY(I)*DY + DSDZ(I)*DZ
755 DT = DTDX(I)*DX + DTDY(I)*DY + DTDZ(I)*DZ
756C
757 RR(I) = RR(I) + DR
758 SS(I) = SS(I) + DS
759 TT(I) = TT(I) + DT
760C
761 R(I) = RR(I)
762 S(I) = SS(I)
763 T(I) = TT(I)
764C
765.AND..AND..AND. IF(R(I)>=-ONES(I)>=-ONET(I)>=-ONE
766.AND..AND. . R(I)<= ONES(I)<= ONET(I)<= ONE)THEN
767 ERR = MAX(ERR,ABS(DR),ABS(DS),ABS(DT))
768 ELSE
769 RR(I) = MAX(MIN(RR(I),ONE),-ONE)
770 SS(I) = MAX(MIN(SS(I),ONE),-ONE)
771 TT(I) = MAX(MIN(TT(I),ONE),-ONE)
772 ENDIF
773c
774C
775 ENDDO
776C
777 IF(ERR<EM4) CONV = 1
778C-----------------------------------------------
779 RETURN
780 END
781!||====================================================================
782!|| i10deri ../engine/source/interfaces/int16/i10lagm.F
783!||--- called by ------------------------------------------------------
784!|| i10rst ../engine/source/interfaces/int16/i10lagm.F
785!||====================================================================
786 SUBROUTINE I10DERI(LLT,RR,SS ,TT ,NI ,
787 2 DRDX ,DRDY ,DRDZ ,DSDX ,DSDY ,DSDZ ,
788 3 DTDX ,DTDY ,DTDZ ,DXDR ,DYDR ,DZDR ,
789 4 DXDT ,DYDT ,DZDT ,XX ,YY ,ZZ )
790C-----------------------------------------------
791C I m p l i c i t T y p e s
792C-----------------------------------------------
793#include "implicit_f.inc"
794C-----------------------------------------------
795C G l o b a l P a r a m e t e r s
796C-----------------------------------------------
797#include "mvsiz_p.inc"
798C-----------------------------------------------
799C D u m m y A r g u m e n t s
800C-----------------------------------------------
801 INTEGER LLT
802 my_real
803 . DXDR(MVSIZ), DYDR(MVSIZ), DZDR(MVSIZ),
804 . DXDT(MVSIZ), DYDT(MVSIZ), DZDT(MVSIZ),
805 . DRDX(MVSIZ), DSDX(MVSIZ), DTDX(MVSIZ),
806 . DRDY(MVSIZ), DSDY(MVSIZ), DTDY(MVSIZ),
807 . DRDZ(MVSIZ), DSDZ(MVSIZ), DTDZ(MVSIZ),
808 . XX(MVSIZ,7) ,YY(MVSIZ,7),ZZ(MVSIZ,7),
809 . NI(MVSIZ,7) ,RR(MVSIZ) ,SS(MVSIZ) ,TT(MVSIZ)
810C-----------------------------------------------
811C L o c a l V a r i a b l e s
812C-----------------------------------------------
813 INTEGER I,N
814 my_real
815 . DXDS(MVSIZ), DYDS(MVSIZ), DZDS(MVSIZ),
816 . DNIDR(10),DNIDS(10),DNIDT(10),
817 . D, AA, BB, DET(MVSIZ),R9 ,R13 ,S9 ,S10 ,S11 ,S12 ,T10 ,T14
818 my_real
819 . U_M_R,U_P_R,U_M_S,U_P_S,U_M_T,U_P_T,
820 . UMS_UMT,UMS_UPT,UPS_UMT,UPS_UPT,
821 . UMR_UMS,UMR_UPS,UPR_UMS,UPR_UPS,
822 . UMT_UMR,UMT_UPR,UPT_UMR,UPT_UPR,
823 . A,R05,S05,T05
824C-----------------------------------------------
825C/*
826C
827C
828C*/
829C-----------------------------------------------
830C
831C-----------------------------------------------
832C _
833C \
834C x(r,s,t) = /_ (xi * Ni(r,s,t))
835C _
836C \
837C y(r,s,t) = /_ (yi * Ni(r,s,t))
838C _
839C \
840C z(r,s,t) = /_ zi * Ni(r,s,t))
841C
842C _
843C \
844C dx/dr = /_ (xi * dNi/dr)
845C ...
846C
847C [dx/dr dy/dr dz/dr]
848C [J] = |dx/ds dy/ds dz/ds|
849C [dx/dt dy/dt dz/dt]
850C
851C |r| |r| -1 |xs-x|
852C {s} = {s} + [J] {ys-y}
853C |t| |t| |zs-z|
854C
855C-----------------------------------------------------------------------
856C Ni; dNi/dr; dNi/ds; dNi/dt
857C-----------------------------------------------------------------------
858 DO I=1,LLT
859 R05 = HALF*RR(I)
860 S05 = HALF*SS(I)
861 T05 = HALF*TT(I)
862C
863 U_M_R = HALF - R05
864 U_P_R = HALF + R05
865C
866 U_M_S = HALF - S05
867 U_P_S = HALF + S05
868C
869 U_M_T = HALF - T05
870 U_P_T = HALF + T05
871C
872 UMS_UMT = U_M_S * U_M_T
873 UMS_UPT = U_M_S * U_P_T
874 UPS_UMT = U_P_S * U_M_T
875 UPS_UPT = U_P_S * U_P_T
876C
877 UMR_UMS = U_M_R * U_M_S
878 UMR_UPS = U_M_R * U_P_S
879 UPR_UMS = U_P_R * U_M_S
880 UPR_UPS = U_P_R * U_P_S
881C
882 UMT_UMR = U_M_T * U_M_R
883 UMT_UPR = U_M_T * U_P_R
884 UPT_UMR = U_P_T * U_M_R
885 UPT_UPR = U_P_T * U_P_R
886C
887 A = -RR(I)-TT(I)-ONE
888 NI(I,1) = U_M_R * UMS_UMT * A
889 NI(I,2) = U_M_R * UMS_UPT * A
890 NI(I,3) = U_P_R * UMS_UPT * A
891 NI(I,4) = U_P_R * UMS_UMT * A
892 NI(I,5) = U_M_R * UPS_UMT * A
893 NI(I,6) = U_M_R * UPS_UPT * A
894C
895 A = -T05 - RR(I)
896 DNIDR(1) = -UMS_UMT * A
897 DNIDR(5) = -UPS_UMT * A
898 DNIDR(2) = -UMS_UPT * A
899 DNIDR(6) = -UPS_UPT * A
900 DNIDR(3) = UMS_UPT * A
901 DNIDR(4) = UMS_UMT * A
902C
903 DNIDS(1) = -UMT_UMR * A
904 DNIDS(5) = UMT_UMR * A
905 DNIDS(2) = -UPT_UMR * A
906 DNIDS(6) = UPT_UMR * A
907 DNIDS(3) = -UPT_UPR * A
908 DNIDS(4) = -UMT_UPR * A
909C
910 DNIDT(1) = -UMR_UMS * A
911 DNIDT(5) = -UMR_UPS * A
912 DNIDT(2) = UMR_UMS * A
913 DNIDT(6) = UMR_UPS * A
914 DNIDT(3) = UPR_UMS * A
915 DNIDT(4) = -UPR_UMS * A
916C------------------------------------
917 NI(I,7) = -1.
918C-----------------------------------------------------------------------
919C dx/dr; dx/ds; dx/dt
920C-----------------------------------------------------------------------
921 DXDR(I) = DNIDR(1)*XX(I,1) + DNIDR(2)*XX(I,2) + DNIDR(3)*XX(I,3)
922 + + DNIDR(4)*XX(I,4) + DNIDR(5)*XX(I,5) + DNIDR(6)*XX(I,6)
923C
924 DXDS(I) = DNIDS(1)*XX(I,1) + DNIDS(2)*XX(I,2) + DNIDS(3)*XX(I,3)
925 + + DNIDS(4)*XX(I,4) + DNIDS(5)*XX(I,5) + DNIDS(6)*XX(I,6)
926C
927 DXDT(I) = DNIDT(1)*XX(I,1) + DNIDT(2)*XX(I,2) + DNIDT(3)*XX(I,3)
928 + + DNIDT(4)*XX(I,4) + DNIDT(5)*XX(I,5) + DNIDT(6)*XX(I,6)
929C-----------------------------------------------------------------------
930C dy/dr; dy/ds; dy/dt
931C-----------------------------------------------------------------------
932 DYDR(I) = DNIDR(1)*YY(I,1) + DNIDR(2)*YY(I,2) + DNIDR(3)*YY(I,3)
933 + + DNIDR(4)*YY(I,4) + DNIDR(5)*YY(I,5) + DNIDR(6)*YY(I,6)
934C
935 DYDS(I) = DNIDS(1)*YY(I,1) + DNIDS(2)*YY(I,2) + DNIDS(3)*YY(I,3)
936 + + DNIDS(4)*YY(I,4) + DNIDS(5)*YY(I,5) + DNIDS(6)*YY(I,6)
937C
938 DYDT(I) = DNIDT(1)*YY(I,1) + DNIDT(2)*YY(I,2) + DNIDT(3)*YY(I,3)
939 + + DNIDT(4)*YY(I,4) + DNIDT(5)*YY(I,5) + DNIDT(6)*YY(I,6)
940C-----------------------------------------------------------------------
941C dz/dr; dz/ds; dz/dt
942C-----------------------------------------------------------------------
943 DZDR(I) = DNIDR(1)*ZZ(I,1) + DNIDR(2)*ZZ(I,2) + DNIDR(3)*ZZ(I,3)
944 + + DNIDR(4)*ZZ(I,4) + DNIDR(5)*ZZ(I,5) + DNIDR(6)*ZZ(I,6)
945C
946 DZDS(I) = DNIDS(1)*ZZ(I,1) + DNIDS(2)*ZZ(I,2) + DNIDS(3)*ZZ(I,3)
947 + + DNIDS(4)*ZZ(I,4) + DNIDS(5)*ZZ(I,5) + DNIDS(6)*ZZ(I,6)
948C
949 DZDT(I) = DNIDT(1)*ZZ(I,1) + DNIDT(2)*ZZ(I,2) + DNIDT(3)*ZZ(I,3)
950 + + DNIDT(4)*ZZ(I,4) + DNIDT(5)*ZZ(I,5) + DNIDT(6)*ZZ(I,6)
951C-----------------------------------------------------------------------
952C -1
953C [J] Inversion du jacobien
954C-----------------------------------------------------------------------
955 DRDX(I)=DYDS(I)*DZDT(I)-DZDS(I)*DYDT(I)
956 DRDY(I)=DZDS(I)*DXDT(I)-DXDS(I)*DZDT(I)
957 DRDZ(I)=DXDS(I)*DYDT(I)-DYDS(I)*DXDT(I)
958C
959 DSDZ(I)=DXDT(I)*DYDR(I)-DYDT(I)*DXDR(I)
960 DSDY(I)=DZDT(I)*DXDR(I)-DXDT(I)*DZDR(I)
961 DSDX(I)=DYDT(I)*DZDR(I)-DZDT(I)*DYDR(I)
962C
963 DTDX(I)=DYDR(I)*DZDS(I)-DZDR(I)*DYDS(I)
964 DTDY(I)=DZDR(I)*DXDS(I)-DXDR(I)*DZDS(I)
965 DTDZ(I)=DXDR(I)*DYDS(I)-DYDR(I)*DXDS(I)
966C
967 DET(I) = DXDR(I) * DRDX(I)
968 . + DYDR(I) * DRDY(I)
969 . + DZDR(I) * DRDZ(I)
970C
971c
972c
973 ENDDO
974C
975 DO I=1,LLT
976C-----------------------------------------------------------------------
977C -1
978C [J] Inversion du jacobien suite
979C-----------------------------------------------------------------------
980 D = ONE/DET(I)
981 DRDX(I)=D*DRDX(I)
982 DSDX(I)=D*DSDX(I)
983 DTDX(I)=D*DTDX(I)
984C
985 DRDY(I)=D*DRDY(I)
986 DSDY(I)=D*DSDY(I)
987 DTDY(I)=D*DTDY(I)
988C
989 DRDZ(I)=D*DRDZ(I)
990 DSDZ(I)=D*DSDZ(I)
991 DTDZ(I)=D*DTDZ(I)
992C
993c
994c print *, "DRDX(I),DRDY(I),DRDZ(I)",DRDX(I),DRDY(I),DRDZ(I)
995c print *, "DSDX(I),DSDY(I),DSDZ(I)",DSDX(I),DSDY(I),DSDZ(I)
996c print *, "DTDX(I),DTDY(I),DTDZ(I)",DTDX(I),DTDY(I),DTDZ(I)
997c
998 ENDDO
999C-----------------------------------------------------------------------
1000 RETURN
1001 END
#define my_real
Definition cppsort.cpp:32
subroutine i10lagm(x, v, lll, jll, sll, xll, candn, cande, i_stok, ixs, ixs10, iadll, eminx, nsv, nelem, n_mul_mx, itask, a, itied, nint, nkmax, comntag)
Definition i10lagm.F:35
subroutine i10lll(llt, lll, jll, sll, xll, v, xx, yy, zz, iii, iadll, n_mul_mx, a, x, itied, nint, nkmax, comntag)
Definition i10lagm.F:214
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
Definition law100_upd.F:272
#define max(a, b)
Definition macros.h:21