rot3m
C ROT3M SOURCE CB215821 24/04/12 21:17:12 11897 $ ICPR,ICPR2) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) ************************************************************************ * * R O T 3 M * --------- * * FONCTION: * --------- * CALCUL DE LA MATRICE DE MUTUELLES POUR L'ELEMENT ROT3 * * MODULES UTILISES: * ----------------- * -INC PPARAM -INC CCOPTIO -INC CCREEL *- -INC SMCOORD -INC SMINTE -INC CCHAMP -INC SMMODEL -INC SMRIGID -INC SMELEME -INC SMCHAML * * 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 * +XCOOR (E) VOIR SMCOORD * +IDIM (E) VOIR CCOPTIO * +IFOMOD (E) VOIR CCOPTIO * +XZERO (E) VOIR CCREEL * 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 * 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 INFO INTEGER INFELL(JG) 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 * * * * AUTEUR, DATE DE CREATION: * ------------------------- * * YANN STEPHAN , FEVRIER 1997 (COPIE DE ROT3R) * * LANGAGE: * -------- * * ESOPE + FORTRAN77 * ************************************************************************ * PERMEABILITE DU VIDE SUR 4PI DATA PM0S4P/1.D-7/ * * RECUPERATION DES CARACTERISTIQUES GEOMETRIQUES DU MAILLAGE * ELEMENTAIRE * IMODEL=IPMODE CONM =CONMOD IPMAIL=IMAMOD MELEME=IMAMOD SEGACT,MELEME NBNN=NUM(/1) NBELEM=NUM(/2) * * RECUPERATION DES CARACTERISTIQUES D'INTEGRATION * POUR LA MATRICE MUTUELLE (RIGIDITE) DE L'ELEMENT * FINI LIE A NOTRE MAILLAGE * if(infmod(/1).lt.5) then IF(IERR.NE.0) RETURN INFO=IPINF IPINTE=INFELL(11) segsup info else ipinte=infmod(5) endif * * INFORMATION SUR L'ELEMENT * MINTE=IPINTE SEGACT,MINTE NBPGAU=POIGAU(/1) SEGINI SGX,SGY * * RECHERCHE LES POINTEURS DES SEGMENTS MELVAL QUI CORRESPONDENT * A LA PERMEABILITE ET L'EPAISSEUR DES ELEMENT * NFOR=FORMOD(/2) NMAT=MATMOD(/2) IF (IERR.NE.0) RETURN * * REMLIR LE TABLEAU INFOS (INFORMATIONS SUR ELEMENT) INFOS(1)=0 INFOS(2)=0 INFOS(3)=NIFOUR * IF(CNM.EQ.'ISOTROPE'.OR.CNM.EQ.'ORTHOTRO')THEN NBRFAC=0 NBROBL=1 SEGINI NOMID MOMATR=NOMID LESOBL(1)='PERM' NMATR=1 NMATF=0 ELSE RETURN ENDIF * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * SEGSUP NOTYPE IF(IERR.NE.0)RETURN * MPTVAL=IVAMAT * NDIM=IDIM NDIM2=IDIM-1 SEGINI MAXT SEGINI,MMAT1 MMATX=MMAT1 SEGINI,MMAT2 * * CALCUL DE LA DISTANCE DE REFERENCE * DREF=0. MIJ=0 SEGACT,MCOORD DO 20 IEL=1,NBELEM DREF=MAX(DREF,DARET) 20 CONTINUE * * BOUCLE SUR LES ELEMENTS DU MAILLAGE ELEMENTAIRE IMAIL * SEGACT ICPR,ICPR2 DO 10 IEL=1,NBELEM * MMAT1=MMATX SGAUSS=SGX * * 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 * * IF(IFOIS.NE.0.AND.IFOIS.NE.NBPGAU)THEN * * LE JACOBIEN EST NEGATIF ,MAILLAGE INCORRECT INTERR(1)=IEL GO TO 999 ELSEIF(IFOI2.EQ.NBPGAU)THEN * * CAS OU LE JACOBIEN EST TRES PETIT * INTERR(1)=IEL GO TO 999 ENDIF * * ON BOUCLE SUR LE MAILLAGE SUPPORT DE COURANTS IPT1=IPSUPJ SEGACT, IPT1 NBSOUJ=IPT1.LISOUS(/1) IF(NBSOUJ.EQ.0) NBSOUJ=1 DO 110 ISOUJ=1,NBSOUJ IF(NBSOUJ.EQ.1) THEN IPT2=IPT1 ELSE IPT2=IPT1.LISOUS(ISOUJ) SEGACT, IPT2 ENDIF NBELJ=IPT2.NUM(/2) NBNNJ=IPT2.NUM(/1) NBNNT=NBNN+NBNNJ NLIGRP=NBNN NLIGRD=NBNN DO 111 IELJ=1,NBELJ DO 230 IX=1,NBNN DO 230 JX=1,NBNN 230 RA(JX,IX) = 0.D0 * 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) GO TO 23 YK=XK*QQ ELSE IF(NEAR) THEN IF(JGAU.GT.1) GO TO 23 YK=XK*QQ ELSE DO 120 I=1,IDIM 120 CONTINUE 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 MIJ=MIJ+1 * * * realisation de l'assemblage * DO 240 IX=1,IPT2.NUM(/1) IA= IPT2.NUM(IX,IELJ) IB=ICPR2(IA) DO 240 JX=1,NUM(/1) IC=NUM(JX,IEL) ID=ICPR(IC) RE(IB,ID,1)=RA(IX,JX) + RE(IB,ID,1) 240 CONTINUE * 111 CONTINUE 110 CONTINUE * 10 CONTINUE * END DO * on symetrise la matrice DO 40 IX=1,RE(/1) DO 40 JX=1,IX XP =( RE(IX,JX,1) + RE(JX,IX,1)) / 2.D0 RE(IX,JX,1)=XP RE(JX,IX,1)=XP 40 CONTINUE * * * DESACTIVATION DES SEGMENTS * 999 CONTINUE MMAT1=MMATX SEGSUP,MMAT1,MMAT2 99 CONTINUE MPTVAL=IVAMAT SEGSUP MPTVAL NOMID=MOMATR SEGSUP NOMID,MAXT END
© Cast3M 2003 - Tous droits réservés.
Mentions légales