Télécharger excomp.eso

Retour à la liste

Numérotation des lignes :

excomp
  1. C EXCOMP SOURCE PV090527 25/01/07 14:42:36 12115
  2. SUBROUTINE EXCOMP
  3. C=======================================================================
  4. C
  5. C OPERATEUR EXTRACTION D UNE COMPOSANTE D UN CHPOINT
  6. C D UN MCHAML
  7. C DE QUELQUES COMPOSANTES D UN MCHAML
  8. C
  9. C CH2 = EXCO | MOT1 (MOT2) | (n1) (n2) ('NOID') CH1 ...
  10. C | LISM1 (LISM2) |
  11. C
  12. C ... ('NATURE' |'INDETER'| ) ;
  13. C |'DIFFUS' |
  14. C |'DISCRET'|
  15. C
  16. C=======================================================================
  17. IMPLICIT INTEGER(I-N)
  18. IMPLICIT REAL*8(A-H,O-Z)
  19.  
  20. -INC PPARAM
  21. -INC CCOPTIO
  22. -INC SMCOORD
  23. -INC SMLMOTS
  24. -INC SMCHPOI
  25. -INC SMCHAML
  26.  
  27. CHARACTER*4 NOVE(1),NATU(3)
  28. CHARACTER*(LOCOMP) MOT,MOT2,MOT3
  29. DATA NOVE/'NOID'/
  30. DATA NATU/'INDE','DIFF','DISC'/
  31.  
  32. C
  33. C LISTE DE MOT OU MOT SIMPLE
  34. C
  35.  
  36. MOT =' '
  37. LISM1= 0
  38. LISM2= 0
  39. C Syntaxe 2 : on tente de lire un LISTMOTS
  40. CALL LIROBJ('LISTMOTS',LISM1,0,IRT1)
  41. C Syntaxe 1 : si abscence de LISTMOTS, on lit un simple MOT
  42. IF(IRT1.EQ.0) THEN
  43. MOT2='SCAL'
  44. CALL LIRCHA(MOT,1,IRETOU)
  45. IF(IERR.NE.0) RETURN
  46. ENDIF
  47. C
  48. Cbp : Lecture eventuelle de l'harmonique de Fourier en entre /sortie
  49. CALL LIRENT(NIF1,0,IRET1)
  50. IF(IRET1.NE.0) THEN
  51. CALL LIRENT(NIF2,0,IRET2)
  52. IF(IRET2.EQ.0) NIF2=NIFOUR
  53. ELSE
  54. NIF1=NIFOUR
  55. NIF2=NIFOUR
  56. ENDIF
  57. IF(IERR.NE.0) RETURN
  58. C
  59. C Lecture de l'option 'NOID'
  60. CALL LIRMOT(NOVE,1,NOID,0)
  61. * pv NOID automatique le 29/2/24
  62. NOID=1
  63. C
  64. C Pour la syntaxe 2, on tente la lecture d'un second LISTMLOTS
  65. IF(IRT1.NE.0) THEN
  66. CALL LIROBJ('LISTMOTS',LISM2,0,IRL2)
  67. ENDIF
  68. C
  69. C
  70. C-----------------------------------------------
  71. C CAS D'UN OBJET CHPOINT
  72. C-----------------------------------------------
  73. CALL LIROBJ('CHPOINT ',IPCH1,0,IRT2)
  74. IF(IRT2.EQ.0) GOTO 100
  75. CALL ACTOBJ('CHPOINT ',IPCH1,1)
  76. C On essaie de lire le nouveau nom et la nature (facultatif)
  77. CALL LIRCHA(MOT2,0,IRETOU)
  78. MCHPOI = IPCH1
  79. JATT1 = JATTRI(1)+1
  80. IF (IRETOU .GE. 1) THEN
  81. IF (MOT2(1:4) .EQ. 'NATU' ) THEN
  82. C jatt va stocker la nature
  83. CALL LIRMOT(NATU,3,JATT1,1)
  84. IF(IERR.NE.0) RETURN
  85. MOT2='SCAL'
  86. ELSE
  87. C MOT2 est le nouveau nom de la composante
  88. C on essaie a nouveau de lire la nature
  89. CALL LIRCHA(MOT3,0,IRETOU)
  90. IF (IRETOU .GE. 1) THEN
  91. IF (MOT3(1:4) .EQ. 'NATU' ) THEN
  92. CALL LIRMOT(NATU,3,JATT1,1)
  93. IF(IERR.NE.0) RETURN
  94. ELSE
  95. C 'NATU' n'est pas specifie on continue...
  96. CALL REFUS
  97. ENDIF
  98. ENDIF
  99. ENDIF
  100. ENDIF
  101.  
  102. C Syntaxe 1 (avec des MOTs simples)
  103. IF (LISM1.EQ.0) THEN
  104. CALL EXCOPP(IPCH1,MOT,NIF1,IPCH2,MOT2,NIF2,NOID)
  105. IF(IERR.NE.0) RETURN
  106. C Syntaxe 2 (avec des LISTMOTS)
  107. ELSE
  108. MLMOTS=LISM1
  109. SEGACT MLMOTS
  110. C Erreur si les deux LISTMOTS ne sont pas de meme dimension
  111. IF (LISM2.NE.0) THEN
  112. MLMOT2=LISM2
  113. SEGACT,MLMOT2
  114. IF (MOTS(/2).NE.MLMOT2.MOTS(/2)) THEN
  115. CALL ERREUR(217)
  116. RETURN
  117. ENDIF
  118. ENDIF
  119. IPCH2=0
  120.  
  121.  
  122. C Erreur si le premier LISTMOTS est vide
  123. IF (MOTS(/2).EQ.0) THEN
  124. NAT =1
  125. NSOUPO=0
  126. SEGINI,MCHPOI
  127. IPCH2 =MCHPOI
  128.  
  129. C On place un soucis avec le numero de l'erreur qu'on pourrait emettre
  130. MOTERR(1:8)='LISTMOTS'
  131. INTERR(1)=MLMOTS
  132. CALL SOUCIS(356)
  133.  
  134. ELSE
  135. C On fait le job en bouclant sur les mots
  136. DO IM=1,MOTS(/2)
  137. MOT =MOTS(IM)
  138. IF (LISM2.NE.0) THEN
  139. MOT2=MLMOT2.MOTS(IM)
  140. ELSE
  141. MOT2=MOTS(IM)
  142. ENDIF
  143.  
  144. CALL EXCOPP(IPCH1,MOT,NIF1,IPCH3,MOT2,NIF2,NOID)
  145. IF(IERR.NE.0) RETURN
  146.  
  147. IF(IPCH2.EQ.0) THEN
  148. IPCH2=IPCH3
  149. ELSE
  150. CALL ADCHPO(IPCH2,IPCH3,IPCHR,1D0,1D0)
  151. IF(IERR.NE.0) RETURN
  152. IPCH2=IPCHR
  153. ENDIF
  154. ENDDO
  155. ENDIF
  156. ENDIF
  157. C On ajuste la nature du champ
  158. MCHPOI=IPCH2
  159. mochde='CHPOINT cree par EXCOMP'
  160. mtypoi='SCALAIRE'
  161. JATTRI(1)=JATT1-1
  162.  
  163. C On ecrit le CHPOINT resultat dans la pile
  164. CALL ACTOBJ('CHPOINT ',IPCH2,1)
  165. CALL ECROBJ('CHPOINT ',IPCH2)
  166. RETURN
  167.  
  168.  
  169. C ---------------------------------------------
  170. C CAS D'UN OBJET MCHAML
  171. C ---------------------------------------------
  172. 100 CONTINUE
  173. CALL LIROBJ('MCHAML ',ICHE1,0,IRT3)
  174. IF(IRT3.EQ.0) GO TO 300
  175. CALL ACTOBJ('MCHAML ',ICHE1,1)
  176. CALL LIRCHA(MOT2,0,IRETOU)
  177. IF(IRETOU.EQ.0) MOT2=MOT
  178. IF (LISM1.EQ.0) THEN
  179. C Syntaxe 1 (avec des MOTs simples)
  180. CALL EXCOC1(ICHE1,MOT,ICHE2,MOT2,NOID)
  181. IF(IERR.NE.0) RETURN
  182. ELSE
  183. C Syntaxe 2 (avec des LISTMOTS)
  184. MLMOTS=LISM1
  185. SEGACT MLMOTS
  186.  
  187. C Erreur si les deux LISTMOTS ne sont pas de meme dimension
  188. IF (LISM2.NE.0) THEN
  189. MLMOT2=LISM2
  190. SEGACT,MLMOT2
  191. IF (MOTS(/2).NE.MLMOT2.MOTS(/2)) THEN
  192. CALL ERREUR(217)
  193. RETURN
  194. ENDIF
  195.  
  196. ELSE
  197. MLMOT2 = MLMOTS
  198. ENDIF
  199.  
  200. C Si le premier LISTMOTS est vide
  201. IF (MOTS(/2).EQ.0) THEN
  202. N1=0
  203. N3=0
  204. L1=8
  205.  
  206. SEGINI,MCHELM
  207. ICHE2 =MCHELM
  208. IFOCHE=IFOMOD
  209. TITCHE=' '
  210.  
  211. C On place un soucis avec le numero de l'erreur qu'on pourrait emettre
  212. MOTERR(1:8)='LISTMOTS'
  213. INTERR(1)=MLMOTS
  214. CALL SOUCIS(356)
  215.  
  216. ELSE
  217. CALL EXCOC2(ICHE1,MLMOTS,ICHE2,MLMOT2,NOID)
  218. ENDIF
  219. ENDIF
  220.  
  221. C On ecrit le MCHAML resultat dans la pile
  222. CALL ACTOBJ('MCHAML ',ICHE2,1)
  223. CALL ECROBJ('MCHAML ',ICHE2)
  224. RETURN
  225. C
  226. C PAS D OPERANDE CORRECTE TROUVE
  227. C
  228. 300 CALL QUETYP(MOTERR(1:8),0,IRETOU)
  229. IF(IRETOU.NE.0) THEN
  230. CALL ERREUR (39)
  231. ELSE
  232. CALL ERREUR(533)
  233. ENDIF
  234. END
  235.  
  236.  
  237.  
  238.  
  239.  

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