caljbr
C CALJBR SOURCE MAGN 08/10/10 21:15:00 6185 *NES,ND,NP,NPG,IAXI,AIRE,AJ,SGN) C*********************************************************************** C Ce Sp calcule le gradient des fonctions de formes pour un element C courant a partir des gradients de l'element de reference et des C coordonnees des points de l'element C Il calcule le produit PgSq poids d'integration x element d'aire et C le Jacobien C Pour les elements coques ou filaires les normales et tangentes C sont donnees a la place du Jacobien C les fonctions de forme FN sont donnees en entree pour calculer C les elements d'aire en axisymetrique C C Entree : C NES Dimension d'espace de l'element de reference C (different de ND pour les elements coques ou filaires) C ND Dimension d'espace C NP Nombre de noeuds de l'element C NPG Nombre de points d'integration C IAXI =0 en 3D et en 2D PLAN C IAXI NE 0 en axi symetrique axe de symetrie x C FN(NP,NPG) Valeurs des fonctions de forme aux points d'integration C GR(NES,NP,NPG) Valeurs des gradients dans l'element de reference C PG(NPG) Poids d'integration C XYZ(ND,NP) Coordonnees des noeuds de l'element C C Sortie C HR(NES,NP,NPG) Valeurs des gradients dans l'element courant C PGSQ(NPG) poids d'integration x element d'aire C ATTENTION en axi : poids d'integration x element d'aire x 2 pi R C RPG(NPG) Rayon des points d'integration C AIRE Aire de l'element C AJ(ND,ND,NPG) Valeurs du jacobien pour chaque point d'integration C SGN Pour les elements massif =1 si meme orientation element de Ref C SGN Pour les elements massif =-1 si orientation opposee C SGN 0 pour les autres types d'elements C C C CE SP TRAITE LES ELEMENTS VOLUMIQUES, SURFACIQUES et FILAIRES C DANS LES CAS 2D (PLAN et AXI) ET 3D C C Dans AJ on stoke l'inverse du Jacobien (AJ=1/J) si l'element est C volumique C Sinon pour les elements coques on stoke tangentes et normales C AJ=|tx ty| |tx ty tz| C |nx ny| ou |ux uy uz| C |nx ny nz| C C C CALCUL INTERMEDIAIRE DE L'ELEMENT D'AIRE SQ=DET(J) C C*********************************************************************** IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C REAL*8 FN(NP,NPG),GR(NES,NP,NPG),HR(ND,NP,NPG) REAL*8 PG(NPG),XYZ(ND,NP),PGSQ(NPG),RPG(NPG),AJ(ND,ND,NPG) REAL*8 AG(3,3,25) -INC CCREEL C C*** SGN=0.D0 IF(NES.EQ.1.AND.ND.EQ.2)THEN AIRE=0.D0 DO 110 L=1,NPG AJX=0.D0 AJY=0.D0 DO 111 I=1,NP AJX=AJX+GR(1,I,L)*XYZ(1,I) AJY=AJY+GR(1,I,L)*XYZ(2,I) 111 CONTINUE AJN=(AJX*AJX+AJY*AJY)**0.5D0 C write(6,*)' AJX,AJY=',AJX,AJY,AJN AJ(1,1,L)=AJX/AJN AJ(2,1,L)=AJY/AJN AJ(1,2,L)=-AJY/AJN AJ(2,2,L)=AJX/AJN PGSQ(L)=PG(L)*AJN AIRE=AIRE+PGSQ(L) 110 CONTINUE C write(6,*)' AJ ds CALJBR',AIRE C write(6,1002)AJ DO 131 L=1,NPG DO 131 I=1,NP DO 131 N=1,ND U=0.D0 DO 132 M=1,NES 132 U=U+AG(M,N,L)*GR(M,I,L) 131 HR(N,I,L)=U C write(6,*)'GR' C write(6,1002)gr C write(6,*)'HR' C write(6,1002)hr ELSEIF(NES.EQ.1.AND.ND.EQ.3)THEN AIRE=0.D0 DO 310 L=1,NPG AJX=0.D0 AJY=0.D0 AJZ=0.D0 BJX=0.D0 BJY=0.D0 BJZ=0.D0 DO 311 I=1,NP AJX=AJX+GR(1,I,L)*XYZ(1,I) AJY=AJY+GR(1,I,L)*XYZ(2,I) AJZ=AJZ+GR(1,I,L)*XYZ(3,I) C BJX=BJX+GR(2,I,L)*XYZ(1,I) C BJY=BJY+GR(2,I,L)*XYZ(2,I) C BJZ=BJZ+GR(2,I,L)*XYZ(3,I) 311 CONTINUE C write(6,*)ajx,ajy,ajz IF(ABS(AJX).NE.0.D0.AND.ABS(AJY).NE.0.D0)THEN BJX=AJY BJY=-AJX BJZ=AJZ ELSE BJX=1.D0 BJY=1.D0 BJZ=0.D0 ENDIF XB=AJY*BJZ-AJZ*BJY YB=AJZ*BJX-AJX*BJZ ZB=AJX*BJY-AJY*BJX AJN=(XB*XB+YB*YB*ZB*ZB)**0.5D0+1.D-5 C write(6,*)' AJN=',AJN PGSQ(L)=PG(L)*AJN AIRE=AIRE+PGSQ(L) AJ(1,1,L)=AJX/AJN AJ(2,1,L)=AJY/AJN AJ(3,1,L)=AJZ/AJN AJ(1,2,L)=BJX/AJN AJ(2,2,L)=BJY/AJN AJ(3,2,L)=BJZ/AJN AJ(1,3,L)=XB/AJN AJ(2,3,L)=YB/AJN AJ(3,3,L)=ZB/AJN AG(1,1,L)=AJX AG(2,1,L)=AJY AG(3,1,L)=AJZ AG(1,2,L)=BJX AG(2,2,L)=BJY AG(3,2,L)=BJZ AG(1,3,L)=XB AG(2,3,L)=YB AG(3,3,L)=ZB D11=AG(2,2,L)*AG(3,3,L)-AG(3,2,L)*AG(2,3,L) D12=AG(1,2,L)*AG(3,3,L)-AG(3,2,L)*AG(1,3,L) D13=AG(1,2,L)*AG(2,3,L)-AG(2,2,L)*AG(1,3,L) D21=AG(2,1,L)*AG(3,3,L)-AG(3,1,L)*AG(2,3,L) D22=AG(1,1,L)*AG(3,3,L)-AG(3,1,L)*AG(1,3,L) D23=AG(1,1,L)*AG(2,3,L)-AG(2,1,L)*AG(1,3,L) D31=AG(2,1,L)*AG(3,2,L)-AG(3,1,L)*AG(2,2,L) D32=AG(1,1,L)*AG(3,2,L)-AG(3,1,L)*AG(1,2,L) D33=AG(1,1,L)*AG(2,2,L)-AG(2,1,L)*AG(1,2,L) VINT=AG(1,1,L)*D11-AG(1,2,L)*D21+AG(1,3,L)*D31 RVINT=1.D0/VINT AG(1,1,L)= RVINT*D11 AG(1,2,L)=-RVINT*D12 AG(1,3,L)= RVINT*D13 AG(2,1,L)=-RVINT*D21 AG(2,2,L)= RVINT*D22 AG(2,3,L)=-RVINT*D23 AG(3,1,L)= RVINT*D31 AG(3,2,L)=-RVINT*D32 AG(3,3,L)= RVINT*D33 310 CONTINUE C write(6,*)' AJ ds CALJBR' C write(6,1002)AJ DO 331 L=1,NPG DO 331 I=1,NP DO 331 N=1,ND U=0.D0 DO 332 M=1,NES 332 U=U+AG(M,N,L)*GR(M,I,L) 331 HR(N,I,L)=U C write(6,*)'GR' C write(6,1002)gr C write(6,*)'HR' C write(6,1002)hr ELSEIF(NES.EQ.2.AND.ND.EQ.3)THEN C write(6,*)' Je passe ICI' AIRE=0.D0 DO 210 L=1,NPG AJX=0.D0 AJY=0.D0 AJZ=0.D0 BJX=0.D0 BJY=0.D0 BJZ=0.D0 DO 211 I=1,NP AJX=AJX+GR(1,I,L)*XYZ(1,I) AJY=AJY+GR(1,I,L)*XYZ(2,I) AJZ=AJZ+GR(1,I,L)*XYZ(3,I) BJX=BJX+GR(2,I,L)*XYZ(1,I) BJY=BJY+GR(2,I,L)*XYZ(2,I) BJZ=BJZ+GR(2,I,L)*XYZ(3,I) 211 CONTINUE XB=AJY*BJZ-AJZ*BJY YB=AJZ*BJX-AJX*BJZ ZB=AJX*BJY-AJY*BJX AJN=(XB*XB+YB*YB+ZB*ZB)**0.5D0 PGSQ(L)=PG(L)*AJN AIRE=AIRE+PGSQ(L) AJ(1,1,L)=AJX/AJN AJ(2,1,L)=AJY/AJN AJ(3,1,L)=AJZ/AJN AJ(1,2,L)=BJX/AJN AJ(2,2,L)=BJY/AJN AJ(3,2,L)=BJZ/AJN AJ(1,3,L)=XB/AJN AJ(2,3,L)=YB/AJN AJ(3,3,L)=ZB/AJN AG(1,1,L)=AJX AG(2,1,L)=AJY AG(3,1,L)=AJZ AG(1,2,L)=BJX AG(2,2,L)=BJY AG(3,2,L)=BJZ AG(1,3,L)=XB AG(2,3,L)=YB AG(3,3,L)=ZB D11=AG(2,2,L)*AG(3,3,L)-AG(3,2,L)*AG(2,3,L) D12=AG(1,2,L)*AG(3,3,L)-AG(3,2,L)*AG(1,3,L) D13=AG(1,2,L)*AG(2,3,L)-AG(2,2,L)*AG(1,3,L) D21=AG(2,1,L)*AG(3,3,L)-AG(3,1,L)*AG(2,3,L) D22=AG(1,1,L)*AG(3,3,L)-AG(3,1,L)*AG(1,3,L) D23=AG(1,1,L)*AG(2,3,L)-AG(2,1,L)*AG(1,3,L) D31=AG(2,1,L)*AG(3,2,L)-AG(3,1,L)*AG(2,2,L) D32=AG(1,1,L)*AG(3,2,L)-AG(3,1,L)*AG(1,2,L) D33=AG(1,1,L)*AG(2,2,L)-AG(2,1,L)*AG(1,2,L) VINT=AG(1,1,L)*D11-AG(1,2,L)*D21+AG(1,3,L)*D31 RVINT=1.D0/VINT AG(1,1,L)= RVINT*D11 AG(1,2,L)=-RVINT*D12 AG(1,3,L)= RVINT*D13 AG(2,1,L)=-RVINT*D21 AG(2,2,L)= RVINT*D22 AG(2,3,L)=-RVINT*D23 AG(3,1,L)= RVINT*D31 AG(3,2,L)=-RVINT*D32 AG(3,3,L)= RVINT*D33 210 CONTINUE C DO 231 L=1,NPG DO 231 I=1,NP DO 231 N=1,ND U=0.D0 DO 232 M=1,NES 232 U=U+AG(M,N,L)*GR(M,I,L) 231 HR(N,I,L)=U C write(6,*)'GR' C write(6,1002)gr C write(6,*)'HR' C write(6,1002)hr ELSE DO 10 L=1,NPG DO 10 M=1,ND DO 10 N=1,ND AJT=0.D0 DO 11 I=1,NP AJT=AJT+GR(M,I,L)*XYZ(N,I) 11 CONTINUE AJ(N,M,L)=AJT 10 CONTINUE C DO 20 L=1,NPG IF(ND.EQ.1)THEN VINT=AJ(1,1,L) C VINT=ABS(VINT) AJ(1,1,L)=1.D0/VINT ELSEIF(ND.EQ.2)THEN VINT=AJ(1,1,L)*AJ(2,2,L)-AJ(1,2,L)*AJ(2,1,L) C VINT=ABS(VINT) RVINT=1.D0/VINT D11=AJ(2,2,L) D12=AJ(1,2,L) D21=AJ(2,1,L) D22=AJ(1,1,L) AJ(1,1,L)= RVINT*D11 AJ(1,2,L)=-RVINT*D12 AJ(2,1,L)=-RVINT*D21 AJ(2,2,L)= RVINT*D22 ELSEIF(ND.EQ.3)THEN D11=AJ(2,2,L)*AJ(3,3,L)-AJ(3,2,L)*AJ(2,3,L) D12=AJ(1,2,L)*AJ(3,3,L)-AJ(3,2,L)*AJ(1,3,L) D13=AJ(1,2,L)*AJ(2,3,L)-AJ(2,2,L)*AJ(1,3,L) D21=AJ(2,1,L)*AJ(3,3,L)-AJ(3,1,L)*AJ(2,3,L) D22=AJ(1,1,L)*AJ(3,3,L)-AJ(3,1,L)*AJ(1,3,L) D23=AJ(1,1,L)*AJ(2,3,L)-AJ(2,1,L)*AJ(1,3,L) D31=AJ(2,1,L)*AJ(3,2,L)-AJ(3,1,L)*AJ(2,2,L) D32=AJ(1,1,L)*AJ(3,2,L)-AJ(3,1,L)*AJ(1,2,L) D33=AJ(1,1,L)*AJ(2,2,L)-AJ(2,1,L)*AJ(1,2,L) VINT=AJ(1,1,L)*D11-AJ(1,2,L)*D21+AJ(1,3,L)*D31 C VINT=ABS(VINT) RVINT=1.D0/VINT AJ(1,1,L)= RVINT*D11 AJ(1,2,L)=-RVINT*D12 AJ(1,3,L)= RVINT*D13 AJ(2,1,L)=-RVINT*D21 AJ(2,2,L)= RVINT*D22 AJ(2,3,L)=-RVINT*D23 AJ(3,1,L)= RVINT*D31 AJ(3,2,L)=-RVINT*D32 AJ(3,3,L)= RVINT*D33 ELSE VINT=0.D0 ENDIF PGSQ(L)=VINT C*** CALL DLAIN(ND,ND,AJ(1,1,L),KAUX,B,IER) C 20 CONTINUE C DO 31 L=1,NPG DO 31 I=1,NP DO 31 N=1,ND U=0.D0 DO 32 M=1,ND 32 U=U+AJ(M,N,L)*GR(M,I,L) 31 HR(N,I,L)=U U=0.D0 V=0.D0 DO 4 L=1,NPG W=ABS(PGSQ(L)) U=U+PG(L)*W V=V+PG(L)*PGSQ(L) 4 PGSQ(L)=PG(L)*W AIRE=U SGN=SIGN(1.D0,V) ENDIF IF(IAXI.EQ.0)RETURN C DO 45 L=1,NPG RPGT =0.D0 DO 46 I=1,NP RPGT=RPGT+XYZ(1,I)*FN(I,L) 46 CONTINUE RPG(L)=RPGT 45 CONTINUE C DEUPI=2.D0*XPI U=0.D0 DO 47 L=1,NPG C? PGSQ(L)=PGSQ(L)*DEUPI*RPG(L) U=U+PGSQ(L)*DEUPI*RPG(L) 47 CONTINUE AIRE=U C RETURN 1002 FORMAT(10(1X,1PE11.4)) 1001 FORMAT(20(1X,I5)) END
© Cast3M 2003 - Tous droits réservés.
Mentions légales