lekcof
C LEKCOF SOURCE PV 22/04/22 21:15:10 11344 & MCHPOI,MPOVAL,NPT,NC,IK1,IRET) C---------------------------------------------------------------------- C Ce sous programme lit le NUième coefficient d'un operateur, stocké C à l'indice ARGnu de la table KIZX de pointeur MTABX associée à C l'opérateur en cours de traitement. C Le coefficient est de type ENTIER, FLOTTANT, POINT, CHPOINT ou MOT. C---------------------------------------------------------------------- C Quel que soit le type de l'objet récupéré, l'objet retourné est un C CHPOINT. Ce CHPO s'appuie sur un point bidon dans le cas ou la donnée C est un ENTIER, un FLOTTANT ou un POINT. C---------------------------------------------------------------------- C HISTORIQUE : 20/09/00 : Les segments MPOVAL sont retournes actif en C lecture seule. C HISTORIQUE : C C C--------------------------- C Paramètres Entrée/Sortie : C--------------------------- C C E/ TITRE : Commentaires pour les messages d'erreur (à supprimer) C E/ MTABX : Pointeur de la table contenant le coefficient C E/ KINC : Pointeur de la table INCO dans laquelle on va chercher C les valeurs des indices lorsque ceux-ci sont des MOTS. C E/ NU : Rang du coefficient a aller chercher (ENTIER) C E/ IXV(*) : Vecteur d'entier indiquant le type de l'objet cherché C IXV(1) = 0 : Objet CHPO non autorisé C IXV(1) > 0 : spg du CHPO si une composante (SCAL) C IXV(1) < 0 : spg du CHPO si IDIM composante (VECT) C IXV(2) = 0 : Objet FLOTTANT ou ENTIER non autorisé in C IXV(2) = 1 : Objet FLOTTANT ou ENTIER autorisé C IXV(3) = 0 : Objet POINT non autorisé C IXV(3) = 1 : Objet POINT autorisé C IXV(i),i>3 : Autres spg pour CHPO (similaire à IXV(1)) C cf IRET C /S MCHPOI : Pointeur du CHPO contenant le coef C /S MPOVAL : Pointeur sur le segment du CHPO contenant les coef C /S NPT : Nombre de point du spg du CHPO C /S NC : Nombre de composante du CHPO C (on autorise 1 ou IDIM) C /S IK1 : Indicateur retournant le type de l'objet trouvé C 0=CHPO 1=FLOTTANT 2=POINT >3=CHPO de spg IXV(ik1) C Dans le cas ou IK1=1 ou 2 la donnée est transformée C en CHPO et stocké à l'indice ARGSnu de la table MTABX C E/S IRET : En entrée, =0 tentative de lecture seule C : En entrée, =1 Si l'objet n existe pas on le cree C si CHPOIN autorise et on le met dans la table inco C Dans ce cas en sortie IRET=2 (ceci ne marche C que si dime de IXV<=3 C : En entrée, si supérieur à 3 dimension de IXV, C En sortie, indicateur de succès (0=problèmes, 1=OK , C 2 si creation aveugle) C---------------------------------------------------------------------- C Dans le cas ENTIER, FLOTTANT ou POINT, on construit un CHPOINT C que l'on stocke à l'indice ARGSnu de la table MTABX. C Dans le cas MOT, on récupère la donnée se trouvant à l'indice MOT C de la table INCO que l'on transforme éventuellement en CHPOINT comme C precedemment. C---------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMCHPOI -INC SMELEME -INC SMTABLE POINTEUR igeom.meleme POINTEUR MTABX.MTABLE,KINC.MTABLE CHARACTER*(*) TITRE CHARACTER*8 TYPE,TYPC,NOM,MARG,NARG,TYPI LOGICAL LOGI REAL*8 XVAL(3) DIMENSION IXV(*) C C- Récupération du TYPE du NUième argument de l'opérateur C C write(6,*)' DEBUT LEKCOF' IXV1 = IRET ISG1 = 1 IRET = 1 IF (NU.LE.0 .OR. NU.GE.100) THEN INTERR(1) = NU INTERR(2) = 1 INTERR(3) = 99 IRET = 0 RETURN ENDIF IF (NU.LE.9) THEN WRITE(NARG,FMT='(A3,I1)')'ARG',Nu WRITE(MARG,FMT='(A4,I1)')'ARGS',Nu ELSE WRITE(NARG,FMT='(A3,I2)')'ARG',Nu WRITE(MARG,FMT='(A4,I2)')'ARGS',Nu ENDIF TYPE = ' ' & TYPE ,IENT,XVAL, NOM,LOGI,MCHPOI) C C- Argument de TYPE ENTIER ou FLOTTANT C IF (TYPE.EQ.'FLOTTANT'.OR.TYPE.EQ.'ENTIER') THEN IF (IXV(2).EQ.0) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPE IRET = 0 RETURN ENDIF IF (TYPE.EQ.'ENTIER') XVAL(1)=FLOAT(IENT) C creation d'un champoin NBNN=1 NBELEM=1 NBSOUS=0 NBREF=0 SEGINI MELEME ITYPEL=1 NUM(1,1)=1 SEGDES MELEME NSOUPO=1 NAT=1 N=1 NC=1 SEGINI MCHPOI,MSOUPO,MPOVAL JATTRI(1)=2 IFOPOI=IFOUR MTYPOI=' ' MOCHDE=' ' IPCHP(1)=MSOUPO IPOVAL=MPOVAL NOCOMP(1)='SCAL' SEGDES MCHPOI,MSOUPO C creation d'un champoin fin VPOCHA(1,1)=XVAL(1) IK1 = 1 NPT = 1 NC = 1 C C- Argument de type CHPOINT C ELSEIF (TYPE.EQ.'CHPOINT') THEN IF (IXV(1).EQ.0) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPE IRET = 0 RETURN ENDIF NC=VPOCHA(/2) MELEME = IXV(1) IF (MELEME.LT.0) THEN MELEME= -IXV(1) ISG1 = -1 ENDIF IF (IGEOM.NE.MELEME) THEN * write (6,*) ' lekcof 1-1 ',igeom,meleme segact igeom,meleme igeom0=abs(igeom) endif * write (6,*) ' lekcof 1-2 ',igeom,meleme IF (IGEOM.NE.MELEME) THEN IF (IXV1.GT.3) THEN IXV2 = IXV1 - 3 I = 0 10 CONTINUE I = I + 1 IF(NC.GT.1)THEN IGEOM=-ABS(IGEOM) ISG1=-1 ENDIF IF (IGEOM0.EQ.IXV(I+3)) THEN IK1=I+3 GOTO 20 ENDIF IF (I.LT.IXV2) GOTO 10 ENDIF MOTERR(1: 8) = NARG MOTERR(9:16) = TYPE IRET = 0 RETURN ELSE IK1 = 0 ENDIF 20 CONTINUE NPT = VPOCHA(/1) NC = VPOCHA(/2) IF ( (ISG1.EQ.-1.AND.NC.NE.IDIM) .OR. & (ISG1.EQ.1.AND.NC.NE.1) ) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPE IRET = 0 RETURN ENDIF C C- Argument de type POINT C ELSEIF (TYPE.EQ.'POINT') THEN IF (IXV(3).EQ.0)THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPE IRET = 0 RETURN ENDIF IP = MCHPOI segact mcoord XVAL(1) = XCOOR((IP-1)*(IDIM+1) +1) XVAL(2) = XCOOR((IP-1)*(IDIM+1) +2) IF (IDIM.EQ.3) XVAL(3)=XCOOR((IP-1)*(IDIM+1) +3) IK1 = 2 NPT = 1 C creation d'un champoin NBNN=1 NBELEM=1 NBSOUS=0 NBREF=0 SEGINI MELEME ITYPEL=1 NUM(1,1)=1 SEGDES MELEME NSOUPO=1 NAT=1 N=1 NC=IDIM SEGINI MCHPOI,MSOUPO,MPOVAL JATTRI(1)=2 IFOPOI=IFOUR MTYPOI=' ' MOCHDE=' ' IPCHP(1)=MSOUPO IPOVAL=MPOVAL NOCOMP(1)='SCAL' SEGDES MCHPOI,MSOUPO C creation d'un champoin fin VPOCHA(1,1) = XVAL(1) VPOCHA(1,2) = XVAL(2) IF (IDIM.EQ.3) VPOCHA(1,3)=XVAL(3) C C- Argument de type MOT C- C- TYPC : TYPE de l'objet rangé à l'indice MOT de la table KINC. C- On considère à nouveau les cas ENTIER, FLOTTANT, POINT ou CHPO C- que l'on traite de la meme facon que ci-dessus. C ELSEIF(TYPE.EQ.'MOT')THEN IF (KINC.EQ.0) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = 'INCO ' IRET = 0 RETURN ENDIF TYPC = ' ' IF (TYPC.EQ.'CHPOINT ') THEN IF (IXV(1).EQ.0) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPC IRET = 0 RETURN ENDIF MELEME = IXV(1) IF (MELEME.LT.0) THEN MELEME= -IXV(1) ISG1 = -1 ENDIF NC=VPOCHA(/2) IF (IGEOM.NE.MELEME) THEN * write (6,*) ' lekcof 2-1 ',igeom,meleme segact igeom,meleme igeomo=abs(igeom) * call ecmail(igeom,1) * call ecmail(meleme,1) * segact igeom,meleme endif IF (IGEOM.NE.MELEME) THEN * write (6,*) ' lekcof 2-2 ',igeom,meleme,ixv1 IF (IXV1.GT.3) THEN IXV2 = IXV1 - 3 I = 0 100 CONTINUE I = I + 1 IF(NC.GT.1)THEN IGEOM=-ABS(IGEOM) ISG1=-1 ENDIF IF (IGEOMO.EQ.IXV(I+3)) THEN IK1=I+3 GOTO 110 ENDIF IF (I.LT.IXV2) GOTO 100 ENDIF MOTERR(1: 8) = NARG MOTERR(9:16) = TYPC IRET = 0 RETURN ELSE IK1 = 0 ENDIF 110 CONTINUE NPT = VPOCHA(/1) NC = VPOCHA(/2) IF ( (ISG1.EQ.-1.AND.NC.NE.IDIM) .OR. & (ISG1.EQ.1.AND.NC.NE.1) ) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPC IRET = 0 RETURN ENDIF ELSEIF (TYPC.EQ.'FLOTTANT') THEN IF (IXV(2).EQ.0) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPC IRET = 0 RETURN ENDIF IK1 = 1 C creation d'un champoin NBNN=1 NBELEM=1 NBSOUS=0 NBREF=0 SEGINI MELEME ITYPEL=1 NUM(1,1)=1 SEGDES MELEME NSOUPO=1 NAT=1 N=1 NC=1 SEGINI MCHPOI,MSOUPO,MPOVAL JATTRI(1)=2 IFOPOI=IFOUR MTYPOI=' ' MOCHDE=' ' IPCHP(1)=MSOUPO IPOVAL=MPOVAL NOCOMP(1)='SCAL' SEGDES MCHPOI,MSOUPO C creation d'un champoin fin VPOCHA(1,1) = XVAL(1) NPT = 1 NC = 1 ELSEIF (TYPC.EQ.'ENTIER') THEN IF (IXV(2).EQ.0) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPC IRET = 0 RETURN ENDIF XVAL(1) = FLOAT(IENT) C creation d'un champoin NBNN=1 NBELEM=1 NBSOUS=0 NBREF=0 SEGINI MELEME ITYPEL=1 NUM(1,1)=1 SEGDES MELEME NSOUPO=1 NAT=1 N=1 NC=1 SEGINI MCHPOI,MSOUPO,MPOVAL JATTRI(1)=2 IFOPOI=IFOUR MTYPOI=' ' MOCHDE=' ' IPCHP(1)=MSOUPO IPOVAL=MPOVAL NOCOMP(1)='SCAL' SEGDES MCHPOI,MSOUPO C creation d'un champoin fin VPOCHA(1,1) = XVAL(1) IK1 = 1 NPT = 1 NC = 1 ELSEIF (TYPC.EQ.'POINT') THEN IF (IXV(3).EQ.0) THEN MOTERR(1: 8) = NARG MOTERR(9:16) = TYPC IRET = 0 RETURN ENDIF IP = MCHPOI segact mcoord XVAL(1) = XCOOR((IP-1)*(IDIM+1) +1) XVAL(2) = XCOOR((IP-1)*(IDIM+1) +2) IF (IDIM.EQ.3) XVAL(3)=XCOOR((IP-1)*(IDIM+1) +3) C creation d'un champoin NBNN=1 NBELEM=1 NBSOUS=0 NBREF=0 SEGINI MELEME ITYPEL=1 NUM(1,1)=1 SEGDES MELEME NSOUPO=1 NAT=1 N=1 NC=IDIM SEGINI MCHPOI,MSOUPO,MPOVAL JATTRI(1)=2 IFOPOI=IFOUR MTYPOI=' ' MOCHDE=' ' IPCHP(1)=MSOUPO IPOVAL=MPOVAL NOCOMP(1)='SCAL' SEGDES MCHPOI,MSOUPO C creation d'un champoin fin VPOCHA(1,1) = XVAL(1) VPOCHA(1,2) = XVAL(2) IF (IDIM.EQ.3) VPOCHA(1,3)=XVAL(3) IK1 = 2 NPT = 1 ELSE IF(IXV1.EQ.1)THEN IF(IXV(1).GT.0)THEN NC=1 IGEOM=IXV(1) TYPI='LEKCOF' TYPC='CHPOINT' IRET=2 RETURN ELSEIF(IXV(1).LT.0)THEN NC=IDIM IGEOM=-IXV(1) TYPI='LEKCOF' TYPC='CHPOINT' IRET=2 RETURN ENDIF ENDIF IF (MCHPOI.EQ.0) THEN MOTERR( 1: 8) = NARG MOTERR( 9:16) = NOM MOTERR(17:24) = 'INCO ' ELSE MOTERR(1: 8) = NARG MOTERR(9:16) = TYPC ENDIF IRET = 0 RETURN ENDIF C C- Argument de type autre que ENTIER, FLOTTANT, POINT, CHPO ou MOT C ELSE MOTERR(1: 8) = NARG MOTERR(9:16) = TYPE IRET = 0 RETURN ENDIF C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales