rot3m
C ROT3M SOURCE OF166741 24/10/23 21:15:06 12046 ************************************************************************ * * R O T 3 M * --------- * * FONCTION: * --------- * CALCUL DE LA MATRICE DE MUTUELLES POUR L'ELEMENT ROT3 * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) * ----------- * * NEF (E) NUMERO DE L'ELEMENT-FINI DANS NOMTP (VOIR CCHAMP) * IMAIL (E) NUMERO DU MAILLAGE ELEMENTAIRE CONSIDERE,DANS * L'OBJET MODELE * IPMODE (E) POINTEUR SUR UN SEGMENT IMODEL * IPCHEM (E) POINTEUR SUR LE CHAMELEM DE CARACTERISTIQUE * IPSUPJ (E) POINTEUR SUR LE MAILLAGE SUPPORT DES COURANTS DE FOUCAULT * IPRIGI (E/S) POINTEUR SUR L'OBJET RESULTAT,DE TYPE RIGIDITE * * VARIABLES: * ---------- * * NBNN NOMBRE DE NOEUDS DANS L'ELEMENT CONSIDERE * NEF NUMERO DE L'ELEMENT FINI DANS NOMTP (VOIR CCHAMP) * NBELEM NOMBRE D'ELEMENTS DANS LE MAILLAGE ELEMENTAIRE * NBPGAU NOMBRE DE POINTS DE GAUSS DANS L'ELEMENT-FINI * NDIM NOMBRE DE LIGNES DE LA MATRICE GRADIENT * XE(3,NBNN) COORDONNEES DE L'ELEMENT DANS LE REPERE GLOBAL * SHP(6,NBNN) TABLEAU DE TRAVAIL * GRAD(NDIM,NBNN) MATRICE GRADIENT DES FONCTIONS DE FORME BIDIM. * VALMAT(NMATR) TABLEAU DE TRAVAIL * * AUTEUR, DATE DE CREATION: * ------------------------- * * YANN STEPHAN , FEVRIER 1997 (COPIE DE ROT3R) * ************************************************************************ $ ICPR,ICPR2) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL -INC CCHAMP -INC SMCOORD -INC SMINTE -INC SMMODEL -INC SMRIGID -INC SMELEME -INC SMCHAML SEGMENT MAXT REAL*8 RA(NBNN,NBNN) ENDSEGMENT SEGMENT,MMAT1 REAL*8 VALMAT(NMATR) REAL*8 XE(3,NBNN),XE1(3,NBNN) REAL*8 COSD1(3),COSD2(3) ENDSEGMENT POINTEUR MMAT2.MMAT1,MMATX.MMAT1 SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT SEGMENT SGAUSS REAL*8 XGAUSS(3,NBPGAU) REAL*8 DX(NBPGAU) ENDSEGMENT POINTEUR SGX.SGAUSS,SGY.SGAUSS SEGMENT ICPR(NA) SEGMENT ICPR2(NA) CHARACTER*8 CNM CHARACTER*(NCONCH) CONM PARAMETER (NINF=3) INTEGER INFOS(NINF) LOGICAL SELF,NEAR * PERMEABILITE DU VIDE SUR 4PI DATA PM0S4P/1.D-7/ IMODEL = IPMODE CONM = imodel.CONMOD IPMAIL = imodel.IMAMOD CNM = imodel.CMATEE * RECUPERATION DES CARACTERISTIQUES GEOMETRIQUES DU MAILLAGE * ELEMENTAIRE MELEME = IPMAIL NBNN = meleme.NUM(/1) NBELEM = meleme.NUM(/2) * * REMLIR LE TABLEAU INFOS (INFORMATIONS SUR ELEMENT) INFOS(1)=0 INFOS(2)=0 INFOS(3)=NIFOUR * RECUPERATION DES CARACTERISTIQUES D'INTEGRATION * POUR LA MATRICE MUTUELLE (RIGIDITE) DE L'ELEMENT * FINI LIE A NOTRE MAILLAGE if (infmod(/1).lt.5) then write(ioimp,*) 'ROT3 - INFMOD(/1) < 5' endif MINTE = imodel.INFMOD(5) NBPGAU = minte.POIGAU(/1) * * RECHERCHE LES POINTEURS DES SEGMENTS MELVAL QUI CORRESPONDENT * A LA PERMEABILITE ET L'EPAISSEUR DES ELEMENTS * nomid = 0 nbrobl = 0 nbrfac = 0 IF (CNM.EQ.'ISOTROPE'.OR.CNM.EQ.'ORTHOTRO') THEN NBROBL=1 SEGINI,NOMID LESOBL(1)='PERM' ELSE RETURN ENDIF NMATO = nbrobl NMATF = nbrfac NMATR = NMATO+NMATF MOMATR = nomid NBTYPE=1 SEGINI,NOTYPE TYPE(1) ='REAL*8' MOTYPE = NOTYPE IF (IERR.NE.0) RETURN MPTVAL = IVAMAT SEGINI SGX,SGY NDIM = IDIM NDIM2 = IDIM-1 SEGINI,MAXT,MMAT1,MMAT2 MMATX = MMAT1 * * CALCUL DE LA DISTANCE DE REFERENCE * DREF = 0.D0 DO IEL = 1, NBELEM DREF = MAX(DREF,DARET) ENDDO IPT1 = IPSUPJ NBSOUJ = IPT1.LISOUS(/1) NBSOU1 = MAX(1,NBSOUJ) * BOUCLE SUR LES ELEMENTS DU MAILLAGE ELEMENTAIRE IMAIL DO 10 IEL=1,NBELEM MMAT1=MMATX * * ON CHERCHE LES COORDONNEES DES NOEUDS DE L'ELEMENT IEL, * DANS LE REPERE GLOBAL * * * CALCUL DES COORDONNEES DES NOEUDS DANS LE REPERE LOCAL DE L' * ELEMENT COQUE * * * ON CALCULE LES FONCTIONS DE FORME AUX POINTS DE GAUSS * * * LE JACOBIEN EST NEGATIF ,MAILLAGE INCORRECT IF(IFOIS.NE.0.AND.IFOIS.NE.NBPGAU)THEN INTERR(1)=IEL GO TO 999 * * CAS OU LE JACOBIEN EST TRES PETIT ELSEIF(IFOI2.EQ.NBPGAU)THEN INTERR(1)=IEL GO TO 999 ENDIF * * ON BOUCLE SUR LE MAILLAGE SUPPORT DE COURANTS IPT1 = IPSUPJ IPT2 = IPT1 DO 110 ISOUJ = 1, NBSOU1 IF (NBSOUJ.NE.0) IPT2 = IPT1.LISOUS(ISOUJ) NBELJ=IPT2.NUM(/2) NBNNJ=IPT2.NUM(/1) NBNNT=NBNN+NBNNJ NLIGRP=NBNN NLIGRD=NBNN DO 111 IELJ=1,NBELJ DO IX=1,NBNN DO JX=1,NBNN RA(JX,IX) = 0.D0 ENDDO ENDDO * NEAR=.FALSE. * MMAT1=MMAT2 SGAUSS = SGY * * ON CHERCHE LES COORDONNEES DES NOEUDS DE L'ELEMENT IEL, * DANS LE REPERE GLOBAL * * * CALCUL DES COORDONNEES DES NOEUDS DANS LE REPERE LOCAL DE L' * ELEMENT COQUE * * * IF (JFOIS.NE.0.AND.JFOIS.NE.NBPGAU)THEN * * LE JACOBIEN EST NEGATIF ,MAILLAGE INCORRECT INTERR(1)=IEL GO TO 999 ELSEIF(JFOI2.EQ.NBPGAU)THEN * * CAS OU LE JACOBIEN EST TRES PETIT * INTERR(1)=IEL GO TO 999 ENDIF * * CALCUL DE LA DISTANCE ENTRE LES DEUX ELEMENTS * NEAR=NEAR.OR.(DT3.LE.DREF) * * BOUCLE SUR LES POINTS DE GAUSS MAILLAGE 1 * DO 22 IGAU=1,NBPGAU * MMAT1=MMATX SGAUSS=SGX * * ON CHERCHE LES VALEURS DE LA PERMEABILITE * MPTVAL=IVAMAT DO 30 IM=1,NMATR IF(IVAL(IM).NE.0)THEN MELVAL=IVAL(IM) IBMN=MIN(IEL,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALMAT(IM)=VELCHE(IGMN,IBMN) ELSE VALMAT(IM)=0 ENDIF 30 CONTINUE PERM=VALMAT(1) XK=PERM*PM0S4P*DX(IGAU) * * BOUCLE SUR LES POINTS DE GAUSS MAILLAGE 2 * DO 23 JGAU=1,NBPGAU * MMAT1 = MMAT2 SGAUSS = SGY * IF (SELF) THEN IF (JGAU.GT.1) GOTO 23 YK=XK*QQ ELSE IF (NEAR) THEN IF(JGAU.GT.1) GO TO 23 YK=XK*QQ ELSE DO I=1,IDIM ENDDO ENDIF * * ON AJOUTE LE PRODUIT K*DJAC*TRANSPOSEE(GRADX)*GRADY * POUR LE POINT DE GAUSS CONSIDERE,A LA MATRICE RE * MMAT1=MMATX & YK,NBNN,NBNNJ,IDIM,RA) 23 CONTINUE 22 CONTINUE * realisation de l'assemblage DO IX = 1, IPT2.NUM(/1) IA = IPT2.NUM(IX,IELJ) IB = ICPR2(IA) DO JX = 1, NUM(/1) IC = NUM(JX,IEL) ID = ICPR(IC) RE(IB,ID,1) = RA(IX,JX) + RE(IB,ID,1) ENDDO ENDDO * 111 CONTINUE 110 CONTINUE * 10 CONTINUE * END DO * on symetrise la matrice DO IX = 1, RE(/1) DO JX = 1, IX XP = 0.5D0 * ( RE(IX,JX,1) + RE(JX,IX,1) ) RE(IX,JX,1)=XP RE(JX,IX,1)=XP ENDDO ENDDO * * DESACTIVATION DES SEGMENTS * 999 CONTINUE MMAT1=MMATX SEGSUP,MMAT1,MMAT2,MAXT MPTVAL=IVAMAT SEGSUP,MPTVAL NOMID=MOMATR SEGSUP,NOMID,NOTYPE SEGSUP,SGX,SGY C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales