Télécharger intgra.eso

Retour à la liste

Numérotation des lignes :

intgra
  1. C INTGRA SOURCE CB215821 23/05/02 21:15:03 11661
  2.  
  3. C---------------------------------------------------------------------
  4. C
  5. C OPERATEUR INTG
  6. C
  7. C---------------------------------------------------------------------
  8. C
  9. C SYNTAXES : voir notice INTG.
  10. C
  11. C---------------------------------------------------------------------
  12.  
  13. SUBROUTINE INTGRA
  14.  
  15. IMPLICIT INTEGER(I-N)
  16. IMPLICIT REAL*8 (A-H,O-Z)
  17.  
  18. -INC PPARAM
  19. -INC CCOPTIO
  20. -INC SMCHAML
  21. -INC SMCOORD
  22. -INC SMLREEL
  23. -INC SMLENTI
  24.  
  25. CHARACTER*(LOCOMP) MACOMP,MOT1
  26. CHARACTER*8 CHBOR
  27. CHARACTER*4 MOTB(4)
  28. LOGICAL BDARCY
  29. INTEGER IDARC
  30. DATA MOTB/'INDI','BORN','ELEM','ABSO'/
  31.  
  32. ilenta=0
  33. C---------------------------------------------------------------------
  34. C SYNTAXE 1 (par defaut)
  35. C---------------------------------------------------------------------
  36. IDARC = 0
  37. IELEM = 0
  38. IRET = 0
  39. IPIN = 0
  40. IPMODL = 0
  41. IPCHB1 = 0
  42. IPCHE2 = 0
  43. IR = 0
  44. KERRE = 0
  45. IRT3 = 0
  46. IPCHE1 = 0
  47. IPINT = 0
  48. XRET =REAL(0.D0)
  49. MOT1 =' '
  50.  
  51. C- Lecture eventuelle du mot cle 'ELEM'
  52. CALL LIRMOT(MOTB(3),1,IELEM,0)
  53. IF (IERR.NE.0) RETURN
  54.  
  55. C- Lecture du modele (facultative pour permettre la syntaxe 2)
  56. CALL LIROBJ('MMODEL ',IPMODL,0,IRET)
  57. IF (IERR.NE.0) RETURN
  58. C---- ABSENCE DU MODELE => ON VA TESTER LA SYNTAXE 2 (INTG evol1 ...)
  59. IF(IRET.EQ.0) GOTO 100
  60. CALL ACTOBJ('MMODEL ',IPMODL,1)
  61.  
  62. C- Lecture du MCHAML
  63. CALL LIROBJ('MCHAML ',IPIN,1,IRET)
  64. IF (IERR.NE.0) RETURN
  65. CALL ACTOBJ('MCHAML ',IPIN,1)
  66. IF (IERR.NE.0) RETURN
  67.  
  68. CALL REDUAF(IPIN,IPMODL,IPCHB1,0,IR,KERRE)
  69. IF(IR.NE.1) CALL ERREUR(KERRE)
  70. IF (IERR.NE.0) RETURN
  71.  
  72. C- Lecture eventuelle du nom de la composante du MCHAML a considerer
  73. CALL LIRCHA(MACOMP,0,IRT3)
  74. IF (IERR.NE.0) RETURN
  75.  
  76. C- Lecture facultative du MCHAML de CARACTERISTIQUES
  77. CALL LIROBJ('MCHAML',IPIN,0,IRET)
  78. IPCHE2=IPIN
  79. IF((IRET .EQ.1) .AND. (IDARC .EQ. 0))THEN
  80. CALL ACTOBJ('MCHAML ',IPIN,1)
  81. CALL REDUAF(IPIN,IPMODL,IPCHE2,0,IR,KERRE)
  82. IF(IR.NE.1) CALL ERREUR(KERRE)
  83. IF (IERR.NE.0) RETURN
  84. ENDIF
  85. IF (IERR.NE.0) RETURN
  86.  
  87. C- Dans le cas ou le MCHAML a plus d'une composante
  88. C- on impose la donnee du nom de la composante a traiter.
  89. IF (IRT3.EQ.0) THEN
  90. MCHELM=IPCHB1
  91. N1=ICHAML(/1)
  92. DO i=1,N1
  93. MCHAML=ICHAML(I)
  94. N2=IELVAL(/1)
  95. IF (N2.GT.1) THEN
  96. MOTERR(1:8)=' MCHAML '
  97. INTERR(1)=N2
  98. CALL ERREUR(761)
  99. RETURN
  100. ENDIF
  101. ENDDO
  102. ENDIF
  103.  
  104. C- Dans le cas ou le nom de la composante du MCHAML
  105. C- a considerer est precise, on l'extrait du MCHAML.
  106. IPCHE1=IPCHB1
  107. IF (IRT3.NE.0) THEN
  108. MOT1='SCAL'
  109. CALL EXCOC1(IPCHB1,MACOMP,IPCHE1,MOT1,0)
  110. IF (IERR.NE.0) RETURN
  111. ENDIF
  112.  
  113. C- Calcul de l'integrale
  114. SEGACT,MCOORD
  115. CALL INTGCA(IPMODL,IPCHE1,IPCHE2,IELEM,IRET,XRET,IPINT)
  116. SEGDES,MCOORD
  117. IF (IERR.NE.0) RETURN
  118.  
  119. C- Ecriture du resultat et menage
  120. IF (IPINT.EQ.0) THEN
  121. CALL ECRREE(XRET)
  122. ELSE
  123. CALL ACTOBJ('MCHAML ',IPINT,1)
  124. CALL ECROBJ('MCHAML ',IPINT)
  125. ENDIF
  126.  
  127. RETURN
  128.  
  129.  
  130. C---------------------------------------------------------------------
  131. C SYNTAXE 2
  132. C---------------------------------------------------------------------
  133. 100 CONTINUE
  134.  
  135. C--- INITIALISATIONS ---
  136. IABSO = 0
  137. IA = 0
  138. IB = 0
  139. ILENTA = 0
  140. ILENTB = 0
  141. CHBOR(1:8) =' '
  142. IPINT = 0
  143. XA = 0.D0
  144. XB = 0.D0
  145. XINT = 0.D0
  146.  
  147. C--- LECTURE DES OBJETS EN ENTREE ---
  148.  
  149. C- Lecture eventuelle du mot cle 'ABS'
  150. CALL LIRMOT(MOTB(4),-1,IABSO,0)
  151. IF (IERR.NE.0) RETURN
  152.  
  153. C- Lecture de l'evolution
  154. CALL LIROBJ('EVOLUTIO',IPEVO,0,IRET)
  155. IF (IERR.NE.0) RETURN
  156. c---- ABSENCE DE MODELE ET D'EVOLUTION => ERREUR
  157. IF(IRET.EQ.0) GOTO 998
  158.  
  159. C- Lecture eventuelle des bornes d'integration (de meme type)
  160. CALL LIRMOT(MOTB,2,ICAS,0)
  161.  
  162. IF (ICAS.EQ.0) THEN
  163. ILENTA = 0
  164. ILENTB = 0
  165. ILREEA = 0
  166. ILREEB = 0
  167.  
  168. C Definition bornes avec indices LISTREEL en abscisses
  169. ELSEIF (ICAS.EQ.1) THEN
  170. CALL LIRENT(IA,0,IRETA)
  171. IF (IRETA.EQ.1) THEN
  172. CALL LIRENT(IB,1,IRETB)
  173. IF (IERR.NE.0) RETURN
  174.  
  175. C Construction de 2 LISTENTI de dime 1
  176. JG = 1
  177. SEGINI, MLENT1,MLENT2
  178. MLENT1.LECT(1) = IA
  179. MLENT2.LECT(1) = IB
  180. ILENTA = MLENT1
  181. ILENTB = MLENT2
  182. ILREEA = 0
  183. ILREEB = 0
  184.  
  185. CHBOR(1:6)='ENTIER'
  186. GOTO 101
  187. ELSE
  188. CALL LIROBJ('LISTENTI',ILENTA,1,IRETA)
  189. IF (IERR.NE.0) RETURN
  190. CALL LIROBJ('LISTENTI',ILENTB,1,IRETB)
  191. IF (IERR.NE.0) RETURN
  192. CHBOR(1:8)='LISTENTI'
  193. GOTO 101
  194. ENDIF
  195.  
  196. C Definition bornes avec FLOTTANT ou LISTREEL
  197. ELSEIF (ICAS.EQ.2) THEN
  198. CALL LIRREE(XA,0,IRETA)
  199. IF (IRETA.EQ.1) THEN
  200. CALL LIRREE(XB,1,IRETB)
  201. IF (IERR.NE.0) RETURN
  202.  
  203. C Construction de 2 LISTREEL de dime 1
  204. JG = 1
  205. SEGINI, MLREE1,MLREE2
  206. MLREE1.PROG(1) = XA
  207. MLREE2.PROG(1) = XB
  208. ILREEA = MLREE1
  209. ILREEB = MLREE2
  210. ILENTA = 0
  211. ILENTB = 0
  212.  
  213. CHBOR(1:8)='FLOTTANT'
  214. GOTO 101
  215. ELSE
  216. CALL LIROBJ('LISTREEL',ILREEA,1,IRETA)
  217. IF (IERR.NE.0) RETURN
  218. CALL LIROBJ('LISTREEL',ILREEB,1,IRETB)
  219. IF (IERR.NE.0) RETURN
  220. CHBOR(1:8)='LISTREEL'
  221. GOTO 101
  222. ENDIF
  223.  
  224. ELSE
  225. CALL ERREUR(5)
  226. RETURN
  227. ENDIF
  228.  
  229. C--- CALCUL DE L'INTEGRALE ---
  230.  
  231. 101 CONTINUE
  232. IK = 0
  233. C write(6,*) 'ilenta ilentb avant intgev ',ilenta,ilentb
  234. CALL INTGEV(IPEVO,IABSO,ILENTA,ILENTB,ILREEA,ILREEB,XINT,IPINT,IK)
  235. IF (IERR.NE.0) RETURN
  236.  
  237. C--- ECRITURE DU RESULTAT ET MENAGE ---
  238. IF (IK.EQ.1) THEN
  239. CALL ECRREE(XINT)
  240. ELSEIF (IK.EQ.2.AND.IPINT.NE.0) THEN
  241. CALL ECROBJ('LISTREEL',IPINT)
  242. ELSEIF (IK.EQ.3.AND.IPINT.NE.0) THEN
  243. CALL ECROBJ('NUAGE',IPINT)
  244. ELSE
  245. CALL ERREUR(5)
  246. ENDIF
  247. RETURN
  248.  
  249.  
  250. C---------------------------------------------------------------------
  251. C SYNTAXE 3 et ...
  252. C---------------------------------------------------------------------
  253. C ...
  254.  
  255.  
  256. C---------------------------------------------------------------------
  257. C ERREURS
  258. C---------------------------------------------------------------------
  259.  
  260. * /!\ ERREUR : AUCUN OBJET COMPATIBLE TROUVE
  261. 998 MOTERR(1:16)='MODELE EVOLUTIO'
  262. CALL ERREUR(471)
  263. RETURN
  264.  
  265. END
  266.  
  267.  

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