1 : C ELLA12 SOURCE CHAT 05/01/12 23:34:04 5004 2 : SUBROUTINE ELLA12(CORRES ,XCL ,FLAG ,NUMERO, CARACT ,COOR, 3 : & MASS ,NMAS ,IRAILO ,VALRAI, NRAIDE , 4 : & NP,NP28,NNT,ZA1,ZSM,ZS,XPI,IMP) 5 : C 6 : C OPERATEUR ELFE LAPLACE ACOU 7 : C 8 : C PROGRAMME APPELE PAR ELLA11 : CALCUL LA DEUXIEME PARTIE DE LA 9 : C MATRICE ZA1 ET DE SECOND MEMBRE ZSM 10 : C 11 : C PARAMETRES : 12 : C 13 : C ENTREE : 14 : C 15 : C CORRES : TABLEAU D'ENTIER DES NUMEROS DES NOEUDS REELS 16 : C POUR CHAQUE NOEUD FICTIF 17 : C XCL : TABLEAU DES VALEURS DES CONDITIONS AUX LIMITES 18 : C FLAG : TABLEAU DE POINTEURS SUR XCL 19 : C NUMERO : TABLEAU DE TRANSFORMATION NUMERO GLOBAL <--> NUMERO LOCAL 20 : C CARACT : TABLEAU DES CARACTERISTIQUES DES POUTRES 21 : C COOR : TABLEAU DES COORDONNEES DES NOEUDS FICTIFS 22 : C 23 : C NP : NOMBRE DE POUTRES 24 : C NNT : NOMBRE DE NOEUDS REELS 25 : C ZS : VALEUR DE S = S0 + I W 26 : C XPI : VALEUR PRECISE DE PI 27 : C 28 : C 29 : C SORTIES : 30 : C 31 : C ZA1 : TABLEAU COMPLEXE REPRESENTANT LA MATRICE DE "RIGIDITE" 32 : C ZSM : VECTEUR COMPLEXE SECOND MEMBRE 33 : C 34 : C 35 : C AUTEURS : SAINT-DIZIER ET GORCY 36 : 37 : C DATE : 29 JANVIER 1991 38 : C MODIFICATION : 26 JUIN 1991 39 : C 40 : C 41 : IMPLICIT INTEGER(I-N) 42 : COMPLEX*16 ZA1,ZSM,ZB,ZI,ZS 43 : REAL*8 XCL,CARACT,COOR,VALRAI,XPI,X1,Y1,Z1,X2,Y2,Z2, 44 : & XI1,XI2,XI3,XL,CSEF,CROF 45 : INTEGER FLAG,CORRES,NUMERO,MASS,IRAILO,J0,JCOLO 46 : C 47 : DIMENSION ZA1(NP28,*),ZSM(*) 48 : DIMENSION XCL(17,*),CARACT(10,*),COOR(3,*),VALRAI(6,*), 49 : & FLAG(*),CORRES(*),NUMERO(*),MASS(4,*),IRAILO(4,*) 50 : C 51 : C REMPLISSAGE DE LA 2EME PARTIE DE ZA1 (INDEPENDANT DE W) 52 : C + 2EME PARTIE DU SECOND MEMBRE 53 : C 54 : J0=0 55 : JCOLO=0 56 : ZI = CMPLX(1.D0,0.D0) 57 : C 58 : IZA1 = 14 * NP + 1 59 : NP2 = 2 * NP 60 : C 61 : C --------------------- CONDITION DE NOEUDS IDENTIQUES 62 : C (CONTINUITE DU DEPLACEMENT ET DE LA PRESSION) 63 : C 64 : DO 10 I = 1 , NNT 65 : C 66 : ITEST = 0 67 : J = 0 68 : C 69 : 11 J = J + 1 70 : C 71 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ITEST.EQ.0)) THEN 72 : J0 = J 73 : ITEST = 1 74 : ELSE IF ((CORRES(J).EQ.NUMERO(I)).AND.(ITEST.EQ.1)) THEN 75 : C 76 : ZA1 (IZA1 , 14*(J0-1)+1 ) = -ZI 77 : ZA1 (IZA1+1 , 14*(J0-1)+2 ) = -ZI 78 : ZA1 (IZA1+2 , 14*(J0-1)+3 ) = -ZI 79 : ZA1 (IZA1+3 , 14*(J0-1)+4 ) = -ZI 80 : ZA1 (IZA1+4 , 14*(J0-1)+5 ) = -ZI 81 : ZA1 (IZA1+5 , 14*(J0-1)+6 ) = -ZI 82 : ZA1 (IZA1+6 , 14*(J0-1)+13) = -ZI 83 : C 84 : ZA1 (IZA1 , 14*(J-1)+1 ) = ZI 85 : ZA1 (IZA1+1 , 14*(J-1)+2 ) = ZI 86 : ZA1 (IZA1+2 , 14*(J-1)+3 ) = ZI 87 : ZA1 (IZA1+3 , 14*(J-1)+4 ) = ZI 88 : ZA1 (IZA1+4 , 14*(J-1)+5 ) = ZI 89 : ZA1 (IZA1+5 , 14*(J-1)+6 ) = ZI 90 : ZA1 (IZA1+6 , 14*(J-1)+13) = ZI 91 : C 92 : C INTRODUCTION DES SOUPLESSES DANS LA MATRICE ZA1 93 : C 94 : IF (NRAIDE.GT.0) THEN 95 : C 96 : DO 15 IM1 = 1 , NRAIDE 97 : C 98 : IF (IRAILO(4,IM1).EQ.2) THEN 99 : C 100 : C COUDE 101 : C 102 : JCOLO=(14*(IRAILO(2,IM1)-1) ) + 7 103 : ELSE IF (IRAILO(4,IM1).EQ.3) THEN 104 : C 105 : C TE 106 : C 107 : JCOLO=(14*(IRAILO(1,IM1)-1) ) + 7 108 : ELSE 109 : IF (IMP.NE.0) THEN 110 : WRITE(IMP,*) 111 : ENDIF 112 : 600 FORMAT(1X,'IL Y A UNE ERREUR') 113 : END IF 114 : C 115 : IF ( (IRAILO(2,IM1).EQ.J0).OR.(IRAILO(1,IM1).EQ.J) ) THEN 116 : C 117 : ZA1 (IZA1 , JCOLO ) = CMPLX( (-1.D0)**IRAILO(4,IM1)/ 118 : & VALRAI(1,IM1) ) 119 : ZA1 (IZA1+1, JCOLO + 1 ) = CMPLX( (-1.D0)**IRAILO(4,IM1)/ 120 : & VALRAI(2,IM1) ) 121 : ZA1 (IZA1+2, JCOLO + 2 ) = CMPLX( (-1.D0)**IRAILO(4,IM1)/ 122 : & VALRAI(3,IM1) ) 123 : ZA1 (IZA1+3, JCOLO + 3 ) = CMPLX( (-1.D0)**IRAILO(4,IM1)/ 124 : & VALRAI(4,IM1) ) 125 : ZA1 (IZA1+4, JCOLO + 4 ) = CMPLX( (-1.D0)**IRAILO(4,IM1)/ 126 : & VALRAI(5,IM1) ) 127 : ZA1 (IZA1+5, JCOLO + 5 ) = CMPLX( (-1.D0)**IRAILO(4,IM1)/ 128 : & VALRAI(6,IM1) ) 129 : 130 : END IF 131 : C 132 : 15 CONTINUE 133 : END IF 134 : C 135 : ZSM ( IZA1+6 ) = CMPLX(XCL ( 13,I)) 136 : C 137 : IZA1 = IZA1 + 7 138 : C 139 : END IF 140 : C 141 : IF (J.NE.NP2) GOTO 11 142 : C 143 : 10 CONTINUE 144 : C 145 : DO 100 I = 1 , NNT 146 : C 147 : C --------------------- CONDITION AUX LIMITES SUR LE DEPLACEMENT 148 : C 149 : IF (FLAG((I-1)*17+1).EQ.I) THEN 150 : C 151 : J = 0 152 : ISTOP = 0 153 : 20 J = J + 1 154 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ISTOP.EQ.0)) THEN 155 : C 156 : ZA1 (IZA1 , 14*(J-1)+1 ) = ZI 157 : ZSM ( IZA1 ) = CMPLX(XCL ( 1,I)) 158 : C 159 : IZA1 = IZA1 + 1 160 : ISTOP = 1 161 : C 162 : END IF 163 : C 164 : IF (J.NE.NP2) GO TO 20 165 : C 166 : END IF 167 : C 168 : IF (FLAG((I-1)*17+2).EQ.I) THEN 169 : C 170 : J = 0 171 : ISTOP = 0 172 : 21 J = J + 1 173 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ISTOP.EQ.0)) THEN 174 : C 175 : ZA1 (IZA1 , 14*(J-1)+2 ) = ZI 176 : ZSM ( IZA1 ) = CMPLX(XCL ( 2,I)) 177 : C 178 : IZA1 = IZA1 + 1 179 : ISTOP = 1 180 : C 181 : END IF 182 : C 183 : IF (J.NE.NP2) GO TO 21 184 : C 185 : END IF 186 : C 187 : C 188 : IF (FLAG((I-1)*17+3).EQ.I) THEN 189 : C 190 : J = 0 191 : ISTOP = 0 192 : 22 J = J + 1 193 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ISTOP.EQ.0)) THEN 194 : C 195 : ZA1 (IZA1 , 14*(J-1)+3 ) = ZI 196 : ZSM ( IZA1 ) = CMPLX(XCL ( 3,I)) 197 : C 198 : IZA1 = IZA1 + 1 199 : ISTOP = 1 200 : C 201 : END IF 202 : C 203 : IF (J.NE.NP2) GO TO 22 204 : C 205 : END IF 206 : C 207 : C --------------------- CONDITION AUX LIMITES SUR LA ROTATION 208 : C 209 : IF (FLAG((I-1)*17+4).EQ.I) THEN 210 : C 211 : J = 0 212 : ISTOP = 0 213 : 30 J = J + 1 214 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ISTOP.EQ.0)) THEN 215 : C 216 : ZA1 (IZA1 , 14*(J-1)+4 ) = ZI 217 : ZSM ( IZA1 ) = CMPLX(XCL ( 4,I)) 218 : C 219 : IZA1 = IZA1 + 1 220 : ISTOP = 1 221 : C 222 : END IF 223 : C 224 : IF (J.NE.NP2) GO TO 30 225 : C 226 : END IF 227 : C 228 : IF (FLAG((I-1)*17+5).EQ.I) THEN 229 : C 230 : J = 0 231 : ISTOP = 0 232 : 31 J = J + 1 233 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ISTOP.EQ.0)) THEN 234 : C 235 : ZA1 (IZA1 , 14*(J-1)+5 ) = ZI 236 : ZSM ( IZA1 ) = CMPLX(XCL ( 5,I)) 237 : C 238 : IZA1 = IZA1 + 1 239 : ISTOP = 1 240 : C 241 : END IF 242 : C 243 : IF (J.NE.NP2) GO TO 31 244 : C 245 : END IF 246 : C 247 : IF (FLAG((I-1)*17+6).EQ.I) THEN 248 : C 249 : J = 0 250 : ISTOP = 0 251 : 32 J = J + 1 252 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ISTOP.EQ.0)) THEN 253 : C 254 : ZA1 (IZA1 , 14*(J-1)+6 ) = ZI 255 : ZSM ( IZA1 ) = CMPLX(XCL ( 6,I)) 256 : C 257 : IZA1 = IZA1 + 1 258 : ISTOP = 1 259 : C 260 : END IF 261 : C 262 : IF (J.NE.NP2) GO TO 32 263 : C 264 : END IF 265 : C 266 : C --------------------- CONDITION AUX LIMITES SUR LA FORCE 267 : C 268 : IF (FLAG((I-1)*17+1).EQ.0) THEN 269 : C 270 : DO 40 J = 1 , 2*NP 271 : IF (CORRES(J).EQ.NUMERO(I)) THEN 272 : C 273 : INP = INT((J+1)/2) 274 : CSEF = XPI * CARACT(4,INP) * CARACT(4,INP) 275 : N1 = 2*INP-1 276 : N2 = 2*INP 277 : X1 = COOR (1,N1) 278 : Y1 = COOR (2,N1) 279 : Z1 = COOR (3,N1) 280 : X2 = COOR (1,N2) 281 : Y2 = COOR (2,N2) 282 : Z2 = COOR (3,N2) 283 : XL = SQRT((X2-X1)**2 + (Y2-Y1)**2 + (Z2-Z1)**2) 284 : C 285 : XI1 = (X2-X1)/XL 286 : IF (J.EQ.N2) THEN 287 : XI1 = -XI1 288 : END IF 289 : C 290 : ZA1 (IZA1 , 14*(J-1)+7 ) = ZI 291 : ZA1 (IZA1 , 14*(J-1)+13) = -CMPLX( CSEF*XI1 ) 292 : C 293 : END IF 294 : 40 CONTINUE 295 : C 296 : ZSM ( IZA1 ) = -CMPLX(XCL(7,I)) 297 : C 298 : IF (NMAS.GT.0) THEN 299 : DO 41 I1 = 1 , NMAS 300 : IF (CORRES(MASS(1,I1)).EQ.NUMERO(I)) THEN 301 : MASS(4,I1) = IZA1 302 : END IF 303 : 41 CONTINUE 304 : END IF 305 : C 306 : IZA1 = IZA1 + 1 307 : C 308 : END IF 309 : C 310 : C 311 : IF (FLAG((I-1)*17+2).EQ.0) THEN 312 : C 313 : DO 42 J = 1 , 2*NP 314 : IF (CORRES(J).EQ.NUMERO(I)) THEN 315 : C 316 : INP = INT((J+1)/2) 317 : CSEF = XPI * CARACT(4,INP) * CARACT(4,INP) 318 : N1 = 2*INP-1 319 : N2 = 2*INP 320 : X1 = COOR (1,N1) 321 : Y1 = COOR (2,N1) 322 : Z1 = COOR (3,N1) 323 : X2 = COOR (1,N2) 324 : Y2 = COOR (2,N2) 325 : Z2 = COOR (3,N2) 326 : XL = SQRT((X2-X1)**2 + (Y2-Y1)**2 + (Z2-Z1)**2) 327 : C 328 : XI2 = (Y2-Y1)/XL 329 : IF (J.EQ.N2) THEN 330 : XI2 = -XI2 331 : END IF 332 : C 333 : ZA1 (IZA1 , 14*(J-1)+8 ) = ZI 334 : ZA1 (IZA1 , 14*(J-1)+13) = -CMPLX( CSEF*XI2 ) 335 : C 336 : END IF 337 : 42 CONTINUE 338 : C 339 : ZSM ( IZA1 ) = -CMPLX(XCL(8,I)) 340 : C 341 : IF (NMAS.GT.0) THEN 342 : DO 43 I1 = 1 , NMAS 343 : IF (CORRES(MASS(1,I1)).EQ.NUMERO(I)) THEN 344 : MASS(4,I1) = IZA1-1 345 : END IF 346 : 43 CONTINUE 347 : END IF 348 : C 349 : IZA1 = IZA1 + 1 350 : C 351 : END IF 352 : C 353 : C 354 : IF (FLAG((I-1)*17+3).EQ.0) THEN 355 : C 356 : DO 44 J = 1 , 2*NP 357 : IF (CORRES(J).EQ.NUMERO(I)) THEN 358 : C 359 : INP = INT((J+1)/2) 360 : CSEF = XPI * CARACT(4,INP) * CARACT(4,INP) 361 : N1 = 2*INP-1 362 : N2 = 2*INP 363 : X1 = COOR (1,N1) 364 : Y1 = COOR (2,N1) 365 : Z1 = COOR (3,N1) 366 : X2 = COOR (1,N2) 367 : Y2 = COOR (2,N2) 368 : Z2 = COOR (3,N2) 369 : XL = SQRT((X2-X1)**2 + (Y2-Y1)**2 + (Z2-Z1)**2) 370 : C 371 : XI3 = (Z2-Z1)/XL 372 : IF (J.EQ.N2) THEN 373 : XI3 = -XI3 374 : END IF 375 : C 376 : ZA1 (IZA1 , 14*(J-1)+9 ) = ZI 377 : ZA1 (IZA1 , 14*(J-1)+13) = -CMPLX( CSEF*XI3 ) 378 : C 379 : END IF 380 : 44 CONTINUE 381 : C 382 : ZSM ( IZA1 ) = -CMPLX(XCL(9,I)) 383 : C 384 : IF (NMAS.GT.0) THEN 385 : DO 45 I1 = 1 , NMAS 386 : IF (CORRES(MASS(1,I1)).EQ.NUMERO(I)) THEN 387 : MASS(4,I1) = IZA1-2 388 : END IF 389 : 45 CONTINUE 390 : END IF 391 : C 392 : IZA1 = IZA1 + 1 393 : C 394 : END IF 395 : C 396 : C --------------------- CONDITION AUX LIMITES SUR LE MOMENT 397 : C 398 : IF (FLAG((I-1)*17+4).EQ.0) THEN 399 : C 400 : DO 50 J = 1 , 2*NP 401 : IF (CORRES(J).EQ.NUMERO(I)) THEN 402 : ZA1 (IZA1 , 14*(J-1)+10) = ZI 403 : END IF 404 : 50 CONTINUE 405 : C 406 : ZSM ( IZA1 ) = -CMPLX(XCL(10,I)) 407 : C 408 : IF (NMAS.GT.0) THEN 409 : DO 51 I1 = 1 , NMAS 410 : IF (CORRES(MASS(1,I1)).EQ.NUMERO(I)) THEN 411 : MASS(4,I1) = IZA1-3 412 : END IF 413 : 51 CONTINUE 414 : END IF 415 : C 416 : IZA1 = IZA1 + 1 417 : C 418 : END IF 419 : C 420 : C 421 : IF (FLAG((I-1)*17+5).EQ.0) THEN 422 : C 423 : DO 52 J = 1 , 2*NP 424 : IF (CORRES(J).EQ.NUMERO(I)) THEN 425 : ZA1 (IZA1 , 14*(J-1)+11) = ZI 426 : END IF 427 : 52 CONTINUE 428 : C 429 : ZSM ( IZA1 ) = -CMPLX(XCL(11,I)) 430 : C 431 : IF (NMAS.GT.0) THEN 432 : DO 53 I1 = 1 , NMAS 433 : IF (CORRES(MASS(1,I1)).EQ.NUMERO(I)) THEN 434 : MASS(4,I1) = IZA1-4 435 : END IF 436 : 53 CONTINUE 437 : END IF 438 : C 439 : IZA1 = IZA1 + 1 440 : C 441 : END IF 442 : C 443 : C 444 : IF (FLAG((I-1)*17+6).EQ.0) THEN 445 : C 446 : DO 54 J = 1 , 2*NP 447 : IF (CORRES(J).EQ.NUMERO(I)) THEN 448 : ZA1 (IZA1 , 14*(J-1)+12) = ZI 449 : END IF 450 : 54 CONTINUE 451 : C 452 : ZSM ( IZA1 ) = -CMPLX(XCL(12,I)) 453 : C 454 : IF (NMAS.GT.0) THEN 455 : DO 55 I1 = 1 , NMAS 456 : IF (CORRES(MASS(1,I1)).EQ.NUMERO(I)) THEN 457 : MASS(4,I1) = IZA1-5 458 : END IF 459 : 55 CONTINUE 460 : END IF 461 : C 462 : IZA1 = IZA1 + 1 463 : C 464 : END IF 465 : C 466 : C--------------------- CONDITION AUX LIMITES SUR LE DEBIT 467 : C 468 : IF (FLAG((I-1)*17+15).EQ.0) THEN 469 : C 470 : DO 60 J = 1 , 2*NP 471 : IF (CORRES(J).EQ.NUMERO(I)) THEN 472 : C 473 : INP = INT((J+1)/2) 474 : CSEF = XPI * CARACT(4,INP) * CARACT(4,INP) 475 : CROF = CARACT(9,INP) 476 : N1 = 2*INP-1 477 : N2 = 2*INP 478 : X1 = COOR (1,N1) 479 : Y1 = COOR (2,N1) 480 : Z1 = COOR (3,N1) 481 : X2 = COOR (1,N2) 482 : Y2 = COOR (2,N2) 483 : Z2 = COOR (3,N2) 484 : XL = SQRT((X2-X1)**2 + (Y2-Y1)**2 + (Z2-Z1)**2) 485 : C 486 : XI1 = (X2-X1)/XL 487 : XI2 = (Y2-Y1)/XL 488 : XI3 = (Z2-Z1)/XL 489 : IF (J.EQ.N2) THEN 490 : XI1 = -XI1 491 : XI2 = -XI2 492 : XI3 = -XI3 493 : END IF 494 : C 495 : ZA1 (IZA1 , 14*(J-1)+14) = ZI 496 : IF (J.EQ.N2) ZA1 (IZA1 , 14*(J-1)+14) = -ZI 497 : ZA1 (IZA1 , 14*(J-1)+1) = -ZS * ( CROF*CSEF*XI1 ) 498 : ZA1 (IZA1 , 14*(J-1)+2) = -ZS * ( CROF*CSEF*XI2 ) 499 : ZA1 (IZA1 , 14*(J-1)+3) = -ZS * ( CROF*CSEF*XI3 ) 500 : C 501 : END IF 502 : C 503 : 60 CONTINUE 504 : C 505 : ZSM (IZA1 ) = CMPLX(XCL(14,I)) 506 : C 507 : IZA1 =IZA1 + 1 508 : END IF 509 : C 510 : C--------------------- CONDITION AUX LIMITES D'IMPEDANCE ACOUSTIQUE 511 : C 512 : IF (FLAG((I-1)*17+15).EQ.I) THEN 513 : C 514 : ISTOP = 0 515 : J = 0 516 : C 517 : 70 J = J + 1 518 : IF ((CORRES(J).EQ.NUMERO(I)).AND.(ISTOP.EQ.0)) THEN 519 : 520 : C 521 : INP = INT((J+1)/2) 522 : CSEF = XPI * CARACT(4,INP) * CARACT(4,INP) 523 : CROF = CARACT(9,INP) 524 : N1 = 2*INP-1 525 : N2 = 2*INP 526 : X1 = COOR (1,N1) 527 : Y1 = COOR (2,N1) 528 : Z1 = COOR (3,N1) 529 : X2 = COOR (1,N2) 530 : Y2 = COOR (2,N2) 531 : Z2 = COOR (3,N2) 532 : XL = SQRT((X2-X1)**2 + (Y2-Y1)**2 + (Z2-Z1)**2) 533 : C 534 : XI1 = (X2-X1)/XL 535 : XI2 = (Y2-Y1)/XL 536 : XI3 = (Z2-Z1)/XL 537 : C 538 : ZA1 (IZA1 , 14*(J-1)+13 ) = CMPLX(XCL (15,I)) 539 : C 540 : ZB = CMPLX(XCL (16,I)) 541 : ZA1 (IZA1 , 14*(J-1)+14) = ZB 542 : ZA1 (IZA1 , 14*(J-1)+1) = -ZS * ( CROF*CSEF*XI1 )* ZB 543 : ZA1 (IZA1 , 14*(J-1)+2) = -ZS * ( CROF*CSEF*XI2 )* ZB 544 : ZA1 (IZA1 , 14*(J-1)+3) = -ZS * ( CROF*CSEF*XI3 )* ZB 545 : C 546 : ZSM ( IZA1 ) = CMPLX(XCL (17,I)) 547 : C 548 : IZA1 = IZA1+1 549 : ISTOP = 1 550 : END IF 551 : C 552 : IF (J.NE.NP2) GO TO 70 553 : C 554 : END IF 555 : C 556 : 100 CONTINUE 557 : C 558 : RETURN 559 : 560 : END 561 : 562 :
© Cast3M 2003 - All rights reserved.
Disclaimer