Télécharger interp.eso

Retour à la liste

Numérotation des lignes :

interp
  1. C INTERP SOURCE CB215821 23/12/07 21:15:04 11805
  2. SUBROUTINE INTERP
  3. C
  4. C=======================================================================
  5. C
  6. C Opérateur IPOL
  7. C
  8. C SYNTAXE : voir notice
  9. C
  10. C=======================================================================
  11. C
  12. C Remarques
  13. C
  14. C Les listes LISTREE1 et LISTREE2 doivent se correspondre
  15. C
  16. C L'évolution EVOL1 doit être élémentaire
  17. C
  18. C ATTENTION : la liste des abscisses donnéee est supposée monotone
  19. C
  20. C=======================================================================
  21. C
  22. C Auteur :
  23. C Création :
  24. C Modifications : voir fiches d'anomalie
  25. C
  26. C=======================================================================
  27.  
  28. IMPLICIT INTEGER(I-N)
  29. IMPLICIT REAL*8(A-H,O-Z)
  30. PARAMETER (NCLE=2)
  31. CHARACTER*8 TYPE1,TYPE2,TYPEI,TYPO1,TYPO2,TYPOBJ
  32. CHARACTER*8 CHARIN,CHARRE
  33. LOGICAL LOGIN,LOGRE
  34. CHARACTER*4 MCLE(NCLE)
  35. DATA MCLE/'TOUS','SPLI'/
  36. CHARACTER*4 CDER(2)
  37. DATA CDER/'DGAU','DDRO'/
  38. LOGICAL LCDER(2)
  39. REAL*8 XCDER(2)
  40.  
  41. -INC SMLREEL
  42. POINTEUR MLREE4.MLREEL,MLDERS.MLREEL,MLDER.MLREEL
  43. -INC CCREEL
  44. -INC SMCHPOI
  45. -INC SMELEME
  46.  
  47. -INC PPARAM
  48. -INC CCOPTIO
  49. -INC SMCHAML
  50. -INC SMTABLE
  51. -INC SMEVOLL
  52. SEGMENT TABR
  53. REAL*8 TEMA(LOR)
  54. ENDSEGMENT
  55.  
  56. KEVOLL = 0
  57.  
  58. * syntaxe 3 ?
  59. CALL LIROBJ('NUAGE ',INUA,0,IRETOU)
  60. IF (IERR.NE.0) RETURN
  61. IF(IRETOU.EQ.1) THEN
  62. CALL ACTOBJ('NUAGE ',INUA,1)
  63. CALL IPLNU1(INUA)
  64. RETURN
  65. ENDIF
  66. * syntaxe 2 ?
  67. CALL LIROBJ('TABLE',IPOT,0,IRETOU)
  68. IF (IERR.NE.0) RETURN
  69. IF(IRETOU.EQ.1) THEN
  70. CALL LIRREE(TEMPS,1,IRETOU)
  71. IF(IERR.NE.0) RETURN
  72. GOTO 50
  73. ENDIF
  74.  
  75. * syntaxe 1 (INDIC=1 à 4)
  76. CALL LIROBJ('CHPOINT ',MTEMP,0,IRETOU)
  77. IF (IERR.NE.0) RETURN
  78. IF(IRETOU.EQ.1) THEN
  79. CALL ACTOBJ('CHPOINT ',MTEMP,1)
  80. IF (IERR.NE.0) RETURN
  81. ICHPO1 = MTEMP
  82. C
  83. C Interpolation d'un point d'abscisse curviligne FLOT1
  84. CALL LIRREE(FLOT1,0,IRETOU)
  85. IF (IERR.NE.0) RETURN
  86. IF (IRETOU.EQ.1) THEN
  87. CALL IPLCUR(ICHPO1,FLOT1,IPOIN1)
  88. IF (IERR.NE.0) RETURN
  89. IF (IPOIN1.EQ.0) CALL ERREUR(251)
  90. CALL ECROBJ('POINT ',IPOIN1)
  91. RETURN
  92. ELSE
  93. ENDIF
  94. ELSE
  95. CALL LIRREE(TEMPS,0,IRETOU)
  96. IF (IERR.NE.0) RETURN
  97. IF(IRETOU.EQ.1) THEN
  98. ELSE
  99. CALL LIROBJ('MCHAML ',IPO1,0,IRETOU)
  100. IF (IERR.NE.0) RETURN
  101. IF(IRETOU.EQ.1) THEN
  102. CALL ACTOBJ('MCHAML ',IPO1,1)
  103. IF (IERR.NE.0) RETURN
  104. ELSE
  105. CALL LIROBJ('LISTREEL',MLIST,0,IRETOU)
  106. IF (IERR.NE.0) RETURN
  107. IF(IRETOU.EQ.1) THEN
  108. CALL ACTOBJ('LISTREEL',MLIST,1)
  109. IF (IERR.NE.0) RETURN
  110. ELSE
  111. * Pas d opérande correcte trouvée
  112. CALL QUETYP(MOTERR(1:8),0,IRETOU)
  113. IF (IERR.NE.0) RETURN
  114. IF(IRETOU.NE.0) THEN
  115. * On ne veut pas d'objet de type %m1:8
  116. CALL ERREUR(39)
  117. ELSE
  118. * Cet opérateur a encore besoin d'un opérande
  119. CALL ERREUR(533)
  120. ENDIF
  121. RETURN
  122. ENDIF
  123. ENDIF
  124. ENDIF
  125. ENDIF
  126.  
  127. * Lecture de la fonction à interpoler
  128. CALL LIROBJ('EVOLUTIO',IEVL,0,IRETOU)
  129. IF (IERR.NE.0) RETURN
  130. IF(IRETOU.EQ.1) THEN
  131. CALL ACTOBJ('EVOLUTIO',IEVL,1)
  132. IF (IERR.NE.0) RETURN
  133. MEVOLL=IEVL
  134. * Vérification que l'évolution est élémentaire
  135. IF (IEVOLL(/1).NE.1) THEN
  136. * Opération interdite sur un objet complexe
  137. CALL ERREUR(25)
  138. RETURN
  139. ENDIF
  140. KEVOLL=IEVOLL(1)
  141. * de type scalaire
  142. IF (ITYEVO.NE.'REEL') THEN
  143. * Opération interdite sur un objet complexe
  144. CALL ERREUR(25)
  145. RETURN
  146. ENDIF
  147. * peuplée de flottants
  148. IF ((TYPX.NE.'LISTREEL').OR.(TYPY.NE.'LISTREEL')) THEN
  149. * Certaines courbes ne sont pas du bon type
  150. CALL ERREUR(871)
  151. RETURN
  152. ENDIF
  153. KTE=IPROGX
  154. KFT=IPROGY
  155. ELSE
  156. CALL LIROBJ('LISTREEL',KTE,1,IRETOU)
  157. IF(IERR.NE.0) RETURN
  158. CALL LIROBJ('LISTREEL',KFT,1,IRETOU)
  159. IF(IERR.NE.0) RETURN
  160. ENDIF
  161.  
  162. * Longueur des listes décrivant la fonction
  163. MLREE1=KTE
  164. MLREE2=KFT
  165. SEGACT MLREE1,MLREE2
  166. IF(MLREE1.PROG(/1).NE.MLREE2.PROG(/1)) THEN
  167. * Les suites n ont pas la même longueur
  168. CALL ERREUR(212)
  169. RETURN
  170. ENDIF
  171. LON=MLREE1.PROG(/1)
  172.  
  173. C erreur 897 2 :
  174. C "La dimension des LISTREEL doit etre plus grande que 1"
  175. IF (LON.LT.1) THEN
  176. CALL ERREUR(897)
  177. RETURN
  178. ENDIF
  179.  
  180. c---- Lecture des options :
  181. C ITOUS : option TOUS
  182. C ISPLI : option SPLI
  183. C IHORS : comportement en dehors de l'intervalle de def. des donnees
  184. C IHORS = 0 : option ERREur
  185. C IHORS = 1 : option BORNE (valeur aux bornes)
  186. C IHORS = 2 : option EXTRapolation lineaire
  187. ITOUS = 0
  188. ISPLI = 0
  189. IHORS = 1
  190. 2 CALL LIRMOT(MCLE,NCLE,ICLE,0)
  191. IF (IERR.NE.0) RETURN
  192. IF (ICLE.EQ.1) ITOUS = 1
  193. IF (ICLE.EQ.2) ISPLI = 1
  194. C IF (ICLE.EQ.3) IHORS = 1
  195. C IF (ICLE.EQ.4) IHORS = 2
  196. C IF (ICLE.EQ.5) IHORS = 0
  197. IF (ICLE.NE.0) GOTO 2
  198.  
  199. C write(6,*) 'ITOUS =',ITOUS
  200. C write(6,*) 'ISPLI =',ISPLI
  201. C write(6,*) 'IHORS =',IHORS
  202.  
  203. C Petite verification compatibilite options
  204. IF (ITOUS.EQ.1.AND.ISPLI.EQ.1) THEN
  205. CALL ERREUR(34)
  206. RETURN
  207. ENDIF
  208. C Option "TOUS" : pas d'extrapolation possible
  209. C IF (ITOUS.EQ.1.AND.IHORS.EQ.2) THEN
  210. C CALL ERREUR(34)
  211. C RETURN
  212. C ENDIF
  213.  
  214. C Verif. donnees option 'TOUS'
  215. IF(ITOUS.EQ.1) THEN
  216. IF(INDIC.NE.1) THEN
  217. c Option %M1:8 incompatible avec les donnees
  218. MOTERR(1:8)='TOUS'
  219. CALL ERREUR(803)
  220. c On desire lire un nombre
  221. CALL ERREUR(15)
  222. RETURN
  223. ENDIF
  224. ISENS=0
  225. c GOTO 1
  226. c On va directement en 10 car SPLINE incompatible avec TOUS
  227. GOTO 10
  228. ENDIF
  229.  
  230. TDEB=MLREE1.PROG(1)
  231. TFIN=MLREE1.PROG(LON)
  232. * Les x sont-ils croissants ou décroissants ?
  233. IF (TFIN.GE.TDEB) THEN
  234. ISENS=0
  235. ELSE
  236. c si decroissant, on retourne la liste
  237. ISENS=1
  238. JG=LON
  239. SEGINI,MLREE3,MLREE4
  240. DO ILON=1,LON
  241. MLREE3.PROG(ILON)=MLREE1.PROG(LON-ILON+1)
  242. MLREE4.PROG(ILON)=MLREE2.PROG(LON-ILON+1)
  243. ENDDO
  244. MLREE1=MLREE3
  245. MLREE2=MLREE4
  246. TDEB=MLREE1.PROG(1)
  247. TFIN=MLREE1.PROG(LON)
  248. ENDIF
  249. C
  250. C Vérification que la liste est ordonnée
  251. C
  252. TPRE=TDEB
  253. DO ILON=2,LON
  254. TCOU=MLREE1.PROG(ILON)
  255. IF (TCOU.LT.TPRE) GOTO 6661
  256. TPRE=TCOU
  257. ENDDO
  258. c ENDIF
  259. GOTO 1
  260. 6661 CONTINUE
  261. C erreur 249 2 : "La suite de reels doit etre croissante"
  262. cbp : en realite elle doit etre monotone (decroissante possible)
  263. CALL ERREUR(249)
  264. RETURN
  265.  
  266. 1 CONTINUE
  267. *
  268. * Option SPLINE :
  269. *
  270. IF (ISPLI.EQ.1) THEN
  271. LCDER(1)=.FALSE.
  272. LCDER(2)=.FALSE.
  273. * Lecture des mots clés et valeurs associées
  274. * On lit les valeurs des dérivées premières à gauche et à droite
  275. * Si elles ne sont pas données, c'est la condition à la limite
  276. * naturelle qui s'applique
  277. 77 CONTINUE
  278. CALL LIRMOT(CDER,2,ICDER,0)
  279. IF (IERR.NE.0) RETURN
  280. IF (ICDER.GT.0) THEN
  281. LCDER(ICDER)=.TRUE.
  282. CALL LIRREE(XCDER(ICDER),1,IRETOU)
  283. IF(IERR.NE.0) RETURN
  284. GOTO 77
  285. ENDIF
  286. JG=LON
  287. SEGINI MLDERS
  288. SEGINI MLDER
  289. IF (LCDER(1)) THEN
  290. * Cas où on prescrit la dérivée première à gauche
  291. MLDERS.PROG(1)=-0.5D0
  292. DX=MLREE1.PROG(2)-MLREE1.PROG(1)
  293. DY=MLREE2.PROG(2)-MLREE2.PROG(1)
  294. MLDER.PROG(1)=(3.D0/DX)*((DY/DX)-XCDER(1))
  295. ELSE
  296. * Condition de bord naturelle (dérivée seconde nulle)
  297. MLDERS.PROG(1)=XZERO
  298. MLDER.PROG(1)=XZERO
  299. ENDIF
  300. DO ILON=2,LON-1
  301. XIM=MLREE1.PROG(ILON-1)
  302. XI=MLREE1.PROG(ILON)
  303. XIP=MLREE1.PROG(ILON+1)
  304. YIM=MLREE2.PROG(ILON-1)
  305. YI=MLREE2.PROG(ILON)
  306. YIP=MLREE2.PROG(ILON+1)
  307. DXIM=XI-XIM
  308. DXI2=XIP-XIM
  309. DXIP=XIP-XI
  310. XRAP=DXIM/DXI2
  311. XP=XRAP*MLDERS.PROG(ILON-1)+2.D0
  312. MLDERS.PROG(ILON)=(XRAP-1.D0)/XP
  313. DYIP=YIP-YI
  314. DYIM=YI-YIM
  315. MLDER.PROG(ILON)=(6.D0*(DYIP/DXIP-DYIM/DXIM)/DXI2-XRAP
  316. $ *MLDER.PROG(ILON-1))/XP
  317. ENDDO
  318. IF (LCDER(2)) THEN
  319. XQN=0.5D0
  320. DX=MLREE1.PROG(LON)-MLREE1.PROG(LON-1)
  321. DY=MLREE2.PROG(LON)-MLREE2.PROG(LON-1)
  322. XUN=(3.D0/DX)*(XCDER(2)-(DY/DX))
  323. ELSE
  324. * Condition de bord naturelle (dérivée seconde nulle)
  325. XQN=0.D0
  326. XUN=0.D0
  327. ENDIF
  328. MLDERS.PROG(LON)=(XUN-XQN*MLDER.PROG(LON-1))/
  329. $ (XQN*MLDERS.PROG(LON-1)+1.D0)
  330. DO ILON=LON-1,1,-1
  331. MLDERS.PROG(ILON)=MLDERS.PROG(ILON)*MLDERS.PROG(ILON+1)
  332. $ +MLDER.PROG(ILON)
  333. ENDDO
  334. SEGSUP MLDER
  335. c write(*,*) 'MLDERS=',(MLDERS.PROG(iou),iou=1,LON)
  336. ELSE
  337. MLDERS=0
  338. ENDIF
  339. *
  340. * Répartition suivant le type de l'objet fourni
  341. *
  342. C write(6,*) 'INDIC =',INDIC
  343. GOTO (10,20,30,40) INDIC
  344.  
  345. ****************** T0 FLOTTANT *******************************
  346.  
  347. 10 CONTINUE
  348. IF(ITOUS.EQ.1) THEN
  349. CALL INTER4(TEMPS,MLREE1,MLREE2,IHORS,IRET)
  350. IF (IERR.NE.0) RETURN
  351. IF (IRET.NE.0) THEN
  352. CALL ACTOBJ('LISTREEL',IRET,1)
  353. IF (IERR.NE.0) RETURN
  354. CALL ECROBJ('LISTREEL',IRET)
  355. IF (IERR.NE.0) RETURN
  356. ENDIF
  357. ELSE
  358. CALL INTER5(TEMPS,MLREE1,MLREE2,FT0,
  359. & ISPLI,MLDERS,IHORS,IRET)
  360. IF (IERR.NE.0) RETURN
  361. IF (IRET.EQ.1) CALL ECRREE(FT0)
  362. IF (IERR.NE.0) RETURN
  363. ENDIF
  364. GOTO 999
  365.  
  366. ********************* T0 CHPOINT *****************************
  367.  
  368. 20 CONTINUE
  369. MCHPO1=MTEMP
  370. CALL NBCOMP(MCHPO1,'CHPOINT ',NB_Cmp)
  371. IF(NB_Cmp .NE. 1)THEN
  372. CALL ERREUR(180)
  373. RETURN
  374. ENDIF
  375. SEGINI,MCHPOI=MCHPO1
  376. MFT0=MCHPOI
  377. NS=IPCHP(/1)
  378. DO 21 IA=1,NS
  379. MSOUP1=IPCHP(IA)
  380. SEGINI,MSOUPO=MSOUP1
  381. NC=NOHARM(/1)
  382. IF(KEVOLL .NE. 0)THEN
  383. MSOUPO.NOCOMP(1)=KEVOLL.NOMEVY
  384. ELSE
  385. MSOUPO.NOCOMP(1)='SCAL'
  386. ENDIF
  387. IPCHP(IA)=MSOUPO
  388. C IPT1=IGEOC
  389. C SEGINI,IPT2=IPT1
  390. C IGEOC=IPT2
  391. MPOVA1=IPOVAL
  392. SEGINI,MPOVAL=MPOVA1
  393. IPOVAL=MPOVAL
  394. N=VPOCHA(/1)
  395. DO IB=1,N
  396. DO IC=1,NC
  397. TEMPS=VPOCHA(IB,IC)
  398. CALL INTER5(TEMPS,MLREE1,MLREE2,FT0,
  399. & ISPLI,MLDERS,IHORS,IRET)
  400. IF (IERR.NE.0) RETURN
  401. IF (IRET.EQ.0) THEN
  402. SEGSUP MCHPOI,MSOUPO,MPOVAL
  403. GOTO 999
  404. ENDIF
  405. VPOCHA(IB,IC)=FT0
  406. ENDDO
  407. ENDDO
  408. 21 CONTINUE
  409. CALL ACTOBJ('CHPOINT ',MFT0,1)
  410. IF (IERR.NE.0) RETURN
  411. CALL ECROBJ('CHPOINT ',MFT0)
  412. IF (IERR.NE.0) RETURN
  413. GOTO 999
  414.  
  415. ******************* T0 EST UN LISTREEL ***********************
  416.  
  417. 30 CONTINUE
  418. MLREE3=MLIST
  419. SEGACT MLREE3
  420. LONG=MLREE3.PROG(/1)
  421. JG=LONG
  422. SEGINI MLREEL
  423. MSOL=MLREEL
  424. DO 31 ILOOP=1,LONG
  425. TEMPS=MLREE3.PROG(ILOOP)
  426. CALL INTER5(TEMPS,MLREE1,MLREE2,FTO,
  427. & ISPLI,MLDERS,IHORS,IRET)
  428. IF (IERR.NE.0) RETURN
  429. IF(IRET.EQ.0) GOTO 999
  430. PROG(ILOOP)=FTO
  431. 31 CONTINUE
  432. CALL ACTOBJ('LISTREEL',MSOL,1)
  433. IF (IERR.NE.0) RETURN
  434. CALL ECROBJ('LISTREEL',MSOL)
  435. IF (IERR.NE.0) RETURN
  436. GOTO 999
  437.  
  438. *********************** T0 MCHAML ***************************
  439.  
  440. 40 CONTINUE
  441. IRET=0
  442. MCHEL1=IPO1
  443.  
  444. CALL NBCOMP(MCHEL1,'MCHAML ',NB_Cmp)
  445. IF(NB_Cmp .NE. 1)THEN
  446. CALL ERREUR(320)
  447. RETURN
  448. ENDIF
  449. SEGINI,MCHELM=MCHEL1
  450. IRET=MCHELM
  451. NSOUS=IMACHE(/1)
  452. DO 72 IA=1,NSOUS
  453. MCHAM1=ICHAML(IA)
  454. SEGINI,MCHAML=MCHAM1
  455. IF(KEVOLL .NE. 0)THEN
  456. MCHAML.NOMCHE(1)=KEVOLL.NOMEVY
  457. ELSE
  458. MCHAML.NOMCHE(1)='SCAL'
  459. ENDIF
  460. ICHAML(IA)=MCHAML
  461. DO 75 ICOMP=1,IELVAL(/1)
  462. MELVA1 = IELVAL(ICOMP)
  463. SEGINI,MELVAL=MELVA1
  464. IELVAL(ICOMP) = MELVAL
  465. SEGACT MELVA1
  466. IF (TYPCHE(ICOMP).NE.'REAL*8') GOTO 75
  467. N1PTEL=VELCHE(/1)
  468. N1EL =VELCHE(/2)
  469. N2PTEL=0
  470. N2EL =0
  471. DO IB=1,N1PTEL
  472. DO ID=1,N1EL
  473. TEMPS=MELVA1.VELCHE(IB,ID)
  474. CALL INTER5(TEMPS,MLREE1,MLREE2,FT0,
  475. & ISPLI,MLDERS,IHORS,IREE)
  476. IF (IERR.NE.0) RETURN
  477. IF (IREE.EQ.0) THEN
  478. SEGSUP MCHELM,MCHAML,MELVAL
  479. GOTO 999
  480. ENDIF
  481. VELCHE(IB,ID)=FT0
  482. ENDDO
  483. ENDDO
  484. 75 CONTINUE
  485. 72 CONTINUE
  486. CALL ACTOBJ('MCHAML ',IRET,1)
  487. IF (IERR.NE.0) RETURN
  488. CALL ECROBJ('MCHAML ',IRET)
  489. IF (IERR.NE.0) RETURN
  490. GOTO 999
  491.  
  492. ************************ OBJET1 TABLE ******************************
  493.  
  494. 50 CONTINUE
  495. MTABLE = IPOT
  496. SEGACT MTABLE
  497. LO = MLOTAB
  498.  
  499. *-- Vérification du format de la table
  500. IF (LO.LE.2) THEN
  501. * La table n'a pas le format désiré
  502. CALL ERREUR(647)
  503. RETURN
  504. ENDIF
  505.  
  506. LOR = LO
  507. SEGINI TABR
  508.  
  509. *-- Vérification du sous-type de la table
  510. * IMOT est son indice dans la table
  511. IOK = 0
  512. DO 55 I=1,LO
  513. TYPE1 = MTABTI(I)
  514. IF(TYPE1.EQ.'MOT ') THEN
  515. CHARIN = 'SOUSTYPE'
  516. TYPOBJ = ' '
  517. CALL ACCTAB(MTABLE,TYPE1,IVALIN,XVALIN,CHARIN,LOGIN,
  518. $ IOBIN,TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE)
  519. IF (IERR.NE.0) RETURN
  520. segact mtable
  521. IF(CHARIN.EQ.'SOUSTYPE') THEN
  522. IF(CHARRE.EQ.'RESULTAT') THEN
  523. IOK = 1
  524. IMOT = I
  525. ENDIF
  526. ENDIF
  527. ENDIF
  528. 55 CONTINUE
  529.  
  530. IF(IOK.EQ.0) THEN
  531. * Le sous-type de la table est incorrect
  532. CALL ERREUR(648)
  533. SEGSUP TABR
  534. RETURN
  535. ENDIF
  536.  
  537. *-- Vérification qu'on a bien des flottants en indice
  538. * en dehors du sous-type
  539. J = 0
  540. DO 56 I=1,LO
  541. IF (IMOT.EQ.I) GOTO 56
  542. J=J+1
  543. TYPEI = MTABTI(I)
  544.  
  545. IF (TYPEI.NE.'FLOTTANT') THEN
  546. * La table n'a pas le format desire
  547. CALL ERREUR(647)
  548. SEGSUP TABR
  549. RETURN
  550. ENDIF
  551.  
  552. TEMA(J) = RMTABI(I)
  553. 56 CONTINUE
  554.  
  555. *-- Vérification de l'ordonnancement des indices
  556. DO 57 I=1,LOR-2
  557. TEM1 = TEMA(I)
  558. TEM2 = TEMA(I+1)
  559.  
  560. IF(TEM1.GT.TEM2) THEN
  561. * la liste des indices n'est pas ordonnee
  562. CALL ERREUR(211)
  563. SEGSUP TABR
  564. RETURN
  565. ENDIF
  566.  
  567. 57 CONTINUE
  568.  
  569. IF(IMOT.EQ.1) THEN
  570. TEM1 = RMTABI(2)
  571. TYPO1 = MTABTV(2)
  572. IVALO1 = MTABIV(2)
  573. NDEB = 3
  574. ENDIF
  575. IF(IMOT.EQ.2) THEN
  576. TEM1 = RMTABI(1)
  577. TYPO1 = MTABTV(1)
  578. IVALO1 = MTABIV(1)
  579. NDEB = 3
  580. ENDIF
  581. IF(IMOT.GE.3) THEN
  582. TEM1 = RMTABI(1)
  583. TYPO1 = MTABTV(1)
  584. IVALO1 = MTABIV(1)
  585. NDEB = 2
  586. ENDIF
  587.  
  588. DO 58 I=NDEB,LOR
  589. IF(IMOT.EQ.I) GOTO 58
  590. TEM2 = RMTABI(I)
  591. TYPO2 = MTABTV(I)
  592. IVALO2 = MTABIV(I)
  593. IF((TEM1.LE.TEMPS).AND.(TEMPS.LE.TEM2)) THEN
  594. DTEM = (TEMPS-TEM1)/(TEM2-TEM1)
  595. IF(TYPO1.EQ.'CHPOINT ') THEN
  596. IF(TYPO2.EQ.'CHPOINT ') THEN
  597. CALL ACTOBJ('CHPOINT ',IVALO2,1)
  598. IF (IERR.NE.0) RETURN
  599. CALL ACTOBJ('CHPOINT ',IVALO1,1)
  600. IF (IERR.NE.0) RETURN
  601. CALL ECROBJ('CHPOINT ',IVALO2)
  602. IF (IERR.NE.0) RETURN
  603. CALL ECROBJ('CHPOINT ',IVALO1)
  604. IF (IERR.NE.0) RETURN
  605. ELSE
  606. CALL ERREUR(647)
  607. SEGSUP TABR
  608. RETURN
  609. ENDIF
  610. ENDIF
  611. IF(TYPO1.EQ.'MCHAML ') THEN
  612. IF(TYPO2.EQ.'MCHAML ') THEN
  613. CALL ACTOBJ('MCHAML ',IVALO2,1)
  614. IF (IERR.NE.0) RETURN
  615. CALL ACTOBJ('MCHAML ',IVALO1,1)
  616. IF (IERR.NE.0) RETURN
  617. CALL ECROBJ('MCHAML ',IVALO2)
  618. IF (IERR.NE.0) RETURN
  619. CALL ECROBJ('MCHAML ',IVALO1)
  620. IF (IERR.NE.0) RETURN
  621. ELSE
  622. CALL ERREUR(647)
  623. SEGSUP TABR
  624. RETURN
  625. ENDIF
  626. ENDIF
  627. CALL ECRREE(DTEM)
  628. IF (IERR.NE.0) RETURN
  629. CALL ECRREE(1.D0-DTEM)
  630. IF (IERR.NE.0) RETURN
  631. CALL COLI
  632. IF (IERR.NE.0) RETURN
  633. SEGSUP TABR
  634. GOTO 500
  635. ENDIF
  636. TEM1 = TEM2
  637. TYPO1 = TYPO2
  638. IVALO1 = IVALO2
  639. 58 CONTINUE
  640.  
  641. * Le temps est en dehors des limites de la table
  642. CALL ERREUR(210)
  643. SEGSUP TABR
  644. GOTO 500
  645.  
  646. 999 CONTINUE
  647. IF (ISENS.GT.0) THEN
  648. SEGSUP MLREE1
  649. SEGSUP MLREE2
  650. ENDIF
  651. IF (ISPLI.EQ.1) THEN
  652. SEGSUP MLDERS
  653. ENDIF
  654. * Sortie
  655. 500 CONTINUE
  656. RETURN
  657. END
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  

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