Télécharger option.eso

Retour à la liste

Numérotation des lignes :

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

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