Télécharger redu.eso

Retour à la liste

Numérotation des lignes :

redu
  1. C REDU SOURCE PV090527 25/01/10 21:15:07 12111
  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. ** write(6,*) 'avant reduaf ipchm ',ipchm
  165. CALL REDUAF(ICHE,IPMODL,IPCHM,ISTRIC,IRET,KERRE)
  166. IF (ierr.ne.0) return
  167. ** write(6,*) 'apres reduaf ipchm ',ipchm
  168. IF ( IRET .NE. 1) THEN
  169. CALL ERREUR(KERRE)
  170. RETURN
  171. ENDIF
  172. CALL ACTOBJ('MCHAML ',ICHE ,1)
  173. CALL ACTOBJ('MCHAML ',IPCHM,1)
  174. CALL ECROBJ('MCHAML ',IPCHM)
  175. RETURN
  176. C
  177. 3 CONTINUE
  178. C
  179. C redu chpoint sur masq
  180. C
  181. CALL LIROBJ('CHPOINT ',ICHP,0,IRETOU)
  182. IF(IRETOU.EQ.0) GO TO 4
  183. CALL ACTOBJ('CHPOINT ',ICHP,1)
  184. CALL LIROBJ('CHPOINT ',ICHP1,0,IRETOU)
  185. IF(IRETOU.EQ.0) THEN
  186. CALL REFUS
  187. GO TO 4
  188. ENDIF
  189. CALL ACTOBJ('CHPOINT ',ICHP1,1)
  190. CALL REDUCP(ICHP,ICHP1,IRET)
  191. IF(IERR.NE.0) RETURN
  192. CALL ACTOBJ('CHPOINT ',IRET,1)
  193. CALL ECROBJ('CHPOINT ',IRET)
  194. RETURN
  195. C
  196. 4 CONTINUE
  197. C
  198. C redu mmodel sur meleme ou point ou reduit le model de contatct
  199. C au element qui peuvent etre actifs
  200. C
  201. CALL LIROBJ('MMODEL ',IPMODL,0,IRETOU)
  202. IF(IRETOU.EQ.0) GOTO 5
  203. CALL ACTOBJ('MMODEL ',IPMODL,1)
  204. CALL LIRCHA(charre,0,ireto)
  205. if(ireto.ne.0) then
  206. if( charre.ne.'CONT' ) then
  207. call refus
  208. else
  209. call redcon(ipmodl,iret)
  210. call ACTOBJ('MMODEL ',iret,1)
  211. call ECROBJ('MMODEL ',iret)
  212. return
  213. endif
  214. endif
  215. CALL LIROBJ('MAILLAGE',IMEL,0,IRETOU)
  216. IF(IRETOU.EQ.1) THEN
  217. CALL ACTOBJ('MAILLAGE',IMEL,1)
  218. ELSE
  219. CALL LIROBJ('POINT',IP1,0,IRETOU)
  220. IF (IRETOU.NE.0) THEN
  221. NBNN=1
  222. NBELEM=1
  223. NBREF=0
  224. NBSOUS=0
  225. SEGINI MELEME
  226. ITYPEL=1
  227. NUM(1,1)=IP1
  228. IMEL=MELEME
  229. ELSE
  230. CALL REFUS
  231. GOTO 5
  232. ENDIF
  233. ENDIF
  234. CALL REDUMO(IPMODL,IMEL,IRET)
  235. IF (IRET.NE.0) THEN
  236. CALL ACTOBJ('MMODEL ',IRET,1)
  237. CALL ECROBJ('MMODEL ',IRET)
  238. ENDIF
  239. RETURN
  240. C
  241. 5 CONTINUE
  242. C
  243. C REDU d'un nuage a des composantes
  244. C
  245. JGM = 0
  246. JGN = 4
  247. NCOMP = 0
  248. IPO1 = 0
  249. 100 CONTINUE
  250. CALL LIRCHA(IMO,0,IRETOU)
  251. IF (IRETOU .EQ. 0) THEN
  252. IF(NCOMP .EQ. 0) THEN
  253. GOTO 6
  254. ELSE
  255. GOTO 101
  256. ENDIF
  257. ENDIF
  258.  
  259. NCOMP = NCOMP + 1
  260. IF (NCOMP .GT. JGM) THEN
  261. JGM = NCOMP*2 + 10
  262. IF(IPO1 .EQ. 0)THEN
  263. SEGINI,MLMOTS
  264. IPO1 = MLMOTS
  265. ELSE
  266. SEGADJ,MLMOTS
  267. ENDIF
  268. ENDIF
  269. MLMOTS.MOTS(NCOMP) = IMO
  270. GOTO 100
  271.  
  272. 101 CONTINUE
  273. DO 200 I = 1,NCOMP
  274. MO4a = MOTS(I)
  275. DO 201 J = (I + 1),NCOMP
  276. MO4b = MOTS(J)
  277. IF (MO4a.EQ.MO4b) THEN
  278. CALL ERREUR(674)
  279. RETURN
  280. ENDIF
  281. 201 CONTINUE
  282. 200 CONTINUE
  283.  
  284. CALL LIROBJ('NUAGE ',INUA,0,IRETOU)
  285. IF (IRETOU.EQ.0) GOTO 6
  286. CALL ACTOBJ('NUAGE ',INUA,1)
  287. CALL REDNUA(INUA,IPO1,NCOMP,INUAR,IRET)
  288. IF (IRET.NE.0) THEN
  289. CALL ACTOBJ('NUAGE ',INUAR,1)
  290. CALL ECROBJ('NUAGE ',INUAR)
  291. ENDIF
  292. SEGSUP,MLMOTS
  293. RETURN
  294. c
  295. c pas d operande correcte trouve
  296. c
  297. 6 CONTINUE
  298. CALL ERREUR(21)
  299.  
  300. C CALL QUETYP(MOTERR(1:8),0,IRETOU)
  301. C IF(IRETOU .NE. 0) THEN
  302. C CALL ERREUR (39)
  303. C ELSE
  304. C CALL ERREUR(533)
  305. C ENDIF
  306.  
  307. END
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  

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