C DYNE04 SOURCE CHAT 05/01/12 23:12:41 5004 SUBROUTINE DYNE04(MMATRX,ISECO,ICHT2,NDDL,MOOPT) ************************************************************************ * * D Y N E 0 4 * ----------- * * FONCTION: * --------- * UTILITAIRE DE L'OPERATEUR "DYNE" * MET LES VALEURS D'UN CHPOINT DANS UN VECTEUR, SELON LES * PARTITIONS GEOMETRIQUES DE L'OBJET RIGIDITE M * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) * ----------- * * MMATRX (E) POINTEUR SUR UN SEGMENT MMATRI ( ACTIF ) * ISECO (E) POINTEUR SUR LE CHPOINT * VEC (E/S) VECTEUR CONTENANT LES VALEURS DU CHPOINT * NDDL (E) NOMBRE DE DEGRES DE LIBERTE * MOOPT (E) 'INCO' SI ON TRAVAILLE SUR LES INCONNUES PRIMALES * 'DUAL' SI ON TRAVAILLE SUR LES INCONNUES DUALES * * AUTEUR, DATE DE CREATION: * ------------------------- * DENIS ROBERT, LE 25 NOVEMBRE 1988. * REVU ET CORRIGE DECEMBRE 89 MP * * LANGAGE: * -------- * ESOPE + FORTRAN77 * ************************************************************************ * * MODULES UTILISES: * IMPLICIT INTEGER(I-N) -INC SMMATRI -INC SMCHPOI -INC SMELEME -INC CCOPTIO -INC SMCOORD * SEGMENT,ICPR(XCOOR(/1)/(IDIM+1)) SEGMENT,ICOR(NC1) * SEGMENT,MCHT2 REAL*8 VCC2(NDDL) ENDSEGMENT * * REAL*8 VEC(*) CHARACTER*4 MOOPT * *--- ACTIVATION DES SEGMENTS * MCHT2=ICHT2 MMATRI=MMATRX MCHPOI=ISECO SEGACT,MCHPOI NSOUPO=IPCHP(/1) MELEME=IGEOMA MIMIK=IIMIK MIDUA=IIDUA IDU=IMIK(/2) MHARK=IHARK MINCPO=IINCPO N2=NUM(/2) * DO 33 I33=1,NDDL VCC2(I33)=0.D0 33 CONTINUE * END DO * *--- DANS ICPR ON COMPTE LES POINTS DE MELEME * SEGINI,ICPR DO 25 I=1,N2 ICPR(NUM(1,I))=I 25 CONTINUE * END DO * *--- FABRICATION D'UN VECTEUR, ON VERIFIE QUE TOUTES LES COMPOSANTES *--- DU CHPOINT EXISTENT DANS L'OBJET MMATRI * DO 1 I=1,NSOUPO MSOUPO=IPCHP(I) SEGACT,MSOUPO IPT1=IGEOC SEGACT,IPT1 NC=NOCOMP(/2) NC1=NC SEGINI,ICOR IF (MOOPT.EQ.'DUAL') THEN DO 11 KI=1,NC DO 10 J=1,IDU IF(NOCOMP(KI).NE.IDUA(J)) GO TO 10 IF(NOHARM(KI).NE.IHAR(J)) GO TO 10 ICOR(KI)=J GO TO 11 10 CONTINUE * END DO 11 CONTINUE * END DO ELSE IF (MOOPT.EQ.'INCO') THEN DO 21 KI=1,NC DO 20 J=1,IDU IF(NOCOMP(KI).NE.IMIK(J)) GO TO 20 IF(NOHARM(KI).NE.IHAR(J)) GO TO 20 ICOR(KI)=J GO TO 21 20 CONTINUE * END DO 21 CONTINUE * END DO ELSE CALL ERREUR(510) RETURN ENDIF MPOVAL=IPOVAL SEGACT,MPOVAL N=VPOCHA(/1) DO 2 J=1,N K=ICPR(IPT1.NUM(1,J)) IF (K.NE.0) GO TO 4 * *--- LE NUMERO DU NOEUD DU VECTEUR N'EXISTAIT PAS DANS LA MATRICE * CALL ERREUR (53) RETURN 4 CONTINUE DO 2 LI=1,NC KKIL=ICOR(LI) IF (KKIL.EQ.0) GOTO 2 KI=INCPO(KKIL,K) IF (KI.NE.0) GO TO 6 * *--- LE TYPE D'INCONNUE N'EXISTAIT PAS DANS LA MATRICE * CALL ERREUR(54) RETURN 6 CONTINUE VCC2(KI)=VPOCHA(J,LI) 2 CONTINUE * END DO * END DO SEGDES,MPOVAL,MSOUPO,IPT1 SEGSUP,ICOR 1 CONTINUE * END DO SEGSUP,ICPR * END