mutu1
C MUTU1 SOURCE OF166741 24/10/23 21:15:02 12046 ************************************************************************ * * M U T U 1 * --------- * * * FONCTION: * --------- * CREATION DE LA MATRICE DE MUTUELLES * GESTION DES SEGMENTS ET TESTS DE COMPATIBILITE * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+)=CONTENU DANS UN COMMUN * ----------- * * IPMODE (E) POINTEUR SUR LE SEGMENT MMODEL (ACTIF EN E/S) * IPCHEL (E) POINTEUR SUR LE SEGMENT MCHELM (ACTIF EN E/S) * IPMAIL (E) POINTEUR SUR LE SEGMENT MELEME S'il existe (ACTIF EN E/S) * IPRIGI (S) POINTEUR SUR LE SEGMENT MRIGID * * AUTEUR, DATE DE CREATION: * ------------------------- * YANN STEPHAN, LE 28 FEVRIER 1997 (COPIE DE RESI1). * ************************************************************************ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCOORD -INC SMRIGID -INC SMCHAML -INC SMELEME -INC SMMODEL SEGMENT ICPR(nbpts) SEGMENT ICPR2(nbpts) CHARACTER*(LOCHPO) MOTHER,MOCHAL PARAMETER ( MOTHER='FC ' , MOCHAL='ED ' ) IPRIGI = 0 * ANALYSE DU MMODEL MMODEL = IPMODE NBMAIM = mmodel.KMODEL(/1) c* Cas NBMAIM = 0 a traiter DO IM = 1, NBMAIM IMODEL = mmodel.KMODEL(IM) NF1 = imodel.FORMOD(/2) IF (IF1.EQ.0) THEN RETURN ENDIF ENDDO * DEFINITION DU SUPPORT DES CHAMPS : GRAVITE ISGRAV = 2 * VERIFICATION DU LIEU SUPPORT DU CHAMELEM DE CARACTERISTIQUES * IF (ISUP.GT.1) RETURN * SI LE CHAMELEM EST APPUYE AUX NOEUDS, ON CHANGE LE SUPPORT * POUR LES CENTRES DE GRAVITE IF (ISUP.EQ.1)THEN IF (IRET.NE.0) THEN RETURN ENDIF ELSE IPCHE1=IPCHEL ENDIF * * ACTIVATION DES SEGMENTS MCHELM ET MMODEL * MCHELM=IPCHE1 c* SEGACT,MCHELM NBMAIC=IMACHE(/1) * IL MANQUE LES CARACTERISTIQUES D'UNE OU PLUSIEURS PARTIES * DU MODELE IF (NBMAIM.GT.NBMAIC) THEN GOTO 992 ENDIF NBMAIL=NBMAIM * creation d'une numerotation locale dans le but de creer un * element unique support de toute la matrice de mutuelle. * on prend d'abord le maillage issu du modele puis on fait la * meme chose pour celui issu de IPMAIL SEGINI,ICPR IF (IPMAIL.NE.0) SEGINI,ICPR2 IB=0 DO IM = 1, NBMAIM IMODEL = mmodel.KMODEL(IM) MELEME = imodel.IMAMOD DO I=1,NUM(/2) DO J=1,NUM(/1) IA = NUM(J,I) IF (ICPR(IA).EQ.0) THEN IB=IB+1 ICPR(IA)=IB ENDIF ENDDO ENDDO ENDDO * on travaille sur lui meme * on le cree de telle facon qu'il soit identique en structure a * celui issu du modele * IF (IPMAIL.EQ.0) THEN ICPR2 = ICPR NBSOUS = NBMAIM IF (NBSOUS.EQ.1) THEN IMODEL = mmodel.KMODEL(1) IPMAIL = imodel.IMAMOD ELSE NBREF =0 NBNN =0 NBELEM=0 SEGINI,IPT5 DO IM = 1, NBSOUS IMODEL = mmodel.KMODEL(IM) IPT5.LISOUS(IM) = imodel.IMAMOD ENDDO IPMAIL=IPT5 ENDIF * on a fourni un deuxieme maillage. il faut verifier qu'il y a * concordance topologique on boucle sur les zones de ce maillage pour * construire une numerotation et on verifie qu'elle est compatible * avec l'autre ELSE IPT1 = IPMAIL ISM = MAX(1,IPT1.LISOUS(/1)) IF (ISM.NE.NBMAIM) THEN GOTO 991 ENDIF IC = 0 MELEME=IPT1 DO K = 1, ISM IF (IPT1.LISOUS(/1).NE.0) THEN MELEME = IPT1.LISOUS(K) ENDIF IMODEL = mmodel.KMODEL(K) IPT5 = imodel.IMAMOD IF (IPT5.NUM(/2).NE.NUM(/2))THEN GOTO 991 ENDIF IF (IPT5.NUM(/1).NE.NUM(/1))THEN GOTO 991 ENDIF DO I = 1, NUM(/2) DO J = 1, NUM(/1) IA = NUM(J,I) IF (ICPR2(IA).EQ.0) THEN IC=IC+1 ICPR2(IA)=IC ENDIF IM = ICPR(IPT5.NUM(J,I)) IF (IM.NE.ICPR2(IA)) THEN GOTO 991 ENDIF ENDDO ENDDO ENDDO ENDIF * INITIALISATION DU CHAPEAU DE L'OBJET RIGIDITE * NRIGEL=1 SEGINI,MRIGID MTYMAT='RIGIDITE' IFORIG=IFOUR COERIG(1)=1.D0 IRIGEL(1,1)=0 IRIGEL(2,1)=0 IRIGEL(3,1)=0 IRIGEL(4,1)=0 IRIGEL(5,1)=0 IRIGEL(6,1)=0 IRIGEL(7,1)=2 IRIGEL(8,1)=0 NELRIG=1 * initialisation du maillage support de la mutuelle NBNN =IB NBELEM=1 NBSOUS=0 NBREF =0 SEGINI MELEME ITYPEL=28 DO K = 1, ICPR(/1) IA = ICPR(K) IF (IA.NE.0) THEN NUM(IA,1) = K ENDIF ENDDO IRIGEL(1,1)=MELEME * * initialisation du segment descripteur * NLIGRP=IB NLIGRD=IB SEGINI DESCR SEGINI XMATRI xmatri.symre=irigel(7,1) DO K=1,NLIGRP LISINC(K)=MOTHER LISDUA(K)=MOCHAL NOELEP(K)=K NOELED(K)=K ENDDO IRIGEL(3,1)=DESCR IRIGEL(4,1)=XMATRI * Il reste a calculer les matrices (3*3 por les rot3) et * a les assembler (l'assemblage aura lieu dans rot3M SEGACT,MCOORD * BOUCLE SUR LES MAILLAGES ELEMENTAIRES,ZONE IMAIL DO IM = 1, NBMAIL IMODEL = mmodel.KMODEL(IM) NEF = imodel.NEFMOD * CAS DE L'ELEMENT ROT3 IF (NEF.EQ.128) THEN * OPTION INDISPONIBLE ELSE ENDIF IF (IERR.NE.0) GOTO 990 ENDDO IPRIGI = MRIGID 990 CONTINUE SEGDES,MRIGID,XMATRI SEGDES,MCOORD 991 CONTINUE SEGSUP,ICPR IF (ICPR2.NE.ICPR) SEGSUP,ICPR2 992 CONTINUE IF (ISUP.EQ.1) SEGSUP MCHELM c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales