Télécharger interp.eso

Retour à la liste

Numérotation des lignes :

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

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