option
C OPTION SOURCE SP204843 24/11/06 21:15:14 12071 C======================================================================= C Si ICHOI=1 C Affection d'une valeur a une variable de CCOPTIO (directive OPTION) C Si ICHOI=2 C Renvoie la valeur d'une des variables de CCOPTIO (operateur VALEUR) C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC CCHAMP -INC CCASSIS -INC SMCOORD -INC SMLREEL -INC SMLMOTS -INC CCFXDR -INC CCTRACE -INC CCREEL SEGMENT MCOORa REAL*8 XCoora(LCoor) END SEGMENT C NbOpt : Nombre d'options (mot-cles) des operateurs OPTION et VALEUR C NbMfo : Nombre d'options mot-cle 'MODE' (vecteur MFO) C NbMsfo : " " mot-cle 'MODE' 'PLAN' (vecteur MSFO) C NbNoha : " " mot-cle 'FOUR' (vecteur NOHR) C NbUnid : " " mot-cle 'UNID' (vecteur OptUnid) C NbMod1D : " " mots-cles 'UNID' 'PLAN','AXIS' (vect. Mode1D) C NbGra : " " mot-cle 'TRAC' (vecteur MGR) C NbIso : " " mot-cle 'ISOV' (vecteur MISO) C NbReso : " " mot-cle 'RESO' (vecteur MRESOL) C NbErre : " " mot-cle 'ERRE' (vecteur ERCTRL) C NbForm : " " mot-cle 'SAUV' et 'REST' (vecteur FORMAT) C NbAuto : " " mot-cle 'NORM' (vecteur NAUTO) PARAMETER (NbOpt=50,NbMfo=6,NbMsfo=3,NbNoha=1,NbUnid=3,NbMod1D=12, $ NbGra=9,NbIso=3,NbReso=2,NbErre=4,NbForm=4,NbAuto=2, $ NbPoli=7,NbCosc=3,NbPotr=16,Nsuit=2) EXTERNAL LONG CHARACTER*4 MCLE(NbOpt) CHARACTER*4 MFO(NbMfo) CHARACTER*4 MSFO(NbMsfo) CHARACTER*4 OptUnid(NbUnid) CHARACTER*4 Mode1D(NbMod1D) CHARACTER*4 MGR(NbGra) CHARACTER*4 MISO(NbIso) CHARACTER*4 MRESOL(NbReso) CHARACTER*4 ERCTRL(NbErre) CHARACTER*4 FORMAT(NbForm) CHARACTER*4 NOHR(nbnoha) integer*4 iohr equivalence(iohr,nohr) CHARACTER*4 NAUTO(NbAuto),MSUIT(Nsuit) CHARACTER*8 MPOLI(NbPoli) CHARACTER*12 ICHA CHARACTER*4 MCOSC(NbCosc) CHARACTER*12 MPOTR(NbPotr) CHARACTER*8 CHARIN,CHARRE,MDIINC,MDIDUA CHARACTER*8 MTYP CHARACTER*(LOCHAI) CHA c CHARACTER*16 MODERI(5) LOGICAL LOG,ZEXIS,ZOPEN DATA MCLE / 'IMPR','DIME','ELEM','SORT','TRAC','DONN','ECHO', $ 'ERRE','LECT','EPSI','IMPI','MODE','CADR','COUL', $ 'NIVE','NGMA','SAUV','REST','ISOV','OMBR','NBP ', $ 'VERI','ZERO','ACQU','----','PLAC','LANG','NORM', $ 'RESO','FTRA','OEIL','ERMA','ASSI','EPTR','NAVI', $ 'PARA','SURV','POLI','COSC','POTR','DEBU','LOCA', $ 'DENS','INCO','POIN','PETI','GRAN','PREC','ATTE', $ 'SOUC'/ DATA MFO / 'TRID','FOUR','AXIS','PLAN','UNID','FREQ' / DATA MSFO / 'DEFO','CONT','GENE' / DATA NOHR / 'NOHA' / DATA OptUnid / 'PLAN','AXIS','SPHE' / DATA Mode1D / 'DYDZ','DYCZ','CYDZ','CYCZ','GYDZ','GYCZ','DYGZ', . 'CYGZ','GYGZ','AXDZ','AXCZ','AXGZ' / DATA MGR / 'BENS','X ','IBM ','GKS ','PHIG','OPEN','PS ', . 'MIF ','PSC ' / DATA MISO / 'LIGN','SURF','SULI' / DATA MRESOL / 'DIRE','ITER' / DATA ERCTRL / 'FATA','NORM','IGNO','CONT' / DATA FORMAT / 'FORM','TAIL','XDR ','BINA' / DATA NAUTO / 'AUTO','ANNU' / c DATA MODERI /'LINEAIRE ','QUADRATIQUE ', c $ 'TRUESDELL ','JAUMANN ','UTILISATEUR '/ DATA MPOLI / '8_BY_13 ','9_BY_15 ','TIMES_10','TIMES_24', $ 'HELV_10 ','HELV_12 ','HELV_18 ' / DATA MCOSC / 'NOIR','BLAN','JAUN' / DATA MPOTR / 'COURIER_12 ','COURIERB_12 ','HELVETICA_12' $ ,'TIMES_12 ','COURIER_14 ','COURIERB_14 ','HELVETICA_14' $ ,'TIMES_14 ','COURIER_16 ','COURIERB_16 ','HELVETICA_16' $ ,'TIMES_16 ','COURIER_18 ','COURIERB_18 ','HELVETICA_18' $ ,'TIMES_18 '/ DATA MSUIT / 'NOUV','SUIT' / IF ((ICHOI.NE.1).AND.(ICHOI.NE.2)) THEN RETURN ENDIF i=0 1 CONTINUE IF (IRET.EQ.0) RETURN IF (MTYP.NE.'MOT') THEN C 39 2 C On ne veut pas d'objet de type %m1:8 MOTERR(1:8)=MTYP RETURN ENDIF Csg CALL MESLIR(-218) IF (IERR.NE.0) RETURN C Branchement vers les differentes options C ------------------------------------------ GOTO (101,102,103,104,105,106,107,108,109,110,111,112,113,114, $ 115,116,117,118,119,120,121,122,123,124,125,126,127,128, $ 129,130,131,132,133,134,135,136,137,138,139,140,141,142, $ 143,144,145,146,147,148,149,150),i return C --------------- C Option 'IMPR' C --------------- 101 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IRetou.NE.0) THEN IF (IERR.NE.0) RETURN IOIMP=IRET GOTO 1 ENDIF IF (IERR.NE.0) RETURN IUNIT=IOIMP GOTO 1211 C --------------- C Option 'DIME' : dimension de l'espace (IDIM) C --------------- 102 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IRET.EQ.IDIM) GOTO 1 IF (IERR.NE.0) RETURN IF (IDIM.EQ.0) THEN IDIM=IRET IF (IDIM.EQ.1) THEN IFOMOD=3 IFOUR=3 NIFOUR=0 ELSE IF (IDIM.EQ.3) THEN IFOMOD=2 IFOUR=2 NIFOUR=0 ENDIF GOTO 1 ENDIF C Passage en dimension 3 IF (IRET.EQ.3) THEN IFOMOD=2 IFOUR=2 NIFOUR=0 C Passage en dimension 2, on met les options de calcul a PLAN DEFO. ELSE IF (IRET.EQ.2) THEN IF (IDIM.EQ.3) THEN IF (IFOMOD.EQ.2) IFOMOD=-1 IF (IFOUR.EQ.2) IFOUR=-1 ELSE IF (IDIM.EQ.1) THEN IFOMOD=-1 IFOUR=-1 NIFOUR=0 ENDIF C Passage en dimension 1, on met les options de calcul a UNIDPLANDYDZ. ELSE IF (IRET.EQ.1) THEN IF (IFOMOD.NE.3.AND.IFOMOD.NE.4.AND.IFOMOD.NE.5) THEN IFOMOD=3 IFOUR=3 NIFOUR=0 ENDIF ENDIF C Transfert des coordonnees des points dans nouveau MCOORD idimp1=IDIM+1 iretp1=IRET+1 segact mcoord*mod LCoor=NBPTS*iretp1 SEGINI,MCOORa INF=MIN(IDIM,IRET) DO IP=1,NBPTS IRef1=(IP-1)*iretp1 IRef =(IP-1)*idimp1 DO j=1,INF XCoora(IRef1+j)=XCOOR(IRef+j) ENDDO XCoora(IRef1+iretp1)=XCOOR(IRef+idimp1) ENDDO IDIM=IRET SEGADJ,MCOORD DO j=1,XCOOR(/1) XCOOR(j)=XCOORa(j) ENDDO SEGSUP,MCOORa GOTO 1 C --------------- C Option 'ELEM' C --------------- 103 IF (ICHOI.EQ.2) THEN IF (ILCOUR.EQ.0) THEN ELSE ENDIF RETURN ENDIF IF (IERR.NE.0) RETURN ILCOUR=IRET C* ICHA=NOMS(ILCOUR) GOTO 1 C --------------- C Option 'SORT' C --------------- 104 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IRetou.NE.0) THEN IF (IERR.NE.0) RETURN IOPER=IRET GOTO 1 ENDIF IF (IERR.NE.0) RETURN IUNIT=IOPER GOTO 1211 C --------------- C Option 'TRAC' C --------------- 105 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IOGRA=ij GOTO 1 C --------------- C Option 'DONN' C --------------- 106 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IRetou.NE.0) THEN IF (IERR.NE.0) RETURN IOLEC=IRET CALL GINT2 GOTO 1 ENDIF IF (IERR.NE.0) RETURN C On impose IOLEC=3 pour eviter probleme avec lecture terminal IOLEC=3 CALL GINT2 IUNIT=IOLEC GOTO 1201 C --------------- C Option 'ECHO' C --------------- 107 CONTINUE IF (ICHOI.EQ.2) THEN RETURN ENDIF INTERR(1)=iret IF (IERR.NE.0) RETURN IECHO=IRET GOTO 1 C --------------- C Option 'ERRE' C --------------- 108 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IERPER=IRET GOTO 1 C --------------- C Option 'LECT' C --------------- 109 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IRetou.NE.0) THEN IF (IERR.NE.0) RETURN IOCAR=IRET GOTO 1 ENDIF IF (IERR.NE.0) RETURN IUNIT=IOCAR GOTO 1201 C --------------- C Option 'EPSI' (ex-'DERI') --> obsolete C --------------- c 110 IF (ICHOI.EQ.2) THEN c CALL ECRCHA(moderi(MEPSIL)) c RETURN c ENDIF c CALL MESLIR(-204) c CALL LIRMOT(MODERI,5,iret,1) c IF (IERR.NE.0) RETURN c MEPSIL=IRET c GO TO 1 110 CONTINUE IF(ICHOI.EQ.2) THEN MOTERR(1:40)='VALE EPSI ;' ELSE MOTERR(1:40)='OPTI EPSI ... ;' ENDIF RETURN C --------------- C Option 'IMPI' C --------------- 111 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IIMPI=IRET GOTO 1 C --------------- C Option 'MODE' C --------------- 112 IF (ICHOI.EQ.2) THEN c on a appele VALE 'MODE' c souhaite t'on FOUR ou le numero d'harmonique ? INH=0 IF (IFOMOD.EQ.1) THEN ENDIF IF (IFOMOD.EQ.-1) THEN c - PLAN ICHA(1:4)=MFO(4) ICHA(5:8)=MSFO(ABS(IFOUR)) ELSE IF (IFOMOD.EQ.3) THEN c - 1D PLAN ICHA(1:4)=MFO(5) ICHA(5:8)=OptUnid(1) ICHA(9:12)=Mode1D(IFOUR-2) ELSE IF (IFOMOD.EQ.4) THEN c - 1D AXIS ICHA(1:4)=MFO(5) ICHA(5:8)=OptUnid(2) ICHA(9:12)=Mode1D(IFOUR-2) ELSE IF (IFOMOD.EQ.5) THEN c - 1D SPHE ICHA(1:4)=MFO(5) ICHA(5:8)=OptUnid(3) ICHA(9:12)=' ' ELSE IF (IFOMOD.EQ.6) THEN c - FREQuentiel ELSE if (INH.eq.1) then c - numero d'harmonique de Fourier NHH=iohr if(NIFOUR.eq.NHH) then ICHA(1:4)='NOHA' else endif else c - autres cas (TRID FOUR AXIS PLAN) endif ENDIF RETURN ENDIF c on a appele OPTI 'MODE' IF ((IERR.NE.0).OR.(IK.EQ.0)) RETURN IF (IK.EQ.1) THEN c - OPTI 'MODE' 'TRID' IRET=2 ELSE IF (IK.EQ.2) THEN c - OPTI 'MODE' 'FOUR' IRET=1 ELSE IF (IK.EQ.3) THEN c - OPTI 'MODE' 'AXIS' IRET=0 ELSE IF (IK.EQ.4) THEN c - OPTI 'MODE' 'PLAN' IRET=-1 ELSE IF (IK.EQ.5) THEN c - OPTI 'MODE' 'UNID' IRET=3 ELSE IF (IK.EQ.6) THEN c - OPTI 'MODE' 'FREQ' IRET=6 ENDIF C Possibilite d'imprimer une erreur si le MODE de calcul n'est pas C compatible avec la dimension. Debranche pour l'instant. C** IF ( (IDIM.EQ.2.AND.IRET.NE.-1.AND.IRET.NE.0.AND.IRET.NE.1) C** . .OR.(IDIM.EQ.1.AND.IRET.NE.3).OR.(IDIM.EQ.3.AND.IRET.NE.2) ) THEN C** MOTERR(1:4)=MFO(IK) C** INTERR(1)=IDIM C** CALL ERREUR(970) C** RETURN C** ENDIF IFOMOD=IRET if (iret.ne.6) IFOUR=IRET NIFOUR=0 IF (IRET.EQ.-1) THEN IF (IKS.EQ.0) THEN IFOUR=-1 ELSE IF (IKS.EQ.1) THEN IFOUR=-1 ELSE IF (IKS.EQ.2) THEN IFOUR=-2 ELSE IF (IKS.EQ.3) THEN IFOUR=-3 ENDIF ELSE IF (IRET.EQ.1) THEN IF (ICOND.EQ.0) THEN IF (NHH.EQ.1) THEN nhh=iohr ELSE ENDIF ENDIF NIFOUR=NHH ELSE IF (IRET.EQ.3) THEN IF (IKS.EQ.0) THEN IFOMOD=3 IFOUR=3 ELSE IF (IKS.EQ.1) THEN IFOMOD=3 IF (i.EQ.0) i=1 IFOUR=2+i ELSE IF (IKS.EQ.2) THEN IFOMOD=4 IF (i.EQ.0) i=1 IFOUR=11+i ELSE IF (IKS.EQ.3) THEN IFOMOD=5 IFOUR=15 ENDIF ENDIF GOTO 1 C --------------- C Option 'CADR' C --------------- 113 IF (ICHOI.EQ.2) THEN XRET=DIOCAD RETURN ENDIF IF (IERR.NE.0) RETURN DIOCAD=XRET GOTO 1 C --------------- C Option 'COUL' C --------------- 114 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IDCOUL=IRET-1 ICHA=NCOUL(IDCOUL) GOTO 1 C --------------- C Option 'NIVE' C --------------- 115 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN INTERR(1)=IRET IF (IERR.NE.0) RETURN C IONIVE actuellement de 25 IONIVE=25 IF (IRET.GT.IONIVE) IRET = IONIVE IONIVE=IRET GOTO 1 C --------------- C Option 'NGMA' C --------------- 116 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN INTERR(1)=IRET NGMAXY=IRET GOTO 1 C --------------- C Option 'SAUV' C --------------- 117 IF (ICHOI.EQ.2) THEN RETURN ENDIF IFORM=2 IPREFI=0 DIMATT=0.D0 IREFOR=0 ISAFOR=0 IPSAUV=0 IF (ICHOr.EQ.1) THEN IFORM=1 ISAFOR=1 GOTO 1171 ELSE IF (ICHOr.EQ.2) THEN IF (IERR.NE.0) RETURN DIMFIC=XRET GOTO 1171 ELSE IF (ICHOr.EQ.3) THEN IFORM=2 GOTO 1171 ELSE IF (ICHOr.EQ.4) THEN IFORM=0 GOTO 1171 ENDIF IF (IRetou.NE.0) THEN IF (IERR.NE.0) RETURN IOSAU=IRET IPSAUV=0 GOTO 1 ENDIF IF (IERR.NE.0) RETURN * la longueur du fichier maximale est LOCHAI moins la longueur("_iiii") * ou iiii designe le nombre maximal de fichiers de sauvegarde possible * A ce jour la limite est 9999 fichiers. LONG("_9999") = 5 IF (lchai.GT.(LOCHAI-5)) THEN write(ioimp,*) 'SAUV File Name is too LONG' RETURN ENDIF NOMSAU = ' ' NOMSAU(1:lchai)=cha(1:lchai) IUNIT=IOSAU IPSAUV=0 lcha=lchai * destruction des eventuels fichiers existants open(file=NOMSAU(1:lcha),status='OLD',iostat=istat,unit=iunit) if (istat.eq.0) then close(iunit,status='DELETE',iostat=istat) if (istat.ne.0) then endif else goto 1173 endif ll=lcha+1 NOMSAU(ll:ll+1)='_1' ll=ll+1 do isuit=1,10000 if (isuit.lt.10) then write (NOMSAU(ll:ll),fmt='(I1)') isuit lcha=ll elseif (isuit.lt.100) then write (NOMSAU(ll:ll+1),fmt='(I2)') isuit lcha=ll+1 elseif (isuit.lt.1000) then write (NOMSAU(ll:ll+2),fmt='(I3)') isuit lcha=ll+2 elseif (isuit.lt.10000) then write (NOMSAU(ll:ll+3),fmt='(I4)') isuit lcha=ll+3 endif open(file=NOMSAU(1:lcha),status='OLD',iostat=istat,unit=iunit) if (istat.eq.0) then close(iunit,status='DELETE',iostat=istat) else goto 1173 endif enddo 1173 continue NOMSAU(lchai+1:lochai) = ' ' IF (IFORM.EQ.1) GOTO 3201 IF (IFORM.EQ.2) GOTO 1203 GOTO 1202 C --------------- C Option 'REST' C --------------- 118 CONTINUE IF (ICHOI.EQ.2) THEN RETURN ENDIF IFICLE=0 IFORM=0 IREFOR=0 IF (IERR.NE.0) RETURN IF (ICHOr.EQ.1) THEN IREFOR=1 IFORM=1 GOTO 1172 ELSE IF (ICHOr.EQ.2) THEN GOTO 1172 ELSE IF (ICHOr.EQ.3) THEN IFORM=-2 GOTO 1172 ELSEIF (ICHOr.EQ.4) then IFORM=0 GOTO 1172 ENDIF IF (IRetou.NE.0) THEN IF (IERR.NE.0) RETURN IORES=IRET GOTO 1 ENDIF IF (IERR.NE.0) RETURN IUNIT=IORES NOMRES=' ' NOMRES(1:L)=CHA(1:L) C test sur le type de fichier CLOSE(UNIT=IUNIT,iostat=istat) IFORM=1 IREFOR=1 IFIOLD=599 OPEN(UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L), . IOSTAT=IOS,ERR=2000,FORM='FORMATTED') IF (IOS.EQ.0) THEN iretou=0 iquoi=0 C WRITE(IOIMP,*) 'apres lfcdes-1 ',iores,iquoi,iretou,iform IF (IOS.EQ.0.AND.(IQUOI.GT.0.AND.IQUOI.LT.10).AND. . IRETOU.EQ.0) THEN GOTO 3250 ENDIF ENDIF IFORM=0 IREFOR=0 CLOSE(UNIT=IUNIT,iostat=istat) OPEN(UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L), . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED') IF (IOS.EQ.0) THEN iretou=0 iquoi=0 C WRITE (IOIMP,*) 'apres lfcdes-2 ',iores,iquoi,iretou,iform IF (IOS.EQ.0.AND.(IQUOI.GT.0.AND.IQUOI.LT.10).AND. . IRETOU.EQ.0) THEN GOTO 3250 ENDIF ENDIF IFORM=2 IF (ixdrr.NE.0) IOS=IXDRCLOSE(ixdrr,.TRUE.) ios=initxdr(CHA(1:L),'r',.TRUE.) IF (ios.lt.0) GOTO 2000 ixdrr=ios ios=IXDRSTRING(ixdrr,ICHA(1:10)) C WRITE(IOIMP,*) ' option rest ',icha(1:10),ios IF (IOS.GE.0.AND.ICHA(1:10).EQ.'CASTEM XDR') THEN C WRITE (IOIMP,*) ' on va direct en 1 ' IFORM=2 iformx=IFORM GOTO 1 ENDIF IFIOLD=424 GOTO 2000 3250 iformx=IFORM IF (IFORM.EQ.1) GOTO 2201 IF (IFORM.EQ.-2) GOTO 2203 GOTO 2202 C --------------- C Option 'ISOV' C --------------- 119 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN ISOTYP=IRET-1 ICHA=MISO(IRET) GOTO 1 C --------------- C Option 'OMBRE' C --------------- 120 IF (ICHOI.EQ.2) THEN LOG=.FALSE. IF (IOMBRE.EQ.1) LOG =.TRUE. RETURN ENDIF IF (IERR.NE.0) RETURN IF (LOG) THEN IOMBRE=1 ELSE IOMBRE=0 ENDIF GOTO 1 C --------------- C Option 'NBP ' C --------------- 121 IF (ICHOI.EQ.2) THEN IRET=mcoord RETURN ENDIF IF (IERR.NE.0) RETURN NBPTS=MAX(0,IRET) SEGADJ MCOORD GOTO 1 C --------------- C Option 'VERI' C --------------- 122 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IOSPI=IRET GOTO 1 C --------------- C Option 'ZERO' C --------------- 123 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IZROSF=MAX(1,IRET) GOTO 1 C --------------- C Option 'ACQU' C --------------- 124 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IRetou.NE.0) THEN IOACQ=IRET GOTO 1 ENDIF IF (IERR.NE.0) RETURN IUNIT=IOACQ GOTO 1201 C --------------- C Option '----' C --------------- 125 CONTINUE GOTO 1 C --------------- C Option 'PLAC' C --------------- 126 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN C Pourquoi mettre IPLLB en positif ? C N'etant pas sur de la valeur de IPLTOT il faut pouvoir le mettre C en negatif tres grand (voir T.C.) C IRET=MAX(1,IRET) IPLLB=IRET GOTO 1 C --------------- C Option 'LANG' C --------------- 127 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN LANGUE=ICHA GOTO 1 C --------------- C Option 'NORM' C --------------- 128 IF (ICHOI.EQ.2) THEN RETURN ENDIF C On commence par une remise a plat : tout a 0 . C On devrait liberer la place occupee eventuellement par ces segments, C mais comme on a fait SAVSEG avant. Il faudrait aussi les enlever de C la liste des non-effacables, mais comment ? NORINC=0 NORVAL=0 NORIND=0 NORVAD=0 C Lecture des mts cles eventuels IF (i.EQ.2) GOTO 1 C Normalisation automatique IF (i.EQ.1) THEN NORINC=-1 GOTO 1 ENDIF IF (IERR.NE.0) THEN NORINC=0 NORVAL=0 GOTO 1 ENDIF MLREEL=NORVAL MLMOTS=NORINC SEGACT MLREEL,MLMOTS SEGDES MLREEL,MLMOTS IF (NRE.NE.NMO) THEN NORINC=0 NORVAL=0 RETURN ENDIF C Verification s'il n'y a pas de 'LX' la dedans C La taille de mots doit etre OK si le LISTMOTS est cree par MOTS SEGACT MLMOTS DO i=1,NMO NORINC=0 NORVAL=0 SEGDES MLMOTS RETURN ENDIF ENDDO SEGDES MLMOTS IF (IRetou.EQ.0) GOTO 1 IF (IERR.NE.0) THEN NORIND=0 NORVAD=0 ENDIF MLREEL=NORVAD MLMOTS=NORIND SEGACT MLREEL,MLMOTS SEGDES MLREEL,MLMOTS IF (NRE.NE.NMO) THEN NORIND=0 NORVAD=0 RETURN ENDIF GOTO 1 C --------------- C Option 'RESO' C --------------- 129 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN NUCROU=IRetou-1 GOTO 1 C --------------- C Option 'FTRA' C --------------- 130 IF (ICHOI.EQ.2) THEN IF (iogra.ge.7.and.iogra.le.9) THEN IF (IOGRA.EQ.8) THEN ELSE ENDIF RETURN ELSE RETURN ENDIF ENDIF IF (iogra.ge.7.and.iogra.le.9) THEN c ZINIPS=.TRUE. IF (IERR.NE.0) RETURN IF (IOGRA.EQ.8) THEN ELSE ENDIF IUNIT=IUPS GOTO 1211 ELSE RETURN ENDIF GOTO 1 C --------------- C Option 'OEIL' C --------------- 131 IF (ICHOI.EQ.2) THEN IF (IOEIL.NE.0) THEN ELSE C 18 2 Point non trouve ENDIF RETURN ENDIF IF (IERR.NE.0) RETURN GOTO 1 C --------------- C Option 'ERMA' C --------------- 132 IF (ICHOI.EQ.2) THEN RETURN ELSE RETURN ENDIF GOTO 1 C --------------- C Option 'ASSI' C --------------- 133 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IF (IRetou.NE.0) THEN if (ierr.eq.0.and.nbesc.eq.0) then NBESCR=IRET endif ENDIF GOTO 1 C --------------- C Option 'EPTR' C --------------- 134 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IRetou.NE.0) THEN IEPTR=IRET ENDIF GOTO 1 C --------------- C Option 'NAVI' C --------------- 135 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN ILNAVI=IRET ICHA=NNAVI(ILNAVI) GOTO 1 C C option PARA C 136 IF( ICHOI.EQ.2) THEN if(lupara.eq.1) then else endif RETURN ELSE IF (Ierr.NE.0) return LUPARA=0 if(log) lupara=1 ENDIF GO TO 1 C C option SURV C 137 CONTINUE IF (ICHOI.EQ.2) THEN MSURV=MSURVE RETURN ENDIF if(ierr.ne.0) return CALL OOOSUR(MSURv) msurve=msurv GO TO 1 C --------------- C Option 'POLI' C --------------- 138 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IOPOLI=ij GOTO 1 C --------------- C Option 'COSC' C --------------- 139 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN ICOSC=ij GOTO 1 C --------------- C Option 'POTR' C --------------- 140 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN IOPOTR=ij GOTO 1 C ---------------- C option debug C ---------------- 141 IF (ICHOI.EQ.2) THEN return ENDIF IF(IERR.NE.0) RETURN GO TO 1 C ---------------- C option 'LOCA' C ---------------- 142 IF (ICHOI.EQ.2) THEN RETURN ENDIF IF (IERR.NE.0) RETURN GO TO 1 C ---------------- C option 'DENS' C ---------------- 143 IF (ICHOI.EQ.2) THEN XRET=DENSIT RETURN ENDIF IF (IERR.NE.0) RETURN C sg: comme dans subden.eso on met ABS(XRET) DENSIT=ABS(XRET) GO TO 1 C ---------------- C option 'INCO' C ---------------- 144 IF (ICHOI.EQ.2) THEN JGN=4 JGM=LNOMDD SEGINI MLMOT1 DO IGM=1,JGM ENDDO SEGDES MLMOT1 JGN=4 JGM=LNOMDU SEGINI MLMOT2 DO IGM=1,JGM ENDDO SEGDES MLMOT2 RETURN ENDIF IF (IERR.NE.0) RETURN IF (IRET.NE.0) THEN IF (IERR.NE.0) RETURN SEGACT MLMOT1,MLMOT2 ELSE JGN=LEN(CHARIN) JGM=1 SEGINI MLMOT1,MLMOT2 IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN ENDIF Csg : copi\E9 sur modeli.eso pour le mod\E8le de diffusion IF (NBM1.LE.0) THEN C 1027 2 C Une donn\E9e de type %M1:8 est vide MOTERR(1:8)='LISTMOTS' RETURN ENDIF IF (NBM1.NE.NBM2) THEN C 854 2 C Les listes de mots doivent etre de meme longueur. RETURN ENDIF DO IBM=1,NBM1 MDIINC=' ' MDIDUA=' ' CHARIN=' ' CHARRE=' ' C Tronquer les mots \E0 2 caract\E8res pour pouvoir nommer les gradients ? C (,X...) cbp IRETMA = 2 IRETMA = 4 IF (IRETI.GT.IRETMA) THEN INTERR(1) = IRETMA MOTERR(1:8) = CHARIN(1:IRETI) ENDIF IRETI=MIN(IRETI,IRETMA) MDIINC(1:IRETI)=CHARIN(1:IRETI) C Pas besoin de tronquer pour la duale cbp IRETMA = IRETMA + 2 IRETMA = 4 IF (IRETE.GT.IRETMA) THEN INTERR(1) = IRETMA MOTERR(1:8) = CHARRE(1:IRETE) ENDIF IRETE=MIN(IRETE,IRETMA) MDIDUA(1:IRETE)=CHARRE(1:IRETE) c* Verification des noms de primale et duale lues IF (IERR.NE.0) RETURN ENDDO if(iimpi.ge.333) then write(ioimp,*) 'DDL PRIMAL=',(NOMDD(iou),iou=1,LNOMDD) write(ioimp,*) 'DDL DUAL =',(NOMDU(iou),iou=1,LNOMDU) endif SEGDES MLMOT1,MLMOT2 GO TO 1 C Recuperation du pointeur 145 if (ichoi.eq.2) then call cpoint return endif goto 1 146 if (ichoi .eq. 2) then C Recuperation de XPETIT dans CCOPTIO return elseif(ichoi.eq.1) then C Surcharge de XPETIT dans CCOPTIO IF (IERR .NE. 0) RETURN XVAL = ABS(XVAL) IF (XVAL/REAL(10.D0) .LT. XVAL) THEN XPETIT = XVAL ELSE REAERR(1)=XVAL RETURN ENDIF else RETURN endif goto 1 147 if (ichoi .eq. 2) then C Recuperation de XGRAND dans CCOPTIO return elseif(ichoi .eq. 1) then C Surcharge de XGRAND dans CCOPTIO IF (IERR .NE. 0) RETURN XVAL = ABS(XVAL) IF (XVAL*REAL(10.D0) .GT. XVAL) THEN XGRAND = XVAL ELSE REAERR(1)=XVAL RETURN ENDIF else RETURN endif goto 1 148 if (ichoi .eq. 2) then C Recuperation de XZPREC dans CCOPTIO return elseif(ichoi .eq. 1) then C Surcharge de XZPREC dans CCOPTIO IF (IERR .NE. 0) RETURN XVAL = ABS(XVAL) XTEST= REAL(1.D0) + XVAL IF (XTEST .LE. REAL(1.D0)) THEN REAERR(1)=XVAL RETURN ELSE XZPREC = XVAL ENDIF else RETURN endif goto 1 C C option ATTE C 149 CONTINUE IF (ICHOI.EQ.2) THEN MATTE=MATTEN RETURN ENDIF if(ierr.ne.0) return CALL OOOATE(MATTE) MATTEN=MATTE GO TO 1 C C option SOUC C 150 CONTINUE IF (ICHOI.EQ.2) THEN ith=max(1,oothrd) mbso = imesou(ith) RETURN ENDIF GO TO 1 C ----------------- C Fin des Options C ----------------- C Ouverture de fichier C ---------------------- C Option 'SGBD' C 1200 CONTINUE IF (IERR.NE.0) RETURN CLOSE (UNIT=IUNIT,iostat=istat) IFIOLD=424 OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=CHA(1:L), . IOSTAT=IOS,ERR=2000) IF (IOS.NE.0) GOTO 2000 GOTO 1 C Options 'DONN','LECT','ACQU' C Verification de l'existence du fichier lors de son ouverture 1201 IF (IERR.NE.0) RETURN CLOSE (UNIT=IUNIT,iostat=istat) IFIOLD=599 OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L), . IOSTAT=IOS,ERR=2000,FORM='FORMATTED') IF (IOS.NE.0) GOTO 2000 GOTO 1 C Options 'IMPR','FTRA','SORT' 1211 IF (IERR.NE.0) RETURN isuit=0 c rem : option SUIT ok pour IMPR et FTRA, mais peut ne pas fonction- c -ner pour SORT (ex. SORT 'EXCE' le referme et le reouvre) IFIOLD=424 INQUIRE(FILE=CHA(1:L),EXIST=ZEXIS) c -NOUVeau (par defaut) IF ( isuit.le.1 .OR. .not.ZEXIS ) THEN IF (IUNIT.eq.97.OR.IUNIT.eq.24) ZINIPS=.TRUE. CLOSE (UNIT=IUNIT,iostat=istat) OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=CHA(1:L), . IOSTAT=IOS,ERR=2000,FORM='FORMATTED') c -SUITe ELSE c est-il ouvert ? c CLOSE (UNIT=IUNIT,iostat=istat) INQUIRE(UNIT=IUNIT,OPENED=ZOPEN) IF (IUNIT.eq.97.OR.IUNIT.eq.24) ZINIPS=.FALSE. OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L), . ACCESS = 'SEQUENTIAL',IOSTAT=IOS,ERR=2000,FORM='FORMATTED') c rem : pour utiliser SUIT entre deux appels a cast3m, il faudrait c recuperer le bon ipag de strini.eso et l'incrementer... ENDIF IF (IOS.NE.0) GOTO 2000 GOTO 1 C Option 'SAUV' 'FORMAT' 3201 IF (IERR.NE.0) RETURN CLOSE (UNIT=IUNIT,iostat=istat) if (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. ) ixdrw=0 iformx=iform IFIOLD=424 OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=NOMSAU(1:LCHAI), & IOSTAT=IOS,ERR=2000,FORM='FORMATTED') IF (IOS.NE.0) GOTO 2000 GOTO 1 C Option 'REST' 'FORMAT' 2201 IF (IERR.NE.0) RETURN CLOSE (UNIT=IUNIT,iostat=istat) if (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. ) ixdrr=0 iformx=iform IFIOLD=599 OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L), . IOSTAT=IOS,ERR=2000,FORM='FORMATTED') IF (IOS.NE.0) GOTO 2000 GOTO 1 C Option 'SAUV' 'BINA' (format binaire) 1202 IF (IERR.NE.0) RETURN C WRITE(IOIMP,*) ' sauv en binaire' CLOSE (UNIT=IUNIT,iostat=istat) if (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. ) iformx=iform ixdrw=0 IFIOLD=424 OPEN (UNIT=IUNIT,STATUS='UNKNOWN',FILE=NOMSAU(1:LCHAI), . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED') IF (IOS.NE.0) GOTO 2000 GOTO 1 C Options 'REST' ('BINA') (format binaire) 2202 IF (IERR.NE.0) RETURN C WRITE(IOIMP,*) ' rest en binaire' CLOSE (UNIT=IUNIT,iostat=istat) if (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. ) iformx=iform ixdrr=0 IFIOLD=599 OPEN (UNIT=IUNIT,STATUS='OLD',FILE=CHA(1:L), . IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED') IF (IOS.NE.0) GOTO 2000 GOTO 1 C Options 'SAUV' ('XDR') (format XDR) 1203 IF (IERR.NE.0) RETURN IF (ixdrw.NE.0) ios=IXDRCLOSE( ixdrw,.TRUE. ) ixdrw=0 IFIOLD=424 IF (iform.GT.0) THEN ios=initxdr(NOMSAU(1:L),'w',.TRUE.) if (ios.LT.0) GOTO 2000 ixdrw=ios ICHA(1:10)='CASTEM XDR' ios=IXDRSTRING( ixdrw,ICHA(1:10)) ENDIF IF (iform.LT.0) THEN ios=initxdr(CHA(1:L),'r',.TRUE.) ixdrw=ios ENDIF iform=2 iformx=iform IF (IOS.LT.0) GOTO 2000 GOTO 1 C Options 'REST' (format XDR) 2203 IF (IERR.NE.0) RETURN IF (ixdrr.NE.0) ios=IXDRCLOSE( ixdrr,.TRUE. ) ixdrr=0 IFIOLD=424 IF (iform.GT.0) THEN ios=initxdr(CHA(1:L),'w',.TRUE.) if (ios.LT.0) GOTO 2000 ixdrr=ios ICHA(1:10)='CASTEM XDR' ios=IXDRSTRING( ixdrr,ICHA(1:10)) ENDIF IF (iform.LT.0) THEN IFIOLD=599 ios=initxdr(CHA(1:L),'r',.TRUE.) ixdrr=ios ENDIF iform=2 iformx=iform IF (IOS.LT.0) GOTO 2000 GOTO 1 C Traitement des erreurs d'ouverture des fichiers MOTERR=CHA(1:L) INTERR(1)=IOS RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales