chvns
C CHVNS SOURCE CB215821 20/11/25 13:19:43 10792 C C **** SUBROUTINE QUI A PARTIR D UN OBJET DE TYPE MATRICE ET D UN C **** CHPOINT FABRIQUE UN VECTEUR SECOND MEMBRE C **** LE CHPOIN EST DE TYPE SECOND MEMBRE C IMPLICIT INTEGER(I-N) -INC SMMATRI -INC SMCHPOI -INC SMELEME -INC PPARAM -INC CCOPTIO -INC SMVECTD -INC SMCOORD SEGMENT,ICPR(nbpts) SEGMENT,ICOR(NC1) C IF(IIMPI.EQ.3) WRITE(IOIMP,1000) MMATRX,ISECO 1000 FORMAT(' SUBROUTINE CHV2 : POINTEUR DE LA MATRICE=',I5, 1 ' POINTEUR DE L''OBJET CHPOINT=',I5) C C **** ACTIVATION DES SEGMENTS C C ... ceux dépendant de MMATRI ... MMATRI=MMATRX SEGACT,MMATRI MILIGN=IILIGN SEGACT,MILIGN INC=IPNO(/1) SEGDES,MILIGN C ... La taille de MVECTD est INC ... SEGINI,MVECTD MIDUA=IIDUA SEGACT,MIDUA IDU=IDUA(/2) MHARK=IHARDU SEGACT,MHARK MINCPO=IDUAPO SEGACT,MINCPO MELEME=IGEOMA SEGACT,MELEME N2=NUM(/2) C ... ceux dépendant de MCHPOI ... MCHPOI=ISECO SEGACT MCHPOI NSOUPO=IPCHP(/1) C C **** DANS ICPR ON COMPTE LES POINTS DE MELEME C SEGINI ICPR DO 25 I=1,N2 ICPR(NUM(1,I))=I 25 CONTINUE C C C **** FABRICATION D'UN VECTEUR SECOND MEMBRE DANS MVECTD C **** ON VERIFIE QUE TOUTES LES COMPOSANTES DU VECTEUR EXISTENT DANS C **** LA MATRICE SI NOID=0 . C DO 1 I=1,NSOUPO MSOUPO=IPCHP(I) SEGACT,MSOUPO IPT1=IGEOC SEGACT,IPT1 NC=NOCOMP(/2) C ... NC1 = taille de ICOR ... NC1=NC SEGINI,ICOR DO KKIL = 1,NC1 ICOR(KKIL)=0 ENDDO 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 C ... dans ICOR on met la correspondance entre les composantes du champ C et les variables duales de la matrice, s'il y a un zero, alors !!! ... ICOR(KI)=J GO TO 11 10 CONTINUE 11 CONTINUE MPOVAL=IPOVAL SEGACT,MPOVAL C ... N = nombre de valeurs de chaque composante (=> noeuds) ... N=VPOCHA(/1) DO 20 J=1,N C ... K = n° d'ordre du noeud examiné dans la rigidité, 0 => !!! ... K=ICPR(IPT1.NUM(1,J)) IF(K.NE.0) GO TO 4 IF(NOID.EQ.1) GO TO 20 C C **** LE NUMERO DU NOEUD DU VECTEUR N'EXISTAIT PAS DANS LA MATRICE C ITYP=53 INTERR(1) = IPT1.NUM(1,J) RETURN 4 CONTINUE ccc 40 CONTINUE DO 2 LI=1,NC C ... KKIL = n° local dans la matrice de la composante LI ... KKIL=ICOR(LI) IF (KKIL.EQ.0) GOTO 55 C ... KI = n° global du DDL dual ... KI=INCPO(KKIL,K) IF(KI.NE.0) GO TO 6 55 CONTINUE IF(NOID.EQ.1) GO TO 2 C C **** LE TYPE D'INCONNUE N'EXISTAIT PAS DANS LA MATRICE C ITYP =54 MOTERR = NOCOMP(LI) INTERR(1) = NOHARM (LI) INTERR(2) = IPT1.NUM(1,J) RETURN 6 CONTINUE VECTBB(KI)=VPOCHA(J,LI) 2 CONTINUE 20 CONTINUE SEGSUP,ICOR 1 CONTINUE SEGSUP ICPR SEGDES MMATRI SEGDES,MIDUA SEGDES,MHARK SEGDES,MINCPO MVECTX=MVECTD C IF(IIMPI.EQ.3) WRITE(IOIMP,1002)MVECTD 1002 FORMAT(' SUBROUTINE CHV2 : POINTEUR DU VECTEUR =',I5) SEGDES MVECTD RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales