Télécharger utu.eso

Retour à la liste

Numérotation des lignes :

utu
  1. C UTU SOURCE FANDEUR 22/01/03 21:15:54 11237
  2. SUBROUTINE UTU(LCH1,DFLO,IRIG)
  3. ************************************************************************
  4. * NOM : UTU
  5. ************************************************************************
  6. * DESCRIPTION : Realise le produit U*tU ou U est une matrice dont les
  7. * colonnes sont donnees par un objet LISTCHPO
  8. *
  9. * - Les multiplicateurs de Lagrange sont ignores
  10. * - Les harmoniques de Fourier differentes ne sont pas
  11. * croisees (matrice bloc-diagonale)
  12. *
  13. * Les composantes du LISTCHPO doivent avoir ete definies
  14. * dans la liste NOMDD (primales) de l'include CCHAMP pour
  15. * savoir comment nommer les inconnues duales de la matrice
  16. * ***********************************************************
  17. *
  18. * +-----------+
  19. * | CHPOINT#1 |
  20. * +-----------+
  21. * tU[L;N] ----> | CHPOINT#2 |
  22. * +-----------+
  23. * | ... |
  24. * U[N;L] +-----------+
  25. * | | CHPOINT#L |
  26. * | +-----------+
  27. * V
  28. * +---+---+---+---+ +-----------+
  29. * | C | C | | C | | |
  30. * | H | H | . | H | | UTU |
  31. * | P | P | . | P | | |
  32. * | # | # | . | # | | [N;N] |
  33. * | 1 | 2 | | L | | |
  34. * +---+---+---+---+ +-----------+
  35. *
  36. *
  37. * avec : L = nombre de champs
  38. * N = nombre d'inconnues
  39. * (triplet noeud/composante/harmonique)
  40. *
  41. ************************************************************************
  42. * APPELE PAR : pod.eso
  43. ************************************************************************
  44. * ENTREES :: LCH1 = POINTEUR VERS UN OBJET LISTCHPO
  45. * DFLO = COEFFICIENT MULTIPLICATEUR
  46. * SORTIES :: IRIG = POINTEUR VERS UN OBJET RIGIDITE
  47. ************************************************************************
  48. IMPLICIT INTEGER(I-N)
  49. IMPLICIT REAL*8 (A-H,O-Z)
  50. -INC PPARAM
  51. -INC CCOPTIO
  52. -INC SMCOORD
  53. -INC SMCHPOI
  54. -INC SMLCHPO
  55. -INC SMELEME
  56. -INC SMRIGID
  57. -INC CCHAMP
  58. *
  59. * ICPR(I) EST LE NUMERO LOCAL (DANS LE SUPPORT GEOMETRIQUE DU
  60. * LISTCHPO LCH1) DU I-EME NOEUD GLOBAL (DANS LA TABLE XCOORD)
  61. SEGMENT/TICPR/(ICPR(NOMAX))
  62.  
  63. * ICOM(I) EST LE NUMERO LOCAL (DANS LE LISTCHPO LCH1) DE LA I-EME
  64. * COMPOSANTE GLOBALE (DANS LA LISTE NOMDD)
  65. SEGMENT/TICOM/(ICOM(LNOMDD))
  66. *
  67. * NUMHAR(I) EST LE NUMERO D'HARMONIQUE ASSOCIE A LA I-EME RIGIDITE
  68. * ELEMENTAIRE DE LA MATRICE DE SORTIE IRIG2
  69. * IMAHAR(I) EST LE POINTEUR VERS LE SEGMENT TIMAH ASSOCIE A LA I-EME
  70. * RIGIDITE ELEMENTAIRE DE LA MATRICE DE SORTIE IRIG2
  71. * ICOHAR(I) EST LE POINTEUR VERS LE SEGMENT TICOH ASSOCIE A LA I-EME
  72. * RIGIDITE ELEMENTAIRE DE LA MATRICE DE SORTIE IRIG2
  73. SEGMENT,NUMHAR(0)
  74. SEGMENT,IMAHAR(0)
  75. SEGMENT,ICOHAR(0)
  76. * IMAHA(I) EST LE NUMERO GLOBAL (DANS LA TABLE XCOORD) DU I-EME
  77. * NOEUD LOCAL (DANS UNE MATRICE ELEM. DE IRIG2)
  78. SEGMENT/TIMAH/(IMAHA(0))
  79. * ICOHA(I) EST LE NUMERO GLOBAL (DANS LES LISTES NOMDD/NOMDU) DE LA
  80. * I-EME COMPOSANTE LOCALE (DANS UNE MATRICE ELEMENTAIRE DE IRIG2)
  81. SEGMENT/TICOH/(ICOHA(0))
  82. *
  83. * IPSO(I,J) EST LE SOUPO DU J-EME CHPOINT QUI CORRESPOND AU I-EME
  84. * SOUPO DU PREMIER CHPOINT (IPSO=0 SI LE SOUPO EST ASSOCIE
  85. * AUX MULT. DE LAGRANGE)
  86. * L'INCONNUE I (COMP+HARM) DU SOUPO J DU PREMIER CHPOINT EST EN
  87. * POSITION IINC(I,J,K) DANS LE SOUPO CORRESPONDANT DU
  88. * K-EME CHPOINT
  89. SEGMENT TRAV1
  90. INTEGER IPSO(NBSOU,NBCHP)
  91. INTEGER IINC(NXMAX,NBSOU,NBCHP)
  92. ENDSEGMENT
  93. *
  94. * VPO(I,J,K,L) EST LA VALEUR DU K-EME CHPOINT PRISE POUR LE I-EME
  95. * NOEUD LOCAL, LA J-EME COMPOSANTE LOCALE ET LE L-EME
  96. * NUMERO D'HARMONIQUE LOCAL
  97. SEGMENT TRAV2
  98. REAL*8 VPO(NBPOI,NBCOM,NBCHP,NBHAR)
  99. ENDSEGMENT
  100. *
  101. CHARACTER*(LOCOMP) MOCOMP
  102. *
  103. *
  104. *
  105. * +---------------------------------------------------------------+
  106. * | |
  107. * | T R A V A I L P R E L I M I N A I R E |
  108. * | |
  109. * +---------------------------------------------------------------+
  110. *
  111. MLCHPO=LCH1
  112. SEGACT,MLCHPO
  113. *
  114. *
  115. * ===================================
  116. * NOMBRE DE CHPOINTS DANS LE LISTCHPO
  117. * ===================================
  118. *
  119. NBCHP=ICHPOI(/1)
  120. IF (NBCHP.EQ.0) THEN
  121. MOTERR(1:8)='LISTCHPO'
  122. INTERR(1)=LCH1
  123. CALL ERREUR(356)
  124. RETURN
  125. ENDIF
  126. *
  127. *
  128. * ============================================================
  129. * CONSTRUCTION DE LA LISTE DES INCONNUES ASSOCIEES AU LISTCHPO
  130. * => REMPLISSAGE DE TICPR, THARM, TICOH ET TIMAH
  131. * ============================================================
  132. *
  133. MCHPO1=ICHPOI(1)
  134. SEGACT,MCHPO1
  135. *
  136. NS1=MCHPO1.IPCHP(/1)
  137. IF (NS1.EQ.0) THEN
  138. MOTERR(1:8)='CHPOINT'
  139. CALL ERREUR(1027)
  140. RETURN
  141. ENDIF
  142. *
  143. SEGINI,NUMHAR,IMAHAR,ICOHAR
  144. NBHAR=0
  145. *
  146. NOMAX=nbpts
  147. SEGINI,TICPR
  148. NBPOI=0
  149. *
  150. SEGINI,TICOM
  151. NBCOM=0
  152. *
  153. NXMAX=3
  154. NBCOM=0
  155. NBSOU=NS1
  156. SEGINI,TRAV1
  157. *
  158. *
  159. * **************************************
  160. * BOUCLE 1 SUR LES SOUPOS DU 1ER CHPOINT
  161. * **************************************
  162. DO 10 IS1=1,NS1
  163. MSOUP1=MCHPO1.IPCHP(IS1)
  164. SEGACT,MSOUP1
  165. *
  166. * ON IGNORE LES MULTIPLICATEURS DE LAGRANGE
  167. NX1 =MSOUP1.NOCOMP(/2)
  168. MOCOMP=MSOUP1.NOCOMP(1)
  169. IF (MOCOMP.EQ.'LX'.OR.MOCOMP.EQ.'FLX') THEN
  170. SEGDES,MSOUP1
  171. GOTO 10
  172. ENDIF
  173. *
  174. IF (NX1.GT.NXMAX) THEN
  175. NXMAX=NX1
  176. SEGADJ,TRAV1
  177. ENDIF
  178. *
  179. * ON VERIFIE QUE LE MAILLAGE N'EST PAS VIDE
  180. IGEO1=MSOUP1.IGEOC
  181. IF (IGEO1.LE.0) THEN
  182. MOTERR(1:8)='CHPOINT'
  183. CALL ERREUR(1027)
  184. RETURN
  185. ENDIF
  186. IPT1=IGEO1
  187. SEGACT,IPT1
  188. NNO1=IPT1.NUM(/2)
  189. IF (NNO1.EQ.0) THEN
  190. SEGDES,MSOUP1,IPT1
  191. GOTO 10
  192. ENDIF
  193. *
  194. * ON VERIFIE QUE LE CHPOINT EST CORRECTEMENT PARTITIONNE
  195. * (UN NOEUD NE PEUT PAS APPARTENIR A PLUSIEURS ZONES)
  196. DO I1=1,NNO1
  197. K1=IPT1.NUM(1,I1)
  198. IF (ICPR(K1).NE.0) THEN
  199. CALL ERREUR(920)
  200. RETURN
  201. ENDIF
  202. NBPOI=NBPOI+1
  203. ICPR(K1)=NBPOI
  204. ENDDO
  205. *
  206. * IDENTIFICATION DES HARMONIQUES DE FOURIER DISTINCTES
  207. DO 11 IX1=1,NX1
  208. IHA1=MSOUP1.NOHARM(IX1)
  209. *
  210. * A-T-ON DEJA VU CETTE HARMONIQUE DANS CE SOUPO ?
  211. DO IX2=1,IX1-1
  212. IF (IHA1.EQ.MSOUP1.NOHARM(IX2)) GOTO 11
  213. ENDDO
  214. *
  215. * L'A-T-ON DEJA VUE TOUT COURT ?
  216. DO K=1,NBHAR
  217. IF (IHA1.EQ.NUMHAR(K)) THEN
  218. * => ON RECUPERE SES SEGMENTS TIMAH ET TICOH
  219. TIMAH=IMAHAR(K)
  220. TICOH=ICOHAR(K)
  221. GOTO 12
  222. ENDIF
  223. ENDDO
  224. * => ON CREE DE NOUVEAUX SEGMENTS TIMAH ET TICOH
  225. NBHAR=NBHAR+1
  226. NUMHAR(**)=IHA1
  227. SEGINI,TIMAH,TICOH
  228. IMAHAR(**)=TIMAH
  229. ICOHAR(**)=TICOH
  230.  
  231. * => ON REMPLIT LE SEGMENT TIMAH
  232. 12 CONTINUE
  233. DO 13 IN1=1,NNO1
  234. K1=IPT1.NUM(1,IN1)
  235. DO IN2=1,IMAHA(/1)
  236. IF (K1.EQ.IMAHA(IN2)) GOTO 13
  237. ENDDO
  238. IMAHA(**)=K1
  239. 13 CONTINUE
  240.  
  241. 11 CONTINUE
  242. SEGDES,IPT1
  243. *
  244. * VERIFICATION DES NOMS DES COMPOSANTES (ELLES DOIVENT ETRE
  245. * REFERENCEES DANS LA LISTE NOMDD DES INCONNUES PRIMALES)
  246. DO 14 IX1=1,NX1
  247. MOCOMP=MSOUP1.NOCOMP(IX1)
  248. *
  249. IINC(IX1,IS1,1)=IX1
  250. *
  251. * SELECTION DU SEGMENT TICOH ASSOCIE A L'HARMONIQUE DE IX1
  252. IHA1=MSOUP1.NOHARM(IX1)
  253. DO IHA2=1,NBHAR
  254. IF (IHA1.EQ.NUMHAR(IHA2)) GOTO 15
  255. ENDDO
  256. 15 CONTINUE
  257. TICOH=ICOHAR(IHA2)
  258.  
  259. * RECHERCHE DU NOM DE COMPOSANTE DANS NOMDD
  260. DO IC1=1,LNOMDD
  261. IF (MOCOMP.EQ.NOMDD(IC1)) THEN
  262. * => ON REMPLIT LE SEGMENT TICOM
  263. IF (ICOM(IC1).EQ.0) THEN
  264. NBCOM=NBCOM+1
  265. ICOM(IC1)=NBCOM
  266. ENDIF
  267. * => ON REMPLIT LE SEGMENT TICOH
  268. DO IC3=1,ICOHA(/1)
  269. IF (IC1.EQ.ICOHA(IC3)) GOTO 14
  270. ENDDO
  271. ICOHA(**)=IC1
  272. GOTO 14
  273. ENDIF
  274. ENDDO
  275.  
  276. * ERREUR : COMPOSANTE PRIMALE NON REFERENCEE DANS CCHAMP
  277. MOTERR=MOCOMP
  278. CALL ERREUR(108)
  279. RETURN
  280. 14 CONTINUE
  281. *
  282. * POINTEUR DIRECT VERS LE SEGMENT MPOVAL
  283. IPSO(IS1,1)=MSOUP1
  284. *
  285. * ********************************
  286. * BOUCLE 2 SUR LES AUTRES CHPOINTS
  287. * ********************************
  288. DO 16 ICH=2,NBCHP
  289. MCHPO2=ICHPOI(ICH)
  290. SEGACT,MCHPO2
  291. NS2=MCHPO2.IPCHP(/1)
  292. *
  293. * **********************************************
  294. * ON VA CHERCHER LE SOUPO CORRESPONDANT A MSOUP1
  295. * => BOUCLE 3 SUR LES SOUPOS DE MCHPO2
  296. * **********************************************
  297. DO 17 IS2=1,NS2
  298. MSOUP2=MCHPO2.IPCHP(IS2)
  299. SEGACT,MSOUP1,MSOUP2
  300. *
  301. * MEME MAILLAGE ?
  302. IGEO2=MSOUP2.IGEOC
  303. IF (IGEO1.NE.IGEO2) THEN
  304. SEGDES,MSOUP2
  305. GOTO 17
  306. ENDIF
  307. *
  308. * MEME NOMBRE DE COMPOSANTES ?
  309. NX2=MSOUP2.NOCOMP(/2)
  310. MOCOMP=MSOUP1.NOCOMP(1)
  311. IF (MOCOMP.EQ.'LX'.OR.MOCOMP.EQ.'FLX'.OR.NX1.NE.NX2) THEN
  312. SEGDES,MSOUP2
  313. GOTO 17
  314. ENDIF
  315. IF (NX2.GT.NXMAX) THEN
  316. NXMAX=NX2
  317. SEGADJ,TRAV1
  318. ENDIF
  319. *
  320. * MEMES LISTES DE COMPOSANTES ?
  321. * => ON FAIT LA CORRESPONDANCE ENTRE LES COMPOSANTES DES
  322. * 2 SOUPOS
  323. DO 18 IX1=1,NX1
  324. MOCOMP=MSOUP1.NOCOMP(IX1)
  325. DO 19 IX2=1,NX2
  326. IF (MOCOMP.NE.MSOUP2.NOCOMP(IX2)) GOTO 19
  327. IF (MSOUP1.NOHARM(IX1).EQ.MSOUP2.NOHARM(IX2)) THEN
  328. IINC(IX1,IS1,ICH)=IX2
  329. GOTO 18
  330. ENDIF
  331. 19 CONTINUE
  332. GOTO 99
  333. 18 CONTINUE
  334. *
  335. * POINTEUR DIRECT VERS LE SEGMENT MPOVAL
  336. IPSO(IS1,ICH)=MSOUP2
  337. *
  338. * (CHPOINT SUIVANT)
  339. SEGDES,MCHPO2
  340. * SEGDES,MSOUP2
  341. GOTO 16
  342. *
  343. 17 CONTINUE
  344. *
  345. * MESSAGE D'ERREUR
  346. * ****************
  347. 99 CONTINUE
  348. WRITE(MOTERR(1:16),FMT='(2I8)') MCHPO1,MCHPO2
  349. CALL ERREUR(135)
  350. RETURN
  351. *
  352. 16 CONTINUE
  353. * SEGDES,MSOUP1
  354. *
  355. 10 CONTINUE
  356. SEGDES,MCHPO1,MLCHPO
  357. *
  358. *
  359. *
  360. * ========================================================
  361. * STOCKAGE DES VALEURS DU LISTCHPO DANS UN TABLEAU ORDONNE
  362. * D'APRES LE CONTENU DES OBJETS CHPOINT => REMPLISSAGE DE
  363. * TRAV2
  364. * ========================================================
  365. *
  366. SEGINI,TRAV2
  367. DO ICH=1,NBCHP
  368. DO 20 ISOU=1,NS1
  369. ISO1=IPSO(ISOU,ICH)
  370. IF (ISO1.EQ.0) GOTO 20
  371. MSOUPO=ISO1
  372. * SEGACT,MSOUPO
  373. MELEME=IGEOC
  374. MPOVAL=IPOVAL
  375. SEGACT,MELEME,MPOVAL
  376. NNO=VPOCHA(/1)
  377. NIX=VPOCHA(/2)
  378. DO IX=1,NIX
  379. IX1 =IINC(IX,ISOU,ICH)
  380. * IC1 =NUMERO LOCAL DE LA COMPOSANTE
  381. MOCOMP=NOCOMP(IX1)
  382. DO ICO=1,LNOMDD
  383. IF (MOCOMP.EQ.NOMDD(ICO)) GOTO 21
  384. ENDDO
  385. 21 IC1=ICOM(ICO)
  386. * IH1 = NUMERO LOCAL DE L'HARMONIQUE
  387. NUH=NOHARM(IX1)
  388. DO IH1=1,NBHAR
  389. IF (NUH.EQ.NUMHAR(IH1)) GOTO 22
  390. ENDDO
  391. 22 DO INO=1,NNO
  392. * IN1 = NUMERO LOCAL DU NOEUD
  393. IN1=ICPR(NUM(1,INO))
  394. *
  395. VPO(IN1,IC1,ICH,IH1)=VPOCHA(INO,IX1)
  396. ENDDO
  397. ENDDO
  398. SEGDES,MELEME,MPOVAL,MSOUPO
  399. 20 CONTINUE
  400. ENDDO
  401. SEGSUP,TRAV1,TICOM,TICPR
  402.  
  403.  
  404. * +---------------------------------------------------------------+
  405. * | |
  406. * | C R E A T I O N D E L A M A T R I C E |
  407. * | |
  408. * +---------------------------------------------------------------+
  409. *
  410. *
  411. * =================
  412. * CHAPEAU DU MRIGID
  413. * =================
  414. *
  415. * ON VA CREER AUTANT DE SOUS-MATRICES QU'IL Y A D'HARMONIQUES
  416. * DE FOURIER DISTINCTES
  417. NRIGEL=NBHAR
  418. SEGINI,MRIGID
  419. IRIG=MRIGID
  420. MTYMAT='RIGIDITE'
  421. COERIG(1)=DFLO
  422. ICHOLE=0
  423. IMGEO1=0
  424. IMGEO2=0
  425. IFORIG=IFOUR
  426. ISUPEQ=0
  427. JRCOND=0
  428. JRDEPP=0
  429. JRDEPD=0
  430. JRELIM=0
  431. JRGARD=0
  432. JRTOT=0
  433. IMLAG=0
  434. IPROFO=0
  435. IVECRI=0
  436. *
  437. * BOUCLE 1 SUR LES SOUS-MATRICES
  438. * ******************************
  439. DO IRI=1,NBHAR
  440. *
  441. NOHAR=NUMHAR(IRI)
  442. *
  443. * =========================
  444. * CREATION DU SUPER-ELEMENT
  445. * =========================
  446. *
  447. TIMAH=IMAHAR(IRI)
  448. NBSOUS=0
  449. NBELEM=1
  450. NBNN=IMAHA(/1)
  451. NBREF=0
  452. SEGINI,MELEME
  453. ITYPEL=28
  454. DO K=1,NBNN
  455. NUM(K,1)=IMAHA(K)
  456. ENDDO
  457. SEGDES,MELEME
  458. SEGSUP,TIMAH
  459. *
  460. *
  461. * =========================
  462. * DESCRIPTEUR DE LA MATRICE
  463. * =========================
  464. *
  465. TICOH=ICOHAR(IRI)
  466. NBCO=ICOHA(/1)
  467. NLIGRP=NBCO*NBNN
  468. NLIGRD=NBCO*NBNN
  469. SEGINI,DESCR
  470. IX=0
  471. DO ICO=1,NBCO
  472. IC1=ICOHA(ICO)
  473. DO INO=1,NBNN
  474. IX=IX+1
  475. LISINC(IX)=NOMDD(IC1)
  476. LISDUA(IX)=NOMDU(IC1)
  477. NOELEP(IX)=INO
  478. NOELED(IX)=INO
  479. ENDDO
  480. ENDDO
  481. SEGDES,DESCR
  482. SEGSUP,TICOH
  483. *
  484. *
  485. * ======================
  486. * REMPLISSAGE DU CONTENU
  487. * ======================
  488. *
  489. NELRIG=1
  490. SEGINI,XMATRI
  491. *
  492. NBINC=NBCOM*NBPOI
  493. DO ICH=1,NBCHP
  494. DO IX1=1,NBINC
  495. IC1=((IX1-1)/NBPOI)+1
  496. IN1=MOD(IX1-1,NBPOI)+1
  497. *
  498. * REMPLISSAGE DE LA DIAGONALE
  499. VA1=VPO(IN1,IC1,ICH,IRI)
  500. RE(IX1,IX1,1)=RE(IX1,IX1,1)+VA1*VA1
  501.  
  502. * REMPLISSAGE DU TRIANGLE SUPERIEUR
  503. DO IX2=IX1+1,NBINC
  504. IC2=((IX2-1)/NBPOI)+1
  505. IN2=MOD(IX2-1,NBPOI)+1
  506. VA2=VPO(IN2,IC2,ICH,IRI)
  507. RE(IX1,IX2,1)=RE(IX1,IX2,1)+VA1*VA2
  508. ENDDO
  509. *
  510. ENDDO
  511. ENDDO
  512. *
  513. * REMPLISSAGE DU TRIANGLE INFERIEUR
  514. DO IX1=1,NBINC
  515. DO IX2=IX1+1,NBINC
  516. RE(IX2,IX1,1)=RE(IX1,IX2,1)
  517. ENDDO
  518. ENDDO
  519. *
  520. *
  521. IRIGEL(1,IRI)=MELEME
  522. IRIGEL(2,IRI)=0
  523. IRIGEL(3,IRI)=DESCR
  524. IRIGEL(4,IRI)=XMATRI
  525. IRIGEL(5,IRI)=NOHAR
  526. IRIGEL(6,IRI)=0
  527. IRIGEL(7,IRI)=0
  528. *
  529. SEGDES,XMATRI
  530. ENDDO
  531. *
  532. SEGDES,MRIGID
  533. SEGSUP,TRAV2,NUMHAR,IMAHAR,ICOHAR
  534. *
  535. *
  536. RETURN
  537. *
  538. END
  539. *
  540. *
  541.  
  542.  
  543.  
  544.  
  545.  

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