Télécharger option.eso

Retour à la liste

Numérotation des lignes :

option
  1. C OPTION SOURCE OF166741 24/12/18 21:15:27 12089
  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 MCOORa
  28. REAL*8 XCoora(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,MCOORa
  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. XCoora(IRef1+j)=XCOOR(IRef+j)
  213. ENDDO
  214. XCoora(IRef1+iretp1)=XCOOR(IRef+idimp1)
  215. ENDDO
  216. IDIM=IRET
  217. SEGADJ,MCOORD
  218. DO j=1,XCOOR(/1)
  219. XCOOR(j)=XCOORa(j)
  220. ENDDO
  221. SEGSUP,MCOORa
  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. IF (IRET.LT.0) THEN
  544. INTERR(1)=IRET
  545. INTERR(2)=1
  546. INTERR(3)=IGRAND
  547. CALL ERREUR(1068)
  548. RETURN
  549. ENDIF
  550. IF (IRET.EQ.IONIVE) RETURN
  551. write(ioimp,*) 'Changement IONIVE',IONIVE,'->',IRET
  552. IONIVE = IRET
  553. GOTO 1
  554. C ---------------
  555. C Option 'NGMA'
  556. C ---------------
  557. 116 IF (ICHOI.EQ.2) THEN
  558. CALL ECRENT(NGMAXY)
  559. RETURN
  560. ENDIF
  561. CALL MESLIR(-197)
  562. CALL LIRENT(IRET,1,IRetou)
  563. IF (IERR.NE.0) RETURN
  564. INTERR(1)=IRET
  565. IF (IRET.LT.0) CALL ERREUR (36)
  566. NGMAXY=IRET
  567. GOTO 1
  568. C ---------------
  569. C Option 'SAUV'
  570. C ---------------
  571. 117 IF (ICHOI.EQ.2) THEN
  572. CALL ECRENT(IOSAU)
  573. RETURN
  574. ENDIF
  575. CALL MESLIR(-196)
  576. IFORM=2
  577. IPREFI=0
  578. DIMATT=0.D0
  579. IREFOR=0
  580. ISAFOR=0
  581. IF (IPSAUV.NE.0) CALL LIBPIL(IPSAUV)
  582. IPSAUV=0
  583. 1171 CALL LIRMOT(FORMAT,NbForm,ICHOr,0)
  584. IF (ICHOr.EQ.1) THEN
  585. IFORM=1
  586. ISAFOR=1
  587. GOTO 1171
  588. ELSE IF (ICHOr.EQ.2) THEN
  589. CALL LIRREE(XRET,1,IRetou)
  590. IF (IERR.NE.0) RETURN
  591. DIMFIC=XRET
  592. GOTO 1171
  593. ELSE IF (ICHOr.EQ.3) THEN
  594. IFORM=2
  595. GOTO 1171
  596. ELSE IF (ICHOr.EQ.4) THEN
  597. IFORM=0
  598. GOTO 1171
  599. ENDIF
  600. CALL LIRENT(IRET,0,IRetou)
  601. IF (IRetou.NE.0) THEN
  602. IF (IRET.LE.0) CALL ERREUR(36)
  603. IF (IERR.NE.0) RETURN
  604. IOSAU=IRET
  605. IPSAUV=0
  606. GOTO 1
  607. ENDIF
  608. CALL MESLIR(-195)
  609. CALL LIRCHA(CHA,1,IRetou)
  610. IF (IERR.NE.0) RETURN
  611. lchai=long(cha)
  612. * la longueur du fichier maximale est LOCHAI moins la longueur("_iiii")
  613. * ou iiii designe le nombre maximal de fichiers de sauvegarde possible
  614. * A ce jour la limite est 9999 fichiers. LONG("_9999") = 5
  615. IF (lchai.GT.(LOCHAI-5)) THEN
  616. write(ioimp,*) 'SAUV File Name is too LONG'
  617. CALL ERREUR(1111)
  618. RETURN
  619. ENDIF
  620. NOMSAU = ' '
  621. NOMSAU(1:lchai)=cha(1:lchai)
  622. IUNIT=IOSAU
  623. IPSAUV=0
  624. lcha=lchai
  625. * destruction des eventuels fichiers existants
  626. open(file=NOMSAU(1:lcha),status='OLD',iostat=istat,unit=iunit)
  627. if (istat.eq.0) then
  628. close(iunit,status='DELETE',iostat=istat)
  629. if (istat.ne.0) then
  630. endif
  631. else
  632. goto 1173
  633. endif
  634. ll=lcha+1
  635. NOMSAU(ll:ll+1)='_1'
  636. ll=ll+1
  637. do isuit=1,10000
  638. if (isuit.lt.10) then
  639. write (NOMSAU(ll:ll),fmt='(I1)') isuit
  640. lcha=ll
  641. elseif (isuit.lt.100) then
  642. write (NOMSAU(ll:ll+1),fmt='(I2)') isuit
  643. lcha=ll+1
  644. elseif (isuit.lt.1000) then
  645. write (NOMSAU(ll:ll+2),fmt='(I3)') isuit
  646. lcha=ll+2
  647. elseif (isuit.lt.10000) then
  648. write (NOMSAU(ll:ll+3),fmt='(I4)') isuit
  649. lcha=ll+3
  650. endif
  651. open(file=NOMSAU(1:lcha),status='OLD',iostat=istat,unit=iunit)
  652. if (istat.eq.0) then
  653. close(iunit,status='DELETE',iostat=istat)
  654. else
  655. goto 1173
  656. endif
  657. enddo
  658. 1173 continue
  659. NOMSAU(lchai+1:lochai) = ' '
  660. IF (IFORM.EQ.1) GOTO 3201
  661. IF (IFORM.EQ.2) GOTO 1203
  662. GOTO 1202
  663. C ---------------
  664. C Option 'REST'
  665. C ---------------
  666. 118 CONTINUE
  667. IF (ICHOI.EQ.2) THEN
  668. CALL ECRENT(IORES)
  669. RETURN
  670. ENDIF
  671. IFICLE=0
  672. IFORM=0
  673. IREFOR=0
  674. CALL MESLIR(-193)
  675. 1172 CALL LIRMOT(FORMAT,nbform,ichor,0)
  676. IF (IERR.NE.0) RETURN
  677. IF (ICHOr.EQ.1) THEN
  678. IREFOR=1
  679. IFORM=1
  680. GOTO 1172
  681. ELSE IF (ICHOr.EQ.2) THEN
  682. GOTO 1172
  683. ELSE IF (ICHOr.EQ.3) THEN
  684. IFORM=-2
  685. GOTO 1172
  686. ELSEIF (ICHOr.EQ.4) then
  687. IFORM=0
  688. GOTO 1172
  689. ENDIF
  690. CALL MESLIR(-194)
  691. CALL LIRENT(IRET,0,IRetou)
  692. IF (IRetou.NE.0) THEN
  693. IF (IRET.LE.0) CALL ERREUR(36)
  694. IF (IERR.NE.0) RETURN
  695. IORES=IRET
  696. GOTO 1
  697. ENDIF
  698. CALL LIRCHA(CHA,1,IRetou)
  699. IF (IERR.NE.0) RETURN
  700. L=LONG(CHA)
  701. IUNIT=IORES
  702. NOMRES=' '
  703. NOMRES(1:L)=CHA(1:L)
  704. C test sur le type de fichier
  705. CLOSE(UNIT=IUNIT,iostat=istat)
  706. IFORM=1
  707. IREFOR=1
  708. IFIOLD=599
  709. OPEN(UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  710. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  711. IF (IOS.EQ.0) THEN
  712. iretou=0
  713. iquoi=0
  714. CALL LFCDES(IORES,IQUOI,IRETOU,IFORM)
  715. C WRITE(IOIMP,*) 'apres lfcdes-1 ',iores,iquoi,iretou,iform
  716. IF (IOS.EQ.0.AND.(IQUOI.GT.0.AND.IQUOI.LT.10).AND.
  717. . IRETOU.EQ.0) THEN
  718. CALL ERREUR(-342)
  719. GOTO 3250
  720. ENDIF
  721. ENDIF
  722. IFORM=0
  723. IREFOR=0
  724. CLOSE(UNIT=IUNIT,iostat=istat)
  725. OPEN(UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  726. . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED')
  727. IF (IOS.EQ.0) THEN
  728. iretou=0
  729. iquoi=0
  730. CALL LFCDES (IORES,IQUOI,IRETOU,IFORM)
  731. C WRITE (IOIMP,*) 'apres lfcdes-2 ',iores,iquoi,iretou,iform
  732. IF (IOS.EQ.0.AND.(IQUOI.GT.0.AND.IQUOI.LT.10).AND.
  733. . IRETOU.EQ.0) THEN
  734. CALL ERREUR(-343)
  735. GOTO 3250
  736. ENDIF
  737. ENDIF
  738. IFORM=2
  739. IF (ixdrr.NE.0) IOS=IXDRCLOSE(ixdrr,.TRUE.)
  740. ios=initxdr(CHA(1:L),'r',.TRUE.)
  741. IF (ios.lt.0) GOTO 2000
  742. ixdrr=ios
  743. ios=IXDRSTRING(ixdrr,ICHA(1:10))
  744. C WRITE(IOIMP,*) ' option rest ',icha(1:10),ios
  745. IF (IOS.GE.0.AND.ICHA(1:10).EQ.'CASTEM XDR') THEN
  746. C WRITE (IOIMP,*) ' on va direct en 1 '
  747. IFORM=2
  748. iformx=IFORM
  749. CALL ERREUR(-344)
  750. GOTO 1
  751. ENDIF
  752. IFIOLD=424
  753. GOTO 2000
  754. 3250 iformx=IFORM
  755. IF (IFORM.EQ.1) GOTO 2201
  756. IF (IFORM.EQ.-2) GOTO 2203
  757. GOTO 2202
  758. C ---------------
  759. C Option 'ISOV'
  760. C ---------------
  761. 119 IF (ICHOI.EQ.2) THEN
  762. CALL ECRCHA(MISO(ISOTYP+1))
  763. RETURN
  764. ENDIF
  765. CALL MESLIR(-192)
  766. CALL LIRMOT(MISO,NbIso,IRET,1)
  767. IF (IRET.LE.0) CALL ERREUR(36)
  768. IF (IERR.NE.0) RETURN
  769. ISOTYP=IRET-1
  770. ICHA=MISO(IRET)
  771. GOTO 1
  772. C ---------------
  773. C Option 'OMBRE'
  774. C ---------------
  775. 120 IF (ICHOI.EQ.2) THEN
  776. LOG=.FALSE.
  777. IF (IOMBRE.EQ.1) LOG =.TRUE.
  778. CALL ECRLOG(LOG)
  779. RETURN
  780. ENDIF
  781. CALL MESLIR(-191)
  782. CALL LIRLOG(LOG,1,IRET)
  783. IF (IERR.NE.0) RETURN
  784. IF (LOG) THEN
  785. IOMBRE=1
  786. ELSE
  787. IOMBRE=0
  788. ENDIF
  789. GOTO 1
  790. C ---------------
  791. C Option 'NBP '
  792. C ---------------
  793. 121 IF (ICHOI.EQ.2) THEN
  794. IRET=mcoord
  795. CALL ECRENT(IRET)
  796. RETURN
  797. ENDIF
  798. CALL MESLIR(-190)
  799. CALL LIRENT(IRET,1,IRetou)
  800. IF (IERR.NE.0) RETURN
  801. NBPTS=MAX(0,IRET)
  802. SEGADJ MCOORD
  803. GOTO 1
  804. C ---------------
  805. C Option 'VERI'
  806. C ---------------
  807. 122 IF (ICHOI.EQ.2) THEN
  808. CALL ECRENT(IOSPI)
  809. RETURN
  810. ENDIF
  811. CALL MESLIR(-189)
  812. CALL LIRENT(IRET,1,IRetou)
  813. IF (IERR.NE.0) RETURN
  814. IOSPI=IRET
  815. GOTO 1
  816. C ---------------
  817. C Option 'ZERO'
  818. C ---------------
  819. 123 IF (ICHOI.EQ.2) THEN
  820. CALL ECRENT(IZROSF)
  821. RETURN
  822. ENDIF
  823. CALL MESLIR(-188)
  824. CALL LIRENT(IRET,1,IRetou)
  825. IF (IERR.NE.0) RETURN
  826. IZROSF=MAX(1,IRET)
  827. GOTO 1
  828. C ---------------
  829. C Option 'ACQU'
  830. C ---------------
  831. 124 IF (ICHOI.EQ.2) THEN
  832. CALL ECRENT(IOACQ)
  833. RETURN
  834. ENDIF
  835. CALL MESLIR(-187)
  836. CALL LIRENT(IRET,0,IRetou)
  837. IF (IRetou.NE.0) THEN
  838. IOACQ=IRET
  839. GOTO 1
  840. ENDIF
  841. CALL MESLIR(-186)
  842. CALL LIRCHA(CHA,1,IRetou)
  843. IF (IERR.NE.0) RETURN
  844. IUNIT=IOACQ
  845. GOTO 1201
  846. C ---------------
  847. C Option '----'
  848. C ---------------
  849. 125 CONTINUE
  850. GOTO 1
  851. C ---------------
  852. C Option 'PLAC'
  853. C ---------------
  854. 126 IF (ICHOI.EQ.2) THEN
  855. CALL ECRENT(IPLLB)
  856. RETURN
  857. ENDIF
  858. CALL MESLIR(-184)
  859. CALL LIRENT(IRET,1,IRetou)
  860. IF (IERR.NE.0) RETURN
  861. C Pourquoi mettre IPLLB en positif ?
  862. C N'etant pas sur de la valeur de IPLTOT il faut pouvoir le mettre
  863. C en negatif tres grand (voir T.C.)
  864. C IRET=MAX(1,IRET)
  865. IPLLB=IRET
  866. GOTO 1
  867. C ---------------
  868. C Option 'LANG'
  869. C ---------------
  870. 127 IF (ICHOI.EQ.2) THEN
  871. CALL ECRCHA (LANGUE)
  872. RETURN
  873. ENDIF
  874. CALL LIRCHA(ICHA,1,IRetou)
  875. IF (IERR.NE.0) RETURN
  876. LANGUE=ICHA
  877. GOTO 1
  878. C ---------------
  879. C Option 'NORM'
  880. C ---------------
  881. 128 IF (ICHOI.EQ.2) THEN
  882. CALL ERREUR(758)
  883. RETURN
  884. ENDIF
  885. C On commence par une remise a plat : tout a 0 .
  886. C On devrait liberer la place occupee eventuellement par ces segments,
  887. C mais comme on a fait SAVSEG avant. Il faudrait aussi les enlever de
  888. C la liste des non-effacables, mais comment ?
  889. NORINC=0
  890. NORVAL=0
  891. NORIND=0
  892. NORVAD=0
  893. C Lecture des mts cles eventuels
  894. CALL LIRMOT(NAUTO,NbAuto,i,0)
  895. IF (i.EQ.2) GOTO 1
  896. C Normalisation automatique
  897. IF (i.EQ.1) THEN
  898. NORINC=-1
  899. GOTO 1
  900. ENDIF
  901. CALL LIROBJ('LISTMOTS',NORINC,1,IRetou)
  902. CALL LIROBJ('LISTREEL',NORVAL,1,IRetou)
  903. IF (IERR.NE.0) THEN
  904. NORINC=0
  905. NORVAL=0
  906. GOTO 1
  907. ENDIF
  908. MLREEL=NORVAL
  909. MLMOTS=NORINC
  910. SEGACT MLREEL,MLMOTS
  911. NRE=PROG(/1)
  912. NMO=MOTS(/2)
  913. SEGDES MLREEL,MLMOTS
  914. IF (NRE.NE.NMO) THEN
  915. CALL ERREUR(212)
  916. NORINC=0
  917. NORVAL=0
  918. RETURN
  919. ENDIF
  920. C Verification s'il n'y a pas de 'LX' la dedans
  921. C La taille de mots doit etre OK si le LISTMOTS est cree par MOTS
  922. SEGACT MLMOTS
  923. DO i=1,NMO
  924. IF (MOTS(i)(1:4).EQ.'LX ') THEN
  925. CALL ERREUR( 759 )
  926. NORINC=0
  927. NORVAL=0
  928. SEGDES MLMOTS
  929. RETURN
  930. ENDIF
  931. ENDDO
  932. SEGDES MLMOTS
  933. CALL SAVSEG(MLREEL)
  934. CALL SAVSEG(MLMOTS)
  935. CALL LIROBJ('LISTMOTS',NORIND,0,IRetou)
  936. IF (IRetou.EQ.0) GOTO 1
  937. CALL LIROBJ('LISTREEL',NORVAD,1,IRetou)
  938. IF (IERR.NE.0) THEN
  939. NORIND=0
  940. NORVAD=0
  941. ENDIF
  942. MLREEL=NORVAD
  943. MLMOTS=NORIND
  944. SEGACT MLREEL,MLMOTS
  945. NRE=PROG(/1)
  946. NMO=MOTS(/2)
  947. SEGDES MLREEL,MLMOTS
  948. IF (NRE.NE.NMO) THEN
  949. CALL ERREUR(212)
  950. NORIND=0
  951. NORVAD=0
  952. RETURN
  953. ENDIF
  954. CALL SAVSEG(MLREEL)
  955. CALL SAVSEG(MLMOTS)
  956. GOTO 1
  957. C ---------------
  958. C Option 'RESO'
  959. C ---------------
  960. 129 IF (ICHOI.EQ.2) THEN
  961. CALL ECRCHA(MRESOL(NUCROU+1))
  962. RETURN
  963. ENDIF
  964. CALL MESLIR(-187)
  965. CALL LIRMOT(MRESOL,NbReso,IRetou,1)
  966. IF (IERR.NE.0) RETURN
  967. NUCROU=IRetou-1
  968. GOTO 1
  969. C ---------------
  970. C Option 'FTRA'
  971. C ---------------
  972. 130 IF (ICHOI.EQ.2) THEN
  973. IF (iogra.ge.7.and.iogra.le.9) THEN
  974. IF (IOGRA.EQ.8) THEN
  975. IUPS=97
  976. ELSE
  977. IUPS=24
  978. ENDIF
  979. INQUIRE(UNIT=IUPS,NAME=CHA)
  980. CALL ECRCHA(CHA(1:LONG(CHA)))
  981. RETURN
  982. ELSE
  983. CALL ERREUR(758)
  984. RETURN
  985. ENDIF
  986. ENDIF
  987. IF (iogra.ge.7.and.iogra.le.9) THEN
  988. c ZINIPS=.TRUE.
  989. CALL MESLIR(-209)
  990. CALL LIRCHA(CHA,1,IRetou)
  991. IF (IERR.NE.0) RETURN
  992. IF (IOGRA.EQ.8) THEN
  993. IUPS=97
  994. ELSE
  995. IUPS=24
  996. ENDIF
  997. IUNIT=IUPS
  998. GOTO 1211
  999. ELSE
  1000. CALL ERREUR(26)
  1001. RETURN
  1002. ENDIF
  1003. GOTO 1
  1004. C ---------------
  1005. C Option 'OEIL'
  1006. C ---------------
  1007. 131 IF (ICHOI.EQ.2) THEN
  1008. IF (IOEIL.NE.0) THEN
  1009. CALL ECROBJ('POINT',IOEIL)
  1010. ELSE
  1011. C 18 2 Point non trouve
  1012. CALL ERREUR(18)
  1013. ENDIF
  1014. RETURN
  1015. ENDIF
  1016. CALL LIROBJ('POINT',IOEIL,1,IRetou)
  1017. IF (IERR.NE.0) RETURN
  1018. GOTO 1
  1019. C ---------------
  1020. C Option 'ERMA'
  1021. C ---------------
  1022. 132 IF (ICHOI.EQ.2) THEN
  1023. CALL ECRENT(IERMAX)
  1024. RETURN
  1025. ELSE
  1026. CALL ERREUR(758)
  1027. RETURN
  1028. ENDIF
  1029. GOTO 1
  1030. C ---------------
  1031. C Option 'ASSI'
  1032. C ---------------
  1033. 133 IF (ICHOI.EQ.2) THEN
  1034. CALL ECRENT(NBESCR)
  1035. RETURN
  1036. ENDIF
  1037. IF (NBESC.NE.0) CALL ERREUR(892)
  1038. IF (IERR.NE.0) RETURN
  1039. CALL LIRENT(IRET,0,IRetou)
  1040. IF (IRetou.NE.0) THEN
  1041. IF (IRET.LT.0) CALL ERREUR(36)
  1042. IF (IRET.GT.64) CALL ERREUR(36)
  1043. if (nbesc.ne.0) call erreur(36)
  1044. if (ierr.eq.0.and.nbesc.eq.0) then
  1045. NBESCR=IRET
  1046. endif
  1047. ENDIF
  1048. GOTO 1
  1049. C ---------------
  1050. C Option 'EPTR'
  1051. C ---------------
  1052. 134 IF (ICHOI.EQ.2) THEN
  1053. CALL ECRENT(IEPTR)
  1054. RETURN
  1055. ENDIF
  1056. CALL MESLIR(-340)
  1057. CALL LIRENT(IRET,1,IRetou)
  1058. IF (IRetou.NE.0) THEN
  1059. IF (IRET.LT.0) CALL ERREUR(36)
  1060. IEPTR=IRET
  1061. ENDIF
  1062. GOTO 1
  1063. C ---------------
  1064. C Option 'NAVI'
  1065. C ---------------
  1066. 135 IF (ICHOI.EQ.2) THEN
  1067. CALL ECRCHA(NNAVI(ILNAVI))
  1068. RETURN
  1069. ENDIF
  1070. CALL MESLIR(-341)
  1071. CALL LIRMOT(NNAVI,LNNAVI,IRET,1)
  1072. IF (IERR.NE.0) RETURN
  1073. IF (IRET.LE.0) CALL ERREUR(36)
  1074. ILNAVI=IRET
  1075. ICHA=NNAVI(ILNAVI)
  1076. GOTO 1
  1077. C
  1078. C option PARA
  1079. C
  1080. 136 IF( ICHOI.EQ.2) THEN
  1081. if(lupara.eq.1) then
  1082. call ecrlog(.TRUE.)
  1083. else
  1084. call ecrlog (.FALSE.)
  1085. endif
  1086. RETURN
  1087. ELSE
  1088. CALL LIRlog(log,1,iretou)
  1089. IF (Ierr.NE.0) return
  1090. LUPARA=0
  1091. if(log) lupara=1
  1092. ENDIF
  1093. GO TO 1
  1094. C
  1095. C option SURV
  1096. C
  1097. 137 CONTINUE
  1098. IF (ICHOI.EQ.2) THEN
  1099. MSURV=MSURVE
  1100. CALL ECRENT(MSURV)
  1101. RETURN
  1102. ENDIF
  1103. CALL LIRENT(msurv,1,iretou)
  1104. if(ierr.ne.0) return
  1105. CALL OOOSUR(MSURv)
  1106. msurve=msurv
  1107. GO TO 1
  1108. C ---------------
  1109. C Option 'POLI'
  1110. C ---------------
  1111. 138 IF (ICHOI.EQ.2) THEN
  1112. CALL ECRCHA(MPOLI(IOPOLI))
  1113. RETURN
  1114. ENDIF
  1115. CALL MESLIR(-211)
  1116. CALL LIRMOT(MPOLI,NbPoli,ij,1)
  1117. IF (IERR.NE.0) RETURN
  1118. IOPOLI=ij
  1119. GOTO 1
  1120. C ---------------
  1121. C Option 'COSC'
  1122. C ---------------
  1123. 139 IF (ICHOI.EQ.2) THEN
  1124. CALL ECRCHA(MCOSC(ICOSC))
  1125. RETURN
  1126. ENDIF
  1127. CALL MESLIR(-211)
  1128. CALL LIRMOT(MCOSC,NbCosc,ij,1)
  1129. IF (IERR.NE.0) RETURN
  1130. ICOSC=ij
  1131. GOTO 1
  1132. C ---------------
  1133. C Option 'POTR'
  1134. C ---------------
  1135. 140 IF (ICHOI.EQ.2) THEN
  1136. CALL ECRCHA(MPOTR(IOPOTR))
  1137. RETURN
  1138. ENDIF
  1139. CALL MESLIR(-211)
  1140. CALL LIRMOT(MPOTR,NbPotr,ij,1)
  1141. IF (IERR.NE.0) RETURN
  1142. IOPOTR=ij
  1143. GOTO 1
  1144. C ----------------
  1145. C option debug
  1146. C ----------------
  1147. 141 IF (ICHOI.EQ.2) THEN
  1148. call ecrent (misaup)
  1149. return
  1150. ENDIF
  1151. CALL LIRENT(MISAUP,1,iretou)
  1152. IF(IERR.NE.0) RETURN
  1153. GO TO 1
  1154. C ----------------
  1155. C option 'LOCA'
  1156. C ----------------
  1157. 142 IF (ICHOI.EQ.2) THEN
  1158. CALL ECRLOG(ZLOPRO)
  1159. RETURN
  1160. ENDIF
  1161. CALL LIRLOG(ZLOPRO,1,IRETOU)
  1162. IF (IERR.NE.0) RETURN
  1163. GO TO 1
  1164. C ----------------
  1165. C option 'DENS'
  1166. C ----------------
  1167. 143 IF (ICHOI.EQ.2) THEN
  1168. XRET=DENSIT
  1169. CALL ECRREE(XRET)
  1170. RETURN
  1171. ENDIF
  1172. CALL MESLIR(-238)
  1173. CALL LIRREE(XRET,1,IRETOU)
  1174. IF (IERR.NE.0) RETURN
  1175. C sg: comme dans subden.eso on met ABS(XRET)
  1176. DENSIT=ABS(XRET)
  1177. GO TO 1
  1178. C ----------------
  1179. C option 'INCO'
  1180. C ----------------
  1181. 144 IF (ICHOI.EQ.2) THEN
  1182. JGN=4
  1183. JGM=LNOMDD
  1184. SEGINI MLMOT1
  1185. DO IGM=1,JGM
  1186. MLMOT1.MOTS(IGM)=NOMDD(IGM)
  1187. ENDDO
  1188. SEGDES MLMOT1
  1189. JGN=4
  1190. JGM=LNOMDU
  1191. SEGINI MLMOT2
  1192. DO IGM=1,JGM
  1193. MLMOT2.MOTS(IGM)=NOMDU(IGM)
  1194. ENDDO
  1195. SEGDES MLMOT2
  1196. CALL ECROBJ('LISTMOTS',MLMOT2)
  1197. CALL ECROBJ('LISTMOTS',MLMOT1)
  1198. RETURN
  1199. ENDIF
  1200. CALL LIROBJ('LISTMOTS',MLMOT1,0,IRET)
  1201. IF (IERR.NE.0) RETURN
  1202. IF (IRET.NE.0) THEN
  1203. CALL LIROBJ('LISTMOTS',MLMOT2,1,IRET)
  1204. IF (IERR.NE.0) RETURN
  1205. SEGACT MLMOT1,MLMOT2
  1206. ELSE
  1207. JGN=LEN(CHARIN)
  1208. JGM=1
  1209. SEGINI MLMOT1,MLMOT2
  1210. CALL LIRCHA(CHARIN,1,IRET)
  1211. IF (IERR.NE.0) RETURN
  1212. MLMOT1.MOTS(1)=CHARIN
  1213. CALL LIRCHA(CHARRE,1,IRET)
  1214. IF (IERR.NE.0) RETURN
  1215. MLMOT2.MOTS(1)=CHARRE
  1216. ENDIF
  1217. Csg : copi\E9 sur modeli.eso pour le mod\E8le de diffusion
  1218. NBM1 = MLMOT1.MOTS(/2)
  1219. NBM2 = MLMOT2.MOTS(/2)
  1220. IF (NBM1.LE.0) THEN
  1221. C 1027 2
  1222. C Une donn\E9e de type %M1:8 est vide
  1223. MOTERR(1:8)='LISTMOTS'
  1224. CALL ERREUR(1027)
  1225. RETURN
  1226. ENDIF
  1227. IF (NBM1.NE.NBM2) THEN
  1228. C 854 2
  1229. C Les listes de mots doivent etre de meme longueur.
  1230. CALL ERREUR(854)
  1231. RETURN
  1232. ENDIF
  1233. DO IBM=1,NBM1
  1234. MDIINC=' '
  1235. MDIDUA=' '
  1236. CHARIN=' '
  1237. CHARRE=' '
  1238. CHARIN=MLMOT1.MOTS(IBM)
  1239. CHARRE=MLMOT2.MOTS(IBM)
  1240. C Tronquer les mots \E0 2 caract\E8res pour pouvoir nommer les gradients ?
  1241. C (,X...)
  1242. cbp IRETMA = 2
  1243. IRETMA = 4
  1244. IRETI=LONG(CHARIN)
  1245. IF (IRETI.GT.IRETMA) THEN
  1246. INTERR(1) = IRETMA
  1247. MOTERR(1:8) = CHARIN(1:IRETI)
  1248. CALL ERREUR(-353)
  1249. ENDIF
  1250. IRETI=MIN(IRETI,IRETMA)
  1251. MDIINC(1:IRETI)=CHARIN(1:IRETI)
  1252. C Pas besoin de tronquer pour la duale
  1253. cbp IRETMA = IRETMA + 2
  1254. IRETMA = 4
  1255. IRETE=LONG(CHARRE)
  1256. IF (IRETE.GT.IRETMA) THEN
  1257. INTERR(1) = IRETMA
  1258. MOTERR(1:8) = CHARRE(1:IRETE)
  1259. CALL ERREUR(-353)
  1260. ENDIF
  1261. IRETE=MIN(IRETE,IRETMA)
  1262. MDIDUA(1:IRETE)=CHARRE(1:IRETE)
  1263. c* Verification des noms de primale et duale lues
  1264. CALL VERMDI(MDIINC,MDIDUA)
  1265. IF (IERR.NE.0) RETURN
  1266. ENDDO
  1267. if(iimpi.ge.333) then
  1268. write(ioimp,*) 'DDL PRIMAL=',(NOMDD(iou),iou=1,LNOMDD)
  1269. write(ioimp,*) 'DDL DUAL =',(NOMDU(iou),iou=1,LNOMDU)
  1270. endif
  1271. SEGDES MLMOT1,MLMOT2
  1272. GO TO 1
  1273. C Recuperation du pointeur
  1274. 145 if (ichoi.eq.2) then
  1275. call cpoint
  1276. return
  1277. endif
  1278. goto 1
  1279.  
  1280. 146 if (ichoi .eq. 2) then
  1281. C Recuperation de XPETIT dans CCOPTIO
  1282. call ecrree(XPETIT)
  1283. return
  1284. elseif(ichoi.eq.1) then
  1285. C Surcharge de XPETIT dans CCOPTIO
  1286. CALL LIRREE(XVAL, 1, IRET)
  1287. IF (IERR .NE. 0) RETURN
  1288. XVAL = ABS(XVAL)
  1289. IF (XVAL/REAL(10.D0) .LT. XVAL) THEN
  1290. XPETIT = XVAL
  1291. ELSE
  1292. REAERR(1)=XVAL
  1293. CALL ERREUR(1009)
  1294. RETURN
  1295. ENDIF
  1296. else
  1297. CALL ERREUR(21)
  1298. RETURN
  1299. endif
  1300. goto 1
  1301.  
  1302. 147 if (ichoi .eq. 2) then
  1303. C Recuperation de XGRAND dans CCOPTIO
  1304. call ecrree(XGRAND)
  1305. return
  1306. elseif(ichoi .eq. 1) then
  1307. C Surcharge de XGRAND dans CCOPTIO
  1308. CALL LIRREE(XVAL, 1, IRET)
  1309. IF (IERR .NE. 0) RETURN
  1310. XVAL = ABS(XVAL)
  1311. IF (XVAL*REAL(10.D0) .GT. XVAL) THEN
  1312. XGRAND = XVAL
  1313. ELSE
  1314. REAERR(1)=XVAL
  1315. CALL ERREUR(1009)
  1316. RETURN
  1317. ENDIF
  1318. else
  1319. CALL ERREUR(21)
  1320. RETURN
  1321. endif
  1322. goto 1
  1323.  
  1324. 148 if (ichoi .eq. 2) then
  1325. C Recuperation de XZPREC dans CCOPTIO
  1326. call ecrree(XZPREC)
  1327. return
  1328. elseif(ichoi .eq. 1) then
  1329. C Surcharge de XZPREC dans CCOPTIO
  1330. CALL LIRREE(XVAL, 1, IRET)
  1331. IF (IERR .NE. 0) RETURN
  1332. XVAL = ABS(XVAL)
  1333. XTEST= REAL(1.D0) + XVAL
  1334. IF (XTEST .LE. REAL(1.D0)) THEN
  1335. REAERR(1)=XVAL
  1336. CALL ERREUR(1009)
  1337. RETURN
  1338. ELSE
  1339. XZPREC = XVAL
  1340. ENDIF
  1341. else
  1342. CALL ERREUR(21)
  1343. RETURN
  1344. endif
  1345. goto 1
  1346. C
  1347. C option ATTE
  1348. C
  1349. 149 CONTINUE
  1350. IF (ICHOI.EQ.2) THEN
  1351. MATTE=MATTEN
  1352. CALL ECRENT(MATTE)
  1353. RETURN
  1354. ENDIF
  1355. CALL LIRENT(MATTE,1,iretou)
  1356. if(ierr.ne.0) return
  1357. CALL OOOATE(MATTE)
  1358. MATTEN=MATTE
  1359. GO TO 1
  1360. C
  1361. C option SOUC
  1362. C
  1363. 150 CONTINUE
  1364. IF (ICHOI.EQ.2) THEN
  1365. ith=max(1,oothrd)
  1366. mbso = imesou(ith)
  1367. call ecrent(mbso)
  1368. RETURN
  1369. ENDIF
  1370. GO TO 1
  1371. C -----------------
  1372. C Fin des Options
  1373. C -----------------
  1374.  
  1375. C Ouverture de fichier
  1376. C ----------------------
  1377. C Option 'SGBD'
  1378. C 1200 CONTINUE
  1379. IF (IERR.NE.0) RETURN
  1380. CLOSE (UNIT=IUNIT,iostat=istat)
  1381. L=LONG(CHA)
  1382. IFIOLD=424
  1383. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=CHA(1:L),
  1384. . IOSTAT=IOS,ERR=2000)
  1385. IF (IOS.NE.0) GOTO 2000
  1386. GOTO 1
  1387. C Options 'DONN','LECT','ACQU'
  1388. C Verification de l'existence du fichier lors de son ouverture
  1389. 1201 IF (IERR.NE.0) RETURN
  1390. CLOSE (UNIT=IUNIT,iostat=istat)
  1391. L=LONG(CHA)
  1392. IFIOLD=599
  1393. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1394. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1395. IF (IOS.NE.0) GOTO 2000
  1396. GOTO 1
  1397. C Options 'IMPR','FTRA','SORT'
  1398. 1211 IF (IERR.NE.0) RETURN
  1399. isuit=0
  1400. CALL LIRMOT(MSUIT,Nsuit,isuit,0)
  1401. c rem : option SUIT ok pour IMPR et FTRA, mais peut ne pas fonction-
  1402. c -ner pour SORT (ex. SORT 'EXCE' le referme et le reouvre)
  1403. L=LONG(CHA)
  1404. IFIOLD=424
  1405. INQUIRE(FILE=CHA(1:L),EXIST=ZEXIS)
  1406. c -NOUVeau (par defaut)
  1407. IF ( isuit.le.1 .OR. .not.ZEXIS ) THEN
  1408. IF (IUNIT.eq.97.OR.IUNIT.eq.24) ZINIPS=.TRUE.
  1409. CLOSE (UNIT=IUNIT,iostat=istat)
  1410. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=CHA(1:L),
  1411. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1412. c -SUITe
  1413. ELSE
  1414. c est-il ouvert ?
  1415. c CLOSE (UNIT=IUNIT,iostat=istat)
  1416. INQUIRE(UNIT=IUNIT,OPENED=ZOPEN)
  1417. IF (IUNIT.eq.97.OR.IUNIT.eq.24) ZINIPS=.FALSE.
  1418. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1419. . ACCESS = 'SEQUENTIAL',IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1420. CALL FINFIC(IUNIT)
  1421. c rem : pour utiliser SUIT entre deux appels a cast3m, il faudrait
  1422. c recuperer le bon ipag de strini.eso et l'incrementer...
  1423. ENDIF
  1424. IF (IOS.NE.0) GOTO 2000
  1425. GOTO 1
  1426. C Option 'SAUV' 'FORMAT'
  1427. 3201 IF (IERR.NE.0) RETURN
  1428. CLOSE (UNIT=IUNIT,iostat=istat)
  1429. if (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. )
  1430. ixdrw=0
  1431. iformx=iform
  1432. LCHAI=LONG(NOMSAU)
  1433. IFIOLD=424
  1434. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=NOMSAU(1:LCHAI),
  1435. & IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1436. IF (IOS.NE.0) GOTO 2000
  1437. GOTO 1
  1438. C Option 'REST' 'FORMAT'
  1439. 2201 IF (IERR.NE.0) RETURN
  1440. CLOSE (UNIT=IUNIT,iostat=istat)
  1441. if (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. )
  1442. ixdrr=0
  1443. iformx=iform
  1444. L=LONG(CHA)
  1445. IFIOLD=599
  1446. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1447. . IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  1448. IF (IOS.NE.0) GOTO 2000
  1449. GOTO 1
  1450. C Option 'SAUV' 'BINA' (format binaire)
  1451. 1202 IF (IERR.NE.0) RETURN
  1452. C WRITE(IOIMP,*) ' sauv en binaire'
  1453. CLOSE (UNIT=IUNIT,iostat=istat)
  1454. if (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. )
  1455. iformx=iform
  1456. ixdrw=0
  1457. LCHAI=LONG(NOMSAU)
  1458. IFIOLD=424
  1459. OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=NOMSAU(1:LCHAI),
  1460. . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED')
  1461. IF (IOS.NE.0) GOTO 2000
  1462. GOTO 1
  1463. C Options 'REST' ('BINA') (format binaire)
  1464. 2202 IF (IERR.NE.0) RETURN
  1465. C WRITE(IOIMP,*) ' rest en binaire'
  1466. CLOSE (UNIT=IUNIT,iostat=istat)
  1467. if (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. )
  1468. iformx=iform
  1469. ixdrr=0
  1470. L=LONG(CHA)
  1471. IFIOLD=599
  1472. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L),
  1473. . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED')
  1474. IF (IOS.NE.0) GOTO 2000
  1475. GOTO 1
  1476. C Options 'SAUV' ('XDR') (format XDR)
  1477. 1203 IF (IERR.NE.0) RETURN
  1478. IF (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. )
  1479. ixdrw=0
  1480. L=LONG(NOMSAU)
  1481. IFIOLD=424
  1482. IF (iform.GT.0) THEN
  1483. ios=initxdr(NOMSAU(1:L),'w',.TRUE.)
  1484. if (ios.LT.0) GOTO 2000
  1485. ixdrw=ios
  1486. ICHA(1:10)='CASTEM XDR'
  1487. ios=IXDRSTRING( ixdrw,ICHA(1:10))
  1488. ENDIF
  1489. IF (iform.LT.0) THEN
  1490. ios=initxdr(CHA(1:L),'r',.TRUE.)
  1491. ixdrw=ios
  1492. ENDIF
  1493. iform=2
  1494. iformx=iform
  1495. IF (IOS.LT.0) GOTO 2000
  1496. GOTO 1
  1497. C Options 'REST' (format XDR)
  1498. 2203 IF (IERR.NE.0) RETURN
  1499. IF (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. )
  1500. ixdrr=0
  1501. L=LONG(CHA)
  1502. IFIOLD=424
  1503. IF (iform.GT.0) THEN
  1504. ios=initxdr(CHA(1:L),'w',.TRUE.)
  1505. if (ios.LT.0) GOTO 2000
  1506. ixdrr=ios
  1507. ICHA(1:10)='CASTEM XDR'
  1508. ios=IXDRSTRING( ixdrr,ICHA(1:10))
  1509. ENDIF
  1510. IF (iform.LT.0) THEN
  1511. IFIOLD=599
  1512. ios=initxdr(CHA(1:L),'r',.TRUE.)
  1513. ixdrr=ios
  1514. ENDIF
  1515. iform=2
  1516. iformx=iform
  1517. IF (IOS.LT.0) GOTO 2000
  1518. GOTO 1
  1519.  
  1520. C Traitement des erreurs d'ouverture des fichiers
  1521. 2000 L=LONG(CHA)
  1522. MOTERR=CHA(1:L)
  1523. INTERR(1)=IOS
  1524. CALL ERREUR(424)
  1525.  
  1526. RETURN
  1527. END
  1528.  
  1529.  
  1530.  

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