piocaf
C PIOCAF SOURCE PV090527 24/03/14 21:15:02 11870 1 XE2,SH1,TAB,MWRK6,LHOOK, 2 IFOU,KCAS,KERRE) C======================================================================= C C TRANSFORME LES CONTRAINTES DE PIOLA KIRCHHOFF EN CONTRAINTES DE C CAUCHY C ENTREE C ------- C NBNN = NOMBRE DE POINTS PAR ELEMENTS C NBSH = NOMBRE DE fonctions de forme C IDIM = DIMENSION DE L ESPACE SUPPORT C C TAB1(NBPTEL,NCOELE) =TABLEAU DES CONTRAINTES DE PIOLA KIRCHHOFF C C NCOELE = NOMBRE DE COMPOSTS TABLEAU DES CONTRAINTES C C NBPTEL = NOMBRE DE POINTS DE GAUSS C SHP(6,NBNN,NBPTEL)= FONCTIONS DE FORME C C KCAS = 1 SI CONTRAINTES, 2 SI DEFORMATIONS C C TABLEAUX DE TRAVAIL C-------------------- C XE1(3,NBNN) = COORDONNEES CORRESPONDANT A LA CONFIGURATION DEPART C C XE2(3,NBNN) = COORDONNEES CORRESPONDANT A LA CONFIGURATION ACTUEL C C SH1(6,NBNN) = FONCTIONS DE FORME EN UN POINT DE GAUSS C C SORTIES C--------- C TAB(NBPTEL,NCOELE) =TABLEAU DES CONTRAINTES DE CAUCHY C C C AOUT 85 C MODIF PEGON FEV 90 CAS BIDIM C PASSAGE AUX NOUVEAUX CHAMELEMS PAR P.DOWLATYARI 12/4/91 C C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC CCREEL * SEGMENT MWRK6 INTEGER ITRES1(NBPTEL) REAL*8 PRODDI(NBPTEL,LHOO2),PRODDO(NBPTEL,LHOO2) REAL*8 DDHOOK(LHOOK,LHOOK),DDHOMU(LHOOK,LHOOK) REAL*8 VEC(LHOOK),VEC2(LHOOK) ENDSEGMENT * C dimension r_z(3) DIMENSION TAB1(NBPTEL,*) DIMENSION TAB(NBPTEL,*) *as xfem 2010_01_13 DIMENSION SHP(6,NBSH,*) * DIMENSION SHP(6,NBNN,*) *fin as xfem 2010_01_13 DIMENSION XE1(3,*),XE2(3,*),SH1(6,*) C C TABLEAUX DE TRAVAIL DIMENSIONNES ICI C DIMENSION XJAC(3,3),FAC(6),FACI(6) C C TABLEAUX INDIQUANT LA CORRESPONDANCE ENTRE INDICES I,J ET NUMERO C DE LA COMPOSANTE DE CONTRAINTES OU DE DEFORMATIONS C DIMENSION IN(6),JN(6),ITAB(3,3) C DATA FAC/1.D0,1.D0,1.D0,0.5D0,0.5D0,0.5D0/ DATA FACI/1.D0,1.D0,1.D0,2.D0,2.D0,2.D0/ DATA IN/1,2,3,1,1,2/ DATA JN/1,2,3,2,3,3/ C DATA ITAB(1,1),ITAB(2,1),ITAB(3,1)/1,4,5/ DATA ITAB(1,2),ITAB(2,2),ITAB(3,2)/4,2,6/ DATA ITAB(1,3),ITAB(2,3),ITAB(3,3)/5,6,3/ C KERRE=0 C C MISE A ZERO DES CONTRAINTES OU DES DEFORMATIONS C ** DO 50 IA=1,NBPTEL ** DO 50 IB=1,NCOELE ** TAB(IA,IB)=0.D0 **50 CONTINUE C C BOUCLE SUR LES POINTS DE GAUSS C DO 130 IC=1,NBPTEL C if (nbsh.ne.nbnn) then else endif C C CALCUL DE LA MATRICE F (=XJAC) C DO IF=1,IDIM JF = IF + 1 r_z1 = 0.D0 r_z2 = 0.D0 r_z3 = 0.D0 do id=1,nbnn r_z1 = r_z1 + SH1(JF,ID)*XE2(1,ID) if (idim.ge.2) r_z2 = r_z2 + SH1(JF,ID)*XE2(2,ID) if (idim.ge.3) r_z3 = r_z3 + SH1(JF,ID)*XE2(3,ID) enddo if (idim.ge.1) XJAC(1,IF) = r_z1 if (idim.ge.2) XJAC(2,IF) = r_z2 if (idim.ge.3) XJAC(3,IF) = r_z3 enddo C CC - MODES DE CALCUL EN DEFORMATIONS "PLANES" GENERALISEES CC CAS 3D : IF (IDIM.EQ.3) THEN C RIEN FAIRE ! CC CAS 2D : ELSE IF(IDIM.EQ.2) THEN CCCC CAS 2D AXISYMETRIQUE IF (IFOU.EQ.0) THEN R1=0.D0 R2=0.D0 DO 150 ID=1,NBNN R1=R1+SH1(1,ID)*XE1(1,ID) R2=R2+SH1(1,ID)*XE2(1,ID) 150 CONTINUE if (r1.lt.-xpetit/xzprec.or.r1.gt.xpetit/xzprec)then XJAC(3,3)=R2/R1 else xjac(3,3)=xgrand*xzprec endif ELSE CCCC CAS 2D PLAN XJAC(3,3)=1.D0 CCCC CAS 2D PLAN DEFO GENE * Rq : "Deplacement" UZ du PTGENE est stocke dans XE2(3,1) (cf. PIOCAP) IF (IFOU.EQ.-3) THEN XJAC(3,3) = XJAC(3,3) + XE2(3,1) ENDIF ENDIF CC CAS 1D : ELSE IF (IDIM.EQ.1) THEN CCCC CAS 1D PLAN IF (IFOU.GE.3 .AND. IFOU.LE.11) THEN XJAC(2,2) = 1.D0 XJAC(3,3) = 1.D0 * Rq : "Deplacement" UY du PTGENE est stocke dans XE2(2,1) (cf. PIOCAP) IF (IFOU.EQ.7 .OR. IFOU.EQ.8 .OR. IFOU.EQ.11) THEN XJAC(2,2) = XJAC(2,2) + XE2(2,1) ENDIF * Rq : "Deplacement" UZ du PTGENE est stocke dans XE2(3,1) (cf. PIOCAP) c* IF (IFOU.EQ.9 .OR. IFOU.EQ.10 .OR. IFOU.EQ.11) THEN IF (IFOU.GE.9) THEN XJAC(3,3) = XJAC(3,3) + XE2(3,1) ENDIF CCCC CAS 1D AXIS et SPHE ELSE if (r1.lt.-xpetit/xzprec.or.r1.gt.xpetit/xzprec)then FR2R1 = R2 /R1 else FR2R1=XGRAND*XZPREC endif XJAC(3,3) = FR2R1 CCCC CAS 1D SPHE IF (IFOU.EQ.15) THEN XJAC(2,2) = FR2R1 ELSE CCCC CAS 1D AXIS XJAC(2,2) = 1.D0 * Rq : "Deplacement" UZ du PTGENE est stocke dans XE2(2,1) (cf. PIOCAP) IF (IFOU.EQ.14) THEN XJAC(2,2) = XJAC(2,2) + XE2(2,1) ENDIF ENDIF ENDIF ENDIF C GO TO (500,600,700),KCAS C C KCAS=1 CAS DES CONTRAINTES C ---------------------------- C 500 CONTINUE C CCCCCCCCCCCC CALCUL DE L'INVERSE DU DETERMINANT DE F C IF (IDIM.EQ.3) THEN DETF=XJAC(1,1)*(XJAC(2,2)*XJAC(3,3)-XJAC(3,2)*XJAC(2,3)) DETF=DETF-XJAC(2,1)*(XJAC(1,2)*XJAC(3,3)-XJAC(3,2)*XJAC(1,3)) DETF=DETF+XJAC(3,1)*(XJAC(1,2)*XJAC(2,3)-XJAC(1,3)*XJAC(2,2)) ELSE IF (IDIM.EQ.2) THEN DETF = ( XJAC(1,1)*XJAC(2,2)-XJAC(1,2)*XJAC(2,1) ) * XJAC(3,3) ELSE IF (IDIM.EQ.1) THEN DETF = XJAC(1,1) * XJAC(2,2) * XJAC(3,3) ENDIF if (detf.lt.-xpetit/xzprec.or.detf.gt.xpetit/xzprec)then DETF=1./(DETF) else DETF=XGRAND*xzprec endif C C CALCUL DES CONTRAINTES DE CAUCHY C DO 160 ID=1,NCOELE IND=IN(ID) JND=JN(ID) TABCD = TAB(IC,ID) DO 170 IE=1,IDIM TABAU1=0.D0 DO 171 IF=1,IDIM ICO=ITAB(IF,IE) TABAU1=TAB1(IC,ICO)*XJAC(JND,IF) 1 +TABAU1 171 CONTINUE TABAU1 = TABAU1 * XJAC(IND,IE) TABCD = TABCD + TABAU1 170 CONTINUE TAB(IC,ID)=TABCD*DETF + TAB(IC,ID) 160 CONTINUE C C PEGON : ON NE FAIT PAS LA TRANSFORMATION SUR LA 3-EME COMPOSANTE C IF (IDIM.EQ.2) THEN TAB(IC,3)=TAB1(IC,3)*XJAC(3,3)*XJAC(3,3)*DETF ELSE IF (IDIM.EQ.1) THEN TAB(IC,2)=TAB1(IC,2)*XJAC(2,2)*XJAC(2,2)*DETF TAB(IC,3)=TAB1(IC,3)*XJAC(3,3)*XJAC(3,3)*DETF ENDIF GO TO 130 C C KCAS=2 CAS DES DEFORMATIONS C ----------------------------- C 600 CONTINUE C C CCCCCCCCCCCC CALCUL DE L'INVERSE DE F C IF(KERRE.NE.0) THEN WRITE(6,77881) ((XJAC(MI,MJ),MJ=1,3),MI=1,3) 77881 FORMAT(2X,' MATRICE SINGULIERE' /(3(1X,1PE12.5)/)) RETURN ENDIF C C CALCUL DES DEFORMATIONS C DO 260 ID=1,NCOELE IND=IN(ID) JND=JN(ID) TABCD=0.D0 DO 271 IE=1,IDIM * unrolling de la boucle 270 pour mettre xjac en registre ** TABAU1=0.D0 ** DO 270 IF=1,IDIM ** ICO=ITAB(IF,IE) ** TABAU1=TABAU1+ ** 1 FAC(ICO)*TAB1(IC,ICO)*XJAC(IF,JND) *270 CONTINUE ICO1=ITAB(1,IE) tabau1= FAC(ICO1)*TAB1(IC,ICO1)*XJAC(1,JND) ICO2=ITAB(2,IE) tabau1= tabau1 + FAC(ICO2)*TAB1(IC,ICO2)*XJAC(2,JND) if(idim.eq.3) then ICO3=ITAB(3,IE) tabau1= tabau1 + FAC(ICO3)*TAB1(IC,ICO3)*XJAC(3,JND) endif TABCD=TABCD+TABAU1*XJAC(IE,IND) 271 CONTINUE TAB(IC,ID)=TAB(IC,ID)+TABCD*FACI(ID) 260 CONTINUE C C PEGON : ON NE FAIT PAS LA TRANSFORMATION SUR LA 3-EME COMPOSANTE C IF(IDIM.EQ.2) THEN TAB(IC,3)=TAB1(IC,3)*XJAC(3,3)*XJAC(3,3) ELSE IF(IDIM.EQ.1) THEN TAB(IC,2)=TAB1(IC,2)*XJAC(2,2)*XJAC(2,2)*DETF TAB(IC,3)=TAB1(IC,3)*XJAC(3,3)*XJAC(3,3)*DETF ENDIF C GO TO 130 C C KCAS=3 CAS DE LA MATRICE DE HOOKE C ----------------------------------- C 700 CONTINUE C CCCCCCCCCCCC CALCUL DE L'INVERSE DU DETERMINANT DE F C IF (IDIM.EQ.3) THEN DETF=XJAC(1,1)*(XJAC(2,2)*XJAC(3,3)-XJAC(3,2)*XJAC(2,3)) DETF=DETF-XJAC(2,1)*(XJAC(1,2)*XJAC(3,3)-XJAC(3,2)*XJAC(1,3)) DETF=DETF+XJAC(3,1)*(XJAC(1,2)*XJAC(2,3)-XJAC(1,3)*XJAC(2,2)) ELSE IF (IDIM.EQ.2) THEN DETF = ( XJAC(1,1)*XJAC(2,2)-XJAC(1,2)*XJAC(2,1) ) * XJAC(3,3) ELSE IF (IDIM.EQ.1) THEN DETF = XJAC(1,1) * XJAC(2,2) * XJAC(3,3) ENDIF if (detf.lt.-xpetit/xzprec.or.detf.gt.xpetit/xzprec)then DETF=1./(DETF) else DETF=XGRAND*xzprec endif C IJ=1 DO JJ=1,LHOOK DO II=1,LHOOK DDHOOK(II,JJ)=PRODDI(IC,IJ) IJ=IJ+1 enddo enddo * KEY=2 C DO 720 LC=1,LHOOK DO 760 ID=1,LHOOK IND=IN(ID) JND=JN(ID) DO IE=1,IDIM DO IF=1,IDIM ICO=ITAB(IF,IE) IF(ICO.EQ.LC) THEN VEC(ID)=VEC(ID)+ & FAC(ICO)*XJAC(IE,IND)*XJAC(IF,JND) ENDIF enddo enddo VEC(ID)=VEC(ID)*FACI(ID) 760 CONTINUE C C ON NE FAIT PAS LA TRANSFORMATION SUR LA 3-EME COMPOSANTE C IF (IDIM.EQ.2) THEN IF(LC.EQ.3) VEC(3)=XJAC(3,3)*XJAC(3,3) * ELSE IF (IDIM.EQ.1) THEN IF(LC.EQ.2) VEC(2)=XJAC(2,2)*XJAC(2,2) IF(LC.EQ.3) VEC(3)=XJAC(3,3)*XJAC(3,3) ENDIF C C DO 761 ID=1,LHOOK IND=IN(ID) JND=JN(ID) DO IE=1,IDIM DO IF=1,IDIM ICO=ITAB(IF,IE) DDHOMU(ID,LC)=VEC2(ICO)*XJAC(IND,IE)*XJAC(JND,IF)*DETF 1 +DDHOMU(ID,LC) enddo enddo 761 CONTINUE C C ON NE FAIT PAS LA TRANSFORMATION SUR LA 3-EME COMPOSANTE C IF (IDIM.EQ.2) THEN DDHOMU(3,LC)=VEC2(3)*XJAC(3,3)*XJAC(3,3)*DETF ELSE IF (IDIM.EQ.1) THEN DDHOMU(2,LC)=VEC2(2)*XJAC(2,2)*XJAC(2,2)*DETF DDHOMU(3,LC)=VEC2(3)*XJAC(3,3)*XJAC(3,3)*DETF ENDIF 720 CONTINUE C IJ=1 DO JJ=1,LHOOK DO II=1,LHOOK PRODDO(IC,IJ)=DDHOMU(II,JJ) IJ=IJ+1 enddo enddo * * 130 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales