1 : C ELFLIA SOURCE AM 08/02/14 21:21:19 6050 2 : SUBROUTINE ELFLIA(MATTAC,KANBN,KNREFE,KOMALI,EPS) 3 : IMPLICIT INTEGER(I-N) 4 : IMPLICIT REAL*8(A-H,O-Z) 5 : C 6 : C ==================================================================== 7 : C = APPELE PAR ELFE = 8 : C = TRAITEMENT DES LIAISONS ENTRE SOUS-STRUCTURES = 9 : C = POUR LIAISONS MECANIQUES PERMANENTES : = 10 : C = 1 MSOUMA -> 1 MATRICE A INVERSER = 11 : C = CREATION 11/04/86 = 12 : C = PROGRAMMEUR : GUILBAUD = 13 : C ==================================================================== 14 : C 15 : -INC CCOPTIO 16 : -INC CCHAMP 17 : -INC SMATTAC 18 : -INC SMELEME 19 : -INC SMCHPOI 20 : -INC SMCOORD 21 : C 22 : SEGMENT MANBN 23 : POINTEUR KAB(NSGA).ANBN 24 : ENDSEGMENT 25 : C 26 : C NSGA : NOMBRE DE BLOCS ANBN 27 : C 28 : SEGMENT ANBN 29 : REAL*8 AB(NTANBN,LANBN) 30 : ENDSEGMENT 31 : C 32 : C AB(I,K) : TERME I DE LA MATRICE A OU B D'UN ELEMENT AU TEMPS K 33 : C NTANBN : NOMBRE DE TERMES DES MATRICES A ET B DE TOUS LES ELEMENTS 34 : C LANBN : NOMBRE DE PAS DE TEMPS STOCKES DANS UN BLOC ANBN 35 : C 36 : C 37 : SEGMENT ICPR(XCOOR(/1)/(IDIM+1)) 38 : C 39 : C IKID=ICPR(NUM(I,J))+K 40 : C LA COMPOSANTE NOMD(K) DU POINT NUM EST LE IKID-IEME DDL DE DNCN 41 : C 42 : SEGMENT ICPR2(NIDNCN) 43 : C 44 : C NJ=ICPR2(IKID) : LE IKID-IEME DDL DE DNCN EST LE NJ-IEME DANS 45 : C L'ENSEMBLE DES XLIAI MIS BOUT-A-BOUT 46 : C 47 : SEGMENT ICPR1(NBPT) 48 : C 49 : SEGMENT MOMALI 50 : POINTEUR NOMALI(NBLIPE).MALIAI 51 : POINTEUR KCPR2.ICPR2 52 : ENDSEGMENT 53 : C 54 : SEGMENT MALIAI 55 : REAL*8 ALIA1(NALI) 56 : REAL*8 ALIA2(NBLI) 57 : REAL*8 ALIA3(NL/2,NL/2) 58 : REAL*8 ALIA4(NL/2,NL/2) 59 : REAL*8 BLIAI(NL) 60 : REAL*8 XLIAI(NL) 61 : INTEGER NLBLI(2,NBSTLI) 62 : INTEGER NDCLIA(NL) 63 : INTEGER NVNLIA(NL/2) 64 : INTEGER IBCHA(NCHAL) 65 : POINTEUR KWLIAI.MWLIAI 66 : POINTEUR KLIMAS.MLIMAS 67 : ENDSEGMENT 68 : C 69 : C MATRICE DE LIAISON PUIS SON INVERSE EN 4 BLOCS: 70 : C ALIA1 : MATRICE BANDE I-A0 71 : C -1 72 : C ALIA2 : MATRICE BANDE -B0 73 : C ALIA3 : MATRICE DE LIAISON TERMES EN DEPLACEMENT 74 : C ALIA4 : MATRICE DE LIAISON TERMES EN CONTRAINTE 75 : C NLBLI : TABLEAU DE CORRESPONDANCE ENTRE LES BLOCS 76 : C BLIAI : VECTEUR SECOND MEMBRE -> VN ET CHARGEMENT EVENTUEL 77 : C XLIAI : VECTEUR PREMIER MEMBRE -> DNCN 78 : C NDCLIA(NJC)=IKID : LA NJC-IEME INCONNUE DE XLIAI EST LE IKID-IEME 79 : C DDL DE DNCN 80 : C DNCN(IKID) <- XLIAI(NJC) 81 : C NVNLIA(NJL)=IKIV : LA NJL-IEME INCONNUE DE BLIAI EST LE IKIV-IEME 82 : C DDL DE VN 83 : C BLIAI(NJL) <- VN(IKIV) 84 : C NCHAL : NOMBRE DE SOUS-CHARGEMENTS AGISSANT SUR LA LIAISON 85 : C IBCHA(I)=K : LA PARTIE CHARGEMENT DE BLIAI POUR LE I-IEME SOUS- 86 : C CHARGEMENT SE TROUVE A PARTIR DE LA K+1-IEME PLACE DANS BCHAR2 87 : C BLIAI(NL/2+NJL) <- BCHAR2(K+NJL) 88 : C 89 : SEGMENT MLIMAS 90 : REAL*8 BLIMAS(2,NJON) 91 : REAL*8 ALIMAS(LIM,NJON) 92 : INTEGER NLIMAS(LIM) 93 : ENDSEGMENT 94 : C 95 : C SEGMENT POUR LE CALCUL DE L'ACCELERATION DU CENTRE DE GRAVITE DE 96 : C L'ELEMENT RIGIDE DE LIAISON 97 : C BLIMAS(1,I) <--- DC(NDCLIA(I),N-1) 98 : C BLIMAS(2,I) <--- DC(NDCLIA(I),N-2) 99 : C NLIMAS(J)=K : BLIAI(NL+K)=-2*C(I,K)*BLIMAS(1,I)+C(I,K)*BLIMAS(2,I 100 : C 101 : SEGMENT MWLIAI 102 : REAL*8 ALIAI(NL/2,NL) 103 : ENDSEGMENT 104 : C 105 : SEGMENT MNREFE 106 : INTEGER NREFE(8,NSTR) 107 : INTEGER NTANBN 108 : INTEGER NIDNCN 109 : INTEGER NTVN 110 : POINTEUR NREPA.MPASS 111 : POINTEUR NRECA.MCARA 112 : POINTEUR NRENO.MNORM 113 : POINTEUR NRECPR.ICPR 114 : POINTEUR NREMEL.MELEME 115 : POINTEUR NREDEN.MDEN 116 : ENDSEGMENT 117 : C 118 : C NSTR : NOMBRE D'ELEMENTS 119 : C NREFE(1,I) : MELEME 120 : C NREFE(2,I) : MSOSTU 121 : C NREFE(3,I) : TYPE DE L'ELEMENT 122 : C NREFE(4,I) : NOMBRE DE POINTS DU MELEME 123 : C NREFE(5,I) : NOMBRE DE DDL PAR POINT 124 : C NREFE(6,I)=IVN :LE 1ER DDL DE L'ELEMENT EST LE IVN+1 IEME DE VN 125 : C NREFE(7,I)=IAN :LE 1ER TERME DE LA MATRICE A EST LE IAN IEME DE ANBN 126 : C NREFE(8,I)= 1 :LE IEME ELEMENT EST RIGIDE (OU PARTIELLEMENT) SINON 0 127 : C NTANBN : NOMBRE DE TERMES DES MATRICES A ET B POUR TOUS LES ELEMENTS 128 : C NIDNCN : NOMBRE TOTAL D'INCONNUES DE DNCN 129 : C NTVN : LONGUEUR DU TABLEAU VN 130 : C 131 : SEGMENT MPASS 132 : REAL*8 PASS(9*NSTR) 133 : ENDSEGMENT 134 : C 135 : C PASS(9) : MATRICE DE CHANGEMENT DE REPERE POUR L'ELEMENT I 136 : C 137 : SEGMENT MNORM 138 : REAL*8 DNORM(LNORM) 139 : ENDSEGMENT 140 : C 141 : C DNORM : VECTEUR DE NORMALISATION 142 : C 143 : SEGMENT ITRAV(NSTR) 144 : C 145 : SEGMENT/MTRAV/(BT(NJON,NJON),IS(NJON)) 146 : C 147 : DIMENSION AA(3),BB(3) 148 : CHARACTER*4 NOMC 149 : DATA L6/6/,L12/12/ 150 : WRITE(IOIMP,*) ' DEBUT DE ELFLIA ' 151 : MANBN=KANBN 152 : ANBN=KAB(1) 153 : SEGACT ANBN 154 : SEGACT MATTAC 155 : MNREFE=KNREFE 156 : MNORM=NRENO 157 : MPASS=NREPA 158 : MELEME=NREMEL 159 : NBPT=NUM(/2) 160 : SEGINI ICPR1,ICPR2 161 : NSTR=NREFE(/2) 162 : ICPR=NRECPR 163 : SEGINI ITRAV 164 : NSOUMA=LISATT(/1) 165 : NBLIPE=NSOUMA 166 : SEGINI MOMALI 167 : KCPR2=ICPR2 168 : NBLIP=0 169 : NDECA=0 170 : NCHAL=0 171 : DO 400 NSOU=1,NSOUMA 172 : DO 10 L=1,NBPT 173 : ICPR1(L)=0 174 : 10 CONTINUE 175 : MSOUMA=LISATT(NSOU) 176 : SEGACT MSOUMA 177 : NJON=IATREL(/1) 178 : NJON6=NJON/L6 179 : NL=2*NJON 180 : SEGINI MWLIAI 181 : NALI=0 182 : NBLI=0 183 : NBSTLI=0 184 : SEGINI MALIAI 185 : KWLIAI=MWLIAI 186 : NBLIP=NBLIP+1 187 : NOMALI(NBLIP)=MALIAI 188 : NJP=0 189 : LIMM=0 190 : KLIMAS=0 191 : DO 290 NJ=1,NJON 192 : MJONCT=IATREL(NJ) 193 : SEGACT MJONCT 194 : NSTRU=ISTRJO(/1) 195 : DO 280 NST=1,NSTRU 196 : MCHPOI=IPCHJO(NST) 197 : C 198 : C RECHERCHE DES STRUCTURES QUI INTERVIENNENT DANS LA LIAISON MSOUMA 199 : C 200 : MSOSTU=ISTRJO(NST) 201 : DO 110 NF=1,NSTR 202 : IF(NREFE(2,NF).EQ.MSOSTU) THEN 203 : IF(NBSTLI.NE.0) THEN 204 : DO 100 NSS=1,NBSTLI 205 : IF(ITRAV(NSS).EQ.NF) GOTO 120 206 : 100 CONTINUE 207 : ENDIF 208 : NBSTLI=NBSTLI+1 209 : ITRAV(NBSTLI)=NF 210 : GOTO 120 211 : ENDIF 212 : 110 CONTINUE 213 : C *** LA LIAISON FAIT INTERVENIR UNE STRUCTURE QUI N'EST PAS DEFINIE 214 : INTERR(1)=MSOUMA 215 : INTERR(2)=MJONCT 216 : INTERR(3)=MSOSTU 216 : CALL ERREUR(370) 217 : RETURN 218 : 120 CONTINUE 219 : C 220 : C CONSTRUCTION DE LA MATRICE ALIAI 221 : C RECHERCHE DES POINTS DE LIAISONS AVEC LE TABLEAU : ICPR1 222 : C ICPR1(NKI)=NJC : LE NKI IEME PT DE DNCN EST LE NJP IEME DDL DE BLI 223 : C 224 : SEGACT MCHPOI 225 : NSOUPO=IPCHP(/1) 226 : DO 270 NS=1,NSOUPO 227 : MSOUPO=IPCHP(NS) 228 : SEGACT MSOUPO 229 : MELEME=IGEOC 230 : SEGACT MELEME 231 : NBELEM=NUM(/2) 232 : NC=NOCOMP(/2) 233 : MPOVAL=IPOVAL 234 : SEGACT MPOVAL 235 : DO 260 NB=1,NBELEM 236 : IKI=ICPR(NUM(1,NB)) 237 : NKI=IKI/L12+1 238 : TCODDL=0.D0 239 : TCODDU=0.D0 240 : DO 240 NCC=1,NC 241 : IF(VPOCHA(NB,NCC).NE.0.D0) THEN 242 : WRITE (NOMC,FMT='(A4)') NOCOMP(NCC) 243 : DO 200 ND=1,L6 244 : IF(NOMC.EQ.NOMDD(ND))THEN 245 : 888 FORMAT(1X,' NOMC ',A4) 246 : TCODDL=VPOCHA(NB,NCC) 247 : GOTO 230 248 : ENDIF 249 : 200 CONTINUE 250 : DO 220 ND=1,L6 251 : IF(NOMC.EQ.NOMDU(ND))THEN 252 : TCODDU=VPOCHA(NB,NCC) 253 : GOTO 230 254 : ENDIF 255 : 220 CONTINUE 256 : C *** LA LIAISON EST MAL DEFINIE :LA COMPOSANTE N'EXISTE PAS 257 : INTERR(1)=MSOUMA 258 : INTERR(2)=MJONCT 259 : MOTERR(1:4)=NOMC 259 : CALL ERREUR(371) 260 : RETURN 261 : 230 IKID=IKI+ND 262 : IF(ICPR1(NKI).EQ.0) THEN 263 : IF(NJP.GE.NJON6) THEN 264 : C *** LA LIAISON EST MAL DEFINIE :TROP DE POINTS POUR LE NOMBRE DE LIAIS 265 : C SONS ELEMENTAIRES DONNEES 266 : INTERR(1)=MSOUMA 266 : CALL ERREUR(372) 267 : RETURN 268 : ENDIF 269 : NJP=NJP+1 270 : ICPR1(NKI)=NJP 271 : ENDIF 272 : NJC=L6*(ICPR1(NKI)-1)+ND 273 : IKID6=IKID+L6 274 : NJCN=NJC+NJON 275 : IF(ICPR2(IKID).EQ.0.AND.ICPR2(IKID6).EQ.0) THEN 276 : ICPR2(IKID)=NJC+NDECA 277 : NDCLIA(NJC)=IKID 278 : ICPR2(IKID6)=NJCN+NDECA 279 : NDCLIA(NJCN)=IKID6 280 : ENDIF 281 : ALIAI(NJ,NJC)=TCODDL 282 : ALIAI(NJ,NJCN)=TCODDU 283 : ENDIF 284 : 240 CONTINUE 285 : 260 CONTINUE 286 : SEGDES MPOVAL,MELEME,MSOUPO 287 : 270 CONTINUE 288 : SEGDES MCHPOI 289 : 280 CONTINUE 290 : IF(MJOTYP.EQ.'MASS') THEN 291 : IF(KLIMAS.EQ.0) THEN 292 : LIM=NJON 293 : SEGINI MLIMAS 294 : KLIMAS=MLIMAS 295 : ENDIF 296 : DO 210 NJC=1,NJON 297 : IF(ALIAI(NJ,NJON+NJC).NE.0.D0) THEN 298 : LIMM=LIMM+1 299 : NLIMAS(LIMM)=NJC 300 : GOTO 215 301 : ENDIF 302 : 210 CONTINUE 303 : 215 CONTINUE 304 : ENDIF 305 : SEGDES MJONCT 306 : 290 CONTINUE 307 : IF(KLIMAS.NE.0) THEN 308 : LIM=LIMM 309 : SEGADJ MLIMAS 310 : ENDIF 311 : C 312 : C VERIFICATION 313 : C 314 : C DO 398 I=1,NJON 315 : C WRITE(IOIMP,1002)(ALIAI(I,J),J=1,NL) 316 : C 398 CONTINUE 317 : C WRITE(IOIMP,*)(NDCLIA(I),I=1,NL) 318 : DO 295 NJ=1,NJON 319 : IF(NDCLIA(NJ).EQ.0) THEN 320 : C *** LA LIAISON EST MAL DEFINIE : IL MANQUE DES DDL 321 : INTERR(1)=MSOUMA 321 : CALL ERREUR(373) 322 : RETURN 323 : ENDIF 324 : 295 CONTINUE 325 : C 326 : NALI=40*NBSTLI 327 : NBLI=40*NBSTLI 328 : SEGADJ MALIAI 329 : DO 314 NST=1,NBSTLI 330 : NLBLI(1,NST)=-1 331 : NLBLI(2,NST)=-1 332 : 314 CONTINUE 333 : NAA=0 334 : NBB=0 335 : NALI=0 336 : NBLI=0 337 : DO 380 NST=1,NBSTLI 338 : NF=ITRAV(NST) 339 : MP=9*(NF-1) 340 : NBP=NREFE(4,NF) 341 : IVN=NREFE(6,NF) 342 : IAN=NREFE(7,NF) 343 : MELEME=NREFE(1,NF) 344 : SEGACT MELEME 345 : DO 370 NB1=1,NBP 346 : IKI=ICPR(NUM(NB1,1)) 347 : NKI=IKI/L12+1 348 : NJP=ICPR1(NKI) 349 : IF(NJP.NE.0) THEN 350 : NJC=L6*(NJP-1) 351 : NLBLI(NB1,NST)=NJC 352 : NJCN=NJC+NJON 353 : DO 315 NDL=1,L6 354 : NVNLIA(NJC+NDL)=IVN+(NB1-1)*L6+NDL 355 : 315 CONTINUE 356 : C 357 : C ECRITURE DES LIAISONS AVEC LES VARIABLES LOCALES 358 : C CHANGEMENT DE REPERE FABRICATION DE ALIA3 ALIA4 359 : C 360 : DO 360 NJ=1,NJON 361 : DO 350 K=1,2 362 : K3=3*(K-1) 363 : NJC3=NJC+K3 364 : NJCN3=NJCN+K3 365 : DO 330 I=1,3 366 : AA(I)=0.D0 367 : BB(I)=0.D0 368 : MPI=MP+I 369 : DO 320 J=1,3 370 : MPIJ=MPI+3*(J-1) 371 : AA(I)=AA(I)+ALIAI(NJ,NJC3+J)*PASS(MPIJ) 372 : BB(I)=BB(I)+ALIAI(NJ,NJCN3+J)*PASS(MPIJ) 373 : 320 CONTINUE 374 : 330 CONTINUE 375 : DO 340 I=1,3 376 : NJC3I=NJC3+I 377 : IKID=NDCLIA(NJC3I) 378 : IKID3=NDCLIA(NJCN3+I) 379 : ALIA3(NJ,NJC3I)=AA(I)*DNORM(IKID) 380 : ALIA4(NJ,NJC3I)=BB(I)*DNORM(IKID3) 381 : 340 CONTINUE 382 : 350 CONTINUE 383 : 360 CONTINUE 384 : ENDIF 385 : 370 CONTINUE 386 : C 387 : C FABRICATION DE ALIA1 ALIA2 388 : C 389 : NB1=3 390 : IF(NLBLI(1,NST).LT.0) THEN 391 : NB1=2 392 : NLBLI(1,NST)=NLBLI(2,NST) 393 : ENDIF 394 : IF(NLBLI(2,NST).LT.0) THEN 395 : NB1=1 396 : NLBLI(2,NST)=NLBLI(1,NST) 397 : ENDIF 398 : IF(NB1.EQ.3) THEN 399 : NALI=NALI+40 400 : NBLI=NBLI+40 401 : ELSE 402 : NALI=NALI+10 403 : NBLI=NBLI+6 404 : ENDIF 405 : C WRITE(IOIMP,*) ' NLBLI ',NLBLI(1,NST),NLBLI(2,NST) 406 : C WRITE(IOIMP,*) ' NB1 ',NB1 406 : CALL ELFMA0(ALIA1(NAA+1),ALIA2(NBB+1),AB(IAN,1),NB1,ISING,EPS) 407 : IF(ISING.EQ.1) THEN 408 : C *** MATRICE SINGULIERE 409 : INTERR(1)=MSOUMA 409 : C CALL ERREUR(374) 410 : C RETURN 411 : WRITE(IOIMP,*) ' MATRICE SINGULIERE ' 412 : ENDIF 413 : NAA=NALI 414 : NBB=NBLI 415 : 380 CONTINUE 416 : SEGADJ MALIAI 417 : SEGSUP MSOUMA 418 : NDECA=NDECA+NL 419 : C WRITE(IOIMP,1002)(ALIA1(J),J=1,NALI) 420 : C WRITE(IOIMP,1008) 421 : C WRITE(IOIMP,1002)(ALIA2(J),J=1,NBLI) 422 : C WRITE(IOIMP,1008) 423 : C DO 396 I=1,NJON 424 : C WRITE(IOIMP,1002)(ALIA3(I,J),J=1,NJON) 425 : C 396 CONTINUE 426 : C WRITE(IOIMP,1008) 427 : C DO 397 I=1,NJON 428 : C WRITE(IOIMP,1002)(ALIA4(I,J),J=1,NJON) 429 : C 397 CONTINUE 430 : IF(KLIMAS.NE.0) THEN 431 : DO 390 I=1,LIM 432 : K=NLIMAS(I) 433 : DO 390 J=1,NJON 434 : ALIMAS(I,J)=ALIA3(K,J) 435 : 390 CONTINUE 436 : ENDIF 437 : C 438 : C FABRICATION DE ALIA3 ET ALIA4 439 : C 440 : SEGINI MTRAV 440 : CALL ELFLI1(ALIA1,ALIA2,ALIA3,ALIA4,NJON,BT,IS,ISING,EPS,NLBLI, 441 : *NBSTLI) 442 : SEGSUP MTRAV 443 : IF(ISING.EQ.1) THEN 444 : C *** MATRICE SINGULIERE 445 : INTERR(1)=MSOUMA 445 : CALL ERREUR(374) 446 : RETURN 447 : C WRITE(IOIMP,*) ' MATRICE SINGULIERE ' 448 : ENDIF 449 : IF(IIMPI.EQ.1) THEN 450 : WRITE(IOIMP,1001) NBLIP 451 : 1001 FORMAT(1X,/I5,' IEME LIAISON '//) 452 : WRITE(IOIMP,1002)(ALIA1(J),J=1,NALI) 453 : WRITE(IOIMP,1008) 454 : 1008 FORMAT(/) 455 : WRITE(IOIMP,1002)(ALIA2(J),J=1,NBLI) 456 : WRITE(IOIMP,1008) 457 : DO 392 I=1,NJON 458 : WRITE(IOIMP,1002)(ALIA3(I,J),J=1,NJON) 459 : 392 CONTINUE 460 : WRITE(IOIMP,1008) 461 : DO 393 I=1,NJON 462 : WRITE(IOIMP,1002)(ALIA4(I,J),J=1,NJON) 463 : 393 CONTINUE 464 : 1002 FORMAT(12(1X,1PE10.3)) 465 : WRITE(IOIMP,1004) 466 : 1004 FORMAT(1X,/' TABLEAU NDCLIA ') 467 : WRITE(IOIMP,1005)(NDCLIA(I),I=1,NL) 468 : 1005 FORMAT(1X,20(I5,1X)) 469 : WRITE(IOIMP,1007) 470 : 1007 FORMAT(1X,/' TABLEAU NVNLIA ') 471 : NLS2=NL/2 472 : WRITE(IOIMP,1005)(NVNLIA(I),I=1,NLS2) 473 : IF(KLIMAS.NE.0) THEN 474 : WRITE(IOIMP,1009) 475 : 1009 FORMAT(1X,/' LIAISON PAR ELEMENT MASSIQUE RIGIDE ') 476 : NLS2=NL/2 477 : WRITE(IOIMP,1010) 478 : 1010 FORMAT(1X,/' TABLEAU NLIMAS ') 479 : WRITE(IOIMP,1005)(NLIMAS(I),I=1,NLIMAS(/1)) 480 : WRITE(IOIMP,1011) 481 : 1011 FORMAT(1X,/' TABLEAU ALIMAS ') 482 : DO 401 I=1,ALIMAS(/1) 483 : WRITE(IOIMP,1002)(ALIMAS(I,J),J=1,NJON) 484 : 401 CONTINUE 485 : ENDIF 486 : ENDIF 487 : 400 CONTINUE 488 : NBLIPE=NBLIP 489 : SEGADJ MOMALI 490 : KOMALI=MOMALI 491 : SEGSUP ITRAV,ICPR1 492 : SEGSUP MATTAC 493 : SEGDES ANBN 494 : IF(IIMPI.EQ.1) THEN 495 : WRITE(IOIMP,1006) 496 : 1006 FORMAT(1X,/' TABLEAU ICPR2 '//) 497 : WRITE(IOIMP,1005)(ICPR2(L),L=1,NIDNCN) 498 : ENDIF 499 : WRITE(IOIMP,*) ' FIN DE ELFLIA ' 500 : RETURN 501 : END 502 : 503 : 504 :
© Cast3M 2003 - All rights reserved.
Disclaimer