Télécharger operpu.eso

Retour à la liste

Numérotation des lignes :

operpu
  1. C OPERPU SOURCE PASCAL 22/11/21 21:15:05 11502
  2. SUBROUTINE OPERPU
  3. C_______________________________________________________________________
  4. C
  5. C ELEVE UN NOMBRE A UNE PUISSANCE
  6. C
  7. C
  8. C PASCAL MANIGOT (12/03/85) :
  9. C REPRISE DE LA PROGRAMMATION POUR PERMETTRE LE CALCUL DE
  10. C "REEL ** ENTIER" (NOTAMMENT QUAND "REEL" EST NEGATIF).
  11. C
  12. C EBERSOLT (2 MAI 85) : REPRISE POUR PERMETTRE LE CALCUL DE
  13. C CHPO ** I2 OU DE CHEL ** I2
  14. C CHPO ** X2 OU DE CHEL ** X2
  15. C rem : DANS LE CAS OU UNE DES COMPOSANTES DU CHAMP EST
  16. C EST NEGATIVE ET SI L EXPOSANT EST REEL
  17. C ON MET LE RESULTAT A ZERO (au lieu de NAN ou erreur)
  18. C
  19. C BEAUFILS (20 MAI 87) : REPRISE POUR PERMETTRE LE CALCUL DE
  20. C LISTREEL ** I2 OU LISTREEL ** X2
  21. C
  22. C JM CAMPENON (12/90) : PASSAGE AUX NOUVEAUX CHAMELEM
  23. C
  24. C S PASCAL (06/2006) :
  25. C -Puissance d'un MCHAML de composante de type EVOLUTION
  26. C -Puissance d'un objet EVOLUTION
  27. C
  28. C BP (12/2010) concernant les LISTREELs et les EVOLUTIONs :
  29. C -reprise pour permettre la puissance entiere des EVOLUTIONs
  30. C -moins de mise a zero intempestives et + de valeurs "justes"
  31. C -avertissement si présence d'INF
  32. C
  33. C CB (02/2015)
  34. C - ajout de toutes les operations valides sur les LISTENTI
  35. C - ajout de la possibilité de faire CHPOINT ** CHPOINT
  36. C - ajout d'une erreur pour I1 ** -I2 avec 2 INTEGER comme arguments
  37. C
  38. C_______________________________________________________________________
  39. C
  40. IMPLICIT INTEGER(I-N)
  41. IMPLICIT REAL*8 (A-H,O-Z)
  42.  
  43. -INC PPARAM
  44. -INC CCOPTIO
  45. -INC CCREEL
  46. -INC SMLENTI
  47. -INC SMLREEL
  48. PARAMETER (NCLEVO = 2)
  49. C
  50. INTEGER ICH1,IOPERA,IARGU,I1,ICHR,IRET
  51. REAL*8 FLO
  52.  
  53. CHARACTER*4 CLEVO(NCLEVO)
  54. CHARACTER*8 CTYP,COMP
  55.  
  56. DATA CLEVO/'ABSC','ORDO'/
  57.  
  58. ICH1 = 0
  59. IOPERA = 0
  60. IARGU = 0
  61. I1 = 0
  62. FLO = 0.D0
  63. ICHR = 0
  64. IRET = 0
  65.  
  66. C_______________________________________________________________________
  67. C
  68. C RECHERCHE DU TYPE DU PREMIER ARGUMENT
  69. C_______________________________________________________________________
  70. CALL QUETYP(CTYP,0,IRETOU)
  71.  
  72. C_______________________________________________________________________
  73. C
  74. C ENTIER ** ENTIER
  75. C_______________________________________________________________________
  76. CALL LIRENT(I1,0,IRETOU)
  77. IF (IRETOU.EQ.0) GOTO 2
  78. CALL LIRENT(I2,0,IRETOU)
  79. IF (IRETOU.EQ.0) THEN
  80. CALL REFUS
  81. GOTO 2
  82. ENDIF
  83. C Cas de la puissance de 2 ENTIERS
  84. IF ((I1 .EQ. 0) .AND. (I2 .LT. 0)) THEN
  85. INTERR(1)=I1
  86. INTERR(2)=I2
  87. MOTERR(1:4)=' ** '
  88. CALL ERREUR(1059)
  89. ELSE
  90. CALL ECRENT(I1**I2)
  91. ENDIF
  92. RETURN
  93. C
  94. 2 CONTINUE
  95. C_______________________________________________________________________
  96. C
  97. C FLOTTANT ** ENTIER
  98. C_______________________________________________________________________
  99. CALL LIRENT(I1,0,IRETOU)
  100. IF (IRETOU.EQ.0) GOTO 3
  101. CALL LIRREE(FLO1,0,IRETOU)
  102. IF (IRETOU.EQ.0) THEN
  103. CALL REFUS
  104. GOTO 3
  105. ENDIF
  106. IF ( CTYP .EQ. 'ENTIER') THEN
  107. C Cas ENTIER ** FLOTTANT
  108. C Verification si puissance ENTIERE possible
  109. I2 = NINT(FLO1)
  110. XFLOT = ABS(FLO1 - REAL(I2))
  111. IF ( XFLOT .LE. (XZPREC*ABS(FLO1)*REAL(2.D0))) THEN
  112. XFLOT=REAL(I1)**I2
  113. CALL ECRREE(XFLOT)
  114.  
  115. ELSEIF (I1 .LT. 0 ) THEN
  116. INTERR(1)=I1
  117. REAERR(1)=FLO1
  118. MOTERR(1:4)=' ** '
  119. CALL ERREUR(1061)
  120. ELSE
  121. XFLOT=REAL(I1)**FLO1
  122. CALL ECRREE(XFLOT)
  123. ENDIF
  124.  
  125. ELSE
  126. C Cas FLOTTANT ** ENTIER
  127. IF(ABS(FLO1).LT.XPETIT .AND. I1.LT.0)THEN
  128. REAERR(1)=FLO1
  129. INTERR(1)=I1
  130. MOTERR(1:4)=' ** '
  131. CALL ERREUR(1060)
  132. ELSE
  133. XFLOT=FLO1**I1
  134. CALL ECRREE(XFLOT)
  135. ENDIF
  136. ENDIF
  137. RETURN
  138. C
  139. 3 CONTINUE
  140. C_______________________________________________________________________
  141. C
  142. C FLOTTANT ** FLOTTANT
  143. C_______________________________________________________________________
  144. CALL LIRREE(FLO1,0,IRETOU)
  145. IF (IRETOU.EQ.0) GOTO 4
  146. CALL LIRREE(FLO2,0,IRETOU)
  147. IF (IRETOU.EQ.0) THEN
  148. CALL REFUS
  149. GOTO 4
  150. ENDIF
  151.  
  152. IF ((ABS(FLO1).LT.XPETIT .AND. FLO2.LT.REAL(0.D0))) THEN
  153. REAERR(1)=FLO1
  154. REAERR(2)=FLO2
  155. MOTERR(1:4)=' ** '
  156. CALL ERREUR(1062)
  157. ELSE
  158. C Verification si puissance ENTIERE possible
  159. I2 = NINT(FLO2)
  160. XFLOT = ABS(FLO2 - REAL(I2))
  161. IF ( XFLOT .LE. (XZPREC*ABS(FLO2)*REAL(2.D0))) THEN
  162. XFLOT=FLO1**I2
  163. CALL ECRREE(XFLOT)
  164. ELSEIF(FLO1 .LT. REAL(0.D0))THEN
  165. REAERR(1)=FLO1
  166. REAERR(2)=FLO2
  167. MOTERR(1:4)=' ** '
  168. CALL ERREUR(1062)
  169. ELSE
  170. XFLOT=FLO1**FLO2
  171. CALL ECRREE(XFLOT)
  172. ENDIF
  173. ENDIF
  174. RETURN
  175. C
  176. 4 CONTINUE
  177. C_______________________________________________________________________
  178. C
  179. C MCHAML ** ENTIER
  180. C_______________________________________________________________________
  181. CALL LIRENT(I1,0,IRETOU)
  182. IF (IRETOU.EQ.0) GOTO 5
  183. CALL LIROBJ('MCHAML ',ICH1,0,IRETOU)
  184. IF (IRETOU.EQ.0) THEN
  185. CALL REFUS
  186. GOTO 5
  187. ENDIF
  188. CALL ACTOBJ('MCHAML ',ICH1,1)
  189. C IOPERA= 1 pour l'operation PUISSANCE
  190. IOPERA= 1
  191. IF (CTYP .EQ. 'MCHAML') THEN
  192. C IARGU = 1 pour MCHAML ** ENTIER
  193. IARGU = 1
  194. ELSE
  195. C IARGU = 11 pour ENTIER ** MCHAML (terme a terme)
  196. IARGU = 11
  197. ENDIF
  198. FLO = REAL(0.D0)
  199. ICHR = 0
  200. IRET = 0
  201. CALL OPCHE1(ICH1,IOPERA,IARGU,I1,FLO,ICHR,IRET)
  202. IF(IRET.NE.0) THEN
  203. CALL ACTOBJ('MCHAML ',ICHR,1)
  204. CALL ECROBJ('MCHAML ',ICHR)
  205. ELSE
  206. CALL ERREUR(26)
  207. ENDIF
  208. RETURN
  209.  
  210. 5 CONTINUE
  211. C_______________________________________________________________________
  212. C
  213. C CHPOINT ** ENTIER
  214. C_______________________________________________________________________
  215. CALL LIRENT(I1,0,IRETOU)
  216. IF (IRETOU.EQ.0) GOTO 6
  217. CALL LIROBJ('CHPOINT',ICH1,0,IRETOU)
  218. IF (IRETOU.EQ.0) THEN
  219. CALL REFUS
  220. GOTO 6
  221. ENDIF
  222. CALL ACTOBJ('CHPOINT ',ICH1,1)
  223. C IOPERA= 1 pour l'operation PUISSANCE
  224. IOPERA= 1
  225. IF (CTYP .EQ. 'CHPOINT') THEN
  226. C IARGU = 1 pour CHPOINT ** ENTIER
  227. IARGU = 1
  228. ELSE
  229. C IARGU = 11 pour ENTIER ** CHPOINT (terme a terme)
  230. IARGU = 11
  231. ENDIF
  232. FLO = REAL(0.D0)
  233. CALL OPCHP1(ICH1,IOPERA,IARGU,I1,FLO,ICHR,IRET)
  234. IF(IRET.NE.0) THEN
  235. CALL ACTOBJ('CHPOINT ',ICHR,1)
  236. CALL ECROBJ('CHPOINT ',ICHR)
  237. ELSE
  238. CALL ERREUR(26)
  239. ENDIF
  240. RETURN
  241. C
  242. 6 CONTINUE
  243. C_______________________________________________________________________
  244. C
  245. C MCHAML ** FLOTTANT
  246. C_______________________________________________________________________
  247. CALL LIRREE(FLO,0,IRETOU)
  248. IF (IRETOU.EQ.0) GOTO 7
  249. CALL LIROBJ('MCHAML ',ICH1,0,IRETOU)
  250. IF (IRETOU.EQ.0) THEN
  251. CALL REFUS
  252. GOTO 7
  253. ENDIF
  254. CALL ACTOBJ('MCHAML ',ICH1,1)
  255. C IOPERA= 1 pour l'operation PUISSANCE
  256. IOPERA= 1
  257. IF (CTYP .EQ. 'MCHAML') THEN
  258. C IARGU = 2 pour MCHAML ** FLOTTANT
  259. IARGU = 2
  260. ELSE
  261. C IARGU = 21 pour FLOTTANT ** MCHAML (terme a terme)
  262. IARGU = 21
  263. ENDIF
  264. I1 = 0
  265. ICHR = 0
  266. IRET = 0
  267. CALL OPCHE1(ICH1,IOPERA,IARGU,I1,FLO,ICHR,IRET)
  268. IF(IRET.NE.0) THEN
  269. CALL ACTOBJ('MCHAML ',ICHR,1)
  270. CALL ECROBJ('MCHAML ',ICHR)
  271. ELSE
  272. CALL ERREUR(26)
  273. ENDIF
  274. RETURN
  275. C
  276. 7 CONTINUE
  277. C_______________________________________________________________________
  278. C
  279. C CHPOINT**FLOTTANT
  280. C_______________________________________________________________________
  281. CALL LIRREE(FLO,0,IRETOU)
  282. IF (IRETOU.EQ.0) GOTO 8
  283. CALL LIROBJ('CHPOINT',ICH1,0,IRETOU)
  284. IF (IRETOU.EQ.0) THEN
  285. CALL REFUS
  286. GOTO 8
  287. ENDIF
  288. CALL ACTOBJ('CHPOINT ',ICH1,1)
  289. C IOPERA= 1 pour l'operation PUISSANCE
  290. IOPERA= 1
  291. IF (CTYP .EQ. 'CHPOINT') THEN
  292. C IARGU = 2 pour CHPOINT ** FLOTTANT
  293. IARGU = 2
  294. ELSE
  295. C IARGU = 21 pour FLOTTANT ** CHPOINT (terme a terme)
  296. IARGU = 21
  297. ENDIF
  298. I1 = 0
  299. CALL OPCHP1(ICH1,IOPERA,IARGU,I1,FLO,ICHR,IRET)
  300. IF(IRET.NE.0) THEN
  301. CALL ACTOBJ('CHPOINT ',ICHR,1)
  302. CALL ECROBJ('CHPOINT ',ICHR)
  303. ELSE
  304. CALL ERREUR(26)
  305. ENDIF
  306. RETURN
  307. C
  308. 8 CONTINUE
  309. C_______________________________________________________________________
  310. C
  311. C LISTREEL**ENTIER
  312. C_______________________________________________________________________
  313. CALL LIRENT(I1,0,IRETOU)
  314. IF (IRETOU.EQ.0) GOTO 9
  315. CALL LIROBJ('LISTREEL',ICH,0,IRETOU)
  316. IF (IRETOU.EQ.0) THEN
  317. CALL REFUS
  318. GOTO 9
  319. ENDIF
  320. MLREEL=ICH
  321. SEGACT,MLREEL
  322. C Puissance entre LISTREEL et ENTIER
  323. C IOPERA= 1 pour l'operation PUISSANCE
  324. IOPERA= 1
  325. IF (CTYP .EQ. 'LISTREEL') THEN
  326. C IARGU = 1 pour LISTREEL ** ENTIER
  327. IARGU = 1
  328. ELSE
  329. C IARGU = 11 pour ENTIER ** LISTREEL (terme a terme)
  330. IARGU = 11
  331. ENDIF
  332. FLO = REAL(0.D0)
  333. ICHR = 0
  334. CALL OPLRE1(ICH,IOPERA,IARGU,I1,FLO,ICHR,IRET)
  335. IF(IRET.NE.0) THEN
  336. MLREEL=ICHR
  337. SEGACT,MLREEL*NOMOD
  338. CALL ECROBJ('LISTREEL',ICHR)
  339. ELSE
  340. CALL ERREUR(26)
  341. ENDIF
  342. RETURN
  343. C
  344. 9 CONTINUE
  345. C_______________________________________________________________________
  346. C
  347. C LISTREEL**FLOTTANT
  348. C_______________________________________________________________________
  349. CALL LIRREE(FLO,0,IRETOU)
  350. IF (IRETOU.EQ.0) GOTO 10
  351. CALL LIROBJ('LISTREEL',ICH,0,IRETOU)
  352. IF (IRETOU.EQ.0) THEN
  353. CALL REFUS
  354. GOTO 10
  355. ENDIF
  356. MLREEL=ICH
  357. SEGACT,MLREEL*NOMOD
  358. C Puissance entre LISTREEL et FLOTTANT
  359. C IOPERA= 1 pour l'operation PUISSANCE
  360. IOPERA= 1
  361. IF (CTYP .EQ. 'LISTREEL') THEN
  362. C IARGU = 2 pour LISTREEL ** FLOTTANT
  363. IARGU = 2
  364. ELSE
  365. C IARGU = 21 pour FLOTTANT ** LISTREEL (terme a terme)
  366. IARGU = 21
  367. ENDIF
  368. I1 = 0
  369. ICHR = 0
  370. CALL OPLRE1(ICH,IOPERA,IARGU,I1,FLO,ICHR,IRET)
  371. IF(IRET.NE.0) THEN
  372. MLREEL=ICHR
  373. SEGACT,MLREEL*NOMOD
  374. CALL ECROBJ('LISTREEL',ICHR)
  375. ELSE
  376. CALL ERREUR(26)
  377. ENDIF
  378. RETURN
  379. C
  380. 10 CONTINUE
  381. C_______________________________________________________________________
  382. C
  383. C EVOLUTION**ENTIER
  384. C_______________________________________________________________________
  385. CALL LIRENT(I1,0,IRETOU)
  386. IF (IRETOU.EQ.0) GOTO 11
  387. CALL LIROBJ('EVOLUTIO',ICH,0,IRETOU)
  388. IF (IRETOU.EQ.0) THEN
  389. CALL REFUS
  390. GOTO 11
  391. ENDIF
  392. CALL ACTOBJ('EVOLUTIO',ICH,1)
  393. C IOPERA= 1 pour l'operation PUISSANCE
  394. IOPERA= 1
  395. IF (CTYP .EQ. 'EVOLUTIO') THEN
  396. C IARGU = 1 pour EVOLUTIO ** ENTIER
  397. IARGU = 1
  398. ELSE
  399. C IARGU = 11 pour ENTIER ** EVOLUTIO
  400. IARGU = 11
  401. ENDIF
  402. FLO = REAL(0.D0)
  403. ICLE = 0
  404. CALL LIRMOT(CLEVO,NCLEVO,ICLE,0)
  405. IF (ICLE.EQ.0) ICLE = 2
  406. CALL OPEVO1(ICH,IOPERA,IARGU,ICLE,I1,FLO,ICHR,IRET)
  407. IF(IRET.NE.0) THEN
  408. CALL ACTOBJ('EVOLUTIO',ICHR,1)
  409. CALL ECROBJ('EVOLUTIO',ICHR)
  410. ELSE
  411. CALL ERREUR(26)
  412. ENDIF
  413. RETURN
  414. C
  415. 11 CONTINUE
  416. C_______________________________________________________________________
  417. C
  418. C EVOLUTION**FLOTTANT
  419. C_______________________________________________________________________
  420. CALL LIRREE(FLO,0,IRETOU)
  421. IF (IRETOU.EQ.0) GOTO 12
  422. CALL LIROBJ('EVOLUTIO',ICH,0,IRETOU)
  423. IF (IRETOU.EQ.0) THEN
  424. CALL REFUS
  425. GOTO 12
  426. ENDIF
  427. CALL ACTOBJ('EVOLUTIO',ICH,1)
  428. C IOPERA= 1 pour l'operation PUISSANCE
  429. IOPERA= 1
  430. IF (CTYP .EQ. 'EVOLUTIO') THEN
  431. C IARGU = 2 pour EVOLUTIO ** FLOTTANT
  432. IARGU = 2
  433. ELSE
  434. C IARGU = 21 pour FLOTTANT ** EVOLUTIO
  435. IARGU = 21
  436. ENDIF
  437. I1 = 0
  438. ICLE = 0
  439. CALL LIRMOT(CLEVO,NCLEVO,ICLE,0)
  440. IF (ICLE.EQ.0) ICLE = 2
  441. CALL OPEVO1(ICH,IOPERA,IARGU,ICLE,I1,FLO,ICHR,IRET)
  442. IF(IRET.NE.0) THEN
  443. CALL ACTOBJ('EVOLUTIO',ICHR,1)
  444. CALL ECROBJ('EVOLUTIO',ICHR)
  445. ELSE
  446. CALL ERREUR(26)
  447. ENDIF
  448. RETURN
  449. C
  450. 12 CONTINUE
  451. C_______________________________________________________________________
  452. C
  453. C LISTENTI**ENTIER
  454. C_______________________________________________________________________
  455. CALL LIROBJ('LISTENTI',MLENT1,0,IRETOU)
  456. IF(IRETOU.EQ.0) GOTO 13
  457. CALL LIRENT(IVA,0,IRETOU)
  458. IF (IRETOU.EQ.0) THEN
  459. CALL REFUS
  460. GOTO 13
  461. ENDIF
  462. SEGACT MLENT1
  463. JG=MLENT1.LECT(/1)
  464. SEGINI MLENTI
  465.  
  466. IF (CTYP .EQ. 'LISTENTI') THEN
  467. C LISTENTI ** ENTIER
  468. DO 121 I=1,JG
  469. ITRA=MLENT1.LECT(I)
  470. IF ((ITRA .EQ. 0) .AND. (IVA .LT. 0)) THEN
  471. INTERR(1)=ITRA
  472. INTERR(2)=IVA
  473. MOTERR(1:4)=' ** '
  474. CALL ERREUR(1059)
  475. RETURN
  476. ELSE
  477. LECT(I)=ITRA**IVA
  478. ENDIF
  479. 121 CONTINUE
  480.  
  481. ELSE
  482. C ENTIER ** LISTENTI
  483. DO 122 I=1,JG
  484. ITRA=MLENT1.LECT(I)
  485. IF ((IVA .EQ. 0) .AND. (ITRA .LT. 0)) THEN
  486. INTERR(1) =IVA
  487. INTERR(2) =ITRA
  488. MOTERR(1:4)=' ** '
  489. CALL ERREUR(1059)
  490. RETURN
  491. ELSE
  492. LECT(I)=IVA**ITRA
  493. ENDIF
  494. 122 CONTINUE
  495. ENDIF
  496.  
  497. SEGACT,MLENTI*NOMOD
  498. CALL ECROBJ('LISTENTI',MLENTI)
  499. RETURN
  500. C
  501. 13 CONTINUE
  502. C_______________________________________________________________________
  503. C
  504. C LISTENTI**FLOTTANT
  505. C_______________________________________________________________________
  506. CALL LIROBJ('LISTENTI',MLENT1,0,IRETOU)
  507. IF(IRETOU.EQ.0) GOTO 14
  508. CALL LIRREE(XVA,0,IRETOU)
  509. IF (IRETOU.EQ.0) THEN
  510. CALL REFUS
  511. GOTO 14
  512. ENDIF
  513. SEGACT MLENT1
  514. JG=MLENT1.LECT(/1)
  515. SEGINI MLREEL
  516. IF (CTYP .EQ. 'LISTENTI') THEN
  517. C LISTENTI ** FLOTTANT
  518. DO 131 I=1,JG
  519. I1=MLENT1.LECT(I)
  520. C Verification si puissance ENTIERE possible
  521. I2 = NINT(XVA)
  522. XFLOT = ABS(XVA - REAL(I2))
  523. IF ( XFLOT .LE. (XZPREC*ABS(XVA)*REAL(2.D0))) THEN
  524. PROG(I)=REAL(I1)**I2
  525.  
  526. ELSEIF (I1 .LT. 0 ) THEN
  527. INTERR(1)=I1
  528. REAERR(1)=XVA
  529. MOTERR(1:4)=' ** '
  530. CALL ERREUR(1061)
  531. RETURN
  532. ELSE
  533. PROG(I)=REAL(I1)**XVA
  534. ENDIF
  535. 131 CONTINUE
  536.  
  537. ELSE
  538. C FLOTTANT ** LISTENTI
  539. DO 132 I=1,JG
  540. I1=MLENT1.LECT(I)
  541. IF (XVA .EQ. 0.D0 .AND. I1 .LT. 0 ) THEN
  542. INTERR(1)=XVA
  543. REAERR(1)=I1
  544. MOTERR(1:4)=' ** '
  545. CALL ERREUR(1061)
  546. RETURN
  547. ELSE
  548. PROG(I)=XVA**I1
  549. ENDIF
  550. 132 CONTINUE
  551. ENDIF
  552.  
  553. SEGACT,MLREEL*NOMOD
  554. CALL ECROBJ('LISTREEL',MLREEL)
  555. RETURN
  556.  
  557. 14 CONTINUE
  558. C_______________________________________________________________________
  559. C
  560. C LISTREEL**LISTREEL
  561. C_______________________________________________________________________
  562. CALL LIROBJ('LISTREEL',ICH,0,IRETOU)
  563. IF(IRETOU.EQ.0) GOTO 15
  564. MLREEL=ICH
  565. SEGACT,MLREEL*NOMOD
  566. CALL LIROBJ('LISTREEL',ICHR,0,IRETOU)
  567. IF(IRETOU.EQ.0) THEN
  568. CALL REFUS
  569. GOTO 15
  570. ENDIF
  571. MLREEL=ICHR
  572. SEGACT,MLREEL*NOMOD
  573.  
  574. C Puissance entre LISTREEL et LISTREEL terme a terme
  575. C IOPERA= 1 pour l'operation PUISSANCE
  576. C IARGU = 0 pour ne pas utiliser I1 et FLO
  577. IOPERA= 1
  578. IARGU = 0
  579. I1 = 0
  580. FLO = REAL(0.D0)
  581. CALL OPLRE1(ICH,IOPERA,IARGU,I1,FLO,ICHR,IRET)
  582. IF(IRET.NE.0) THEN
  583. MLREEL=ICHR
  584. SEGACT,MLREEL*NOMOD
  585. CALL ECROBJ('LISTREEL',ICHR)
  586. ELSE
  587. CALL ERREUR(26)
  588. ENDIF
  589. RETURN
  590.  
  591. 15 CONTINUE
  592. C_______________________________________________________________________
  593. C
  594. C LISTREEL**LISTENTI
  595. C_______________________________________________________________________
  596. CALL LIROBJ('LISTREEL',ICH,0,IRETOU)
  597. IF(IRETOU.EQ.0) GOTO 16
  598. CALL LIROBJ('LISTENTI',ICHR,0,IRETOU)
  599. IF(IRETOU.EQ.0) THEN
  600. CALL REFUS
  601. GOTO 16
  602. ENDIF
  603. MLREEL=ICH
  604. MLENTI=ICHR
  605. SEGACT,MLREEL ,MLENTI
  606. JG=MLREEL.PROG(/1)
  607. SEGINI,MLREE1
  608. IF(MLENTI.LECT(/1) .NE. JG)THEN
  609. CALL ERREUR(217)
  610. RETURN
  611. ENDIF
  612.  
  613. IF (CTYP .EQ. 'LISTREEL') THEN
  614. C LISTREEL ** LISTENTI
  615. DO 151 II=1,JG
  616. XVA = MLREEL.PROG(II)
  617. I1 = MLENTI.LECT(II)
  618. IF (XVA .EQ. 0.D0 .AND. I1 .LT. 0 ) THEN
  619. INTERR(1)=XVA
  620. REAERR(1)=I1
  621. MOTERR(1:4)=' ** '
  622. CALL ERREUR(1060)
  623. RETURN
  624. ELSE
  625. MLREE1.PROG(II) = XVA ** I1
  626. ENDIF
  627. 151 CONTINUE
  628. ELSE
  629. C LISTENTI ** LISTREEL
  630. DO 152 II=1,JG
  631. XVA = MLREEL.PROG(II)
  632. I1 = MLENTI.LECT(II)
  633. IF (I1 .LT. 0 ) THEN
  634. INTERR(1)=I1
  635. REAERR(1)=FLO1
  636. MOTERR(1:4)=' ** '
  637. CALL ERREUR(1061)
  638. RETURN
  639. ELSE
  640. MLREE1.PROG(II) = I1 ** XVA
  641. ENDIF
  642. 152 CONTINUE
  643. ENDIF
  644.  
  645. SEGACT,MLREE1*NOMOD
  646. CALL ECROBJ('LISTREEL',MLREE1)
  647. RETURN
  648.  
  649. 16 CONTINUE
  650. C_______________________________________________________________________
  651. C
  652. C LISTENTI**LISTENTI
  653. C_______________________________________________________________________
  654. CALL LIROBJ('LISTENTI',ICH,0,IRETOU)
  655. IF(IRETOU.EQ.0) GOTO 17
  656. CALL LIROBJ('LISTENTI',ICHR,0,IRETOU)
  657. IF(IRETOU.EQ.0) THEN
  658. CALL REFUS
  659. GOTO 17
  660. ENDIF
  661. MLENTI=ICH
  662. MLENT1=ICHR
  663. SEGACT,MLENTI,MLENT1
  664.  
  665. JG=MLENTI.LECT(/1)
  666. IF(MLENT1.LECT(/1) .NE. JG)THEN
  667. CALL ERREUR(217)
  668. RETURN
  669. ENDIF
  670. SEGINI,MLENT2
  671.  
  672. DO 160 II=1,JG
  673. I1=MLENTI.LECT(II)
  674. I2=MLENT1.LECT(II)
  675. IF(I1 .EQ. 0 .AND. I2 .LT. 0)THEN
  676. INTERR(1)=I1
  677. INTERR(2)=I2
  678. MOTERR(1:4)=' ** '
  679. CALL ERREUR(1059)
  680. RETURN
  681. ELSE
  682. MLENT2.LECT(II)=I1 ** I2
  683. ENDIF
  684. 160 CONTINUE
  685.  
  686. SEGACT,MLENT2*NOMOD
  687. CALL ECROBJ('LISTENTI',MLENT2)
  688. RETURN
  689.  
  690. 17 CONTINUE
  691. C_______________________________________________________________________
  692. C
  693. C NUAGE**ENTIER
  694. C_______________________________________________________________________
  695. CALL LIRENT(I1,0,IRETOU)
  696. IF (IRETOU.EQ.0) GOTO 18
  697. CALL LIROBJ('NUAGE ',ICH,0,IRETOU)
  698. IF (IRETOU.EQ.0) THEN
  699. CALL REFUS
  700. GOTO 18
  701. ENDIF
  702. CALL ACTOBJ('NUAGE ',ICH,1)
  703. IF (IERR.NE.0) RETURN
  704. C IOPERA= 1 pour l'operation PUISSANCE
  705. IOPERA= 1
  706. IF (CTYP .EQ. 'NUAGE ') THEN
  707. C IARGU = 1 pour NUAGE ** ENTIER
  708. IARGU = 1
  709. ELSE
  710. C IARGU = 11 pour ENTIER ** NUAGE
  711. IARGU = 11
  712. ENDIF
  713. FLO = REAL(0.D0)
  714. C Lecture du nom de la composante
  715. CALL LIRCHA(COMP,1,IRETOU)
  716. IF (IERR.NE.0) RETURN
  717. CALL OPNUA1(ICH,IOPERA,IARGU,COMP,I1,FLO,ICHR,IRET)
  718. IF (IERR.NE.0) RETURN
  719. IF(IRET.NE.0) THEN
  720. CALL ACTOBJ('NUAGE ',ICHR,1)
  721. CALL ECROBJ('NUAGE ',ICHR)
  722. ELSE
  723. C ERREUR 5 car erreurs gerees dans OPNUA1
  724. CALL ERREUR(5)
  725. ENDIF
  726. RETURN
  727.  
  728. 18 CONTINUE
  729. C_______________________________________________________________________
  730. C
  731. C NUAGE**FLOTTANT
  732. C_______________________________________________________________________
  733. CALL LIRREE(FLO,0,IRETOU)
  734. IF (IRETOU.EQ.0) GOTO 20
  735. CALL LIROBJ('NUAGE ',ICH,0,IRETOU)
  736. IF (IRETOU.EQ.0) THEN
  737. CALL REFUS
  738. GOTO 20
  739. ENDIF
  740. CALL ACTOBJ('NUAGE ',ICH,1)
  741. IF (IERR.NE.0) RETURN
  742. C IOPERA= 1 pour l'operation PUISSANCE
  743. IOPERA= 1
  744. IF (CTYP .EQ. 'NUAGE ') THEN
  745. C IARGU = 2 pour NUAGE ** FLOTTANT
  746. IARGU = 2
  747. ELSE
  748. C IARGU = 21 pour FLOTTANT ** NUAGE
  749. IARGU = 21
  750. ENDIF
  751. I1 = 0
  752. C Lecture du nom de la composante
  753. CALL LIRCHA(COMP,1,IRETOU)
  754. IF (IERR.NE.0) RETURN
  755. CALL OPNUA1(ICH,IOPERA,IARGU,COMP,I1,FLO,ICHR,IRET)
  756. IF (IERR.NE.0) RETURN
  757. IF(IRET.NE.0) THEN
  758. CALL ACTOBJ('NUAGE ',ICHR,1)
  759. CALL ECROBJ('NUAGE ',ICHR)
  760. ELSE
  761. C ERREUR 5 car erreurs gerees dans OPNUA1
  762. CALL ERREUR(5)
  763. ENDIF
  764. RETURN
  765.  
  766. 20 CONTINUE
  767. C_______________________________________________________________________
  768. C
  769. C ON A RIEN TROUVE POUR FAIRE L OPERATION
  770. C_______________________________________________________________________
  771. CALL QUETYP(MOTERR(1:8),0,IRETOU)
  772. IF(IRETOU.NE.0) THEN
  773. CALL LIROBJ(MOTERR(1:8),IRET,1,IRETOU)
  774. CALL QUETYP(MOTERR(9:16),0,IRETOU)
  775. IF (IRETOU.EQ.0) MOTERR(9:16) = ' ???? '
  776. CALL ERREUR(532)
  777. ELSE
  778. CALL ERREUR(533)
  779. ENDIF
  780. RETURN
  781. END
  782.  
  783.  
  784.  
  785.  

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