redu
C REDU SOURCE CB215821 24/04/12 21:17:06 11897 SUBROUTINE REDU C_______________________________________________________________________ C C SUBROUTINE de l'operateur REDU qui aiguille suivant la fonctionnalite C_______________________________________________________________________ C C declaration C IMPLICIT REAL*8(A-H,O-Z) IMPLICIT INTEGER(I-N) -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMNUAGE -INC SMLMOTS -INC SMTABLE -INC SMCHAML -INC SMMODEL INTEGER I,NCOMP,J,IPO,INUA CHARACTER*4 IMO,charre,MO4a,MO4b LOGICAL logr1 CHARACTER*8 TYPOBJ character*4 mostri(1) data mostri/'STRI'/ C C executable C C ith=oothrd C C a-t'on en entrée une table esclave si oui on fusionne C C a-t'on le mot strict? istric=0 C if(iretou.ne. 0) then C write(6,*) ' on fusionne la table esclave' typobj=' ' segact mtable ml=mlotab ind=mtabii(3) > xvalre,charre,logr1,id1) if (ierr.ne.0) return C if (typobj.eq.'CHPOINT'.or.typobj.eq.'MCHAML')then if (typobj.eq.'MCHAML ')then do i=4,ml segact mtable ind=mtabii(i) & typobj,ivalre,xvalre,charre,logr1,id2) if (ierr.ne.0) return C if (typobj.eq.'CHPOINT') call fuchpo(id1,id2,iretou) id1=iretou enddo else C write (6,*) ' type ',typobj,' inconnu dans redu ' C call trbac MOTERR(1:8)='PARA ' return endif C write(6,*)' on a crée un objet ' , typobj endif C C reduction d'une rigidite sur un maillage C IF(IRETOU.EQ.0) GOTO 10 IF(IRETOU.EQ.0) return if(irig1.eq.0) return return 10 CONTINUE C C redu d'un chpoint sur (meleme ou point) C IF(IRETOU.EQ.0) GO TO 1 IF(IRETOU .EQ. 1) THEN ELSE IF (IRETOU.NE.0) THEN IMEL=IP1 ELSE CALL REFUS GO TO 1 ENDIF ENDIF IF ( IERR .NE. 0) RETURN RETURN C 1 CONTINUE C C redu mchaml sur meleme (ou point) C IF(IRETOU.EQ.0) GOTO 2 IF(IRETOU .EQ. 1)THEN ELSE IF (IRETOU.NE.0) THEN NBNN=1 NBELEM=1 NBREF=0 NBSOUS=0 SEGINI MELEME ITYPEL=1 NUM(1,1)=IP1 IMEL=MELEME ELSE CALL REFUS GOTO 2 ENDIF ENDIF IF ( IERR .NE. 0) RETURN RETURN C 2 CONTINUE C C redu chamelem sur mmodel C IF(IRETOU.EQ.0) GOTO 3 C Derniere syntaxe avec MCHAML, si pas MMODEL, sortie erreur IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 3 ENDIF IF ( IRET .NE. 1) THEN RETURN ENDIF RETURN C 3 CONTINUE C C redu chpoint sur masq C IF(IRETOU.EQ.0) GO TO 4 IF(IRETOU.EQ.0) THEN CALL REFUS GO TO 4 ENDIF IF(IERR.NE.0) RETURN RETURN C 4 CONTINUE C C redu mmodel sur meleme ou point ou reduit le model de contatct C au element qui peuvent etre actifs C IF(IRETOU.EQ.0) GOTO 5 if(ireto.ne.0) then if( charre.ne.'CONT' ) then call refus else return endif endif IF(IRETOU.EQ.1) THEN ELSE IF (IRETOU.NE.0) THEN NBNN=1 NBELEM=1 NBREF=0 NBSOUS=0 SEGINI MELEME ITYPEL=1 NUM(1,1)=IP1 IMEL=MELEME ELSE CALL REFUS GOTO 5 ENDIF ENDIF IF (IRET.NE.0) THEN ENDIF RETURN C 5 CONTINUE C C REDU d'un nuage a des composantes C JGM = 0 JGN = 4 NCOMP = 0 IPO1 = 0 100 CONTINUE IF (IRETOU .EQ. 0) THEN IF(NCOMP .EQ. 0) THEN GOTO 6 ELSE GOTO 101 ENDIF ENDIF NCOMP = NCOMP + 1 IF (NCOMP .GT. JGM) THEN JGM = NCOMP*2 + 10 IF(IPO1 .EQ. 0)THEN SEGINI,MLMOTS IPO1 = MLMOTS ELSE SEGADJ,MLMOTS ENDIF ENDIF GOTO 100 101 CONTINUE DO 200 I = 1,NCOMP DO 201 J = (I + 1),NCOMP IF (MO4a.EQ.MO4b) THEN RETURN ENDIF 201 CONTINUE 200 CONTINUE IF (IRETOU.EQ.0) GOTO 6 IF (IRET.NE.0) THEN ENDIF SEGSUP,MLMOTS RETURN c c pas d operande correcte trouve c 6 CONTINUE C CALL QUETYP(MOTERR(1:8),0,IRETOU) C IF(IRETOU .NE. 0) THEN C CALL ERREUR (39) C ELSE C CALL ERREUR(533) C ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales