Télécharger towa.eso

Retour à la liste

Numérotation des lignes :

towa
  1. C TOWA SOURCE FANDEUR 22/01/03 21:15:52 11237
  2. SUBROUTINE TOWA (IPTAB1)
  3. C
  4. C***********************************************************************
  5. C
  6. C
  7. C FONCTION:
  8. C ---------
  9. C
  10. C en "1D/0D" sur des éléments de type POINT.
  11. C
  12. C
  13. C ENTREE :
  14. C ----------
  15. C
  16. C IPTAB1 : Pointeur sur la TABLE de soustype 'OPER_0D'
  17. C contenant les indices suivants :
  18. C
  19. C TAB1 . 'GEOINF' : TABLE des informations géométriques de soustype
  20. C 'GEOINF' (type ENTIER).
  21. C TAB1 . 'INCO' : TABLE de soustype 'INCO' contenant l'ensemble
  22. C des champs à l'itération précédant l'itération
  23. C courante (type ENTIER).
  24. C TAB1 . 'DUAL' : Nom de l'inconnue duale (doit être un indice de
  25. C la table de soustype 'INCO' et de support
  26. C 'WALL') (type MOT).
  27. C TAB1 . 'PRIMAL' : Nom de l'inconnue duale (doit être un indice de
  28. C la table de soustype 'INCO' et de support
  29. C 'WALL') (type MOT).
  30. C TAB1 . 'DT' : Pas de temps (type FLOTTANT ou MOT).
  31. C TAB1 . 'CP' : Chaleurs spécifiques des murs
  32. C (type CHPO, de support 'WALL', à 2 composantes)
  33. C TAB1 . 'RHO' : Masses volumiques des murs
  34. C (type CHPO, de support 'WALL', à 2 composantes)
  35. C TAB1 . 'LBD' : Conductivités thermiques spécifiques des murs
  36. C (type CHPO, de support 'WALL', à 2 composantes)
  37. C TAB1 . 'THICK' : Epaisseurs des murs
  38. C (type CHPO, de support 'WALL', à 2 composantes)
  39. C
  40. C RESULTATS:
  41. C ---------
  42. C
  43. C TAB1 . 'LHS' : Matrice élémentaire (union des matrices
  44. C élémentaires associées à l'opération
  45. C type RIGIDITE).
  46. C TAB1 . 'RHS' : Second membre associé à l'opération
  47. C (type CHPO partitionné).
  48. C
  49. C
  50. C AUTEUR, DATE DE CREATION:
  51. C -------------------------
  52. C
  53. C Laurent DADA décembre 1996
  54. C
  55. C
  56. C LANGAGE:
  57. C --------
  58. C
  59. C ESOPE + FORTRAN77
  60. C
  61. C***********************************************************************
  62. C
  63. IMPLICIT INTEGER(I-N)
  64. IMPLICIT REAL*8 (A-H,O-Z)
  65. C
  66.  
  67. -INC PPARAM
  68. -INC CCOPTIO
  69. -INC CCGEOME
  70. -INC SMCOORD
  71. -INC SMTABLE
  72. POINTEUR IPTAB1.MTABLE,IPTAB2.MTABLE,IPTABG.MTABLE
  73. POINTEUR IPTABS.MTABLE,IPTABI.MTABLE
  74. -INC SMCHPOI
  75. POINTEUR MPOVC1.MPOVAL,MPOVR1.MPOVAL,MPOVD1.MPOVAL
  76. POINTEUR MPOVL1.MPOVAL,MPOVT1.MPOVAL,MPOVQ1.MPOVAL
  77. -INC SMELEME
  78. POINTEUR IPCEN.MELEME,IPINW.MELEME
  79. -INC SMRIGID
  80. -INC SMLMOTS
  81. C
  82. C Tableaux des correspondances entre les numéros des points et
  83. C leurs positions dans les MELEME des champs
  84. C
  85. SEGMENT REDIR
  86. INTEGER IPOSC1(NNGOT)
  87. INTEGER IPOSR1(NNGOT)
  88. INTEGER IPOSL1(NNGOT)
  89. INTEGER IPOST1(NNGOT)
  90. INTEGER IPOSQ1(NNGOT)
  91. INTEGER IPOSD1(NNGOT)
  92. ENDSEGMENT
  93. C
  94. C Tableaux des positions des noms de composantes "gauches et droites"
  95. C pour les champs de propriétés matérielles
  96. C
  97. SEGMENT NOCOPO
  98. INTEGER NOCOC1(2)
  99. INTEGER NOCOR1(2)
  100. INTEGER NOCOL1(2)
  101. INTEGER NOCOT1(2)
  102. ENDSEGMENT
  103. C
  104. C
  105. CHARACTER*8 TYPE,MOTI,MOT1,NOMPR1,NOMDU1,NOSUD1,NOMDT1
  106. CHARACTER*8 NOMP1,NOMP2,NOMPR2,NOSUP2,NOMFL1,NOSUF1
  107. CHARACTER*8 MTYPI,MTYPR,CHARI,CHARR
  108. LOGICAL LOGII,LOGIR
  109. C
  110. C
  111. C Lecture de la table GEOINF de la table OPER_0D
  112. C
  113. TYPE = 'TABLE '
  114. CALL ACMO (IPTAB1,'GEOINF',TYPE,IPTABG)
  115. IF (IERR.NE.0) RETURN
  116. C
  117. MOTI = 'SOUSTYPE'
  118. CALL ACMM (IPTABG,MOTI,MOT1)
  119. IF (IERR.NE.0) RETURN
  120. IF (MOT1(1:6).NE.'GEOINF') THEN
  121. MOTERR(1:8) = 'GEOINF '
  122. CALL ERREUR (-173)
  123. RETURN
  124. ENDIF
  125. C
  126. C Lecture de la table INCO dans la table OPER_0D
  127. C
  128. TYPE = 'TABLE '
  129. CALL ACMO (IPTAB1,'INCO',TYPE,IPTAB2)
  130. IF (IERR.NE.0) RETURN
  131. C
  132. MOTI = 'SOUSTYPE'
  133. CALL ACMM (IPTAB2,MOTI,MOT1)
  134. IF (IERR.NE.0) RETURN
  135. IF (MOT1(1:4).NE.'INCO') THEN
  136. MOTERR(1:8) = 'INCO '
  137. CALL ERREUR (-173)
  138. RETURN
  139. ENDIF
  140. C
  141. C Lecture de la table SUPPORT dans la table INCO
  142. C
  143. C TYPE = 'TABLE '
  144. C CALL ACMO (IPTAB2,'SUPPORT',TYPE,IPTABS)
  145. C IF (IERR.NE.0) RETURN
  146. C
  147. C Lecture de l'inconnue DUALE
  148. C
  149. TYPE = ' '
  150. CALL ACMO (IPTAB1,'DUAL',TYPE,IDU1)
  151. IF (TYPE.EQ.'MOT ') THEN
  152. CALL ACMM (IPTAB1,'DUAL',NOMDU1)
  153. IF (IERR.NE.0) RETURN
  154. ENDIF
  155. C
  156. C Lecture du nom du support de l'inconnue duale
  157. C
  158. C TYPE = ' '
  159. C CALL ACMO (IPTABS,NOMDU1,TYPE,ISUD1)
  160. C IF (TYPE.EQ.'MOT ') THEN
  161. C CALL ACMM (IPTABS,NOMDU1,NOSUD1)
  162. C IF (IERR.NE.0) RETURN
  163. C ENDIF
  164. C
  165. C Contrôle du support de l'inconnue duale
  166. C
  167. C IF (NOSUD1.NE.'WALL') THEN
  168. C MOTERR(1:8) = 'DUAL '
  169. C MOTERR(9:16) = 'CHPOINT '
  170. C CALL ERREUR (788)
  171. C RETURN
  172. C ENDIF
  173. C
  174. C Lecture de l'inconnue primale
  175. C
  176. TYPE = ' '
  177. CALL ACMO (IPTAB1,'PRIMAL',TYPE,IPR1)
  178. IF (TYPE.EQ.'MOT ') THEN
  179. CALL ACMM (IPTAB1,'PRIMAL',NOMPR1)
  180. IF (IERR.NE.0) RETURN
  181. IF (NOMPR1.NE.NOMDU1) THEN
  182. MOTERR(1:8) = 'PRIMAL '
  183. MOTERR(9:16) = NOMPR1
  184. CALL ERREUR (787)
  185. RETURN
  186. ENDIF
  187. ENDIF
  188. C
  189. C Lecture du pas de temps
  190. C
  191. TYPE = ' '
  192. CALL ACMO (IPTAB1,'DT',TYPE,IPR1)
  193. IF (IERR.NE.0) RETURN
  194. IF (TYPE.EQ.'MOT ') THEN
  195. CALL ACMM (IPTAB1,'DT',NOMDT1)
  196. IF (IERR.NE.0) RETURN
  197. C récupération du pas de temps dans la table INCO
  198. CALL ACMF (IPTAB2,NOMDT1,XDT1)
  199. IF (IERR.NE.0) RETURN
  200. ELSEIF (TYPE.EQ.'FLOTTANT') THEN
  201. CALL ACMF (IPTAB1,'DT',XDT1)
  202. IF (IERR.NE.0) RETURN
  203. ELSE
  204. MOTERR(1:8) = 'DT '
  205. MOTERR(9:16) = TYPE
  206. CALL ERREUR (787)
  207. RETURN
  208. ENDIF
  209. C
  210. C
  211. C Récupération des propriétés matérielles des murs
  212. C Récupération des segments MPOVAL des champs
  213. C Initialisation des tableaux des correspondances
  214. C Initialisation des tableaux des positions des noms des composantes
  215. C
  216. NNGOT = nbpts
  217. SEGINI REDIR
  218. SEGINI NOCOPO
  219. C
  220. C Les chaleurs spécifiques
  221. C
  222. TYPE = 'CHPOINT '
  223. CALL ACMO (IPTAB1,'CP',TYPE,MCHPO1)
  224. IF (IERR.NE.0) RETURN
  225. SEGACT MCHPO1
  226. MSOUPO = MCHPO1.IPCHP(1)
  227. SEGDES MCHPO1
  228. SEGACT MSOUPO
  229. NC1 = NOCOMP(/2)
  230. IF (NC1.NE.2) THEN
  231. MOTERR(1:8) = 'CP '
  232. MOTERR(9:16) = 'CHPOINT '
  233. CALL ERREUR (784)
  234. RETURN
  235. ENDIF
  236. IF ((NOCOMP(1).EQ.'1CW').AND.(NOCOMP(2).EQ.'2CW')) THEN
  237. NOCOC1(1) = 1
  238. NOCOC1(2) = 2
  239. ELSEIF ((NOCOMP(2).EQ.'1CW').AND.(NOCOMP(1).EQ.'2CW')) THEN
  240. NOCOC1(1) = 2
  241. NOCOC1(2) = 1
  242. ELSE
  243. MOTERR(1:8) = 'CP '
  244. MOTERR(9:16) = 'composan'
  245. CALL ERREUR (787)
  246. RETURN
  247. ENDIF
  248. MPOVC1 = IPOVAL
  249. IPT1 = IGEOC
  250. SEGDES MSOUPO
  251. C
  252. SEGACT IPT1
  253. NBEL1 = IPT1.NUM(/2)
  254. DO 100 I100=1,NBEL1
  255. IPOSC1(IPT1.NUM(1,I100)) = I100
  256. 100 CONTINUE
  257. SEGDES IPT1
  258. C
  259. C Les masses volumiques
  260. C
  261. TYPE = 'CHPOINT '
  262. CALL ACMO (IPTAB1,'RHO',TYPE,MCHPO1)
  263. IF (IERR.NE.0) RETURN
  264. SEGACT MCHPO1
  265. MSOUPO = MCHPO1.IPCHP(1)
  266. SEGDES MCHPO1
  267. SEGACT MSOUPO
  268. NC1 = NOCOMP(/2)
  269. IF (NC1.NE.2) THEN
  270. MOTERR(1:8) = 'RHO '
  271. MOTERR(9:16) = 'CHPOINT '
  272. CALL ERREUR (784)
  273. RETURN
  274. ENDIF
  275. IF ((NOCOMP(1).EQ.'1RW').AND.(NOCOMP(2).EQ.'2RW')) THEN
  276. NOCOR1(1) = 1
  277. NOCOR1(2) = 2
  278. ELSEIF ((NOCOMP(2).EQ.'1RW').AND.(NOCOMP(1).EQ.'2RW')) THEN
  279. NOCOR1(1) = 2
  280. NOCOR1(2) = 1
  281. ELSE
  282. MOTERR(1:8) = 'RHO '
  283. MOTERR(9:16) = 'composan'
  284. CALL ERREUR (787)
  285. RETURN
  286. ENDIF
  287. MPOVR1 = IPOVAL
  288. IPT1 = IGEOC
  289. SEGDES MSOUPO
  290. C
  291. SEGACT IPT1
  292. NBEL1 = IPT1.NUM(/2)
  293. DO 200 I200=1,NBEL1
  294. IPOSR1(IPT1.NUM(1,I200)) = I200
  295. 200 CONTINUE
  296. SEGDES IPT1
  297. C
  298. C Les conductivités thermiques
  299. C
  300. TYPE = 'CHPOINT '
  301. CALL ACMO (IPTAB1,'LBD',TYPE,MCHPO1)
  302. IF (IERR.NE.0) RETURN
  303. SEGACT MCHPO1
  304. MSOUPO = MCHPO1.IPCHP(1)
  305. SEGDES MCHPO1
  306. SEGACT MSOUPO
  307. NC1 = NOCOMP(/2)
  308. IF (NC1.NE.2) THEN
  309. MOTERR(1:8) = 'LBD '
  310. MOTERR(9:16) = 'CHPOINT '
  311. CALL ERREUR (784)
  312. RETURN
  313. ENDIF
  314. IF ((NOCOMP(1).EQ.'1LW').AND.(NOCOMP(2).EQ.'2LW')) THEN
  315. NOCOL1(1) = 1
  316. NOCOL1(2) = 2
  317. ELSEIF ((NOCOMP(2).EQ.'1LW').AND.(NOCOMP(1).EQ.'2LW')) THEN
  318. NOCOL1(1) = 2
  319. NOCOL1(2) = 1
  320. ELSE
  321. MOTERR(1:8) = 'LBD '
  322. MOTERR(9:16) = 'composan'
  323. CALL ERREUR (787)
  324. RETURN
  325. ENDIF
  326. MPOVL1 = IPOVAL
  327. IPT1 = IGEOC
  328. SEGDES MSOUPO
  329. C
  330. SEGACT IPT1
  331. NBEL1 = IPT1.NUM(/2)
  332. DO 300 I300=1,NBEL1
  333. IPOSL1(IPT1.NUM(1,I300)) = I300
  334. 300 CONTINUE
  335. SEGDES IPT1
  336. C
  337. C Les épaisseurs
  338. C
  339. TYPE = 'CHPOINT '
  340. CALL ACMO (IPTAB1,'THICK',TYPE,MCHPO1)
  341. IF (IERR.NE.0) RETURN
  342. SEGACT MCHPO1
  343. MSOUPO = MCHPO1.IPCHP(1)
  344. SEGDES MCHPO1
  345. SEGACT MSOUPO
  346. NC1 = NOCOMP(/2)
  347. IF (NC1.NE.2) THEN
  348. MOTERR(1:8) = 'THICK '
  349. MOTERR(9:16) = 'CHPOINT '
  350. CALL ERREUR (784)
  351. RETURN
  352. ENDIF
  353. IF ((NOCOMP(1).EQ.'1TW').AND.(NOCOMP(2).EQ.'2TW')) THEN
  354. NOCOT1(1) = 1
  355. NOCOT1(2) = 2
  356. ELSEIF ((NOCOMP(2).EQ.'1TW').AND.(NOCOMP(1).EQ.'2TW')) THEN
  357. NOCOT1(1) = 2
  358. NOCOT1(2) = 1
  359. ELSE
  360. MOTERR(1:8) = 'THICK '
  361. MOTERR(9:16) = 'composan'
  362. CALL ERREUR (787)
  363. RETURN
  364. ENDIF
  365. MPOVT1 = IPOVAL
  366. IPT1 = IGEOC
  367. SEGDES MSOUPO
  368. C
  369. SEGACT IPT1
  370. NBEL1 = IPT1.NUM(/2)
  371. DO 400 I400=1,NBEL1
  372. IPOST1(IPT1.NUM(1,I400)) = I400
  373. 400 CONTINUE
  374. SEGDES IPT1
  375. C
  376. C Récupération des valeurs de l'inconnue duale à l'itération
  377. C précédente
  378. C
  379. TYPE = 'CHPOINT '
  380. CALL ACMO (IPTAB2,NOMDU1,TYPE,IPCHD1)
  381. IF (IERR.NE.0) RETURN
  382. CALL LICHT (IPCHD1,MPOVD1,TYPE,IPT1)
  383. SEGACT IPT1
  384. NBEL1 = IPT1.NUM(/2)
  385. DO 500 I500=1,NBEL1
  386. IPOSD1(IPT1.NUM(1,I500)) = I500
  387. 500 CONTINUE
  388. SEGDES IPT1
  389. SEGDES MPOVD1
  390. C
  391. C Récupération du MAILLAGE de POI1 localisant les centres des murs
  392. C
  393. TYPE = 'MAILLAGE'
  394. CALL ACMO (IPTABG,'CENTRW',TYPE,IPCEN)
  395. IF (IERR.NE.0) RETURN
  396. SEGACT IPCEN
  397. IF ((IPCEN.ITYPEL).NE.1) THEN
  398. MOTERR(1:8) = 'CENTRW '
  399. MOTERR(9:16) = 'non POI1'
  400. CALL ERREUR (787)
  401. SEGDES IPCEN
  402. RETURN
  403. ENDIF
  404. C
  405. C Récupération de la TABLE des correspondances
  406. C centres des murs -> points des murs
  407. C
  408. TYPE = 'TABLE '
  409. CALL ACMO (IPTABG,'INWALL',TYPE,IPTABI)
  410. IF (IERR.NE.0) RETURN
  411. C
  412. C Création de la RIGIDITE
  413. C
  414. NBELC1 = IPCEN.NUM(/2)
  415. C
  416. NRIGE = 7
  417. NRIGEL = NBELC1
  418. SEGINI MRIGID
  419. MTYMAT = 'RIGIDITE'
  420. IFORIG = IFOUR
  421. ICHOLE = 0
  422. IMGEO1 = 0
  423. IMGEO2 = 0
  424. ISUPEQ = 0
  425. C
  426. C
  427. C Création des matrices élémentaires
  428. C et des seconds membres
  429. C
  430. C
  431. SEGDES REDIR
  432. SEGDES NOCOPO
  433. C
  434. MTYPI = 'POINT '
  435. MTYPR = 'MAILLAGE'
  436. DO 10 I10=1,NBELC1
  437. NUM1 = IPCEN.NUM(1,I10)
  438. C Récupération du MAILLAGE de POI1, support des points du mur
  439. C associé au point centre NUM1
  440. CALL ACCTAB (IPTABI,MTYPI,IVALI,XVARI,CHARI,LOGII,NUM1,
  441. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IRETR)
  442. IF (IERR.NE.0) RETURN
  443. IPINW = IRETR
  444. SEGACT IPINW
  445. IF ((IPINW.ITYPEL).NE.1) THEN
  446. MOTERR(1:8) = 'INWALL '
  447. MOTERR(9:16) = 'non POI1'
  448. CALL ERREUR (787)
  449. SEGDES IPINW
  450. RETURN
  451. ENDIF
  452. C
  453. C Transformation du maillage de POI1
  454. C en un maillage de type SUPER-ELEMENT pour la RIGIDITE
  455. C
  456. NBNN = IPINW.NUM(/2)
  457. NBSOUS = 0
  458. NBREF = 0
  459. NBELEM = 1
  460. SEGINI MELEME
  461. ICOLOR(1) = IDCOUL
  462. ITYPEL = 28
  463. DO 11 I11=1,NBNN
  464. NUM(I11,1) = IPINW.NUM(1,I11)
  465. 11 CONTINUE
  466. SEGDES IPINW
  467. SEGDES MELEME
  468. C
  469. COERIG(I10) = 1.D0
  470. IRIGEL(1,I10) = MELEME
  471. IRIGEL(2,I10) = 0
  472. IRIGEL(5,I10) = NIFOUR
  473. IRIGEL(6,I10) = 0
  474. IRIGEL(7,I10) = 2
  475. C création de la matrice élémentaire et du second membre
  476. CALL TOWA1 (REDIR,NOCOPO,NOMDU1,IPINW,NOMPR1,
  477. & MPOVD1,MPOVC1,MPOVR1,MPOVL1,MPOVT1,
  478. & XDT1,DESCR,xMATRI,MCHPO1)
  479. C
  480. IRIGEL(3,I10) = DESCR
  481. IRIGEL(4,I10) = xMATRI
  482. C
  483. SEGACT MCHPO1*MOD
  484. MCHPO1.JATTRI(1) = 2
  485. SEGDES MCHPO1
  486. C
  487. IF (I10.EQ.1) THEN
  488. MCHPOI = MCHPO1
  489. ELSE
  490. CALL FUCHPO (MCHPOI,MCHPO1,IRET1)
  491. MCHPOI = IRET1
  492. ENDIF
  493. C
  494. 10 CONTINUE
  495. C
  496. SEGDES MRIGID
  497. SEGDES IPCEN
  498. SEGSUP REDIR
  499. SEGSUP NOCOPO
  500. C
  501. C Remplissage de la table
  502. C
  503. TYPE = 'RIGIDITE'
  504. CALL ECMO (IPTAB1,'LHS',TYPE,MRIGID)
  505. IF (IERR.NE.0) RETURN
  506. TYPE = 'CHPOINT '
  507. CALL ECMO (IPTAB1,'RHS',TYPE,MCHPOI)
  508. IF (IERR.NE.0) RETURN
  509. C
  510. END
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  

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