Télécharger utum.eso

Retour à la liste

Numérotation des lignes :

utum
  1. C UTUM SOURCE FANDEUR 22/01/03 21:15:55 11237
  2. SUBROUTINE UTUM(LCH1,IRIG1,DFLO,IRIG2)
  3. ************************************************************************
  4. * NOM : UTUM
  5. ************************************************************************
  6. * DESCRIPTION : Realise le produit U*tU*M ou M est une matrice carree
  7. * et U est une matrice rectangle dont les colonnes sont
  8. * donnees par un objet LISTCHPO
  9. *
  10. * - Les multiplicateurs de Lagrange sont ignores
  11. * - Les harmoniques de Fourier differentes ne sont pas
  12. * croisees (matrice bloc-diagonale)
  13. *
  14. * Les inconnues primales et duales de M doivent avoir
  15. * ete definies dans les listes NOMDD et NOMDU et les
  16. * composantes du LISTCHPO doivent avoir ete definies dans
  17. * la liste NOMDD de l'include CCHAMP pour pour savoir
  18. * comment effectuer la multiplication entre M et U*tU et
  19. * comment nommer les inconnues duales de la matrice
  20. * ***********************************************************
  21. *
  22. * +-----------+
  23. * | CHPOINT#1 |
  24. * +-----------+ +-----------+
  25. * tU[L;N] ----> | CHPOINT#2 | | |
  26. * +-----------+ | M |
  27. * | ... | | |
  28. * U[N;L] +-----------+ | [N;N] |
  29. * | | CHPOINT#L | | |
  30. * | +-----------+ +-----------+
  31. * V
  32. * +---+---+---+---+ +-----------+ +-----------+
  33. * | C | C | | C | | | | |
  34. * | H | H | . | H | | UTU | | UTUM |
  35. * | P | P | . | P | | | | |
  36. * | # | # | . | # | | [N;N] | | [N;N] |
  37. * | 1 | 2 | | L | | | | |
  38. * +---+---+---+---+ +-----------+ +-----------+
  39. *
  40. *
  41. * avec : L = nombre de champs
  42. * N = nombre d'inconnues
  43. * (triplet noeud/composante/harmonique)
  44. *
  45. ************************************************************************
  46. * APPELE PAR : pod.eso
  47. ************************************************************************
  48. * ENTREES :: LCH1 = POINTEUR VERS UN OBJET LISTCHPO
  49. * IRIG1 = POINTEUR VERS UN OBJET RIGIDITE
  50. * DFLO = COEFFICIENT MULTIPLICATEUR
  51. * SORTIES :: IRIG2 = POINTEUR VERS UN OBJET RIGIDITE
  52. ************************************************************************
  53. IMPLICIT INTEGER(I-N)
  54. IMPLICIT REAL*8 (A-H,O-Z)
  55.  
  56. -INC PPARAM
  57. -INC CCOPTIO
  58. -INC SMCOORD
  59. -INC SMCHPOI
  60. -INC SMLCHPO
  61. -INC SMELEME
  62. -INC SMRIGID
  63. -INC CCHAMP
  64. *
  65. * ICPR(I) EST LE NUMERO LOCAL (DANS LE SUPPORT GEOMETRIQUE DU
  66. * LISTCHPO LCH1) DU I-EME NOEUD GLOBAL (DANS LA TABLE XCOORD)
  67. SEGMENT/TICPR/(ICPR(NOMAX))
  68. *
  69. * TINCO(I) = [MCOMP(I) ; IHARM(I)]
  70. * ********************************
  71. * TINCO1 DEFINIT LES INCONNUES DE LA MATRICE IRIG1
  72. * TINCO EST LE SOUS-ENSEMBLE DE TINCO1 DES INCONNUES COMMUNES A LA
  73. * RIGIDITE IRIG1 ET AU LISTCHPO LCH1
  74. * ********************************
  75. * ICOMP(I) EST LE NUMERO DE LA COMPOSANTE (DANS LES LISTES NOMDD
  76. * ET NOMDU) ASSOCIEE A LA I-EME INCONNUE
  77. * IHARM(I) EST LE NUMERO D'HARMONIQUE DE LA I-EME INCONNUE
  78. SEGMENT,ICOMP(0)
  79. SEGMENT,IHARM(0)
  80. SEGMENT,ICOMP1(0)
  81. SEGMENT,IHARM1(0)
  82. *
  83. * NUMHAR(I) EST LE NUMERO D'HARMONIQUE ASSOCIE A LA I-EME RIGIDITE
  84. * ELEMENTAIRE DE LA MATRICE DE SORTIE IRIG2
  85. * IMAHAR(I) EST LE POINTEUR VERS LE SEGMENT TIMAH ASSOCIE A LA I-EME
  86. * RIGIDITE ELEMENTAIRE DE LA MATRICE DE SORTIE IRIG2
  87. SEGMENT,NUMHAR(0)
  88. SEGMENT,IMAHAR(0)
  89. * IMAHA(I)=1 INDIQUE QUE LE I-EME NOEUD GLOBAL (DANS LA TABLE
  90. * XCOORD) APPARTIENT AU MAILLAGE LOCAL DE LA RIGIDITE ELEMENTAIRE
  91. * CORRESPONDANTE
  92. SEGMENT/TIMAH/(IMAHA(NOMAX))
  93. *
  94. * IMAI(I) EST LE MAILLAGE ASSOCIE AU I-EME SOUPO DU PREMIER CHPOINT
  95. * IPOV(I,J) EST LE MPOVAL DU SOUPO DU J-EME CHPOINT QUI CORRESPOND
  96. * AU I-EME SOUPO DU PREMIER CHPOINT (IPOV=0 SI LE SOUPO
  97. * EST ASSOCIE AUX MULT. DE LAGRANGE)
  98. * L'INCONNUE I DU SOUPO J DU PREMIER CHPOINT EST EN POSITION
  99. * IINC(I,J,K) DANS LE SOUPO CORRESPONDANT DU K-EME CHPOINT
  100. * L'INCONNUE I DU SOUPO J DU PREMIER CHPOINT EST EN POSITION
  101. * IGLO(I,J) DANS LA LISTE GLOBALE ICOMP+IHARM
  102. SEGMENT TRAV1
  103. INTEGER IMAI(NBSOU)
  104. INTEGER IPOV(NBSOU,NBCHP)
  105. INTEGER IINC(NXMAX,NBSOU,NBCHP)
  106. INTEGER IGLO(NXMAX,NBSOU)
  107. ENDSEGMENT
  108. *
  109. * VPO(I,J,K) EST LA VALEUR DU K-EME CHPOINT PRISE POUR LE I-EME
  110. * NOEUD LOCAL ET POUR LA J-EME INCONNUE DE TINCO
  111. * MAT(I,J,K,L) EST LA MATRICE U*tU AVEC I (RESP. K) LE NOEUD LOCAL
  112. * DUAL (RESP. PRIMAL) ET J (RESP. L) L'INCONNUE DUALE
  113. * (RESP. PRIMALE) PRISE DANS TINCO
  114. SEGMENT TRAV2
  115. REAL*8 VPO(NBPOI,NBINC,NBCHP)
  116. REAL*8 MAT(NBPOI,NBINC,NBPOI,NBINC)
  117. ENDSEGMENT
  118. *
  119. * IPOSP(I) DONNE LA POSITION DANS TINCO DE LA I-EME INCONNUE PRIMALE
  120. * D'UNE MATRICE ELEMENTAIRE
  121. * IPOSD(I) DONNE LA POSITION DANS TINCO DE LA I-EME INCONNUE DUALE
  122. * D'UNE MATRICE ELEMENTAIRE
  123. SEGMENT TPOSIN
  124. INTEGER IPOSP(NLIGRE)
  125. INTEGER IPOSD(NLIGRE)
  126. ENDSEGMENT
  127. * ITPOS(I) EST LE POINTEUR VERS LE SEGMENT TPOSIN ASSOCIE A LA I-EME
  128. * RIGIDITE ELEMENTAIRE DE LA MATRICE D'ENTREE IRIG1
  129. SEGMENT/IPOSIN/(ITPOS(NRIGEL1))
  130. *
  131. * IG2L(I,J) EST L'INDICE DE INCONNUE LOCALE D'UNE SOUS-MATRICE DE
  132. * IRIG2 ASSOCIEE AU NOEUD I ET A L'INCONNUE J DANS TINCO
  133. * IL2G(I) EST L'INDICE DANS TINCO DE LA I-EME INCONNUE LOCALE D'UNE
  134. * SOUS-MATRICE DE IRIG2
  135. SEGMENT/TIG2L/(IG2L(NBPOI,NBINC))
  136. SEGMENT/TIL2G/(IL2G(NLIGRE))
  137. *
  138. CHARACTER*(LOCOMP) MOCOMP
  139. *
  140. *
  141. *
  142. * +---------------------------------------------------------------+
  143. * | |
  144. * | T R A V A I L P R E L I M I N A I R E |
  145. * | |
  146. * +---------------------------------------------------------------+
  147. *
  148. MLCHPO=LCH1
  149. SEGACT,MLCHPO
  150. *
  151. *
  152. * ==========================================================
  153. * CONSTRUCTION DE LA LISTE DES INCONNUES DE LA MATRICE IRIG1
  154. * (= COUPLE NOM_DE_COMPOSANTE_PRIMALE + NUMERO_HARMONIQUE)
  155. * ==========================================================
  156. *
  157. NOMAX=nbpts
  158. SEGINI,ICOMP1,IHARM1,NUMHAR,IMAHAR
  159. NBHAR=0
  160. NBINC1=0
  161. *
  162. MRIGID=IRIG1
  163. SEGACT,MRIGID
  164. NRIGEL1=IRIGEL(/2)
  165. *
  166. *
  167. * BOUCLE SUR LES RIGIDITES ELEMENTAIRES
  168. DO IRI1=1,NRIGEL1
  169. *
  170. * IDENTIFICATION DES HARMONIQUES DE FOURIER DISTINCTES DANS IRIG1
  171. IHA=IRIGEL(5,IRI1)
  172. DO 10 K=1,NBHAR
  173. IF (IHA.EQ.NUMHAR(K)) THEN
  174. TIMAH=IMAHAR(K)
  175. GOTO 11
  176. ENDIF
  177. 10 CONTINUE
  178. NBHAR=NBHAR+1
  179. NUMHAR(**)=IHA
  180. SEGINI,TIMAH
  181. IMAHAR(**)=TIMAH
  182. 11 CONTINUE
  183. *
  184. * CONSTRUCTION DU MAILLAGE SUPPORT DE CHAQUE HARMONIQUE DE IRIG1
  185. * => IMAHA(K)=1 INDIQUE QUE LE NOEUD GLOBAL K EST DANS LE SUPPORT
  186. MELEME=IRIGEL(1,IRI1)
  187. SEGACT,MELEME
  188. NNO=NUM(/1)
  189. NEL=NUM(/2)
  190. DO IEL=1,NEL
  191. DO 12 INO=1,NNO
  192. K1=NUM(INO,IEL)
  193. IMAHA(K1)=1
  194. 12 CONTINUE
  195. ENDDO
  196. *
  197. * CONSTRUCTION DE LA LISTE DES INCONNUES DE LA MATRICE IRIG1
  198. DESCR=IRIGEL(3,IRI1)
  199. SEGACT,DESCR
  200. NLIGRE=LISDUA(/2)
  201. DO 15 IX1=1,NLIGRE
  202.  
  203. * RECHERCHE DE L'INDICE DE LA COMPOSANTE DANS LNOMDU (LISTE
  204. * GLOBALE DES COMPOSANTES DUALES)
  205. MOCOMP=LISDUA(IX1)
  206. DO IXD=1,LNOMDU
  207. IF (MOCOMP.EQ.NOMDU(IXD)) GOTO 13
  208. ENDDO
  209. MOTERR=MOCOMP
  210. CALL ERREUR(108)
  211. RETURN
  212. 13 CONTINUE
  213.  
  214. * AJOUT SI BESOIN D'UNE NOUVELLE INCONNUE A ICOMP1+IHARM1
  215. DO 14 IX2=1,NBINC1
  216. IF (IXD.NE.ICOMP1(IX2)) GOTO 14
  217. IF (IHA.EQ.IHARM1(IX2)) GOTO 15
  218. 14 CONTINUE
  219. ICOMP1(**)=IXD
  220. IHARM1(**)=IHA
  221. NBINC1=NBINC1+1
  222.  
  223. 15 CONTINUE
  224.  
  225. ENDDO
  226. *
  227. *
  228. * ===================================
  229. * NOMBRE DE CHPOINTS DANS LE LISTCHPO
  230. * ===================================
  231. *
  232. NBCHP=ICHPOI(/1)
  233. IF (NBCHP.EQ.0) THEN
  234. MOTERR(1:8)='LISTCHPO'
  235. INTERR(1)=LCH1
  236. CALL ERREUR(356)
  237. RETURN
  238. ENDIF
  239. *
  240. *
  241. * ===============================================================
  242. * CORRESPONDANCE ENTRE LES INCONNUES DU PREMIER CHPOINT ET CELLES
  243. * DES CHPOINTS SUIVANTS + CORRESPONDANCE AVEC LA LISTE GLOBALE
  244. * ICOMP1+IHARM1 DES INCONNUES DE LA MATRICE (REMPLISSAGE DE TRAV1)
  245. * CORRESPONDANCE ENTRE LES NUMEROTATIONS LOCALE ET GLOBALE
  246. * (REMPLISSAGE DE ICPR)
  247. * ===============================================================
  248. *
  249. MCHPO1=ICHPOI(1)
  250. SEGACT,MCHPO1
  251. *
  252. NS1=MCHPO1.IPCHP(/1)
  253. IF (NS1.EQ.0) THEN
  254. MOTERR(1:8)='CHPOINT'
  255. CALL ERREUR(1027)
  256. RETURN
  257. ENDIF
  258. *
  259. NOMAX=nbpts
  260. SEGINI,TICPR
  261. NBPOI=0
  262. *
  263. SEGINI,ICOMP,IHARM
  264. *
  265. NXMAX=3
  266. NBSOU=NS1
  267. SEGINI,TRAV1
  268. *
  269. *
  270. * **************************************
  271. * BOUCLE 1 SUR LES SOUPOS DU 1ER CHPOINT
  272. * **************************************
  273. DO 20 IS1=1,NS1
  274. MSOUP1=MCHPO1.IPCHP(IS1)
  275. SEGACT,MSOUP1
  276. *
  277. * ON IGNORE LES MULTIPLICATEURS DE LAGRANGE
  278. NX1 =MSOUP1.NOCOMP(/2)
  279. MOCOMP=MSOUP1.NOCOMP(1)
  280. IF (MOCOMP.EQ.'LX'.OR.MOCOMP.EQ.'FLX') THEN
  281. SEGDES,MSOUP1
  282. GOTO 20
  283. ENDIF
  284. *
  285. IF (NX1.GT.NXMAX) THEN
  286. NXMAX=NX1
  287. SEGADJ,TRAV1
  288. ENDIF
  289. *
  290. * DANS ICOMP+IHARM, ON PLACE LES INCONNUES DU LISTCHPO QUI
  291. * EXISTENT DEJA DANS ICOMP1+IHARM1 (DONC DANS LA MATRICE IRIG1)
  292. DO 21 IX1=1,NX1
  293.  
  294. * RECHERCHE DE L'INDICE DE LA COMPOSANTE DANS LNOMDD (LISTE
  295. * GLOBALE DES COMPOSANTES PRIMALES)
  296. MOCOMP=MSOUP1.NOCOMP(IX1)
  297. IINC(IX1,IS1,1)=IX1
  298. DO IC1=1,LNOMDD
  299. IF (MOCOMP.EQ.NOMDD(IC1)) GOTO 22
  300. ENDDO
  301. MOTERR=MOCOMP
  302. CALL ERREUR(108)
  303. RETURN
  304. 22 CONTINUE
  305.  
  306. * AJOUT SI BESOIN D'UNE NOUVELLE INCONNUE A ICOMP+IHARM
  307. NOHA=MSOUP1.NOHARM(IX1)
  308. DO 23 IX2=1,NBINC1
  309. IF (IC1.NE.ICOMP1(IX2)) GOTO 23
  310. IF (NOHA.NE.IHARM1(IX2)) GOTO 23
  311. DO 24 IX3=1,NBINC
  312. IF (IC1.NE.ICOMP(IX3)) GOTO 24
  313. IF (NOHA.EQ.IHARM(IX3)) GOTO 21
  314. 24 CONTINUE
  315. ICOMP(**)=IC1
  316. IHARM(**)=NOHA
  317. IGLO(IX1,IS1)=NBINC
  318. 23 CONTINUE
  319.  
  320. 21 CONTINUE
  321. *
  322. * ON VERIFIE QUE LE MAILLAGE N'EST PAS VIDE
  323. IGEO1=MSOUP1.IGEOC
  324. IF (IGEO1.LE.0) THEN
  325. MOTERR(1:8)='CHPOINT'
  326. CALL ERREUR(1027)
  327. RETURN
  328. ENDIF
  329. IMAI(IS1)=IGEO1
  330. IPT1=IGEO1
  331. SEGACT,IPT1
  332. NNO1=IPT1.NUM(/2)
  333. IF (NNO1.EQ.0) GOTO 20
  334. *
  335. * CONSTRUCTION DE LA TABLE ICPR
  336. * (NUMEROTATION GLOBALE <=> LOCALE)
  337. DO 25 I1=1,NNO1
  338. K1=IPT1.NUM(1,I1)
  339. IF (ICPR(K1).NE.0) GOTO 25
  340. NBPOI=NBPOI+1
  341. ICPR(K1)=NBPOI
  342. 25 CONTINUE
  343. SEGDES,IPT1
  344. *
  345. * POINTEUR DIRECT VERS LE SEGMENT MPOVAL
  346. IPOV(IS1,1)=MSOUP1.IPOVAL
  347. *
  348. *
  349. * ********************************
  350. * BOUCLE 2 SUR LES AUTRES CHPOINTS
  351. * ********************************
  352. DO 26 ICH=2,NBCHP
  353. MCHPO2=ICHPOI(ICH)
  354. SEGACT,MCHPO2
  355. NS2=MCHPO2.IPCHP(/1)
  356. *
  357. * **********************************************
  358. * ON VA CHERCHER LE SOUPO CORRESPONDANT A MSOUP1
  359. * => BOUCLE 3 SUR LES SOUPOS DE MCHPO2
  360. * **********************************************
  361. DO 27 IS2=1,NS2
  362. MSOUP2=MCHPO2.IPCHP(IS2)
  363. SEGACT,MSOUP1,MSOUP2
  364. *
  365. * MEME MAILLAGE ?
  366. IGEO2=MSOUP2.IGEOC
  367. IF (IGEO1.NE.IGEO2) THEN
  368. SEGDES,MSOUP2
  369. GOTO 27
  370. ENDIF
  371. *
  372. * MEME NOMBRE DE COMPOSANTES ?
  373. NX2 =MSOUP2.NOCOMP(/2)
  374. MOCOMP=MSOUP1.NOCOMP(1)
  375. IF (MOCOMP.EQ.'LX'.OR.MOCOMP.EQ.'FLX'.OR.NX1.NE.NX2) THEN
  376. SEGDES,MSOUP2
  377. GOTO 27
  378. ENDIF
  379. IF (NX2.GT.NXMAX) THEN
  380. NXMAX=NX2
  381. SEGADJ,TRAV1
  382. ENDIF
  383. *
  384. * MEMES LISTES DE COMPOSANTES ?
  385. * => ON FAIT LA CORRESPONDANCE ENTRE LES COMPOSANTES DES
  386. * 2 SOUPOS
  387. DO 28 IX1=1,NX1
  388. MOCOMP=MSOUP1.NOCOMP(IX1)
  389. DO 29 IX2=1,NX2
  390. IF (MOCOMP.NE.MSOUP2.NOCOMP(IX2)) GOTO 29
  391. IF (MSOUP1.NOHARM(IX1).EQ.MSOUP2.NOHARM(IX2)) THEN
  392. IINC(IX1,IS1,ICH)=IX2
  393. GOTO 28
  394. ENDIF
  395. 29 CONTINUE
  396. GOTO 99
  397. 28 CONTINUE
  398. *
  399. * POINTEUR DIRECT VERS LE SEGMENT MPOVAL
  400. IPOV(IS1,ICH)=MSOUP2.IPOVAL
  401.  
  402. * (CHPOINT SUIVANT)
  403. SEGDES,MSOUP2,MCHPO2
  404. GOTO 26
  405. *
  406. 27 CONTINUE
  407. *
  408. * MESSAGE D'ERREUR
  409. * ****************
  410. 99 CONTINUE
  411. WRITE(MOTERR(1:16),FMT='(2I8)') MCHPO1,MCHPO2
  412. CALL ERREUR(135)
  413. RETURN
  414. *
  415. 26 CONTINUE
  416. SEGDES,MSOUP1
  417. *
  418. 20 CONTINUE
  419. SEGDES,MCHPO1,MLCHPO
  420. SEGSUP,ICOMP1,IHARM1
  421. *
  422. *
  423. * ========================================================
  424. * STOCKAGE DES VALEURS DU LISTCHPO DANS UN TABLEAU ORDONNE
  425. * SELON LA GEOMETRIE LOCALE (ICPR) ET SELON LES INCONNUES
  426. * DE TINCO => REMPLISSAGE DE TRAV2
  427. * ========================================================
  428. *
  429. SEGINI,TRAV2
  430. DO ICH=1,NBCHP
  431. DO 30 ISOU=1,NBSOU
  432. IPO1=IPOV(ISOU,ICH)
  433. IF (IPO1.EQ.0) GOTO 30
  434. MPOVAL=IPO1
  435. SEGACT,MPOVAL
  436. NNO=VPOCHA(/1)
  437. NIX=VPOCHA(/2)
  438. MELEME=IMAI(ISOU)
  439. SEGACT,MELEME
  440. DO 31 IX=1,NIX
  441. IX1=IGLO(IX,ISOU)
  442. IF (IX1.EQ.0) GOTO 31
  443. IIX=IINC(IX,ISOU,ICH)
  444. DO INO=1,NNO
  445. N1=ICPR(NUM(1,INO))
  446. VPO(N1,IX1,ICH)=VPOCHA(INO,IIX)
  447. ENDDO
  448. 31 CONTINUE
  449. SEGDES,MELEME,MPOVAL
  450. 30 CONTINUE
  451. ENDDO
  452. SEGSUP,TRAV1
  453. *
  454. *
  455. * =========================
  456. * CALCUL DE LA MATRICE U*tU
  457. * =========================
  458. *
  459. DO IX1=1,NBINC
  460. DO IN1=1,NBPOI
  461. DO 40 IX2=1,NBINC
  462. IF (IHARM(IX2).NE.IHARM(IX1)) GOTO 40
  463. DO IN2=1,NBPOI
  464. XVAL=0.D0
  465. DO ICH=1,NBCHP
  466. VA1=VPO(IN1,IX1,ICH)
  467. VA2=VPO(IN2,IX2,ICH)
  468. XVAL=XVAL+VA1*VA2
  469. ENDDO
  470. MAT(IN2,IX2,IN1,IX1)=XVAL
  471. ENDDO
  472. 40 CONTINUE
  473. ENDDO
  474. ENDDO
  475. *
  476. * REMPLISSAGE DU TRIANGLE INFERIEUR
  477. DO IX1=1,NBINC
  478. DO IN1=1,NBPOI
  479. DO 50 IX2=IX1+1,NBINC
  480. IF (IHARM(IX2).NE.IHARM(IX1)) GOTO 50
  481. DO IN2=1,NBPOI
  482. MAT(IN2,IX2,IN1,IX1)=MAT(IN1,IX1,IN2,IX2)
  483. ENDDO
  484. 50 CONTINUE
  485. ENDDO
  486. ENDDO
  487. *
  488. *
  489. * ============================================================
  490. * POUR CHAQUE SOUS-MATRICE ON REPERE LA POSITION DES INCONNUES
  491. * LOCALES AU SEIN DES LISTES GLOBALES ICOMP+IHARM
  492. * ============================================================
  493. *
  494. SEGINI,IPOSIN
  495. *
  496. DO IRI1=1,NRIGEL1
  497. *
  498. IHA=IRIGEL(5,IRI1)
  499. *
  500. DESCR=IRIGEL(3,IRI1)
  501. SEGACT,DESCR
  502. NINCP=LISINC(/2)
  503. NINCD=LISDUA(/2)
  504. *
  505. * ON VERIFIE QUE LA MATRICE EST CARREE
  506. IF (NINCP.NE.NINCD) THEN
  507. CALL ERREUR(21)
  508. RETURN
  509. ENDIF
  510. *
  511. NLIGRE=NINCD
  512. SEGINI,TPOSIN
  513. ITPOS(IRI1)=TPOSIN
  514. *
  515. * CORRESPONDANCE ENTRE LES INCONNUES DUALES DE LA MATRICE
  516. * ELEMENTAIRE ET LES INCONNUES GLOBALES DES SEGMENTS ICOMP+IHARM
  517. DO 60 ICO=1,NINCD
  518. MOCOMP=LISDUA(ICO)
  519. DO ICOD=1,LNOMDU
  520. IF (MOCOMP.EQ.NOMDU(ICOD)) GOTO 61
  521. ENDDO
  522. 61 CONTINUE
  523. DO 62 IX=1,NBINC
  524. IF (ICOD.NE.ICOMP(IX)) GOTO 62
  525. IF (IHA.NE.IHARM(IX)) GOTO 62
  526. IPOSD(ICO)=IX
  527. GOTO 60
  528. 62 CONTINUE
  529. 60 CONTINUE
  530. *
  531. * CORRESPONDANCE ENTRE LES INCONNUES PRIMALES DE LA MATRICE
  532. * ELEMENTAIRE ET LES INCONNUES "GLOBALES" DU SEGMENT TINCO
  533. * L'ASSOCIATION EST FAITE GRACE AUX LISTES DEFINIES DANS
  534. * L'INCLUDE CCHAMP
  535. DO 70 ICO=1,NINCP
  536. MOCOMP=LISINC(ICO)
  537. DO ICOP=1,LNOMDD
  538. IF (MOCOMP.EQ.NOMDD(ICOP)) GOTO 71
  539. ENDDO
  540. MOTERR=MOCOMP
  541. CALL ERREUR(108)
  542. RETURN
  543. 71 CONTINUE
  544. DO 72 IX=1,NBINC
  545. IF (ICOP.NE.ICOMP(IX)) GOTO 72
  546. IF (IHA.NE.IHARM(IX)) GOTO 72
  547. IPOSP(ICO)=IX
  548. GOTO 70
  549. 72 CONTINUE
  550.  
  551. CALL ERREUR(21)
  552. RETURN
  553. 70 CONTINUE
  554. *
  555. ENDDO
  556. *
  557. *
  558. *
  559. * +---------------------------------------------------------------+
  560. * | |
  561. * | C R E A T I O N D E L A M A T R I C E |
  562. * | |
  563. * +---------------------------------------------------------------+
  564. *
  565. *
  566. * =================
  567. * CHAPEAU DU MRIGID
  568. * =================
  569. *
  570. * ON VA CREER AUTANT DE SOUS-MATRICES QU'IL Y A D'HARMONIQUES
  571. * DE FOURIER DISTINCTES
  572. NRIGEL=NBHAR
  573. SEGINI,RI2
  574. IRIG2=RI2
  575. RI2.MTYMAT='RIGIDITE'
  576. RI2.COERIG(1)=DFLO
  577. RI2.ICHOLE=0
  578. RI2.IMGEO1=0
  579. RI2.IMGEO2=0
  580. RI2.IFORIG=IFOUR
  581. RI2.ISUPEQ=0
  582. RI2.JRCOND=0
  583. RI2.JRDEPP=0
  584. RI2.JRDEPD=0
  585. RI2.JRELIM=0
  586. RI2.JRGARD=0
  587. RI2.JRTOT=0
  588. RI2.IMLAG=0
  589. RI2.IVECRI=0
  590. *
  591. * BOUCLE 1 SUR LES SOUS-MATRICES DE LA MATRICE RESULTAT IRIG2
  592. * ***********************************************************
  593. IHA2=0
  594. DO 80 IRI2=1,NBHAR
  595. *
  596. NOHA2=NUMHAR(IRI2)
  597. *
  598. * =========================
  599. * CREATION DU SUPER-ELEMENT
  600. * =========================
  601. *
  602. NBSOUS=0
  603. NBELEM=1
  604. NBNN=NBPOI
  605. NBREF=0
  606. SEGINI,IPT2
  607. IPT2.ITYPEL=28
  608. *
  609. * ON RETIENT LES NOEUDS QUI SONT A LA FOIS DANS M ET DANS U
  610. TIMAH=IMAHAR(IRI2)
  611. NBNN=0
  612. DO K=1,NOMAX
  613. IF (IMAHA(K).NE.0.AND.ICPR(K).NE.0) THEN
  614. NBNN=NBNN+1
  615. IPT2.NUM(NBNN,1)=K
  616. ENDIF
  617. ENDDO
  618. SEGSUP,TIMAH
  619. *
  620. IF (NBNN.EQ.0) THEN
  621. SEGSUP,IPT2
  622. GOTO 80
  623. ENDIF
  624. *
  625. SEGADJ,IPT2
  626. *
  627. IHA2=IHA2+1
  628. *
  629. *
  630. * =========================
  631. * DESCRIPTEUR DE LA MATRICE
  632. * =========================
  633. *
  634. NLIGRE=NBINC*NBPOI
  635. NLIGRP=NLIGRE
  636. NLIGRD=NLIGRE
  637. SEGINI,DES2,TIG2L,TIL2G
  638. NLIGRE=0
  639. DO 81 IX=1,NBINC
  640. IF (IHARM(IX).NE.NOHA2) GOTO 81
  641. DO IN=1,NBNN
  642. NLIGRE=NLIGRE+1
  643. DES2.LISINC(NLIGRE)=NOMDD(ICOMP(IX))
  644. DES2.LISDUA(NLIGRE)=NOMDU(ICOMP(IX))
  645. DES2.NOELEP(NLIGRE)=IN
  646. DES2.NOELED(NLIGRE)=IN
  647. IN1=ICPR(IPT2.NUM(IN,1))
  648. IG2L(IN1,IX)=NLIGRE
  649. IL2G(NLIGRE)=IX
  650. ENDDO
  651. 81 CONTINUE
  652. NLIGRP=NLIGRE
  653. NLIGRD=NLIGRE
  654. SEGADJ,DES2,TIL2G
  655. *
  656. *
  657. * ======================
  658. * REMPLISSAGE DU CONTENU
  659. * ======================
  660. *
  661. NELRIG=1
  662. SEGINI,XMATR2
  663. *
  664. * BOUCLE 2 SUR LES SOUS-MATRICES DE LA MATRICE D'ENTREE IRIG1
  665. * ***********************************************************
  666. DO 82 IRI1=1,NRIGEL1
  667. *
  668. COER=COERIG(IRI1)
  669. *
  670. NOHA1=IRIGEL(5,IRI1)
  671. IF (NOHA1.NE.NOHA2) GOTO 82
  672. *
  673. MELEME=IRIGEL(1,IRI1)
  674. SEGACT,MELEME
  675. IF (ITYPEL.EQ.22) THEN
  676. SEGDES,MELEME
  677. GOTO 82
  678. ENDIF
  679. NNO=NUM(/1)
  680. NEL=NUM(/2)
  681. *
  682. DESCR=IRIGEL(3,IRI1)
  683. SEGACT,DESCR
  684. NINCP=LISINC(/2)
  685. NINCD=LISDUA(/2)
  686. TPOSIN=ITPOS(IRI1)
  687. SEGACT,TPOSIN
  688. *
  689. XMATRI=IRIGEL(4,IRI1)
  690. SEGACT,XMATRI
  691. *
  692. * BOUCLE 3 SUR LES ELEMENTS DE LA SOUS-MATRICE [M].IRI1
  693. * *****************************************************
  694. DO 83 IEL=1,NEL
  695. *
  696. * ON VERIFIE QUE LA RIGIDITE ELEMENTAIRE POSSEDE UN
  697. * SUPPORT GEOMETRIQUE COMPATIBLE AVEC LE LISTCHPO
  698. DO INO=1,NNO
  699. IF (ICPR(NUM(INO,IEL)).NE.0) GOTO 84
  700. ENDDO
  701. GOTO 83
  702. *
  703. 84 CONTINUE
  704. *
  705. * BOUCLE 4 SUR LES PRIMALES (= COLONNES) DE [M].IRI1.IEL
  706. * ******************************************************
  707. DO 85 IXP=1,NINCP
  708. IN1=ICPR(NUM(NOELEP(IXP),IEL))
  709. IF (IN1.EQ.0) GOTO 85
  710. IX1=IPOSP(IXP)
  711. IF (IX1.EQ.0) GOTO 85
  712. ICOL=IG2L(IN1,IX1)
  713. *
  714. * BOUCLE 5 SUR TOUTES LES DUALES (= LIGNES) DE [U*tU]
  715. * ***************************************************
  716. DO ILIG=1,NLIGRE
  717. IX2=IL2G(ILIG)
  718. IN2=ICPR(IPT2.NUM(DES2.NOELED(ILIG),1))
  719. *
  720. * BOUCLE 6 SUR LES DUALES (= LIGNES) [M].IRI1.IEL ET
  721. * ET LES PRIMALES (= COLONNES) ASSOCIEES DANS [U*tU]
  722. * **************************************************
  723. XVAL=0.D0
  724. DO 86 IXD=1,NINCD
  725. IN3=ICPR(NUM(NOELED(IXD),IEL))
  726. IF (IN3.EQ.0) GOTO 86
  727. IX3=IPOSD(IXD)
  728. IF (IX3.EQ.0) GOTO 86
  729. *
  730. VA1=RE(IXD,IXP,IEL)
  731. VA2=MAT(IN2,IX2,IN3,IX3)
  732. *
  733. XVAL=XVAL+VA1*VA2
  734. 86 CONTINUE
  735. *
  736. XMATR2.RE(ILIG,ICOL,1)=XMATR2.RE(ILIG,ICOL,1)
  737. & +XVAL*COER
  738. c
  739. *
  740. ENDDO
  741. 85 CONTINUE
  742. 83 CONTINUE
  743. IF (IRI2.EQ.NBHAR) SEGDES,MELEME,DESCR,XMATRI
  744. 82 CONTINUE
  745. *
  746. RI2.IRIGEL(1,IHA2)=IPT2
  747. RI2.IRIGEL(2,IHA2)=0
  748. RI2.IRIGEL(3,IHA2)=DES2
  749. RI2.IRIGEL(4,IHA2)=XMATR2
  750. RI2.IRIGEL(5,IHA2)=NOHA2
  751. RI2.IRIGEL(6,IHA2)=0
  752. * AUCUNE RAISON A PRIORI QUE IRIG2 SOIT SYMETRIQUE
  753. RI2.IRIGEL(7,IHA2)=2
  754. xmatr2.symre=2
  755. *
  756. SEGDES,DES2,XMATR2,IPT2
  757. SEGSUP,TIG2L,TIL2G
  758. *
  759. 80 CONTINUE
  760. *
  761. * UN PEU DE MENAGE...
  762. SEGDES,MRIGID,RI2
  763. SEGSUP,TRAV2,ICOMP,IHARM,NUMHAR,IMAHAR,TICPR
  764. DO IRI=1,NRIGEL1
  765. TPOSIN=ITPOS(IRI)
  766. SEGSUP,TPOSIN
  767. ENDDO
  768. SEGSUP,IPOSIN
  769. *
  770. *
  771. RETURN
  772. *
  773. END
  774. *
  775. *
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  

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