1 : C D2VLFA SOURCE CHAT 05/01/12 22:35:41 5004
2 : C DEVLFA SOURCE IANIS 96/08/08 21:15:06 2249
3 : SUBROUTINE D2VLFA(Q1,Q2,FTOTA,XM,NA1,IPALA,IPLIA,XPALA,XVALA,
4 : & NLIAA,XDT,NPAS,IND,FINERT,IVINIT,FTEST,FTOTA0)
5 : IMPLICIT INTEGER(I-N)
6 : IMPLICIT REAL*8(A-H,O-Z)
7 : *--------------------------------------------------------------------*
8 : * *
9 : * Operateur DYNE : algorithme de Fu - de Vogelaere *
10 : * ________________________________________________ *
11 : * *
12 : * Calcul des forces de choc base A. *
13 : * *
14 : * Param}tres: *
15 : * *
16 : * e Q1(.,.) Vecteur des deplacements generalises. *
17 : * e Q2(.,.) Vecteur des vitesses generalisees. *
18 : * es FTOTA Forces ext{rieures totalis{es sur la base A. *
19 : * e XM Vecteur des masses g{n{ralis{es. *
20 : * e NA1 Nombre total d'inconnues en base A. *
21 : * e IPALA Renseigne sur le type de la liaison. *
22 : * e IPLIA Tableau contenant les num{ros "DYNE" de la liaison. *
23 : * e XPALA Tableau contenant les param}tres de la liaison. *
24 : * es XVALA Tableau contenant les variables internes des liaisons *
25 : * e NLIAA Nombre de liaisons sur la base A. *
26 : * e XDT Valeurs des pas de temps *
27 : * e NPAS Numero du pas de temps *
28 : * e IND Indice du demi-pas de temps *
29 : * = 2 si 1er demi-pas = 1 si 2eme demi-pas *
30 : * es FINERT Forces d'inertie *
31 : * e IVINIT =1 si vitesses initiales, =0 sinon *
32 : * *
33 : * Auteur, date de cr{ation: *
34 : * *
35 : * Lionel VIVAN, le 20 aout 1989. *
36 : * E. de LANGRE, 15 fevrier 91 correction jeu negatif *
37 : * Lionel VIVAN, 12 mars 1991 ajout de la liaison FLUIDE *
38 : * Denis ROBERT, 30 avril 1992 ajout liaison POLYNOMIALE *
39 : * *
40 : * remarque: *
41 : * ========= *
42 : * Si jeu n{gatif (cas particulier de la base A ou il n'y a pas de *
43 : * normale), on renverse les variables avec XNORM. *
44 : * *
45 : *--------------------------------------------------------------------*
46 : *
47 : INTEGER IPALA(NLIAA,*),IPLIA(NLIAA,*)
48 : REAL*8 XPALA(NLIAA,*),Q1(NA1,*),Q2(NA1,*),FTOTA(NA1,*),XM(*)
49 : REAL*8 XVALA(NLIAA,4,*),XDT(*),FINERT(NA1,*)
50 : PARAMETER (XZERO = 0.D0)
51 : REAL*8 FTest(nA1,4)
52 : REAL*8 ftOTa0(NA1,4)
53 : *
54 : * Boucle sur le nombre de liaisons
55 : *
56 : XFIN = 0.D0
57 : PDT = XDT(NPAS)
58 :
59 : c PDTS2 = 0.5D0 * PDT
60 : pdts2 = pdt
61 :
62 : DO 10 I = 1,NLIAA
63 : ITYP = IPALA(I,1)
64 : icond= IPALa(I,2)
65 : iannul= 0
66 : * --- cas des liaisons conditionnelles
67 : if (icond .eq. 1 ) then
68 : DO 101 j = 4,20
69 : jliai = ipala(i,j)
70 : jpliai = abs ( jliai)
71 : if ( jliai . EQ. 0 ) then
72 : goto 101
73 : else
74 : jtyp = ipala(jpliai,1)
75 : do 102 ik = 1,nA1
76 : do 103 jk = 1,4
77 : ftest(ik,jk) = 0d0
78 : ftota0 (ik,jk) = ftota(ik,jk)
79 : 103 continue
80 : 102 continue
81 : * CALCUL DES LIAISONS POUR TEST
82 : *
83 : * ****** choc {l{mentaire POINT_PLAN sans amortissement
84 : *
85 : IF (JTYP.EQ.1) THEN
86 : XRAID = XPALA(jpliai,1)
87 : XJEU = XPALA(jpliai,2)
88 : XNORM = 1.
89 : IF (XJEU.LT.0D0) THEN
90 : XNORM = -1.
91 : XJEU = -1*XJEU
92 : ENDIF
93 : INA1 = IPLIA(jpliai,1)
94 : XDEP = XNORM*Q1(INA1,IND)
94 : CALL DYCHEL(XDEP,XRAID,XJEU, XFL,iannul)
95 : XVALA(jpliai,IND,1) = XNORM*XFL
96 : XVALA(jpliai,IND,4) = XNORM*XDEP
97 : FTest(INA1,IND) =Ftest(INA1,IND) + XNORM*XFL
98 : *
99 : * ------ choc {l{mentaire POINT_PLAN avec amortissement
100 : *
101 : ELSE IF (JTYP.EQ.2) THEN
102 : XRAID = XPALA(jpliai,1)
103 : XJEU = XPALA(jpliai,2)
104 : XAMO = XPALA(jpliai,3)
105 : XNORM = 1.
106 : IPERM = 0
107 : IF (XJEU.LT.XZERO) THEN
108 : XNORM = -1.
109 : XJEU = -1*XJEU
110 : ENDIF
111 : INA1 = IPLIA(jpliai,1)
112 : XDEP = XNORM * Q1(INA1,IND)
113 : IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN
114 : XVIT = XNORM * Q2(INA1,IND)
115 : ELSE
116 : IND2 = IND + 1
117 : XDEPM1 = XNORM * Q1(INA1,IND2)
118 : XVIT = (XDEP - XDEPM1) / PDTS2
119 : ENDIF
120 : XVALA(jpliai,IND,3) = XNORM*XVIT
120 : CALL DYCHAM(XDEP,XVIT,XRAID,XJEU,XAMO,XFL,IPERM,iannul)
121 : *+*
122 : IF (XDEP.GT.0.D0 .AND. XFL.GT.0.D0) XFL = 0.D0
123 : IF (XDEP.LT.0.D0 .AND. XFL.LT.0.D0) XFL = 0.D0
124 : *+*
125 : XVALA(jpliai,IND,1) = XNORM*XFL
126 : XVALA(jpliai,IND,4) = XNORM*XDEP
127 : FTest(INA1,IND) =Ftest(INA1,IND) + XNORM*XFL
128 : *
129 : * ------ choc {l{mentaire POINT_PLAN_FLUIDE
130 : *
131 : ELSE IF (JTYP.EQ.3) THEN
132 : XINER = XPALA(jpliai,1)
133 : XCONV = XPALA(jpliai,2)
134 : XVISC = XPALA(jpliai,3)
135 : XPCEL = XPALA(jpliai,4)
136 : XPCRA = XPALA(jpliai,5)
137 : XJEU = XPALA(jpliai,6)
138 : INA1 = IPLIA(jpliai,1)
139 : XDEP = Q1(INA1,IND)
140 : IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN
141 : XVIT = Q2(INA1,IND)
142 : ELSE
143 : IND2 = IND + 1
144 : XDEPM1 = Q1(INA1,IND2)
145 : XVIT = (XDEP - XDEPM1) / PDTS2
146 : ENDIF
147 : IF (XJEU.GT.0D0) THEN
148 : XDH= XJEU - XDEP
149 : XNORM = 1.
150 : ELSE
151 : XDH= XDEP - XJEU
152 : XNORM = -1.
153 : ENDIF
154 : * Calcul de la masse ajout{e
155 : XXIN = -XINER / XDH
156 : FINERT(INA1,IND) = FINERT(INA1,IND) + XXIN
157 : * Calcul de la force de convection
157 : CALL DYFCON(XDH,XDEP,XVIT,XJEU,XCONV,XFCO,iannul)
158 : * Calcul de la force de viscosit{
158 : CALL DYFVIS(XDH,XDEP,XVIT,XJEU,XVISC,XFVI,iannul)
159 : * Calcul de la force de perte de charge
159 : CALL DYFPDC(XDH,XDEP,XVIT,XJEU,XPCEL,XPCRA,XFPE,iannul)
160 : XFL = (XFCO* XNORM ) + XFVI + XFPE
161 : XVALA(jpliai,IND,1) = XDEP
162 : XVALA(jpliai,IND,2) = XVIT
163 : XVALA(jpliai,IND,3) = XXIN
164 : XVALA(jpliai,IND,4) = XFCO*XNORM
165 : XVALA(jpliai,IND,5) = XFVI
166 : XVALA(jpliai,IND,6) = XFPE
167 : FTest(INA1,IND) =Ftest(iNA1,IND) + XFL
168 : *
169 : * ------ force {l{mentaire de COUPLAGE EN VITESSE
170 : *
171 : ELSE IF (JTYP.EQ.4) THEN
172 : INA1 = IPLIA(jpliai,1)
173 : INA2 = IPLIA(jpliai,2)
174 : XDEP = Q1(INA2,IND)
175 : IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN
176 : XVIT = Q2(INA2,IND)
177 : ELSE
178 : IND2 = IND + 1
179 : XDEPM1 = Q1(INA2,IND2)
180 : XVIT = (XDEP - XDEPM1) / PDTS2
181 : ENDIF
182 : XCPLGE = XPALA(jpliai,1)
182 : CALL DYCPLV(XVIT,XCPLGE,XFL,iannul)
183 : XVALA(jpliai,IND,3) = XVIT
184 : XVALA(jpliai,IND,1) = XFL
185 : XVALA(jpliai,IND,4) = XDEP
186 : FTest(INA1,IND) =Ftest(INA1,IND) + XFL
187 : *
188 : * ------ force {l{mentaire de COUPLAGE EN DEPLACEMENT
189 : *
190 : ELSE IF (JTYP.EQ.5) THEN
191 : INA1 = IPLIA(jpliai,1)
192 : INA2 = IPLIA(jpliai,2)
193 : XDEP = Q1(INA2,IND)
194 : XCPLGE = XPALA(jpliai,1)
194 : CALL DYCPLD(XDEP,XCPLGE,XFL,iannul)
195 : XVALA(jpliai,IND,1) = XFL
196 : XVALA(jpliai,IND,4) = XDEP
197 : FTest(INA1,IND) =Ftest(INA1,IND) + XFL
198 : *
199 : * ------ force elementaire de type POLYNOMIALE
200 : *
201 : ELSE IF (JTYP.EQ.6) THEN
202 : * WRITE(IOIMP,*)'DEVLFA : IPLIA(',jpliai,'1)=',IPLIA(jpliai,1)
203 : * nombre de modes "origine"
204 : NMOD = IPALA(I,2)
204 : CALL D2POL1(Q1,Q2,NA1,IPLIA,XPALA,XVALA,NLIAA,IND,XDT,
205 : & NPAS,jpliai,NMOD,FTest,IVINIT,iannul)
206 : *
207 : * ------ choc {l{mentaire ...
208 : *
209 : * ELSE IF (JTYP.EQ. ) THEN
210 : * .......
211 : * .......
212 : *
213 : ENDIF
214 : ***** tests pour voir si on annulera
215 : xff = 0d0
216 : do 104 ik = 1,na1
217 : do 105 jk = 1,4
218 : xff = xff + ( ftest(ik,jk) ** 2)
219 : 105 continue
220 : 104 continue
221 : xff = xff ** .5
222 : if ( ((xff .le. 1e-20 ) .and. ( jliai .gt. 0) )
223 : & .OR. ((xff .gt. 1e-20 ) .and. ( jliai .lt. 0) ) )
224 : & then
225 : iannul = 1
226 : endif
227 : endif
228 : 101 continue
229 : * --- fin du cas des liaisons conditionnelles
230 : endif
231 : *
232 : * ------ choc {l{mentaire POINT_PLAN sans amortissement
233 : *
234 : IF (ITYP.EQ.1) THEN
235 : XRAID = XPALA(I,1)
236 : XJEU = XPALA(I,2)
237 : XNORM = 1.
238 : IF (XJEU.LT.0D0) THEN
239 : XNORM = -1.
240 : XJEU = -1*XJEU
241 : ENDIF
242 : INA1 = IPLIA(I,1)
243 : XDEP = XNORM*Q1(INA1,IND)
243 : CALL DYCHEL(XDEP,XRAID,XJEU, XFL,iannul)
244 : XVALA(I,IND,1) = XNORM*XFL
245 : XVALA(I,IND,4) = XNORM*XDEP
246 : FTOTA(INA1,IND) = FTOTA(INA1,IND) + XNORM*XFL
247 : *
248 : * ------ choc {l{mentaire POINT_PLAN avec amortissement
249 : *
250 : ELSE IF (ITYP.EQ.2) THEN
251 : XRAID = XPALA(I,1)
252 : XJEU = XPALA(I,2)
253 : XAMO = XPALA(I,3)
254 : IPERM = 0
255 : XNORM = 1.
256 : IF (XJEU.LT.XZERO) THEN
257 : XNORM = -1.
258 : XJEU = -1*XJEU
259 : ENDIF
260 : INA1 = IPLIA(I,1)
261 : XDEP = XNORM * Q1(INA1,IND)
262 : IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN
263 : XVIT = XNORM * Q2(INA1,IND)
264 : ELSE
265 : IND2 = IND + 1
266 : XDEPM1 = XNORM * Q1(INA1,IND2)
267 : XVIT = (XDEP - XDEPM1) / PDTS2
268 : ENDIF
269 : XVALA(I,IND,3) = XNORM*XVIT
269 : CALL DYCHAM(XDEP,XVIT,XRAID,XJEU,XAMO,XFL,IPERM,iannul)
270 : *+*
271 : IF (XDEP.GT.0.D0 .AND. XFL.GT.0.D0) XFL = 0.D0
272 : IF (XDEP.LT.0.D0 .AND. XFL.LT.0.D0) XFL = 0.D0
273 : *+*
274 : XVALA(I,IND,1) = XNORM*XFL
275 : XVALA(I,IND,4) = XNORM*XDEP
276 : FTOTA(INA1,IND) = FTOTA(INA1,IND) + XNORM*XFL
277 : *
278 : * ------ choc {l{mentaire POINT_PLAN_FLUIDE
279 : *
280 : ELSE IF (ITYP.EQ.3) THEN
281 : XINER = XPALA(I,1)
282 : XCONV = XPALA(I,2)
283 : XVISC = XPALA(I,3)
284 : XPCEL = XPALA(I,4)
285 : XPCRA = XPALA(I,5)
286 : XJEU = XPALA(I,6)
287 : INA1 = IPLIA(I,1)
288 : XDEP = Q1(INA1,IND)
289 : IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN
290 : XVIT = Q2(INA1,IND)
291 : ELSE
292 : IND2 = IND + 1
293 : XDEPM1 = Q1(INA1,IND2)
294 : XVIT = (XDEP - XDEPM1) / PDTS2
295 : ENDIF
296 : IF (XJEU.GT.0D0) THEN
297 : XDH= XJEU - XDEP
298 : XNORM = 1.
299 : ELSE
300 : XDH= XDEP - XJEU
301 : XNORM = -1.
302 : ENDIF
303 : * Calcul de la masse ajout{e
304 : XXIN = -XINER / XDH
305 : FINERT(INA1,IND) = FINERT(INA1,IND) + XXIN
306 : * Calcul de la force de convection
306 : CALL DYFCON(XDH,XDEP,XVIT,XJEU,XCONV,XFCO,iannul)
307 : * Calcul de la force de viscosit{
307 : CALL DYFVIS(XDH,XDEP,XVIT,XJEU,XVISC,XFVI,iannul)
308 : * Calcul de la force de perte de charge
308 : CALL DYFPDC(XDH,XDEP,XVIT,XJEU,XPCEL,XPCRA,XFPE,
309 : & iannul)
310 : XFL = (XFCO* XNORM ) + XFVI + XFPE
311 : XVALA(I,IND,1) = XDEP
312 : XVALA(I,IND,2) = XVIT
313 : XVALA(I,IND,3) = XXIN
314 : XVALA(I,IND,4) = XFCO*XNORM
315 : XVALA(I,IND,5) = XFVI
316 : XVALA(I,IND,6) = XFPE
317 : FTOTA(INA1,IND) = FTOTA(INA1,IND) + XFL
318 : *
319 : * ------ force {l{mentaire de COUPLAGE EN VITESSE
320 : *
321 : ELSE IF (ITYP.EQ.4) THEN
322 : INA1 = IPLIA(I,1)
323 : INA2 = IPLIA(I,2)
324 : XDEP = Q1(INA2,IND)
325 : IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN
326 : XVIT = Q2(INA2,IND)
327 : ELSE
328 : IND2 = IND + 1
329 : XDEPM1 = Q1(INA2,IND2)
330 : XVIT = (XDEP - XDEPM1) / PDTS2
331 : ENDIF
332 : XCPLGE = XPALA(I,1)
332 : CALL DYCPLV(XVIT,XCPLGE,XFL,iannul)
333 : XVALA(I,IND,3) = XVIT
334 : XVALA(I,IND,1) = XFL
335 : XVALA(I,IND,4) = XDEP
336 : FTOTA(INA1,IND) = FTOTA(INA1,IND) + XFL
337 : *
338 : * ------ force {l{mentaire de COUPLAGE EN DEPLACEMENT
339 : *
340 : ELSE IF (ITYP.EQ.5) THEN
341 : INA1 = IPLIA(I,1)
342 : INA2 = IPLIA(I,2)
343 : XDEP = Q1(INA2,IND)
344 : XCPLGE = XPALA(I,1)
344 : CALL DYCPLD(XDEP,XCPLGE,XFL,iannul)
345 : XVALA(I,IND,1) = XFL
346 : XVALA(I,IND,4) = XDEP
347 : FTOTA(INA1,IND) = FTOTA(INA1,IND) + XFL
348 : *
349 : * ------ force elementaire de type POLYNOMIALE
350 : *
351 : ELSE IF (ITYP.EQ.6) THEN
352 : * WRITE(IOIMP,*)'DEVLFA : IPLIA(',I,'1)=',IPLIA(I,1)
353 : * nombre de modes "origine"
354 : NMOD = IPALA(I,2)
354 : CALL D2POL1(Q1,Q2,NA1,IPLIA,XPALA,XVALA,NLIAA,IND,XDT,
355 : & NPAS,I,NMOD,FTOTA,IVINIT,iannul)
356 : *
357 : * ------ choc {l{mentaire ...
358 : *
359 : * ELSE IF (ITYP.EQ. ) THEN
360 : * .......
361 : * .......
362 : *
363 : ENDIF
364 :
365 :
366 : *
367 : * la suite n'est plus utile car on passe iannul aux s_p de calcul des
368 : * forces de liaisons.
369 :
370 : * si la liaisn était annulée on l'annule
371 : * if ( ( icond.eq. 1 ) .and. ( iannul.eq.1)) then
372 : * on annulle l'increment de ftotb
373 : * do 112 ik = 1,na1
374 : * do 113 jk = 1,4
375 : * ftota (ik,jk) = ftota0(ik,jk)
376 : * 113 continue
377 : * 112 continue
378 :
379 : * end if
380 : 10 CONTINUE
381 : * END DO
382 : *
383 : END
384 :
385 :
386 :
387 :
388 :
389 :
© Cast3M 2003 - All rights reserved.
Disclaimer