Télécharger redu.eso

Retour à la liste

Numérotation des lignes :

redu
  1. C REDU SOURCE CB215821 24/04/12 21:17:06 11897
  2. SUBROUTINE REDU
  3. C_______________________________________________________________________
  4. C
  5. C SUBROUTINE de l'operateur REDU qui aiguille suivant la fonctionnalite
  6. C_______________________________________________________________________
  7. C
  8. C declaration
  9. C
  10. IMPLICIT REAL*8(A-H,O-Z)
  11. IMPLICIT INTEGER(I-N)
  12.  
  13.  
  14. -INC PPARAM
  15. -INC CCOPTIO
  16. -INC SMELEME
  17. -INC SMNUAGE
  18. -INC SMLMOTS
  19. -INC SMTABLE
  20. -INC SMCHAML
  21. -INC SMMODEL
  22.  
  23. INTEGER I,NCOMP,J,IPO,INUA
  24. CHARACTER*4 IMO,charre,MO4a,MO4b
  25. LOGICAL logr1
  26. CHARACTER*8 TYPOBJ
  27. character*4 mostri(1)
  28. data mostri/'STRI'/
  29.  
  30. C
  31. C executable
  32. C
  33.  
  34. C ith=oothrd
  35.  
  36. C
  37. C a-t'on en entrée une table esclave si oui on fusionne
  38. C
  39. C a-t'on le mot strict?
  40. istric=0
  41. call lirmot(mostri,1,istric,0)
  42. C
  43. call lirtab('ESCLAVE',mtable,0,iretou)
  44. if(iretou.ne. 0) then
  45. C write(6,*) ' on fusionne la table esclave'
  46. typobj=' '
  47. segact mtable
  48. ml=mlotab
  49. ind=mtabii(3)
  50. call acctab(mtable,'ENTIER',ind,0.d0,' ',.true.,0,typobj,ivalre,
  51. > xvalre,charre,logr1,id1)
  52. if (ierr.ne.0) return
  53. C if (typobj.eq.'CHPOINT'.or.typobj.eq.'MCHAML')then
  54. if (typobj.eq.'MCHAML ')then
  55. do i=4,ml
  56. segact mtable
  57. ind=mtabii(i)
  58. call acctab(mtable,'ENTIER',ind,0.d0,' ',.true.,0,
  59. & typobj,ivalre,xvalre,charre,logr1,id2)
  60. if (ierr.ne.0) return
  61. C if (typobj.eq.'CHPOINT') call fuchpo(id1,id2,iretou)
  62. if (typobj.eq.'MCHAML ') call fuschl(id1,id2,iretou)
  63. id1=iretou
  64. enddo
  65. else
  66. C write (6,*) ' type ',typobj,' inconnu dans redu '
  67. C call trbac
  68. MOTERR(1:8)='PARA '
  69. call erreur(803)
  70. return
  71. endif
  72. CALL ACTOBJ(typobj,id1,1)
  73. CALL ECROBJ(typobj,id1)
  74. C write(6,*)' on a crée un objet ' , typobj
  75. endif
  76.  
  77. C
  78. C reduction d'une rigidite sur un maillage
  79. C
  80. CALL LIROBJ('RIGIDITE',IPrigi,0,IRETOU)
  81. IF(IRETOU.EQ.0) GOTO 10
  82. CALL LIROBJ('MAILLAGE',IMEL,1,IRETOU)
  83. CALL ACTOBJ('MAILLAGE',IMEL,1)
  84. IF(IRETOU.EQ.0) return
  85. call reduri(iprigi,imel,irig1)
  86. if(irig1.eq.0) return
  87. call ECROBJ('RIGIDITE', irig1)
  88. return
  89. 10 CONTINUE
  90. C
  91. C redu d'un chpoint sur (meleme ou point)
  92. C
  93. CALL LIROBJ('CHPOINT ',ICHP,0,IRETOU)
  94. IF(IRETOU.EQ.0) GO TO 1
  95. CALL ACTOBJ('CHPOINT ',ICHP,1)
  96. CALL LIROBJ('MAILLAGE',IMEL,0,IRETOU)
  97. IF(IRETOU .EQ. 1) THEN
  98. CALL ACTOBJ('MAILLAGE',IMEL,1)
  99.  
  100. ELSE
  101. CALL LIROBJ('POINT',IP1,0,IRETOU)
  102. IF (IRETOU.NE.0) THEN
  103. IMEL=IP1
  104. CALL CRELEM(IMEL)
  105. ELSE
  106. CALL REFUS
  107. GO TO 1
  108. ENDIF
  109. ENDIF
  110. CALL REDUIR(ICHP,IMEL,IRET)
  111. IF ( IERR .NE. 0) RETURN
  112. CALL ACTOBJ('CHPOINT ',IRET,1)
  113. CALL ECROBJ('CHPOINT ',IRET)
  114. RETURN
  115. C
  116. 1 CONTINUE
  117.  
  118. C
  119. C redu mchaml sur meleme (ou point)
  120. C
  121. CALL LIROBJ('MCHAML ',ICHE,0,IRETOU)
  122. IF(IRETOU.EQ.0) GOTO 2
  123. CALL ACTOBJ('MCHAML ',ICHE,1)
  124. CALL LIROBJ('MAILLAGE',IMEL,0,IRETOU)
  125. IF(IRETOU .EQ. 1)THEN
  126. CALL ACTOBJ('MAILLAGE',IMEL,1)
  127. ELSE
  128. CALL LIROBJ('POINT',IP1,0,IRETOU)
  129. IF (IRETOU.NE.0) THEN
  130. NBNN=1
  131. NBELEM=1
  132. NBREF=0
  133. NBSOUS=0
  134. SEGINI MELEME
  135. ITYPEL=1
  136. NUM(1,1)=IP1
  137. IMEL=MELEME
  138. ELSE
  139. CALL REFUS
  140. GOTO 2
  141. ENDIF
  142. ENDIF
  143. CALL REDUIC(ICHE,IMEL,IRET)
  144. IF ( IERR .NE. 0) RETURN
  145. CALL ACTOBJ('MCHAML ',IRET,1)
  146. CALL ECROBJ('MCHAML ',IRET)
  147. RETURN
  148. C
  149. 2 CONTINUE
  150.  
  151. C
  152. C redu chamelem sur mmodel
  153. C
  154. CALL LIROBJ('MCHAML ',ICHE,0,IRETOU)
  155. IF(IRETOU.EQ.0) GOTO 3
  156. CALL ACTOBJ('MCHAML ',ICHE ,1)
  157. CALL LIROBJ('MMODEL ',IPMODL,0,IRETOU)
  158. C Derniere syntaxe avec MCHAML, si pas MMODEL, sortie erreur
  159. IF (IRETOU.EQ.0) THEN
  160. CALL REFUS
  161. GOTO 3
  162. ENDIF
  163. CALL ACTOBJ('MMODEL',IPMODL,1)
  164. CALL REDUAF(ICHE,IPMODL,IPCHM,ISTRIC,IRET,KERRE)
  165. IF ( IRET .NE. 1) THEN
  166. CALL ERREUR(KERRE)
  167. RETURN
  168. ENDIF
  169. CALL ACTOBJ('MCHAML ',IPCHM,1)
  170. CALL ECROBJ('MCHAML ',IPCHM)
  171. RETURN
  172. C
  173. 3 CONTINUE
  174. C
  175. C redu chpoint sur masq
  176. C
  177. CALL LIROBJ('CHPOINT ',ICHP,0,IRETOU)
  178. IF(IRETOU.EQ.0) GO TO 4
  179. CALL ACTOBJ('CHPOINT ',ICHP,1)
  180. CALL LIROBJ('CHPOINT ',ICHP1,0,IRETOU)
  181. IF(IRETOU.EQ.0) THEN
  182. CALL REFUS
  183. GO TO 4
  184. ENDIF
  185. CALL ACTOBJ('CHPOINT ',ICHP1,1)
  186. CALL REDUCP(ICHP,ICHP1,IRET)
  187. IF(IERR.NE.0) RETURN
  188. CALL ACTOBJ('CHPOINT ',IRET,1)
  189. CALL ECROBJ('CHPOINT ',IRET)
  190. RETURN
  191. C
  192. 4 CONTINUE
  193. C
  194. C redu mmodel sur meleme ou point ou reduit le model de contatct
  195. C au element qui peuvent etre actifs
  196. C
  197. CALL LIROBJ('MMODEL ',IPMODL,0,IRETOU)
  198. IF(IRETOU.EQ.0) GOTO 5
  199. CALL ACTOBJ('MMODEL ',IPMODL,1)
  200. CALL LIRCHA(charre,0,ireto)
  201. if(ireto.ne.0) then
  202. if( charre.ne.'CONT' ) then
  203. call refus
  204. else
  205. call redcon(ipmodl,iret)
  206. call ACTOBJ('MMODEL ',iret,1)
  207. call ECROBJ('MMODEL ',iret)
  208. return
  209. endif
  210. endif
  211. CALL LIROBJ('MAILLAGE',IMEL,0,IRETOU)
  212. IF(IRETOU.EQ.1) THEN
  213. CALL ACTOBJ('MAILLAGE',IMEL,1)
  214. ELSE
  215. CALL LIROBJ('POINT',IP1,0,IRETOU)
  216. IF (IRETOU.NE.0) THEN
  217. NBNN=1
  218. NBELEM=1
  219. NBREF=0
  220. NBSOUS=0
  221. SEGINI MELEME
  222. ITYPEL=1
  223. NUM(1,1)=IP1
  224. IMEL=MELEME
  225. ELSE
  226. CALL REFUS
  227. GOTO 5
  228. ENDIF
  229. ENDIF
  230. CALL REDUMO(IPMODL,IMEL,IRET)
  231. IF (IRET.NE.0) THEN
  232. CALL ACTOBJ('MMODEL ',IRET,1)
  233. CALL ECROBJ('MMODEL ',IRET)
  234. ENDIF
  235. RETURN
  236. C
  237. 5 CONTINUE
  238. C
  239. C REDU d'un nuage a des composantes
  240. C
  241. JGM = 0
  242. JGN = 4
  243. NCOMP = 0
  244. IPO1 = 0
  245. 100 CONTINUE
  246. CALL LIRCHA(IMO,0,IRETOU)
  247. IF (IRETOU .EQ. 0) THEN
  248. IF(NCOMP .EQ. 0) THEN
  249. GOTO 6
  250. ELSE
  251. GOTO 101
  252. ENDIF
  253. ENDIF
  254.  
  255. NCOMP = NCOMP + 1
  256. IF (NCOMP .GT. JGM) THEN
  257. JGM = NCOMP*2 + 10
  258. IF(IPO1 .EQ. 0)THEN
  259. SEGINI,MLMOTS
  260. IPO1 = MLMOTS
  261. ELSE
  262. SEGADJ,MLMOTS
  263. ENDIF
  264. ENDIF
  265. MLMOTS.MOTS(NCOMP) = IMO
  266. GOTO 100
  267.  
  268. 101 CONTINUE
  269. DO 200 I = 1,NCOMP
  270. MO4a = MOTS(I)
  271. DO 201 J = (I + 1),NCOMP
  272. MO4b = MOTS(J)
  273. IF (MO4a.EQ.MO4b) THEN
  274. CALL ERREUR(674)
  275. RETURN
  276. ENDIF
  277. 201 CONTINUE
  278. 200 CONTINUE
  279.  
  280. CALL LIROBJ('NUAGE ',INUA,0,IRETOU)
  281. IF (IRETOU.EQ.0) GOTO 6
  282. CALL ACTOBJ('NUAGE ',INUA,1)
  283. CALL REDNUA(INUA,IPO1,NCOMP,INUAR,IRET)
  284. IF (IRET.NE.0) THEN
  285. CALL ACTOBJ('NUAGE ',INUAR,1)
  286. CALL ECROBJ('NUAGE ',INUAR)
  287. ENDIF
  288. SEGSUP,MLMOTS
  289. RETURN
  290. c
  291. c pas d operande correcte trouve
  292. c
  293. 6 CONTINUE
  294. CALL ERREUR(21)
  295.  
  296. C CALL QUETYP(MOTERR(1:8),0,IRETOU)
  297. C IF(IRETOU .NE. 0) THEN
  298. C CALL ERREUR (39)
  299. C ELSE
  300. C CALL ERREUR(533)
  301. C ENDIF
  302.  
  303. END
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  

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