geoli4
C GEOLI4 SOURCE GOUNAND 14/05/28 21:15:06 8056 $ JJTJ,JJTJM1, $ JMIJAC,JDTJAC,LERJ, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : GEOLI4 C PROJET : Noyau linéaire NLIN C DESCRIPTION : Calcul du jacobien dans le cas où la matrice C jacobienne A n'est pas carrée. A(n,m) C On calcule sqrt (det (transpose(A) * A)) C Ceci est effectué pour chaque point de Gauss d'un C élément. C On calcule aussi le pseudo-inverse de J C C LANGAGE : Fortran 77 (sauf E/S) C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : - C APPELE PAR : GEOLIN C*********************************************************************** C ENTREES : * IESREL (type entier) : dimension de l'espace C réel (i.e. géométrique). C * IESREF (type entier) : dimension de l'espace de C référence. C * NDNOEU (type entier) : nombre de ddl (par C élément) de la transformation géométrique. C * NDPOGO (type entier) : nombre de points C d'intégration. C * NDELEM (type entier) : nombre d'éléments du C maillage élémentaire courant. C * JMAJAC (type MCHEVA) : valeurs de la matrice C jacobienne aux points de Gauss sur le maillage C élémentaire courant. C ENTREES/SORTIES : * JDTJAC (type MCHEVA) : valeurs de C sqrt(det(trans(J).J)) aux points de Gauss sur C le maillage élémentaire courant. C SORTIES : - C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 26/10/06, version initiale C HISTORIQUE : v1, 26/10/06, création C HISTORIQUE : C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** -INC PPARAM -INC CCOPTIO INTEGER IESREF,IESREL,NDPOGO,NDELEM REAL*8 JMAJAC(IESREL,IESREF,NDPOGO,NDELEM) REAL*8 JMIJAC(IESREF,IESREL,NDPOGO,NDELEM) REAL*8 JJTJ(IESREF,IESREF,NDPOGO,NDELEM) REAL*8 JJTJM1(IESREF,IESREF,NDPOGO,NDELEM) REAL*8 JDTJAC(NDPOGO,NDELEM) * INTEGER IMPR,IRET * INTEGER IELEM,IPOGO,IKF,IIF,IJL,IKL,IJF LOGICAL LERJ * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans geoli4' * * Calcul de JtJ * DO IELEM=1,NDELEM DO IPOGO=1,NDPOGO DO IKF=1,IESREF DO IIF=1,IESREF DO IJL=1,IESREL JJTJ(IIF,IKF,IPOGO,IELEM)= $ JJTJ(IIF,IKF,IPOGO,IELEM)+ $ (JMAJAC(IJL,IIF,IPOGO,IELEM) $ *JMAJAC(IJL,IKF,IPOGO,IELEM)) ENDDO ENDDO ENDDO ENDDO ENDDO * * Inverse et déterminant * $ JJTJM1,JDTJAC,LERJ, $ IMPR,IRET) IF (IRET.NE.0) THEN IF (LERJ) THEN WRITE(IOIMP,*) 'Erreur totalement anormale' ENDIF GOTO 9999 ENDIF * * Pseudo-inverse * DO IELEM=1,NDELEM DO IPOGO=1,NDPOGO DO IKL=1,IESREL DO IIF=1,IESREF DO IJF=1,IESREF JMIJAC(IIF,IKL,IPOGO,IELEM)= $ JMIJAC(IIF,IKL,IPOGO,IELEM)+ $ (JJTJM1(IIF,IJF,IPOGO,IELEM) $ *JMAJAC(IKL,IJF,IPOGO,IELEM)) ENDDO ENDDO ENDDO ENDDO ENDDO * * Racine du déterminant * DO IELEM=1,NDELEM DO IPOGO=1,NDPOGO JDTJAC(IPOGO,IELEM)=SQRT(JDTJAC(IPOGO,IELEM)) ENDDO ENDDO * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9998 CONTINUE WRITE(IOIMP,*) 'Déterminant de la matrice tAA nul ou négatif' WRITE(IOIMP,*) 'IELEM=',IELEM,' IPOGO=',IPOGO GOTO 9999 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine geoli4' RETURN * * End of subroutine GEOLI4 * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales