rot3r
C ROT3R SOURCE OF166741 24/10/23 21:15:07 12046 ************************************************************************ * * R O T 3 R * --------- * * FONCTION: * --------- * CALCUL DE LA MATRICE DE RESISTANCE POUR L'ELEMENT ROT3 * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) * ----------- * NEF (E) NUMERO DE L'ELEMENT-FINI DANS NOMTP (VOIR CCHAMP) * IPMAIL (E) MAILLAGE ELEMENTAIRE CONSIDERE * IPMODE (E) POINTEUR SUR UN SEGMENT IMODEL * IPCHEM (E) POINTEUR SUR LE CHAMELEM DE CARACTERISTIQUE * IPMATR (E/S) MATRICE DE RIGIDITE ELEMENTAIRE XMATRI ************************************************************************ 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 NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT SEGMENT,MMAT1 REAL*8 VALMAT(NMATR) REAL*8 XE(3,NBNN),CEL1(NBNN,NBNN),XE1(3,NBNN) ENDSEGMENT REAL*8 COSD1(3),COSD2(3),COSD3(3),YK(2,2) CHARACTER*8 CNM CHARACTER*(NCONCH) CONM PARAMETER (NINF=3) INTEGER INFOS(NINF) IMODEL = IPMODE CONM = imodel.CONMOD MELEME = IPMAIL c* meleme = imodel.IMAMOD NBNN = meleme.NUM(/1) NBELEM = meleme.NUM(/2) * RECUPERATION DES CARACTERISTIQUES D'INTEGRATION DE L'ELEMENT * FINI LIE A NOTRE MAILLAGE if (infmod(/1).lt.4) then write(ioimp,*) 'rot3r infmod(/1)' endif * INFORMATION SUR L'ELEMENT MINTE = imodel.INFMOD(4) NBPGAU = minte.POIGAU(/1) xMATRI = IPMATR c* SEGACT,xMATRI*MOD NLIGRP = NBNN NLIGRD = NBNN * REMLIR LE TABLEAU INFOS (INFORMATIONS SUR ELEMENT) INFOS(1)=0 INFOS(2)=0 INFOS(3)=NIFOUR * RECHERCHE LES POINTEURS DES SEGMENTS MELVAL QUI CORRESPONDENT * AUX COMPOSANTES DE LA CONDUCTIVITE ET L'EPAISSEUR DES ELEMENT CNM = imodel.CMATEE c* INM = imodel.IMATEE c* INT = imodel.INATUU nbrobl = 0 nbrfac = 0 nomid = 0 MOMATR = nomid NBTYPE = 1 SEGINI,notype TYPE(1) = 'REAL*8' MOTYR8 = notype IF (CNM.EQ.'ISOTROPE') THEN NBROBL=2 SEGINI,NOMID LESOBL(1)='ETA ' LESOBL(2)='EPAI' ELSE IF (CNM.EQ.'ORTHOTRO') THEN NBROBL=5 SEGINI,NOMID LESOBL(1)='ETA1' LESOBL(2)='ETA2' LESOBL(3)='EPAI' LESOBL(4)='V1X ' LESOBL(5)='V1Y ' ELSE RETURN ENDIF NMATO = nbrobl NMATF = nbrfac NMATR = NMATO + NMATF MOMATR = nomid IVAMAT = 0 IF (IERR.NE.0) GOTO 990 MPTVAL = IVAMAT IF (CNM.EQ.'ISOTROPE')THEN IPMELV = IVAL(2) ELSE IF(CNM.EQ.'ORTHOTRO') THEN IPMELV = IVAL(3) ENDIF IF (ICONS.NE.0) THEN GOTO 990 ENDIF NDIM = IDIM-1 NFIN = IDIM SEGINI,MMAT1 * BOUCLE (10) SUR LES ELEMENTS DU MAILLAGE ELEMENTAIRE IMAIL DO IEL = 1, NBELEM * 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 COSD1(1) = XE(1,2)-XE(1,1) COSD1(2) = XE(2,2)-XE(2,1) COSD1(3) = XE(3,2)-XE(3,1) COSD2(1) = XE(1,3)-XE(1,1) COSD2(2) = XE(2,3)-XE(2,1) COSD2(3) = XE(3,3)-XE(3,1) COSD3(1) = COSD1(2)*COSD2(3)-COSD1(3)*COSD2(2) COSD3(2) = COSD1(3)*COSD2(1)-COSD1(1)*COSD2(3) COSD3(3) = COSD1(1)*COSD2(2)-COSD1(2)*COSD2(1) COSD1L = SQRT(COSD1(1)*COSD1(1)+COSD1(2)*COSD1(2)+ & COSD1(3)*COSD1(3)) COSD1(1)=COSD1(1)/COSD1L COSD1(2)=COSD1(2)/COSD1L COSD1(3)=COSD1(3)/COSD1L COSD3L = SQRT(COSD3(1)*COSD3(1)+COSD3(2)*COSD3(2)+ & COSD3(3)*COSD3(3)) COSD3(1)=COSD3(1)/COSD3L COSD3(2)=COSD3(2)/COSD3L COSD3(3)=COSD3(3)/COSD3L COSD2(1) = COSD3(2)*COSD1(3)-COSD3(3)*COSD1(2) COSD2(2) = COSD3(3)*COSD1(1)-COSD3(1)*COSD1(3) COSD2(3) = COSD3(1)*COSD1(2)-COSD3(2)*COSD1(1) DO NOE = 1, NBNN XE1(1,NOE) = XE(1,NOE)*COSD1(1) + XE(2,NOE)*COSD1(2) & + XE(3,NOE)*COSD1(3) XE1(2,NOE) = XE(1,NOE)*COSD2(1) + XE(2,NOE)*COSD2(2) & + XE(3,NOE)*COSD2(3) XE1(3,NOE) = 0.D0 ENDDO * MISE A ZERO DU TABLEAU CEL1 * BOUCLE (20) SUR LES POINTS DE GAUSS IFOIS = 0 IFOI2 = 0 DO IGAU=1,NBPGAU * CALCUL DE LA MATRCIE GRADIENT DES FONCTIONS DE FORME ET * DU JACOBIEN(DANS LE PLAN), EN UN POINT DE GAUSS DO NOE = 1, NBNN DO I = 1, NFIN SHP(I,NOE) = SHPTOT(I,NOE,IGAU) ENDDO ENDDO * DERIVES DES FONCTIONS DE FORME DANS LA GEOMETRIE REELLE * ET LE JACOBIEN IF (DJAC.LT.XZERO) IFOIS=IFOIS+1 IF (ABS(DJAC).LT.XPETIT) IFOI2=IFOI2+1 DJAC=ABS(DJAC)*POIGAU(IGAU) DO NOE = 1, NBNN DO I = 1, NDIM ENDDO ENDDO * ON CHERCHE LES VALEURS DE COMPOSANTES DE LA RESISTIVITE * ET L'EPAISSEUR DE LA COQUE MPTVAL=IVAMAT DO IM=1,NMATR MELVAL=IVAL(IM) IF (MELVAL.NE.0)THEN IBMN=MIN(IEL,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALMAT(IM)=VELCHE(IGMN,IBMN) ELSE VALMAT(IM)=0.D0 ENDIF ENDDO * MATERIAU ISOTROPE IF (CNM.EQ.'ISOTROPE') THEN EP = VALMAT(2) * L'ELEMENT (IEL) AU POINT DE GAUSS (IGAU) A UNE EPAISSEUR NULLE IF (EP.LE.XPETIT) THEN INTERR(1)=IEL INTERR(2)=IGAU MOTERR(1:4)=NOMTP(NEF) GO TO 999 ENDIF XK = VALMAT(1)*DJAC/EP * ON AJOUTE LE PRODUIT K*DJAC*TRANSPOSEE(GRAD)*GRAD * POUR LE POINT DE GAUSS CONSIDERE,A LA MATRICE CEL1 * CAS ORTHOTROPE ELSE c* IF (CNM.EQ.'ORTHOTRO')THEN EP = VALMAT(3) * L'ELEMENT (IEL) AU POINT DE GAUSS (IGAU) A UNE EPAISSEUR NULLE IF (EP.LE.XPETIT) THEN INTERR(1)=IEL INTERR(2)=IGAU MOTERR(1:4)=NOMTP(NEF) GO TO 999 ENDIF XK1 = VALMAT(1) / EP XK2 = VALMAT(2) / EP COSA = VALMAT(4) SINA = -VALMAT(5) * CALCUL DE LA MATRICE DES COEFFICIENTS DE RESISTIVITE DANS LE * PLAN,PAR RAPPORT AU REPERE LOCAL DE L'ELEMENT COS2 = COSA*COSA SIN2 = SINA*SINA SICO = SINA*COSA YK(1,1) = COS2*XK1 + SIN2*XK2 YK(1,2) = SICO*(XK1-XK2) YK(2,1) = YK(1,2) YK(2,2) = SIN2*XK1 + COS2*XK2 * ON AJOUTE LE PRODUIT DJAC*TRANSPOSEE(GRAD)*YK*GRAD * POUR LE POINT DE GAUSS CONSIDERE,A LA MATRICE CEL1 ENDIF ENDDO * FIN BOUCLE (20) SUR LES POINTS DE GAUSS * LE JACOBIEN EST NEGATIF ,MAILLAGE INCORRECT IF (IFOIS.NE.0.AND.IFOIS.NE.NBPGAU) THEN INTERR(1) = IEL * CAS OU LE JACOBIEN EST TRES PETIT ELSE IF (IFOI2.EQ.NBPGAU) THEN INTERR(1) = IEL ENDIF IF (IERR.NE.0) GO TO 999 * REMPLISSAGE DE XMATRI ENDDO * FIN BOUCLE (10) SUR LES ELEMENTS * DESACTIVATION DES SEGMENTS 999 CONTINUE SEGSUP,MMAT1 990 CONTINUE mptval = IVAMAT IF (mptval.NE.0) SEGSUP,mptval nomid = MOMATR SEGSUP,nomid notype = MOTYR8 SEGSUP,notype c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales