Télécharger option.eso

Retour à la liste

Numérotation des lignes :

option
  1. C OPTION SOURCE CB215821 23/07/12 21:15:09 11704
  2.  
  3. C=======================================================================
  4. C Si ICHOI=1
  5. C Affection d'une valeur a une variable de CCOPTIO (directive OPTION)
  6. C Si ICHOI=2
  7. C Renvoie la valeur d'une des variables de CCOPTIO (operateur VALEUR)
  8. C=======================================================================
  9.  
  10. SUBROUTINE OPTION (ICHOI)
  11.  
  12. IMPLICIT INTEGER(I-N)
  13. IMPLICIT REAL*8 (A-H,O-Z)
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC CCGEOME
  18. -INC CCHAMP
  19. -INC CCASSIS
  20. -INC SMCOORD
  21. -INC SMLREEL
  22. -INC SMLMOTS
  23. -INC CCFXDR
  24. -INC CCTRACE
  25. -INC CCREEL
  26.  
  27. SEGMENT MCOOR1
  28. REAL*8 XCoor1(LCoor)
  29. END SEGMENT
  30.  
  31.  
  32. C NbOpt : Nombre d'options (mot-cles) des operateurs OPTION et VALEUR
  33. C NbMfo : Nombre d'options mot-cle 'MODE' (vecteur MFO)
  34. C NbMsfo : " " mot-cle 'MODE' 'PLAN' (vecteur MSFO)
  35. C NbNoha : " " mot-cle 'FOUR' (vecteur NOHR)
  36. C NbUnid : " " mot-cle 'UNID' (vecteur OptUnid)
  37. C NbMod1D : " " mots-cles 'UNID' 'PLAN','AXIS' (vect. Mode1D)
  38. C NbGra : " " mot-cle 'TRAC' (vecteur MGR)
  39. C NbIso : " " mot-cle 'ISOV' (vecteur MISO)
  40. C NbReso : " " mot-cle 'RESO' (vecteur MRESOL)
  41. C NbErre : " " mot-cle 'ERRE' (vecteur ERCTRL)
  42. C NbForm : " " mot-cle 'SAUV' et 'REST' (vecteur FORMAT)
  43. C NbAuto : " " mot-cle 'NORM' (vecteur NAUTO)
  44. PARAMETER (NbOpt=50,NbMfo=6,NbMsfo=3,NbNoha=1,NbUnid=3,NbMod1D=12,
  45. $ NbGra=9,NbIso=3,NbReso=2,NbErre=4,NbForm=4,NbAuto=2,
  46. $ NbPoli=7,NbCosc=3,NbPotr=16,Nsuit=2)
  47.  
  48. EXTERNAL LONG
  49. CHARACTER*4 MCLE(NbOpt)
  50. CHARACTER*4 MFO(NbMfo)
  51. CHARACTER*4 MSFO(NbMsfo)
  52. CHARACTER*4 OptUnid(NbUnid)
  53. CHARACTER*4 Mode1D(NbMod1D)
  54. CHARACTER*4 MGR(NbGra)
  55. CHARACTER*4 MISO(NbIso)
  56. CHARACTER*4 MRESOL(NbReso)
  57. CHARACTER*4 ERCTRL(NbErre)
  58. CHARACTER*4 FORMAT(NbForm)
  59. CHARACTER*4 NOHR(nbnoha)
  60. integer*4 iohr
  61. equivalence(iohr,nohr)
  62. CHARACTER*4 NAUTO(NbAuto),MSUIT(Nsuit)
  63. CHARACTER*8 MPOLI(NbPoli)
  64. CHARACTER*12 ICHA
  65. CHARACTER*4 MCOSC(NbCosc)
  66. CHARACTER*12 MPOTR(NbPotr)
  67.  
  68. CHARACTER*8 CHARIN,CHARRE,MDIINC,MDIDUA
  69. CHARACTER*8 MTYP
  70. CHARACTER*(LOCHAI) CHA
  71. c CHARACTER*16 MODERI(5)
  72. LOGICAL LOG,ZEXIS,ZOPEN
  73.  
  74. DATA MCLE / 'IMPR','DIME','ELEM','SORT','TRAC','DONN','ECHO',
  75. $ 'ERRE','LECT','EPSI','IMPI','MODE','CADR','COUL',
  76. $ 'NIVE','NGMA','SAUV','REST','ISOV','OMBR','NBP ',
  77. $ 'VERI','ZERO','ACQU','----','PLAC','LANG','NORM',
  78. $ 'RESO','FTRA','OEIL','ERMA','ASSI','EPTR','NAVI',
  79. $ 'PARA','SURV','POLI','COSC','POTR','DEBU','LOCA',
  80. $ 'DENS','INCO','POIN','PETI','GRAN','PREC','ATTE',
  81. $ 'SOUC'/
  82. DATA MFO / 'TRID','FOUR','AXIS','PLAN','UNID','FREQ' /
  83. DATA MSFO / 'DEFO','CONT','GENE' /
  84. DATA NOHR / 'NOHA' /
  85. DATA OptUnid / 'PLAN','AXIS','SPHE' /
  86. DATA Mode1D / 'DYDZ','DYCZ','CYDZ','CYCZ','GYDZ','GYCZ','DYGZ',
  87. . 'CYGZ','GYGZ','AXDZ','AXCZ','AXGZ' /
  88. DATA MGR / 'BENS','X ','IBM ','GKS ','PHIG','OPEN','PS ',
  89. . 'MIF ','PSC ' /
  90. DATA MISO / 'LIGN','SURF','SULI' /
  91. DATA MRESOL / 'DIRE','ITER' /
  92. DATA ERCTRL / 'FATA','NORM','IGNO','CONT' /
  93. DATA FORMAT / 'FORM','TAIL','XDR ','BINA' /
  94. DATA NAUTO / 'AUTO','ANNU' /
  95. c DATA MODERI /'LINEAIRE ','QUADRATIQUE ',
  96. c $ 'TRUESDELL ','JAUMANN ','UTILISATEUR '/
  97. DATA MPOLI / '8_BY_13 ','9_BY_15 ','TIMES_10','TIMES_24',
  98. $ 'HELV_10 ','HELV_12 ','HELV_18 ' /
  99. DATA MCOSC / 'NOIR','BLAN','JAUN' /
  100. DATA MPOTR / 'COURIER_12 ','COURIERB_12 ','HELVETICA_12'
  101. $ ,'TIMES_12 ','COURIER_14 ','COURIERB_14 ','HELVETICA_14'
  102. $ ,'TIMES_14 ','COURIER_16 ','COURIERB_16 ','HELVETICA_16'
  103. $ ,'TIMES_16 ','COURIER_18 ','COURIERB_18 ','HELVETICA_18'
  104. $ ,'TIMES_18 '/
  105. DATA MSUIT / 'NOUV','SUIT' /
  106.  
  107. IF ((ICHOI.NE.1).AND.(ICHOI.NE.2)) THEN
  108. CALL ERREUR (5)
  109. RETURN
  110. ENDIF
  111. i=0
  112. 1 CONTINUE
  113. CALL QUETYP(MTYP,0,IRET)
  114. IF (IRET.EQ.0) RETURN
  115. IF (MTYP.NE.'MOT') THEN
  116. C 39 2
  117. C On ne veut pas d'objet de type %m1:8
  118. MOTERR(1:8)=MTYP
  119. CALL ERREUR(39)
  120. RETURN
  121. ENDIF
  122. Csg CALL MESLIR(-218)
  123. CALL LIRMOT(MCLE,NBOPT,i,1)
  124. IF (IERR.NE.0) RETURN
  125.  
  126. C Branchement vers les differentes options
  127. C ------------------------------------------
  128. GOTO (101,102,103,104,105,106,107,108,109,110,111,112,113,114,
  129. $ 115,116,117,118,119,120,121,122,123,124,125,126,127,128,
  130. $ 129,130,131,132,133,134,135,136,137,138,139,140,141,142,
  131. $ 143,144,145,146,147,148,149,150),i
  132. return
  133. C ---------------
  134. C Option 'IMPR'
  135. C ---------------
  136. 101 IF (ICHOI.EQ.2) THEN
  137. CALL ECRENT(IOIMP)
  138. RETURN
  139. ENDIF
  140. CALL MESLIR(-217)
  141. CALL LIRENT(IRET,0,IRetou)
  142. IF (IRetou.NE.0) THEN
  143. IF (IRET.LE.0) CALL ERREUR(36)
  144. IF (IERR.NE.0) RETURN
  145. IOIMP=IRET
  146. GOTO 1
  147. ENDIF
  148. CALL MESLIR(-216)
  149. CALL LIRCHA(CHA,1,IRetou)
  150. IF (IERR.NE.0) RETURN
  151. IUNIT=IOIMP
  152. GOTO 1211
  153. C ---------------
  154. C Option 'DIME' : dimension de l'espace (IDIM)
  155. C ---------------
  156. 102 IF (ICHOI.EQ.2) THEN
  157. CALL ECRENT(IDIM)
  158. RETURN
  159. ENDIF
  160. CALL MESLIR(-215)
  161. CALL LIRENT(IRET,1,IRetou)
  162. IF (IRET.EQ.IDIM) GOTO 1
  163. IF ((IRET.NE.1).AND.(IRET.NE.2).AND.(IRET.NE.3)) CALL ERREUR(36)
  164. IF (IERR.NE.0) RETURN
  165. IF (IDIM.EQ.0) THEN
  166. IDIM=IRET
  167. IF (IDIM.EQ.1) THEN
  168. IFOMOD=3
  169. IFOUR=3
  170. NIFOUR=0
  171. ELSE IF (IDIM.EQ.3) THEN
  172. IFOMOD=2
  173. IFOUR=2
  174. NIFOUR=0
  175. ENDIF
  176. GOTO 1
  177. ENDIF
  178. C Passage en dimension 3
  179. IF (IRET.EQ.3) THEN
  180. IFOMOD=2
  181. IFOUR=2
  182. NIFOUR=0
  183. C Passage en dimension 2, on met les options de calcul a PLAN DEFO.
  184. ELSE IF (IRET.EQ.2) THEN
  185. IF (IDIM.EQ.3) THEN
  186. IF (IFOMOD.EQ.2) IFOMOD=-1
  187. IF (IFOUR.EQ.2) IFOUR=-1
  188. ELSE IF (IDIM.EQ.1) THEN
  189. IFOMOD=-1
  190. IFOUR=-1
  191. NIFOUR=0
  192. ENDIF
  193. C Passage en dimension 1, on met les options de calcul a UNIDPLANDYDZ.
  194. ELSE IF (IRET.EQ.1) THEN
  195. IF (IFOMOD.NE.3.AND.IFOMOD.NE.4.AND.IFOMOD.NE.5) THEN
  196. IFOMOD=3
  197. IFOUR=3
  198. NIFOUR=0
  199. ENDIF
  200. ENDIF
  201. C Transfert des coordonnees des points dans nouveau MCOORD
  202. idimp1=IDIM+1
  203. iretp1=IRET+1
  204. segact mcoord*mod
  205. LCoor=NBPTS*iretp1
  206. SEGINI,MCOOR1
  207. INF=MIN(IDIM,IRET)
  208. DO IP=1,NBPTS
  209. IRef1=(IP-1)*iretp1
  210. IRef =(IP-1)*idimp1
  211. DO j=1,INF
  212. XCoor1(IRef1+j)=XCOOR(IRef+j)
  213. ENDDO
  214. XCoor1(IRef1+iretp1)=XCOOR(IRef+idimp1)
  215. ENDDO
  216. IDIM=IRET
  217. SEGADJ,MCOORD
  218. DO j=1,XCOOR(/1)
  219. XCOOR(j)=XCOOR1(j)
  220. ENDDO
  221. SEGSUP,MCOOR1
  222. GOTO 1
  223. C ---------------
  224. C Option 'ELEM'
  225. C ---------------
  226. 103 IF (ICHOI.EQ.2) THEN
  227. IF (ILCOUR.EQ.0) THEN
  228. CALL ECRCHA(' ')
  229. ELSE
  230. CALL ECRCHA(NOMS(ILCOUR))
  231. ENDIF
  232. RETURN
  233. ENDIF
  234. CALL MESLIR(-214)
  235. CALL LIRMOT(NOMS,NOMBR,IRET,1)
  236. IF (IERR.NE.0) RETURN
  237. ILCOUR=IRET
  238. C* ICHA=NOMS(ILCOUR)
  239. GOTO 1
  240. C ---------------
  241. C Option 'SORT'
  242. C ---------------
  243. 104 IF (ICHOI.EQ.2) THEN
  244. CALL ECRENT(IOPER)
  245. RETURN
  246. ENDIF
  247. CALL MESLIR(-213)
  248. CALL LIRENT(IRET,0,IRetou)
  249. IF (IRetou.NE.0) THEN
  250. IF (IRET.LE.0) CALL ERREUR(36)
  251. IF (IERR.NE.0) RETURN
  252. IOPER=IRET
  253. GOTO 1
  254. ENDIF
  255. CALL MESLIR(-212)
  256. CALL LIRCHA(CHA,1,IRetou)
  257. IF (IERR.NE.0) RETURN
  258. IUNIT=IOPER
  259. GOTO 1211
  260. C ---------------
  261. C Option 'TRAC'
  262. C ---------------
  263. 105 IF (ICHOI.EQ.2) THEN
  264. CALL ECRCHA(MGR(IOGRA))
  265. RETURN
  266. ENDIF
  267. CALL MESLIR(-211)
  268. CALL LIRMOT(MGR,NbGra,ij,1)
  269. IF (IERR.NE.0) RETURN
  270. IOGRA=ij
  271. GOTO 1
  272. C ---------------
  273. C Option 'DONN'
  274. C ---------------
  275. 106 IF (ICHOI.EQ.2) THEN
  276. CALL ECRENT(IOLEC)
  277. RETURN
  278. ENDIF
  279. CALL MESLIR(-210)
  280. CALL LIRENT(IRET,0,IRetou)
  281. IF (IRetou.NE.0) THEN
  282. IF (IRET.LE.0) CALL ERREUR(36)
  283. IF (IERR.NE.0) RETURN
  284. IOLEC=IRET
  285. CALL GINT2
  286. GOTO 1
  287. ENDIF
  288. CALL MESLIR(-209)
  289. CALL LIRCHA(CHA,1,IRetou)
  290. IF (IERR.NE.0) RETURN
  291. C On impose IOLEC=3 pour eviter probleme avec lecture terminal
  292. IOLEC=3
  293. CALL GINT2
  294. IUNIT=IOLEC
  295. GOTO 1201
  296. C ---------------
  297. C Option 'ECHO'
  298. C ---------------
  299. 107 CONTINUE
  300. IF (ICHOI.EQ.2) THEN
  301. CALL ECRENT(IECHO)
  302. RETURN
  303. ENDIF
  304. CALL MESLIR(-208)
  305. CALL LIRENT(IRET,1,IRetou)
  306. INTERR(1)=iret
  307. IF ((IRET .LT. -1) .OR. (IRET .GT. 2)) CALL ERREUR(36)
  308. IF (IERR.NE.0) RETURN
  309. IECHO=IRET
  310. GOTO 1
  311. C ---------------
  312. C Option 'ERRE'
  313. C ---------------
  314. 108 IF (ICHOI.EQ.2) THEN
  315. CALL ECRCHA(ERCTRL(IERPER))
  316. RETURN
  317. ENDIF
  318. CALL MESLIR(-207)
  319. CALL LIRMOT(ERCTRL,NbErre,IRET,1)
  320. IF (IERR.NE.0) RETURN
  321. IERPER=IRET
  322. GOTO 1
  323. C ---------------
  324. C Option 'LECT'
  325. C ---------------
  326. 109 IF (ICHOI.EQ.2) THEN
  327. CALL ECRENT(IOCAR)
  328. RETURN
  329. ENDIF
  330. CALL MESLIR(-206)
  331. CALL LIRENT(IRET,0,IRetou)
  332. IF (IRetou.NE.0) THEN
  333. IF (IRET.LE.0) CALL ERREUR(36)
  334. IF (IERR.NE.0) RETURN
  335. IOCAR=IRET
  336. GOTO 1
  337. ENDIF
  338. CALL MESLIR(-205)
  339. CALL LIRCHA(CHA,1,IRetou)
  340. IF (IERR.NE.0) RETURN
  341. IUNIT=IOCAR
  342. GOTO 1201
  343. C ---------------
  344. C Option 'EPSI' (ex-'DERI') --> obsolete
  345. C ---------------
  346. c 110 IF (ICHOI.EQ.2) THEN
  347. c CALL ECRCHA(moderi(MEPSIL))
  348. c RETURN
  349. c ENDIF
  350. c CALL MESLIR(-204)
  351. c CALL LIRMOT(MODERI,5,iret,1)
  352. c IF (IERR.NE.0) RETURN
  353. c MEPSIL=IRET
  354. c GO TO 1
  355. 110 CONTINUE
  356. IF(ICHOI.EQ.2) THEN
  357. MOTERR(1:40)='VALE EPSI ;'
  358. ELSE
  359. MOTERR(1:40)='OPTI EPSI ... ;'
  360. ENDIF
  361. CALL ERREUR(1056)
  362. RETURN
  363. C ---------------
  364. C Option 'IMPI'
  365. C ---------------
  366. 111 IF (ICHOI.EQ.2) THEN
  367. CALL ECRENT(IIMPI)
  368. RETURN
  369. ENDIF
  370. CALL MESLIR(-202)
  371. CALL LIRENT(IRET,1,IRetou)
  372. IF (IERR.NE.0) RETURN
  373. IIMPI=IRET
  374. GOTO 1
  375. C ---------------
  376. C Option 'MODE'
  377. C ---------------
  378. 112 IF (ICHOI.EQ.2) THEN
  379. c on a appele VALE 'MODE'
  380. c souhaite t'on FOUR ou le numero d'harmonique ?
  381. INH=0
  382. IF (IFOMOD.EQ.1) THEN
  383. CALL LIRMOT(MFO(2),1,INH,0)
  384. ENDIF
  385. IF (IFOMOD.EQ.-1) THEN
  386. c - PLAN
  387. ICHA(1:4)=MFO(4)
  388. ICHA(5:8)=MSFO(ABS(IFOUR))
  389. CALL ECRCHA(ICHA(1:8))
  390. ELSE IF (IFOMOD.EQ.3) THEN
  391. c - 1D PLAN
  392. ICHA(1:4)=MFO(5)
  393. ICHA(5:8)=OptUnid(1)
  394. ICHA(9:12)=Mode1D(IFOUR-2)
  395. CALL ECRCHA(ICHA(1:12))
  396. ELSE IF (IFOMOD.EQ.4) THEN
  397. c - 1D AXIS
  398. ICHA(1:4)=MFO(5)
  399. ICHA(5:8)=OptUnid(2)
  400. ICHA(9:12)=Mode1D(IFOUR-2)
  401. CALL ECRCHA(ICHA(1:12))
  402. ELSE IF (IFOMOD.EQ.5) THEN
  403. c - 1D SPHE
  404. ICHA(1:4)=MFO(5)
  405. ICHA(5:8)=OptUnid(3)
  406. ICHA(9:12)=' '
  407. CALL ECRCHA(ICHA(1:8))
  408. ELSE IF (IFOMOD.EQ.6) THEN
  409. c - FREQuentiel
  410. CALL ECRCHA(MFO(6))
  411. ELSE
  412. if (INH.eq.1) then
  413. c - numero d'harmonique de Fourier
  414. NHH=iohr
  415. if(NIFOUR.eq.NHH) then
  416. ICHA(1:4)='NOHA'
  417. CALL ECRCHA(ICHA(1:4))
  418. else
  419. CALL ECRENT(NIFOUR)
  420. endif
  421. else
  422. c - autres cas (TRID FOUR AXIS PLAN)
  423. CALL ECRCHA(MFO(3-IFOMOD))
  424. endif
  425. ENDIF
  426. RETURN
  427. ENDIF
  428. c on a appele OPTI 'MODE'
  429. CALL MESLIR(-201)
  430. CALL LIRMOT(MFO,NbMfo,IK,1)
  431. IF ((IERR.NE.0).OR.(IK.EQ.0)) RETURN
  432. IF (IK.EQ.1) THEN
  433. c - OPTI 'MODE' 'TRID'
  434. IRET=2
  435. ELSE IF (IK.EQ.2) THEN
  436. c - OPTI 'MODE' 'FOUR'
  437. IRET=1
  438. ELSE IF (IK.EQ.3) THEN
  439. c - OPTI 'MODE' 'AXIS'
  440. IRET=0
  441. ELSE IF (IK.EQ.4) THEN
  442. c - OPTI 'MODE' 'PLAN'
  443. IRET=-1
  444. ELSE IF (IK.EQ.5) THEN
  445. c - OPTI 'MODE' 'UNID'
  446. IRET=3
  447. ELSE IF (IK.EQ.6) THEN
  448. c - OPTI 'MODE' 'FREQ'
  449. IRET=6
  450. ENDIF
  451. C Possibilite d'imprimer une erreur si le MODE de calcul n'est pas
  452. C compatible avec la dimension. Debranche pour l'instant.
  453. C** IF ( (IDIM.EQ.2.AND.IRET.NE.-1.AND.IRET.NE.0.AND.IRET.NE.1)
  454. C** . .OR.(IDIM.EQ.1.AND.IRET.NE.3).OR.(IDIM.EQ.3.AND.IRET.NE.2) ) THEN
  455. C** MOTERR(1:4)=MFO(IK)
  456. C** INTERR(1)=IDIM
  457. C** CALL ERREUR(970)
  458. C** RETURN
  459. C** ENDIF
  460. IFOMOD=IRET
  461. if (iret.ne.6) IFOUR=IRET
  462. NIFOUR=0
  463. IF (IRET.EQ.-1) THEN
  464. CALL LIRMOT(MSFO,NbMsfo,IKS,0)
  465. IF (IKS.EQ.0) THEN
  466. IFOUR=-1
  467. ELSE IF (IKS.EQ.1) THEN
  468. IFOUR=-1
  469. ELSE IF (IKS.EQ.2) THEN
  470. IFOUR=-2
  471. ELSE IF (IKS.EQ.3) THEN
  472. IFOUR=-3
  473. ENDIF
  474. ELSE IF (IRET.EQ.1) THEN
  475. CALL LIRENT(NHH,0,ICOND)
  476. IF (ICOND.EQ.0) THEN
  477. CALL LIRMOT(NOHR,NbNoha,NHH,0)
  478. IF (NHH.EQ.1) THEN
  479. nhh=iohr
  480. ELSE
  481. CALL ERREUR(287)
  482. ENDIF
  483. ENDIF
  484. NIFOUR=NHH
  485. ELSE IF (IRET.EQ.3) THEN
  486. CALL LIRMOT(OptUnid,NbUnid,IKS,0)
  487. IF (IKS.EQ.0) THEN
  488. IFOMOD=3
  489. IFOUR=3
  490. ELSE IF (IKS.EQ.1) THEN
  491. IFOMOD=3
  492. CALL LIRMOT(Mode1D(1),9,i,0)
  493. IF (i.EQ.0) i=1
  494. IFOUR=2+i
  495. ELSE IF (IKS.EQ.2) THEN
  496. IFOMOD=4
  497. CALL LIRMOT(Mode1D(10),3,i,0)
  498. IF (i.EQ.0) i=1
  499. IFOUR=11+i
  500. ELSE IF (IKS.EQ.3) THEN
  501. IFOMOD=5
  502. IFOUR=15
  503. ENDIF
  504. ENDIF
  505. GOTO 1
  506. C ---------------
  507. C Option 'CADR'
  508. C ---------------
  509. 113 IF (ICHOI.EQ.2) THEN
  510. XRET=DIOCAD
  511. CALL ECRREE(XRET)
  512. RETURN
  513. ENDIF
  514. CALL MESLIR(-200)
  515. CALL LIRREE(XRET,1,IRetou)
  516. IF (IERR.NE.0) RETURN
  517. DIOCAD=XRET
  518. GOTO 1
  519. C ---------------
  520. C Option 'COUL'
  521. C ---------------
  522. 114 IF (ICHOI.EQ.2) THEN
  523. CALL ECRCHA(NCOUL(IDCOUL))
  524. RETURN
  525. ENDIF
  526. CALL MESLIR(-199)
  527. CALL LIRMOT(NCOUL(0),NBCOUL,IRET,1)
  528. IF (IRET.LE.0) CALL ERREUR(36)
  529. IF (IERR.NE.0) RETURN
  530. IDCOUL=IRET-1
  531. ICHA=NCOUL(IDCOUL)
  532. GOTO 1
  533. C ---------------
  534. C Option 'NIVE'
  535. C ---------------
  536. 115 IF (ICHOI.EQ.2) THEN
  537. CALL ECRENT(IONIVE)
  538. RETURN
  539. ENDIF
  540. CALL MESLIR(-198)
  541. CALL LIRENT(IRET,1,IRetou)
  542. IF (IERR.NE.0) RETURN
  543. INTERR(1)=IRET
  544. IF ((IRET.LT.19).OR.(IRET.GT.23)) CALL ERREUR(36)
  545. IF (IERR.NE.0) RETURN
  546. IONIVE=IRET
  547. GOTO 1
  548. C ---------------
  549. C Option 'NGMA'
  550. C ---------------
  551. 116 IF (ICHOI.EQ.2) THEN
  552. CALL ECRENT(NGMAXY)
  553. RETURN
  554. ENDIF
  555. CALL MESLIR(-197)
  556. CALL LIRENT(IRET,1,IRetou)
  557. IF (IERR.NE.0) RETURN
  558. INTERR(1)=IRET
  559. IF (IRET.LT.0) CALL ERREUR (36)
  560. NGMAXY=IRET
  561. GOTO 1
  562. C ---------------
  563. C Option 'SAUV'
  564. C ---------------
  565. 117 IF (ICHOI.EQ.2) THEN
  566. CALL ECRENT(IOSAU)
  567. RETURN
  568. ENDIF
  569. CALL MESLIR(-196)
  570. IFORM=2
  571. IPREFI=0
  572. DIMATT=0.D0
  573. IREFOR=0
  574. ISAFOR=0
  575. IF (IPSAUV.NE.0) CALL LIBPIL(IPSAUV)
  576. IPSAUV=0
  577. 1171 CALL LIRMOT(FORMAT,NbForm,ICHOr,0)
  578. IF (ICHOr.EQ.1) THEN
  579. IFORM=1
  580. ISAFOR=1
  581. GOTO 1171
  582. ELSE IF (ICHOr.EQ.2) THEN
  583. CALL LIRREE(XRET,1,IRetou)
  584. IF (IERR.NE.0) RETURN
  585. DIMFIC=XRET
  586. GOTO 1171
  587. ELSE IF (ICHOr.EQ.3) THEN
  588. IFORM=2
  589. GOTO 1171
  590. ELSE IF (ICHOr.EQ.4) THEN
  591. IFORM=0
  592. GOTO 1171
  593. ENDIF
  594. CALL LIRENT(IRET,0,IRetou)
  595. IF (IRetou.NE.0) THEN
  596. IF (IRET.LE.0) CALL ERREUR(36)
  597. IF (IERR.NE.0) RETURN
  598. IOSAU=IRET
  599. IPSAUV=0
  600. GOTO 1
  601. ENDIF
  602. CALL MESLIR(-195)
  603. CALL LIRCHA(CHA,1,IRetou)
  604. IF (IERR.NE.0) RETURN
  605. lchai=long(cha)
  606. * la longueur du fichier maximale est LOCHAI moins la longueur("_iiii")
  607. * ou iiii designe le nombre maximal de fichiers de sauvegarde possible
  608. * A ce jour la limite est 9999 fichiers. LONG("_9999") = 5
  609. IF (lchai.GT.(LOCHAI-5)) THEN
  610. write(ioimp,*) 'SAUV File Name is too LONG'
  611. CALL ERREUR(1111)
  612. RETURN
  613. ENDIF
  614. NOMSAU = ' '
  615. NOMSAU(1:lchai)=cha(1:lchai)
  616. IUNIT=IOSAU
  617. IPSAUV=0
  618. lcha=lchai
  619. * destruction des eventuels fichiers existants
  620. open(file=NOMSAU(1:lcha),status='OLD',iostat=istat,unit=iunit)
  621. if (istat.eq.0) then
  622. close(iunit,status='DELETE',iostat=istat)
  623. if (istat.ne.0) then
  624. endif
  625. else
  626. goto 1173
  627. endif
  628. ll=lcha+1
  629. NOMSAU(ll:ll+1)='_1'
  630. ll=ll+1
  631. do isuit=1,10000
  632. if (isuit.lt.10) then
  633. write (NOMSAU(ll:ll),fmt='(I1)') isuit
  634. lcha=ll
  635. elseif (isuit.lt.100) then
  636. write (NOMSAU(ll:ll+1),fmt='(I2)') isuit
  637. lcha=ll+1
  638. elseif (isuit.lt.1000) then
  639. write (NOMSAU(ll:ll+2),fmt='(I3)') isuit
  640. lcha=ll+2
  641. elseif (isuit.lt.10000) then
  642. write (NOMSAU(ll:ll+3),fmt='(I4)') isuit
  643. lcha=ll+3
  644. endif
  645. open(file=NOMSAU(1:lcha),status='OLD',iostat=istat,unit=iunit)
  646. if (istat.eq.0) then
  647. close(iunit,status='DELETE',iostat=istat)
  648. else
  649. goto 1173
  650. endif
  651. enddo
  652. 1173 continue
  653. NOMSAU(lchai+1:lochai) = ' '
  654. IF (IFORM.EQ.1) GOTO 3201
  655. IF (IFORM.EQ.2) GOTO 1203
  656. GOTO 1202
  657. C ---------------
  658. C Option 'REST'
  659. C ---------------
  660. 118 CONTINUE
  661. IF (ICHOI.EQ.2) THEN
  662. CALL ECRENT(IORES)
  663. RETURN
  664. ENDIF
  665. IFICLE=0
  666. IFORM=0
  667. IREFOR=0
  668. CALL MESLIR(-193)
  669. 1172 CALL LIRMOT(FORMAT,nbform,ichor,0)
  670. IF (IERR.NE.0) RETURN
  671. IF (ICHOr.EQ.1) THEN
  672. IREFOR=1
  673. IFORM=1
  674. GOTO 1172
  675. ELSE IF (ICHOr.EQ.2) THEN
  676. GOTO 1172
  677. ELSE IF (ICHOr.EQ.3) THEN
  678. IFORM=-2
  679. GOTO 1172
  680. ELSEIF (ICHOr.EQ.4) then
  681. IFORM=0
  682. GOTO 1172
  683. ENDIF
  684. CALL MESLIR(-194)
  685. CALL LIRENT(IRET,0,IRetou)
  686. IF (IRetou.NE.0) THEN
  687. IF (IRET.LE.0) CALL ERREUR(36)
  688. IF (IERR.NE.0) RETURN
  689. IORES=IRET
  690. GOTO 1
  691. ENDIF
  692. CALL LIRCHA(CHA,1,IRetou)
  693. IF (IERR.NE.0) RETURN
  694. L=LONG(CHA)
  695. IUNIT=IORES
  696. NOMRES=' '
  697. NOMRES(1:L)=CHA(1:L)
  698. C test sur le type de fichier
  699. CLOSE(UNIT=IUNIT,iostat=istat)
  700. IFORM=1
  701. IREFOR=1
  702. IFIOLD=599
  703. OPEN(UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  704. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  705. IF (IOS.EQ.0) THEN
  706. iretou=0
  707. iquoi=0
  708. CALL LFCDES(IORES,IQUOI,IRETOU,IFORM)
  709. C WRITE(IOIMP,*) 'apres lfcdes-1 ',iores,iquoi,iretou,iform
  710. IF (IOS.EQ.0.AND.(IQUOI.GT.0.AND.IQUOI.LT.10).AND.
  711. . IRETOU.EQ.0) THEN
  712. CALL ERREUR(-342)
  713. GOTO 3250
  714. ENDIF
  715. ENDIF
  716. IFORM=0
  717. IREFOR=0
  718. CLOSE(UNIT=IUNIT,iostat=istat)
  719. OPEN(UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  720. . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED')
  721. IF (IOS.EQ.0) THEN
  722. iretou=0
  723. iquoi=0
  724. CALL LFCDES (IORES,IQUOI,IRETOU,IFORM)
  725. C WRITE (IOIMP,*) 'apres lfcdes-2 ',iores,iquoi,iretou,iform
  726. IF (IOS.EQ.0.AND.(IQUOI.GT.0.AND.IQUOI.LT.10).AND.
  727. . IRETOU.EQ.0) THEN
  728. CALL ERREUR(-343)
  729. GOTO 3250
  730. ENDIF
  731. ENDIF
  732. IFORM=2
  733. IF (ixdrr.NE.0) IOS=IXDRCLOSE(ixdrr,.TRUE.)
  734. ios=initxdr(CHA(1:L),'r',.TRUE.)
  735. IF (ios.lt.0) GOTO 2000
  736. ixdrr=ios
  737. ios=IXDRSTRING(ixdrr,ICHA(1:10))
  738. C WRITE(IOIMP,*) ' option rest ',icha(1:10),ios
  739. IF (IOS.GE.0.AND.ICHA(1:10).EQ.'CASTEM XDR') THEN
  740. C WRITE (IOIMP,*) ' on va direct en 1 '
  741. IFORM=2
  742. iformx=IFORM
  743. CALL ERREUR(-344)
  744. GOTO 1
  745. ENDIF
  746. IFIOLD=424
  747. GOTO 2000
  748. 3250 iformx=IFORM
  749. IF (IFORM.EQ.1) GOTO 2201
  750. IF (IFORM.EQ.-2) GOTO 2203
  751. GOTO 2202
  752. C ---------------
  753. C Option 'ISOV'
  754. C ---------------
  755. 119 IF (ICHOI.EQ.2) THEN
  756. CALL ECRCHA(MISO(ISOTYP+1))
  757. RETURN
  758. ENDIF
  759. CALL MESLIR(-192)
  760. CALL LIRMOT(MISO,NbIso,IRET,1)
  761. IF (IRET.LE.0) CALL ERREUR(36)
  762. IF (IERR.NE.0) RETURN
  763. ISOTYP=IRET-1
  764. ICHA=MISO(IRET)
  765. GOTO 1
  766. C ---------------
  767. C Option 'OMBRE'
  768. C ---------------
  769. 120 IF (ICHOI.EQ.2) THEN
  770. LOG=.FALSE.
  771. IF (IOMBRE.EQ.1) LOG =.TRUE.
  772. CALL ECRLOG(LOG)
  773. RETURN
  774. ENDIF
  775. CALL MESLIR(-191)
  776. CALL LIRLOG(LOG,1,IRET)
  777. IF (IERR.NE.0) RETURN
  778. IF (LOG) THEN
  779. IOMBRE=1
  780. ELSE
  781. IOMBRE=0
  782. ENDIF
  783. GOTO 1
  784. C ---------------
  785. C Option 'NBP '
  786. C ---------------
  787. 121 IF (ICHOI.EQ.2) THEN
  788. IRET=mcoord
  789. CALL ECRENT(IRET)
  790. RETURN
  791. ENDIF
  792. CALL MESLIR(-190)
  793. CALL LIRENT(IRET,1,IRetou)
  794. IF (IERR.NE.0) RETURN
  795. NBPTS=MAX(0,IRET)
  796. SEGADJ MCOORD
  797. GOTO 1
  798. C ---------------
  799. C Option 'VERI'
  800. C ---------------
  801. 122 IF (ICHOI.EQ.2) THEN
  802. CALL ECRENT(IOSPI)
  803. RETURN
  804. ENDIF
  805. CALL MESLIR(-189)
  806. CALL LIRENT(IRET,1,IRetou)
  807. IF (IERR.NE.0) RETURN
  808. IOSPI=IRET
  809. GOTO 1
  810. C ---------------
  811. C Option 'ZERO'
  812. C ---------------
  813. 123 IF (ICHOI.EQ.2) THEN
  814. CALL ECRENT(IZROSF)
  815. RETURN
  816. ENDIF
  817. CALL MESLIR(-188)
  818. CALL LIRENT(IRET,1,IRetou)
  819. IF (IERR.NE.0) RETURN
  820. IZROSF=MAX(1,IRET)
  821. GOTO 1
  822. C ---------------
  823. C Option 'ACQU'
  824. C ---------------
  825. 124 IF (ICHOI.EQ.2) THEN
  826. CALL ECRENT(IOACQ)
  827. RETURN
  828. ENDIF
  829. CALL MESLIR(-187)
  830. CALL LIRENT(IRET,0,IRetou)
  831. IF (IRetou.NE.0) THEN
  832. IOACQ=IRET
  833. GOTO 1
  834. ENDIF
  835. CALL MESLIR(-186)
  836. CALL LIRCHA(CHA,1,IRetou)
  837. IF (IERR.NE.0) RETURN
  838. IUNIT=IOACQ
  839. GOTO 1201
  840. C ---------------
  841. C Option '----'
  842. C ---------------
  843. 125 CONTINUE
  844. GOTO 1
  845. C ---------------
  846. C Option 'PLAC'
  847. C ---------------
  848. 126 IF (ICHOI.EQ.2) THEN
  849. CALL ECRENT(IPLLB)
  850. RETURN
  851. ENDIF
  852. CALL MESLIR(-184)
  853. CALL LIRENT(IRET,1,IRetou)
  854. IF (IERR.NE.0) RETURN
  855. C Pourquoi mettre IPLLB en positif ?
  856. C N'etant pas sur de la valeur de IPLTOT il faut pouvoir le mettre
  857. C en negatif tres grand (voir T.C.)
  858. C IRET=MAX(1,IRET)
  859. IPLLB=IRET
  860. GOTO 1
  861. C ---------------
  862. C Option 'LANG'
  863. C ---------------
  864. 127 IF (ICHOI.EQ.2) THEN
  865. CALL ECRCHA (LANGUE)
  866. RETURN
  867. ENDIF
  868. CALL LIRCHA(ICHA,1,IRetou)
  869. IF (IERR.NE.0) RETURN
  870. LANGUE=ICHA
  871. GOTO 1
  872. C ---------------
  873. C Option 'NORM'
  874. C ---------------
  875. 128 IF (ICHOI.EQ.2) THEN
  876. CALL ERREUR(758)
  877. RETURN
  878. ENDIF
  879. C On commence par une remise a plat : tout a 0 .
  880. C On devrait liberer la place occupee eventuellement par ces segments,
  881. C mais comme on a fait SAVSEG avant. Il faudrait aussi les enlever de
  882. C la liste des non-effacables, mais comment ?
  883. NORINC=0
  884. NORVAL=0
  885. NORIND=0
  886. NORVAD=0
  887. C Lecture des mts cles eventuels
  888. CALL LIRMOT(NAUTO,NbAuto,i,0)
  889. IF (i.EQ.2) GOTO 1
  890. C Normalisation automatique
  891. IF (i.EQ.1) THEN
  892. NORINC=-1
  893. GOTO 1
  894. ENDIF
  895. CALL LIROBJ('LISTMOTS',NORINC,1,IRetou)
  896. CALL LIROBJ('LISTREEL',NORVAL,1,IRetou)
  897. IF (IERR.NE.0) THEN
  898. NORINC=0
  899. NORVAL=0
  900. GOTO 1
  901. ENDIF
  902. MLREEL=NORVAL
  903. MLMOTS=NORINC
  904. SEGACT MLREEL,MLMOTS
  905. NRE=PROG(/1)
  906. NMO=MOTS(/2)
  907. SEGDES MLREEL,MLMOTS
  908. IF (NRE.NE.NMO) THEN
  909. CALL ERREUR(212)
  910. NORINC=0
  911. NORVAL=0
  912. RETURN
  913. ENDIF
  914. C Verification s'il n'y a pas de 'LX' la dedans
  915. C La taille de mots doit etre OK si le LISTMOTS est cree par MOTS
  916. SEGACT MLMOTS
  917. DO i=1,NMO
  918. IF (MOTS(i)(1:4).EQ.'LX ') THEN
  919. CALL ERREUR( 759 )
  920. NORINC=0
  921. NORVAL=0
  922. SEGDES MLMOTS
  923. RETURN
  924. ENDIF
  925. ENDDO
  926. SEGDES MLMOTS
  927. CALL SAVSEG(MLREEL)
  928. CALL SAVSEG(MLMOTS)
  929. CALL LIROBJ('LISTMOTS',NORIND,0,IRetou)
  930. IF (IRetou.EQ.0) GOTO 1
  931. CALL LIROBJ('LISTREEL',NORVAD,1,IRetou)
  932. IF (IERR.NE.0) THEN
  933. NORIND=0
  934. NORVAD=0
  935. ENDIF
  936. MLREEL=NORVAD
  937. MLMOTS=NORIND
  938. SEGACT MLREEL,MLMOTS
  939. NRE=PROG(/1)
  940. NMO=MOTS(/2)
  941. SEGDES MLREEL,MLMOTS
  942. IF (NRE.NE.NMO) THEN
  943. CALL ERREUR(212)
  944. NORIND=0
  945. NORVAD=0
  946. RETURN
  947. ENDIF
  948. CALL SAVSEG(MLREEL)
  949. CALL SAVSEG(MLMOTS)
  950. GOTO 1
  951. C ---------------
  952. C Option 'RESO'
  953. C ---------------
  954. 129 IF (ICHOI.EQ.2) THEN
  955. CALL ECRCHA(MRESOL(NUCROU+1))
  956. RETURN
  957. ENDIF
  958. CALL MESLIR(-187)
  959. CALL LIRMOT(MRESOL,NbReso,IRetou,1)
  960. IF (IERR.NE.0) RETURN
  961. NUCROU=IRetou-1
  962. GOTO 1
  963. C ---------------
  964. C Option 'FTRA'
  965. C ---------------
  966. 130 IF (ICHOI.EQ.2) THEN
  967. IF (iogra.ge.7.and.iogra.le.9) THEN
  968. IF (IOGRA.EQ.8) THEN
  969. IUPS=97
  970. ELSE
  971. IUPS=24
  972. ENDIF
  973. INQUIRE(UNIT=IUPS,NAME=CHA)
  974. CALL ECRCHA(CHA(1:LONG(CHA)))
  975. RETURN
  976. ELSE
  977. CALL ERREUR(758)
  978. RETURN
  979. ENDIF
  980. ENDIF
  981. IF (iogra.ge.7.and.iogra.le.9) THEN
  982. c ZINIPS=.TRUE.
  983. CALL MESLIR(-209)
  984. CALL LIRCHA(CHA,1,IRetou)
  985. IF (IERR.NE.0) RETURN
  986. IF (IOGRA.EQ.8) THEN
  987. IUPS=97
  988. ELSE
  989. IUPS=24
  990. ENDIF
  991. IUNIT=IUPS
  992. GOTO 1211
  993. ELSE
  994. CALL ERREUR(26)
  995. RETURN
  996. ENDIF
  997. GOTO 1
  998. C ---------------
  999. C Option 'OEIL'
  1000. C ---------------
  1001. 131 IF (ICHOI.EQ.2) THEN
  1002. IF (IOEIL.NE.0) THEN
  1003. CALL ECROBJ('POINT',IOEIL)
  1004. ELSE
  1005. C 18 2 Point non trouve
  1006. CALL ERREUR(18)
  1007. ENDIF
  1008. RETURN
  1009. ENDIF
  1010. CALL LIROBJ('POINT',IOEIL,1,IRetou)
  1011. IF (IERR.NE.0) RETURN
  1012. GOTO 1
  1013. C ---------------
  1014. C Option 'ERMA'
  1015. C ---------------
  1016. 132 IF (ICHOI.EQ.2) THEN
  1017. CALL ECRENT(IERMAX)
  1018. RETURN
  1019. ELSE
  1020. CALL ERREUR(758)
  1021. RETURN
  1022. ENDIF
  1023. GOTO 1
  1024. C ---------------
  1025. C Option 'ASSI'
  1026. C ---------------
  1027. 133 IF (ICHOI.EQ.2) THEN
  1028. CALL ECRENT(NBESCR)
  1029. RETURN
  1030. ENDIF
  1031. IF (NBESC.NE.0) CALL ERREUR(892)
  1032. IF (IERR.NE.0) RETURN
  1033. CALL LIRENT(IRET,0,IRetou)
  1034. IF (IRetou.NE.0) THEN
  1035. IF (IRET.LT.0) CALL ERREUR(36)
  1036. IF (IRET.GT.64) CALL ERREUR(36)
  1037. if (nbesc.ne.0) call erreur(36)
  1038. if (ierr.eq.0.and.nbesc.eq.0) then
  1039. NBESCR=IRET
  1040. endif
  1041. ENDIF
  1042. GOTO 1
  1043. C ---------------
  1044. C Option 'EPTR'
  1045. C ---------------
  1046. 134 IF (ICHOI.EQ.2) THEN
  1047. CALL ECRENT(IEPTR)
  1048. RETURN
  1049. ENDIF
  1050. CALL MESLIR(-340)
  1051. CALL LIRENT(IRET,1,IRetou)
  1052. IF (IRetou.NE.0) THEN
  1053. IF (IRET.LT.0) CALL ERREUR(36)
  1054. IEPTR=IRET
  1055. ENDIF
  1056. GOTO 1
  1057. C ---------------
  1058. C Option 'NAVI'
  1059. C ---------------
  1060. 135 IF (ICHOI.EQ.2) THEN
  1061. CALL ECRCHA(NNAVI(ILNAVI))
  1062. RETURN
  1063. ENDIF
  1064. CALL MESLIR(-341)
  1065. CALL LIRMOT(NNAVI,LNNAVI,IRET,1)
  1066. IF (IERR.NE.0) RETURN
  1067. IF (IRET.LE.0) CALL ERREUR(36)
  1068. ILNAVI=IRET
  1069. ICHA=NNAVI(ILNAVI)
  1070. GOTO 1
  1071. C
  1072. C option PARA
  1073. C
  1074. 136 IF( ICHOI.EQ.2) THEN
  1075. if(lupara.eq.1) then
  1076. call ecrlog(.TRUE.)
  1077. else
  1078. call ecrlog (.FALSE.)
  1079. endif
  1080. RETURN
  1081. ELSE
  1082. CALL LIRlog(log,1,iretou)
  1083. IF (Ierr.NE.0) return
  1084. LUPARA=0
  1085. if(log) lupara=1
  1086. ENDIF
  1087. GO TO 1
  1088. C
  1089. C option SURV
  1090. C
  1091. 137 CONTINUE
  1092. IF (ICHOI.EQ.2) THEN
  1093. MSURV=MSURVE
  1094. CALL ECRENT(MSURV)
  1095. RETURN
  1096. ENDIF
  1097. CALL LIRENT(msurv,1,iretou)
  1098. if(ierr.ne.0) return
  1099. CALL OOOSUR(MSURv)
  1100. msurve=msurv
  1101. GO TO 1
  1102. C ---------------
  1103. C Option 'POLI'
  1104. C ---------------
  1105. 138 IF (ICHOI.EQ.2) THEN
  1106. CALL ECRCHA(MPOLI(IOPOLI))
  1107. RETURN
  1108. ENDIF
  1109. CALL MESLIR(-211)
  1110. CALL LIRMOT(MPOLI,NbPoli,ij,1)
  1111. IF (IERR.NE.0) RETURN
  1112. IOPOLI=ij
  1113. GOTO 1
  1114. C ---------------
  1115. C Option 'COSC'
  1116. C ---------------
  1117. 139 IF (ICHOI.EQ.2) THEN
  1118. CALL ECRCHA(MCOSC(ICOSC))
  1119. RETURN
  1120. ENDIF
  1121. CALL MESLIR(-211)
  1122. CALL LIRMOT(MCOSC,NbCosc,ij,1)
  1123. IF (IERR.NE.0) RETURN
  1124. ICOSC=ij
  1125. GOTO 1
  1126. C ---------------
  1127. C Option 'POTR'
  1128. C ---------------
  1129. 140 IF (ICHOI.EQ.2) THEN
  1130. CALL ECRCHA(MPOTR(IOPOTR))
  1131. RETURN
  1132. ENDIF
  1133. CALL MESLIR(-211)
  1134. CALL LIRMOT(MPOTR,NbPotr,ij,1)
  1135. IF (IERR.NE.0) RETURN
  1136. IOPOTR=ij
  1137. GOTO 1
  1138. C ----------------
  1139. C option debug
  1140. C ----------------
  1141. 141 IF (ICHOI.EQ.2) THEN
  1142. call ecrent (misaup)
  1143. return
  1144. ENDIF
  1145. CALL LIRENT(MISAUP,1,iretou)
  1146. IF(IERR.NE.0) RETURN
  1147. GO TO 1
  1148. C ----------------
  1149. C option 'LOCA'
  1150. C ----------------
  1151. 142 IF (ICHOI.EQ.2) THEN
  1152. CALL ECRLOG(ZLOPRO)
  1153. RETURN
  1154. ENDIF
  1155. CALL LIRLOG(ZLOPRO,1,IRETOU)
  1156. IF (IERR.NE.0) RETURN
  1157. GO TO 1
  1158. C ----------------
  1159. C option 'DENS'
  1160. C ----------------
  1161. 143 IF (ICHOI.EQ.2) THEN
  1162. XRET=DENSIT
  1163. CALL ECRREE(XRET)
  1164. RETURN
  1165. ENDIF
  1166. CALL MESLIR(-238)
  1167. CALL LIRREE(XRET,1,IRETOU)
  1168. IF (IERR.NE.0) RETURN
  1169. C sg: comme dans subden.eso on met ABS(XRET)
  1170. DENSIT=ABS(XRET)
  1171. GO TO 1
  1172. C ----------------
  1173. C option 'INCO'
  1174. C ----------------
  1175. 144 IF (ICHOI.EQ.2) THEN
  1176. JGN=4
  1177. JGM=LNOMDD
  1178. SEGINI MLMOT1
  1179. DO IGM=1,JGM
  1180. MLMOT1.MOTS(IGM)=NOMDD(IGM)
  1181. ENDDO
  1182. SEGDES MLMOT1
  1183. JGN=4
  1184. JGM=LNOMDU
  1185. SEGINI MLMOT2
  1186. DO IGM=1,JGM
  1187. MLMOT2.MOTS(IGM)=NOMDU(IGM)
  1188. ENDDO
  1189. SEGDES MLMOT2
  1190. CALL ECROBJ('LISTMOTS',MLMOT2)
  1191. CALL ECROBJ('LISTMOTS',MLMOT1)
  1192. RETURN
  1193. ENDIF
  1194. CALL LIROBJ('LISTMOTS',MLMOT1,0,IRET)
  1195. IF (IERR.NE.0) RETURN
  1196. IF (IRET.NE.0) THEN
  1197. CALL LIROBJ('LISTMOTS',MLMOT2,1,IRET)
  1198. IF (IERR.NE.0) RETURN
  1199. SEGACT MLMOT1,MLMOT2
  1200. ELSE
  1201. JGN=LEN(CHARIN)
  1202. JGM=1
  1203. SEGINI MLMOT1,MLMOT2
  1204. CALL LIRCHA(CHARIN,1,IRET)
  1205. IF (IERR.NE.0) RETURN
  1206. MLMOT1.MOTS(1)=CHARIN
  1207. CALL LIRCHA(CHARRE,1,IRET)
  1208. IF (IERR.NE.0) RETURN
  1209. MLMOT2.MOTS(1)=CHARRE
  1210. ENDIF
  1211. Csg : copi\E9 sur modeli.eso pour le mod\E8le de diffusion
  1212. NBM1 = MLMOT1.MOTS(/2)
  1213. NBM2 = MLMOT2.MOTS(/2)
  1214. IF (NBM1.LE.0) THEN
  1215. C 1027 2
  1216. C Une donn\E9e de type %M1:8 est vide
  1217. MOTERR(1:8)='LISTMOTS'
  1218. CALL ERREUR(1027)
  1219. RETURN
  1220. ENDIF
  1221. IF (NBM1.NE.NBM2) THEN
  1222. C 854 2
  1223. C Les listes de mots doivent etre de meme longueur.
  1224. CALL ERREUR(854)
  1225. RETURN
  1226. ENDIF
  1227. DO IBM=1,NBM1
  1228. MDIINC=' '
  1229. MDIDUA=' '
  1230. CHARIN=' '
  1231. CHARRE=' '
  1232. CHARIN=MLMOT1.MOTS(IBM)
  1233. CHARRE=MLMOT2.MOTS(IBM)
  1234. C Tronquer les mots \E0 2 caract\E8res pour pouvoir nommer les gradients ?
  1235. C (,X...)
  1236. cbp IRETMA = 2
  1237. IRETMA = 4
  1238. IRETI=LONG(CHARIN)
  1239. IF (IRETI.GT.IRETMA) THEN
  1240. INTERR(1) = IRETMA
  1241. MOTERR(1:8) = CHARIN(1:IRETI)
  1242. CALL ERREUR(-353)
  1243. ENDIF
  1244. IRETI=MIN(IRETI,IRETMA)
  1245. MDIINC(1:IRETI)=CHARIN(1:IRETI)
  1246. C Pas besoin de tronquer pour la duale
  1247. cbp IRETMA = IRETMA + 2
  1248. IRETMA = 4
  1249. IRETE=LONG(CHARRE)
  1250. IF (IRETE.GT.IRETMA) THEN
  1251. INTERR(1) = IRETMA
  1252. MOTERR(1:8) = CHARRE(1:IRETE)
  1253. CALL ERREUR(-353)
  1254. ENDIF
  1255. IRETE=MIN(IRETE,IRETMA)
  1256. MDIDUA(1:IRETE)=CHARRE(1:IRETE)
  1257. c* Verification des noms de primale et duale lues
  1258. CALL VERMDI(MDIINC,MDIDUA)
  1259. IF (IERR.NE.0) RETURN
  1260. ENDDO
  1261. if(iimpi.ge.333) then
  1262. write(ioimp,*) 'DDL PRIMAL=',(NOMDD(iou),iou=1,LNOMDD)
  1263. write(ioimp,*) 'DDL DUAL =',(NOMDU(iou),iou=1,LNOMDU)
  1264. endif
  1265. SEGDES MLMOT1,MLMOT2
  1266. GO TO 1
  1267. C Recuperation du pointeur
  1268. 145 if (ichoi.eq.2) then
  1269. call cpoint
  1270. return
  1271. endif
  1272. goto 1
  1273.  
  1274. 146 if (ichoi .eq. 2) then
  1275. C Recuperation de XPETIT dans CCOPTIO
  1276. call ecrree(XPETIT)
  1277. return
  1278. elseif(ichoi.eq.1) then
  1279. C Surcharge de XPETIT dans CCOPTIO
  1280. CALL LIRREE(XVAL, 1, IRET)
  1281. IF (IERR .NE. 0) RETURN
  1282. XVAL = ABS(XVAL)
  1283. IF (XVAL/REAL(10.D0) .LT. XVAL) THEN
  1284. XPETIT = XVAL
  1285. ELSE
  1286. REAERR(1)=XVAL
  1287. CALL ERREUR(1009)
  1288. RETURN
  1289. ENDIF
  1290. else
  1291. CALL ERREUR(21)
  1292. RETURN
  1293. endif
  1294. goto 1
  1295.  
  1296. 147 if (ichoi .eq. 2) then
  1297. C Recuperation de XGRAND dans CCOPTIO
  1298. call ecrree(XGRAND)
  1299. return
  1300. elseif(ichoi .eq. 1) then
  1301. C Surcharge de XGRAND dans CCOPTIO
  1302. CALL LIRREE(XVAL, 1, IRET)
  1303. IF (IERR .NE. 0) RETURN
  1304. XVAL = ABS(XVAL)
  1305. IF (XVAL*REAL(10.D0) .GT. XVAL) THEN
  1306. XGRAND = XVAL
  1307. ELSE
  1308. REAERR(1)=XVAL
  1309. CALL ERREUR(1009)
  1310. RETURN
  1311. ENDIF
  1312. else
  1313. CALL ERREUR(21)
  1314. RETURN
  1315. endif
  1316. goto 1
  1317.  
  1318. 148 if (ichoi .eq. 2) then
  1319. C Recuperation de XZPREC dans CCOPTIO
  1320. call ecrree(XZPREC)
  1321. return
  1322. elseif(ichoi .eq. 1) then
  1323. C Surcharge de XZPREC dans CCOPTIO
  1324. CALL LIRREE(XVAL, 1, IRET)
  1325. IF (IERR .NE. 0) RETURN
  1326. XVAL = ABS(XVAL)
  1327. XTEST= REAL(1.D0) + XVAL
  1328. IF (XTEST .LE. REAL(1.D0)) THEN
  1329. REAERR(1)=XVAL
  1330. CALL ERREUR(1009)
  1331. RETURN
  1332. ELSE
  1333. XZPREC = XVAL
  1334. ENDIF
  1335. else
  1336. CALL ERREUR(21)
  1337. RETURN
  1338. endif
  1339. goto 1
  1340. C
  1341. C option ATTE
  1342. C
  1343. 149 CONTINUE
  1344. IF (ICHOI.EQ.2) THEN
  1345. MATTE=MATTEN
  1346. CALL ECRENT(MATTE)
  1347. RETURN
  1348. ENDIF
  1349. CALL LIRENT(MATTE,1,iretou)
  1350. if(ierr.ne.0) return
  1351. CALL OOOATE(MATTE)
  1352. MATTEN=MATTE
  1353. GO TO 1
  1354. C
  1355. C option SOUC
  1356. C
  1357. 150 CONTINUE
  1358. IF (ICHOI.EQ.2) THEN
  1359. ith=max(1,oothrd)
  1360. mbso = imesou(ith)
  1361. call ecrent(mbso)
  1362. RETURN
  1363. ENDIF
  1364. GO TO 1
  1365. C -----------------
  1366. C Fin des Options
  1367. C -----------------
  1368.  
  1369. C Ouverture de fichier
  1370. C ----------------------
  1371. C Option 'SGBD'
  1372. C 1200 CONTINUE
  1373. IF (IERR.NE.0) RETURN
  1374. CLOSE (UNIT=IUNIT,iostat=istat)
  1375. L=LONG(CHA)
  1376. IFIOLD=424
  1377. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=CHA(1:L),
  1378. . IOSTAT=IOS,ERR=2000)
  1379. IF (IOS.NE.0) GOTO 2000
  1380. GOTO 1
  1381. C Options 'DONN','LECT','ACQU'
  1382. C Verification de l'existence du fichier lors de son ouverture
  1383. 1201 IF (IERR.NE.0) RETURN
  1384. CLOSE (UNIT=IUNIT,iostat=istat)
  1385. L=LONG(CHA)
  1386. IFIOLD=599
  1387. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1388. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1389. IF (IOS.NE.0) GOTO 2000
  1390. GOTO 1
  1391. C Options 'IMPR','FTRA','SORT'
  1392. 1211 IF (IERR.NE.0) RETURN
  1393. isuit=0
  1394. CALL LIRMOT(MSUIT,Nsuit,isuit,0)
  1395. c rem : option SUIT ok pour IMPR et FTRA, mais peut ne pas fonction-
  1396. c -ner pour SORT (ex. SORT 'EXCE' le referme et le reouvre)
  1397. L=LONG(CHA)
  1398. IFIOLD=424
  1399. INQUIRE(FILE=CHA(1:L),EXIST=ZEXIS)
  1400. c -NOUVeau (par defaut)
  1401. IF ( isuit.le.1 .OR. .not.ZEXIS ) THEN
  1402. IF (IUNIT.eq.97.OR.IUNIT.eq.24) ZINIPS=.TRUE.
  1403. CLOSE (UNIT=IUNIT,iostat=istat)
  1404. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=CHA(1:L),
  1405. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1406. c -SUITe
  1407. ELSE
  1408. c est-il ouvert ?
  1409. c CLOSE (UNIT=IUNIT,iostat=istat)
  1410. INQUIRE(UNIT=IUNIT,OPENED=ZOPEN)
  1411. IF (IUNIT.eq.97.OR.IUNIT.eq.24) ZINIPS=.FALSE.
  1412. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1413. . ACCESS = 'SEQUENTIAL',IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1414. CALL FINFIC(IUNIT)
  1415. c rem : pour utiliser SUIT entre deux appels a cast3m, il faudrait
  1416. c recuperer le bon ipag de strini.eso et l'incrementer...
  1417. ENDIF
  1418. IF (IOS.NE.0) GOTO 2000
  1419. GOTO 1
  1420. C Option 'SAUV' 'FORMAT'
  1421. 3201 IF (IERR.NE.0) RETURN
  1422. CLOSE (UNIT=IUNIT,iostat=istat)
  1423. if (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. )
  1424. ixdrw=0
  1425. iformx=iform
  1426. LCHAI=LONG(NOMSAU)
  1427. IFIOLD=424
  1428. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=NOMSAU(1:LCHAI),
  1429. & IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1430. IF (IOS.NE.0) GOTO 2000
  1431. GOTO 1
  1432. C Option 'REST' 'FORMAT'
  1433. 2201 IF (IERR.NE.0) RETURN
  1434. CLOSE (UNIT=IUNIT,iostat=istat)
  1435. if (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. )
  1436. ixdrr=0
  1437. iformx=iform
  1438. L=LONG(CHA)
  1439. IFIOLD=599
  1440. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1441. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1442. IF (IOS.NE.0) GOTO 2000
  1443. GOTO 1
  1444. C Option 'SAUV' 'BINA' (format binaire)
  1445. 1202 IF (IERR.NE.0) RETURN
  1446. C WRITE(IOIMP,*) ' sauv en binaire'
  1447. CLOSE (UNIT=IUNIT,iostat=istat)
  1448. if (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. )
  1449. iformx=iform
  1450. ixdrw=0
  1451. LCHAI=LONG(NOMSAU)
  1452. IFIOLD=424
  1453. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=NOMSAU(1:LCHAI),
  1454. . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED')
  1455. IF (IOS.NE.0) GOTO 2000
  1456. GOTO 1
  1457. C Options 'REST' ('BINA') (format binaire)
  1458. 2202 IF (IERR.NE.0) RETURN
  1459. C WRITE(IOIMP,*) ' rest en binaire'
  1460. CLOSE (UNIT=IUNIT,iostat=istat)
  1461. if (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. )
  1462. iformx=iform
  1463. ixdrr=0
  1464. L=LONG(CHA)
  1465. IFIOLD=599
  1466. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1467. . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED')
  1468. IF (IOS.NE.0) GOTO 2000
  1469. GOTO 1
  1470. C Options 'SAUV' ('XDR') (format XDR)
  1471. 1203 IF (IERR.NE.0) RETURN
  1472. IF (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. )
  1473. ixdrw=0
  1474. L=LONG(NOMSAU)
  1475. IFIOLD=424
  1476. IF (iform.GT.0) THEN
  1477. ios=initxdr(NOMSAU(1:L),'w',.TRUE.)
  1478. if (ios.LT.0) GOTO 2000
  1479. ixdrw=ios
  1480. ICHA(1:10)='CASTEM XDR'
  1481. ios=IXDRSTRING( ixdrw,ICHA(1:10))
  1482. ENDIF
  1483. IF (iform.LT.0) THEN
  1484. ios=initxdr(CHA(1:L),'r',.TRUE.)
  1485. ixdrw=ios
  1486. ENDIF
  1487. iform=2
  1488. iformx=iform
  1489. IF (IOS.LT.0) GOTO 2000
  1490. GOTO 1
  1491. C Options 'REST' (format XDR)
  1492. 2203 IF (IERR.NE.0) RETURN
  1493. IF (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. )
  1494. ixdrr=0
  1495. L=LONG(CHA)
  1496. IFIOLD=424
  1497. IF (iform.GT.0) THEN
  1498. ios=initxdr(CHA(1:L),'w',.TRUE.)
  1499. if (ios.LT.0) GOTO 2000
  1500. ixdrr=ios
  1501. ICHA(1:10)='CASTEM XDR'
  1502. ios=IXDRSTRING( ixdrr,ICHA(1:10))
  1503. ENDIF
  1504. IF (iform.LT.0) THEN
  1505. IFIOLD=599
  1506. ios=initxdr(CHA(1:L),'r',.TRUE.)
  1507. ixdrr=ios
  1508. ENDIF
  1509. iform=2
  1510. iformx=iform
  1511. IF (IOS.LT.0) GOTO 2000
  1512. GOTO 1
  1513.  
  1514. C Traitement des erreurs d'ouverture des fichiers
  1515. 2000 L=LONG(CHA)
  1516. MOTERR=CHA(1:L)
  1517. INTERR(1)=IOS
  1518. CALL ERREUR(424)
  1519.  
  1520. RETURN
  1521. END
  1522.  
  1523.  
  1524.  

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