Download d2vlfa.eso

Back to the list

   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