C EXCOOR SOURCE PASCAL 21/06/22 21:15:04 11039 C EXTRAIT LA IEME COORDONNEE D'UN POINT. SI IDIM+1 REND LA DENSITE C SI PAS DE NOMBRE SPECIFIE REND TOUTES LES COORDONNEES C DANS LE CAS D'OBJET MELEME FAIT LA MEME CHOSE SAUF QU'IL CREE C AUTANT DE CHPOIN QUE IDIM SUBROUTINE EXCOOR IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMCHAML PARAMETER ( NBTYP = 5 ) CHARACTER*8 LISTYP(NBTYP),MOTYPE * DATA LISTYP/'POINT ','MAILLAGE','MCHAML ', 'CHPOINT ', & 'MMODEL '/ * segact mcoord * LECTURE DE LA COMPOSANTE ( EVENTUELLE ) * CALL LIRENT(ICOMP,0,IRT2) * CALL QUETYP(MOTYPE,0,IRETOU) IF (IRETOU.EQ.0) THEN CALL ERREUR ( 533) RETURN ENDIF CALL PLACE(LISTYP,NBTYP,IPOS,MOTYPE) IF (IPOS.EQ.0) THEN MOTERR(1:8)=MOTYPE CALL ERREUR(39) RETURN ENDIF CALL LIROBJ(MOTYPE,IRT1,1,IRETOU) * IF(IPOS.NE.1) THEN IF((ICOMP.LE.0.OR.ICOMP.GT.IDIM+1).AND.IRT2.EQ.1) THEN INTERR(1)=ICOMP CALL ERREUR(36) RETURN ENDIF IF(IRT2.EQ.0) THEN IVAL=0 ELSE IVAL=ICOMP ENDIF ENDIF * GO TO (100,200,300,400,500),IPOS C C CAS DU POINT C 100 CONTINUE IP=IRT1 IC=ICOMP IF (IRT2.EQ.1.AND.(IC.LE.0.OR.IC.GT.IDIM+1)) CALL ERREUR(36) IF (IERR.NE.0) RETURN SEGACT MCOORD IREF=(IP-1)*(IDIM+1) IF(IRT2.EQ.0) GOTO 10 XRET=XCOOR(IREF+IC) CALL ECRREE(XRET) GOTO 20 10 CONTINUE DO 11 I=1,IDIM II=IDIM+1-I XRET=XCOOR(IREF+II) CALL ECRREE(XRET) 11 CONTINUE 20 CONTINUE RETURN C C CAS DU MELEME C 200 CONTINUE CALL CHPCOO(IVAL,IRT1) RETURN C C CAS DU MCHAML C 300 CONTINUE IPCHE1=0 IPCHE2=0 IPCHE3=0 MCHEL1=IRT1 350 CONTINUE CALL ACTOBJ('MCHAML',MCHEL1,1) I1=MCHEL1.IMACHE(/1) C MCHAML VIDE IF (I1.EQ.0) THEN N1=0 N3=0 L1=8 SEGINI,MCHEL2 MCHEL2.IFOCHE=IFOUR MCHEL2.TITCHE=' ' IPCHE1=MCHEL2 IF (IVAL.EQ.0) THEN IF (IDIM.EQ.2) THEN SEGINI,MCHEL3 MCHEL3.IFOCHE=IFOUR MCHEL3.TITCHE=' ' IPCHE2=MCHEL3 ELSEIF (IDIM.EQ.3) THEN SEGINI,MCHEL3 MCHEL3.IFOCHE=IFOUR MCHEL3.TITCHE=' ' IPCHE2=MCHEL3 SEGINI,MCHEL4 MCHEL4.IFOCHE=IFOUR MCHEL4.TITCHE=' ' IPCHE3=MCHEL4 ENDIF ENDIF C MCHAML NON VIDE ELSE CALL CHELCO(IVAL,MCHEL1,IPCHE1,IPCHE2,IPCHE3) ENDIF IF(IERR.EQ.0)THEN CALL ACTOBJ('MCHAML',IPCHE1,1) CALL ECROBJ('MCHAML',IPCHE1) IF(IPCHE2.NE.0)THEN CALL ACTOBJ('MCHAML',IPCHE2,1) CALL ECROBJ('MCHAML',IPCHE2) ENDIF IF(IPCHE3.NE.0)THEN CALL ACTOBJ('MCHAML',IPCHE3,1) CALL ECROBJ('MCHAML',IPCHE3) ENDIF ENDIF RETURN C C CAS DU CHPOINT C 400 CONTINUE CALL CHPTCO(IVAL,IRT1) RETURN C C CAS DU MMODEL C 500 CONTINUE C IRT1 : pointeur sur objet MMODEL CALL ACTOBJ('MMODEL ',IRT1,1) IF (IERR.NE.0) RETURN CALL ZEROP(IRT1,'NOEUD',MCHEL1) IF (IERR.NE.0) RETURN GOTO 350 END