Télécharger elflia.eso

Retour à la liste

Numérotation des lignes :

  1. C ELFLIA SOURCE BP208322 15/06/22 21:17:39 8543
  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
  217. CALL ERREUR(370)
  218. RETURN
  219. 120 CONTINUE
  220. C
  221. C CONSTRUCTION DE LA MATRICE ALIAI
  222. C RECHERCHE DES POINTS DE LIAISONS AVEC LE TABLEAU : ICPR1
  223. C ICPR1(NKI)=NJC : LE NKI IEME PT DE DNCN EST LE NJP IEME DDL DE BLI
  224. C
  225. SEGACT MCHPOI
  226. NSOUPO=IPCHP(/1)
  227. DO 270 NS=1,NSOUPO
  228. MSOUPO=IPCHP(NS)
  229. SEGACT MSOUPO
  230. MELEME=IGEOC
  231. SEGACT MELEME
  232. NBELEM=NUM(/2)
  233. NC=NOCOMP(/2)
  234. MPOVAL=IPOVAL
  235. SEGACT MPOVAL
  236. DO 260 NB=1,NBELEM
  237. IKI=ICPR(NUM(1,NB))
  238. NKI=IKI/L12+1
  239. TCODDL=0.D0
  240. TCODDU=0.D0
  241. DO 240 NCC=1,NC
  242. IF(VPOCHA(NB,NCC).NE.0.D0) THEN
  243. WRITE (NOMC,FMT='(A4)') NOCOMP(NCC)
  244. DO 200 ND=1,L6
  245. IF(NOMC.EQ.NOMDD(ND))THEN
  246. 888 FORMAT(1X,' NOMC ',A4)
  247. TCODDL=VPOCHA(NB,NCC)
  248. GOTO 230
  249. ENDIF
  250. 200 CONTINUE
  251. DO 220 ND=1,L6
  252. IF(NOMC.EQ.NOMDU(ND))THEN
  253. TCODDU=VPOCHA(NB,NCC)
  254. GOTO 230
  255. ENDIF
  256. 220 CONTINUE
  257. C *** LA LIAISON EST MAL DEFINIE :LA COMPOSANTE N'EXISTE PAS
  258. INTERR(1)=MSOUMA
  259. INTERR(2)=MJONCT
  260. MOTERR(1:4)=NOMC
  261. CALL ERREUR(371)
  262. RETURN
  263. 230 IKID=IKI+ND
  264. IF(ICPR1(NKI).EQ.0) THEN
  265. IF(NJP.GE.NJON6) THEN
  266. C *** LA LIAISON EST MAL DEFINIE :TROP DE POINTS POUR LE NOMBRE DE LIAIS
  267. C SONS ELEMENTAIRES DONNEES
  268. INTERR(1)=MSOUMA
  269. CALL ERREUR(372)
  270. RETURN
  271. ENDIF
  272. NJP=NJP+1
  273. ICPR1(NKI)=NJP
  274. ENDIF
  275. NJC=L6*(ICPR1(NKI)-1)+ND
  276. IKID6=IKID+L6
  277. NJCN=NJC+NJON
  278. IF(ICPR2(IKID).EQ.0.AND.ICPR2(IKID6).EQ.0) THEN
  279. ICPR2(IKID)=NJC+NDECA
  280. NDCLIA(NJC)=IKID
  281. ICPR2(IKID6)=NJCN+NDECA
  282. NDCLIA(NJCN)=IKID6
  283. ENDIF
  284. ALIAI(NJ,NJC)=TCODDL
  285. ALIAI(NJ,NJCN)=TCODDU
  286. ENDIF
  287. 240 CONTINUE
  288. 260 CONTINUE
  289. SEGDES MPOVAL,MELEME,MSOUPO
  290. 270 CONTINUE
  291. SEGDES MCHPOI
  292. 280 CONTINUE
  293. IF(MJOTYP.EQ.'MASS') THEN
  294. IF(KLIMAS.EQ.0) THEN
  295. LIM=NJON
  296. SEGINI MLIMAS
  297. KLIMAS=MLIMAS
  298. ENDIF
  299. DO 210 NJC=1,NJON
  300. IF(ALIAI(NJ,NJON+NJC).NE.0.D0) THEN
  301. LIMM=LIMM+1
  302. NLIMAS(LIMM)=NJC
  303. GOTO 215
  304. ENDIF
  305. 210 CONTINUE
  306. 215 CONTINUE
  307. ENDIF
  308. SEGDES MJONCT
  309. 290 CONTINUE
  310. IF(KLIMAS.NE.0) THEN
  311. LIM=LIMM
  312. SEGADJ MLIMAS
  313. ENDIF
  314. C
  315. C VERIFICATION
  316. C
  317. C DO 398 I=1,NJON
  318. C WRITE(IOIMP,1002)(ALIAI(I,J),J=1,NL)
  319. C 398 CONTINUE
  320. C WRITE(IOIMP,*)(NDCLIA(I),I=1,NL)
  321. DO 295 NJ=1,NJON
  322. IF(NDCLIA(NJ).EQ.0) THEN
  323. C *** LA LIAISON EST MAL DEFINIE : IL MANQUE DES DDL
  324. INTERR(1)=MSOUMA
  325. CALL ERREUR(373)
  326. RETURN
  327. ENDIF
  328. 295 CONTINUE
  329. C
  330. NALI=40*NBSTLI
  331. NBLI=40*NBSTLI
  332. SEGADJ MALIAI
  333. DO 314 NST=1,NBSTLI
  334. NLBLI(1,NST)=-1
  335. NLBLI(2,NST)=-1
  336. 314 CONTINUE
  337. NAA=0
  338. NBB=0
  339. NALI=0
  340. NBLI=0
  341. DO 380 NST=1,NBSTLI
  342. NF=ITRAV(NST)
  343. MP=9*(NF-1)
  344. NBP=NREFE(4,NF)
  345. IVN=NREFE(6,NF)
  346. IAN=NREFE(7,NF)
  347. MELEME=NREFE(1,NF)
  348. SEGACT MELEME
  349. DO 370 NB1=1,NBP
  350. IKI=ICPR(NUM(NB1,1))
  351. NKI=IKI/L12+1
  352. NJP=ICPR1(NKI)
  353. IF(NJP.NE.0) THEN
  354. NJC=L6*(NJP-1)
  355. NLBLI(NB1,NST)=NJC
  356. NJCN=NJC+NJON
  357. DO 315 NDL=1,L6
  358. NVNLIA(NJC+NDL)=IVN+(NB1-1)*L6+NDL
  359. 315 CONTINUE
  360. C
  361. C ECRITURE DES LIAISONS AVEC LES VARIABLES LOCALES
  362. C CHANGEMENT DE REPERE FABRICATION DE ALIA3 ALIA4
  363. C
  364. DO 360 NJ=1,NJON
  365. DO 350 K=1,2
  366. K3=3*(K-1)
  367. NJC3=NJC+K3
  368. NJCN3=NJCN+K3
  369. DO 330 I=1,3
  370. AA(I)=0.D0
  371. BB(I)=0.D0
  372. MPI=MP+I
  373. DO 320 J=1,3
  374. MPIJ=MPI+3*(J-1)
  375. AA(I)=AA(I)+ALIAI(NJ,NJC3+J)*PASS(MPIJ)
  376. BB(I)=BB(I)+ALIAI(NJ,NJCN3+J)*PASS(MPIJ)
  377. 320 CONTINUE
  378. 330 CONTINUE
  379. DO 340 I=1,3
  380. NJC3I=NJC3+I
  381. IKID=NDCLIA(NJC3I)
  382. IKID3=NDCLIA(NJCN3+I)
  383. ALIA3(NJ,NJC3I)=AA(I)*DNORM(IKID)
  384. ALIA4(NJ,NJC3I)=BB(I)*DNORM(IKID3)
  385. 340 CONTINUE
  386. 350 CONTINUE
  387. 360 CONTINUE
  388. ENDIF
  389. 370 CONTINUE
  390. C
  391. C FABRICATION DE ALIA1 ALIA2
  392. C
  393. NB1=3
  394. IF(NLBLI(1,NST).LT.0) THEN
  395. NB1=2
  396. NLBLI(1,NST)=NLBLI(2,NST)
  397. ENDIF
  398. IF(NLBLI(2,NST).LT.0) THEN
  399. NB1=1
  400. NLBLI(2,NST)=NLBLI(1,NST)
  401. ENDIF
  402. IF(NB1.EQ.3) THEN
  403. NALI=NALI+40
  404. NBLI=NBLI+40
  405. ELSE
  406. NALI=NALI+10
  407. NBLI=NBLI+6
  408. ENDIF
  409. C WRITE(IOIMP,*) ' NLBLI ',NLBLI(1,NST),NLBLI(2,NST)
  410. C WRITE(IOIMP,*) ' NB1 ',NB1
  411. CALL ELFMA0(ALIA1(NAA+1),ALIA2(NBB+1),AB(IAN,1),NB1,ISING,EPS)
  412. IF(ISING.EQ.1) THEN
  413. C *** MATRICE SINGULIERE
  414. INTERR(1)=MSOUMA
  415. C CALL ERREUR(374)
  416. C RETURN
  417. WRITE(IOIMP,*) ' MATRICE SINGULIERE '
  418. ENDIF
  419. NAA=NALI
  420. NBB=NBLI
  421. 380 CONTINUE
  422. SEGADJ MALIAI
  423. SEGSUP MSOUMA
  424. NDECA=NDECA+NL
  425. C WRITE(IOIMP,1002)(ALIA1(J),J=1,NALI)
  426. C WRITE(IOIMP,1008)
  427. C WRITE(IOIMP,1002)(ALIA2(J),J=1,NBLI)
  428. C WRITE(IOIMP,1008)
  429. C DO 396 I=1,NJON
  430. C WRITE(IOIMP,1002)(ALIA3(I,J),J=1,NJON)
  431. C 396 CONTINUE
  432. C WRITE(IOIMP,1008)
  433. C DO 397 I=1,NJON
  434. C WRITE(IOIMP,1002)(ALIA4(I,J),J=1,NJON)
  435. C 397 CONTINUE
  436. IF(KLIMAS.NE.0) THEN
  437. DO 390 I=1,LIM
  438. K=NLIMAS(I)
  439. DO 390 J=1,NJON
  440. ALIMAS(I,J)=ALIA3(K,J)
  441. 390 CONTINUE
  442. ENDIF
  443. C
  444. C FABRICATION DE ALIA3 ET ALIA4
  445. C
  446. SEGINI MTRAV
  447. CALL ELFLI1(ALIA1,ALIA2,ALIA3,ALIA4,NJON,BT,IS,ISING,EPS,NLBLI,
  448. *NBSTLI)
  449. SEGSUP MTRAV
  450. IF(ISING.EQ.1) THEN
  451. C *** MATRICE SINGULIERE
  452. INTERR(1)=MSOUMA
  453. CALL ERREUR(374)
  454. RETURN
  455. C WRITE(IOIMP,*) ' MATRICE SINGULIERE '
  456. ENDIF
  457. IF(IIMPI.EQ.1) THEN
  458. WRITE(IOIMP,1001) NBLIP
  459. 1001 FORMAT(1X,/I5,' IEME LIAISON '//)
  460. WRITE(IOIMP,1002)(ALIA1(J),J=1,NALI)
  461. WRITE(IOIMP,1008)
  462. 1008 FORMAT(/)
  463. WRITE(IOIMP,1002)(ALIA2(J),J=1,NBLI)
  464. WRITE(IOIMP,1008)
  465. DO 392 I=1,NJON
  466. WRITE(IOIMP,1002)(ALIA3(I,J),J=1,NJON)
  467. 392 CONTINUE
  468. WRITE(IOIMP,1008)
  469. DO 393 I=1,NJON
  470. WRITE(IOIMP,1002)(ALIA4(I,J),J=1,NJON)
  471. 393 CONTINUE
  472. 1002 FORMAT(12(1X,1PE10.3))
  473. WRITE(IOIMP,1004)
  474. 1004 FORMAT(1X,/' TABLEAU NDCLIA ')
  475. WRITE(IOIMP,1005)(NDCLIA(I),I=1,NL)
  476. 1005 FORMAT(1X,20(I5,1X))
  477. WRITE(IOIMP,1007)
  478. 1007 FORMAT(1X,/' TABLEAU NVNLIA ')
  479. NLS2=NL/2
  480. WRITE(IOIMP,1005)(NVNLIA(I),I=1,NLS2)
  481. IF(KLIMAS.NE.0) THEN
  482. WRITE(IOIMP,1009)
  483. 1009 FORMAT(1X,/' LIAISON PAR ELEMENT MASSIQUE RIGIDE ')
  484. NLS2=NL/2
  485. WRITE(IOIMP,1010)
  486. 1010 FORMAT(1X,/' TABLEAU NLIMAS ')
  487. WRITE(IOIMP,1005)(NLIMAS(I),I=1,NLIMAS(/1))
  488. WRITE(IOIMP,1011)
  489. 1011 FORMAT(1X,/' TABLEAU ALIMAS ')
  490. DO 401 I=1,ALIMAS(/1)
  491. WRITE(IOIMP,1002)(ALIMAS(I,J),J=1,NJON)
  492. 401 CONTINUE
  493. ENDIF
  494. ENDIF
  495. 400 CONTINUE
  496. NBLIPE=NBLIP
  497. SEGADJ MOMALI
  498. KOMALI=MOMALI
  499. SEGSUP ITRAV,ICPR1
  500. SEGSUP MATTAC
  501. SEGDES ANBN
  502. IF(IIMPI.EQ.1) THEN
  503. WRITE(IOIMP,1006)
  504. 1006 FORMAT(1X,/' TABLEAU ICPR2 '//)
  505. WRITE(IOIMP,1005)(ICPR2(L),L=1,NIDNCN)
  506. ENDIF
  507. WRITE(IOIMP,*) ' FIN DE ELFLIA '
  508. RETURN
  509. END
  510.  
  511.  
  512.  
  513.  
  514.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales