C CQTGR1 SOURCE CHAT 05/01/12 22:27:34 5004 SUBROUTINE CQTGR1(IGAU,MELE,NBNN,LRE,IFOU,NGRA,XE,SHPTOT, 1 XDDL,SHP,BGR,DJAC,GRADI) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) ***************************************************************** * SOUS-PROGRAMME DE L'OPERATEUR GRADIENT * * CALCUL DES GRADIENTS DE TEMPERATURE POUR LES ELEMENTS COQ2,COQ3 * * * ENTREES : * * IGAU NUMERO DU POINT DE GAUSS * MELE NUMERO DE L'ELEMENT DANS NOMTP * NBNN NOMBRE DE NOEUDS * LRE NOMBRE DE COLONNES DE LA MATRICE BGR * IFOU IFOUR DE CCOPTIO * NGRA NOMBRE DE COMPOSANTES DE GRADIENTS * XE COORDONNEES DE L'ELEMENT * SHPTOT FONCTIONS DE FORMES ET DERIVEES * SHP TABLEAU DE TRAVAIL * BGR TABLEAU DE TRAVAIL * * SORTIES : * * GRADI TABLEAU CONTENANT LES COMPOSANTES DU GRADIENT * DJAC JACOBIEN * * AUTEUR : P.DOWLATYARI 27/05/91 ************************************************************************ -INC PPARAM -INC CCOPTIO DIMENSION XE(3,*),BGR(NGRA,*),SHP(6,*),SHPTOT(6,NBNN,*) DIMENSION XDDL(*),GRADI(*) DIMENSION COSD1(3),COSD2(3),COSD3(3),XE1(3,3) * CALL ZERO(BGR,NGRA,LRE) * IF(MELE.EQ.44)THEN * * COQ2 * IF(IFOU.EQ.0)THEN * * LA LONGUEUR DE L'ELEMENT * D=SQRT((XE(1,2)-XE(1,1))**2.D0 +(XE(2,2)-XE(2,1))**2.D0) DJAC=D IF (D.EQ.0.D0) RETURN BGR(1,1)=-1.D0/D BGR(1,2)= 1.D0/D ELSE * * ELEMENT AXISYM. DE FOURIER OU AUTRE * OPTION NON DISPONIBLE ACTUELLEMENT * CALL ERREUR(19) RETURN ENDIF ELSE * * COQ3 * * * CALCUL DES COORDONNEES DES NOEUDS DANS LE REPERE LOCAL DE L' * ELEMENT COQUE * CALL ZERO(XE1,3,3) DO 10 I=1,3 COSD1(I)=XE(I,2)-XE(I,1) COSD2(I)=XE(I,3)-XE(I,1) 10 CONTINUE * 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)) COSD3L=SQRT(COSD3(1)*COSD3(1)+COSD3(2)*COSD3(2)+ . COSD3(3)*COSD3(3)) * DO 20 I=1,3 COSD1(I)=COSD1(I)/COSD1L COSD3(I)=COSD3(I)/COSD3L 20 CONTINUE * 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 30 NOE=1,NBNN DO 30 I=1,3 XE1(1,NOE)=XE1(1,NOE)+XE(I,NOE)*COSD1(I) XE1(2,NOE)=XE1(2,NOE)+XE(I,NOE)*COSD2(I) 30 CONTINUE * DO 40 NP=1,NBNN SHP(1,NP)=SHPTOT(1,NP,IGAU) SHP(2,NP)=SHPTOT(2,NP,IGAU) SHP(3,NP)=SHPTOT(3,NP,IGAU) 40 CONTINUE * CALL JACOBI(XE1,SHP,2,NBNN,DJAC) K=1 DO 50 NP=1,NBNN BGR(1,K)=SHP(2,NP) BGR(2,K)=SHP(3,NP) K=K+1 50 CONTINUE * ENDIF * * CALCUL DES COMPOSANTES DU GRADIENT * LRE1=LRE/3 DO 60 IA=1,NGRA CC=0.D0 DO 70 IB=1,LRE1 IBB=(IB-1)*3+2 CC=CC+XDDL(IBB)*BGR(IA,IB) 70 CONTINUE GRADI(IA)=CC 60 CONTINUE * RETURN END