Télécharger elflia.eso

Retour à la liste

Numérotation des lignes :

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

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