ccgmtl
C CCGMTL SOURCE GOUNAND 26/06/09 21:15:03 12566 SUBROUTINE CCGMTL(LCOF,NOMLOI, $ FC, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : CCGMTL C DESCRIPTION : Lois de comportement aux points de Gauss : C Métrique locale par rapport à un élément de référence C régulier ponderee par une metrique globale M C C (Copie de CCGMET et CCGAHU) C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : C APPELE PAR : C*********************************************************************** C ENTREES : C ENTREES/SORTIES : C SORTIES : - C TRAVAIL : C*********************************************************************** C VERSION : v1, 2026/04/14, version initiale C HISTORIQUE : v1, 2026/04/14, création 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 -INC CCREEL -INC TNLIN *-INC SMCHAEL INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM,N1 POINTEUR FC.MCHEVA POINTEUR LCOF.LCHEVA POINTEUR JMAJAC.MCHEVA POINTEUR JMIJAC.MCHEVA POINTEUR JDTJAC.MCHEVA POINTEUR JMET.MCHEVA POINTEUR JMAREG.MCHEVA CHARACTER*8 NOMLOI INTEGER ICOF * -INC TMXMAT * Objets temporaires POINTEUR JAC.MXMAT,J.MXMAT,MJ.MXMAT,JT.MXMAT POINTEUR JR.MXMAT,IJR.MXMAT,G.MXMAT,IG.MXMAT,GTMP.MXMAT POINTEUR M.MXMAT * SEGMENT MCOF POINTEUR COEF(IDIM,IDIM).MCHEVA ENDSEGMENT POINTEUR MET.MCOF * INTEGER IMPR,IRET * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans ccgmtl' C IF (.NOT.(IDIM.EQ.1)) THEN C WRITE(IOIMP,*) 'IDIM=',IDIM,' ?' C GOTO 9999 C ENDIF NLFC=FC.WELCHE(/6) NPFC=FC.WELCHE(/5) ICOF=0 * * Récupération des coefficients de la metrique * SEGINI MET DO IIDIM=1,IDIM ICOF=ICOF+1 JMET=LCOF.LISCHE(ICOF) IF (ICOF.EQ.1) THEN NLJM=JMET.WELCHE(/6) NPJM=JMET.WELCHE(/5) ELSE NLJM2=JMET.WELCHE(/6) NPJM2=JMET.WELCHE(/5) IF (NLJM2.NE.NLJM.OR.NPJM2.NE.NPJM) THEN WRITE(IOIMP,*) 'Erreur grave dims JMET' GOTO 9999 ENDIF ENDIF MET.COEF(IIDIM,IIDIM)=JMET ENDDO DO IIDIM=1,IDIM NJ=IDIM-IIDIM IF (NJ.GE.1) THEN DO JIDIM=IIDIM+1,IDIM ICOF=ICOF+1 JMET=LCOF.LISCHE(ICOF) NLJM2=JMET.WELCHE(/6) NPJM2=JMET.WELCHE(/5) IF (NLJM2.NE.NLJM.OR.NPJM2.NE.NPJM) THEN WRITE(IOIMP,*) 'Erreur grave dims JMET2' GOTO 9999 ENDIF MET.COEF(IIDIM,JIDIM)=JMET ENDDO ENDIF ENDDO * ICOF=ICOF+1 JMAJAC=LCOF.LISCHE(ICOF) NLJA=JMAJAC.WELCHE(/6) NPJA=JMAJAC.WELCHE(/5) IREF=JMAJAC.WELCHE(/4) IREL=JMAJAC.WELCHE(/3) * IF (IREL.NE.IDIM) THEN WRITE(IOIMP,*) 'Erreur dims JMAJAC' GOTO 9999 ENDIF * ICOF=ICOF+1 ICOF=ICOF+1 ICOF=ICOF+1 JMAREG=LCOF.LISCHE(ICOF) NLJR=JMAREG.WELCHE(/6) NPJR=JMAREG.WELCHE(/5) I1 =JMAREG.WELCHE(/4) $ THEN WRITE(IOIMP,*) 'Erreur dims JMAREG' GOTO 9999 ENDIF * * Objets temporaires et à préconditionner * LDIM1=IREL LDIM2=IREF SEGINI,JAC SEGINI,J SEGINI,MJ LDIM1=IREF LDIM2=IREL SEGINI,JT LDIM1=IREF LDIM2=IREF SEGINI,JR SEGINI,IJR SEGINI,G SEGINI,IG * SEGINI,GTMP LDIM1=IREL LDIM2=IREL SEGINI,M * * Calcul de la métrique des éléments réguliers * $ 'COPIE ',JR.XMAT,IREF,IREF, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * SEGPRT,JR * Calcul de l'inverse, du déterminant et trace de l'inverse de h $ IMPR,IRET) IF (IRET.NE.0) THEN WRITE(IOIMP,*) $ 'Jacobien des elements reguliers non inversible' SEGPRT,JMAREG SEGPRT,IJR GOTO 9999 ENDIF * SEGPRT,IJR * DO ILFC=1,NLFC IF (NLJM.EQ.1) THEN ILJM=1 ELSE ILJM=ILFC ENDIF IF (NLJA.EQ.1) THEN ILJA=1 ELSE ILJA=ILFC ENDIF DO IPFC=1,NPFC IF (NPJM.EQ.1) THEN IPJM=1 ELSE IPJM=IPFC ENDIF IF (NPJA.EQ.1) THEN IPJA=1 ELSE IPJA=IPFC ENDIF * * Copie des coefficients de la métrique * DO IIDIM=1,IDIM JMET=MET.COEF(IIDIM,IIDIM) M.XMAT(IIDIM,IIDIM)=JMET.WELCHE(1,1,1,1,IPJM,ILJM) ENDDO DO IIDIM=1,IIDIM NJ=IDIM-IIDIM IF (NJ.GE.1) THEN DO JIDIM=IIDIM+1,IDIM JMET=MET.COEF(IIDIM,JIDIM) M.XMAT(IIDIM,JIDIM)=JMET.WELCHE(1,1,1,1,IPJM,ILJM) M.XMAT(JIDIM,IIDIM)=JMET.WELCHE(1,1,1,1,IPJM,ILJM) ENDDO ENDIF ENDDO * SEGPRT,M * * Copie du jacobien * $ 'COPIE ', $ JAC.XMAT,IREL,IREF, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * SEGPRT,JAC * * Jacobien complet * $ 'FOIS ',J.XMAT,IREL,IREF,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * * Calcul de la métrique G = Jt M J * * Calcul de Jt $ 'TRANSPOS',JT.XMAT,IREF,IREL, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * SEGPRT,JT * Calcul de MJ $ 'FOIS ',MJ.XMAT,IREL,IREF, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * Calcul de G=JtMJ $ 'FOIS ',G.XMAT,IREF,IREF, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * SEGPRT,G IF (IRET.GT.0) GOTO 9999 * write(ioimp,*) 'In ccgmtl: JTMJ XM=',XM XM=SQRT(MAX(XM,XZERO)) IF (IRET.NE.0) GOTO 9999 * write(ioimp,*) 'In ccgmtl: JTMJ XL=',XL IF (IREF.EQ.IREL) THEN c$$$ CALL GEOLI2(IREF,1,1,JAC.XMAT,GTMP.XMAT,XDET, c$$$ $ IMPR,IRET) c$$$ IF (IRET.GT.0) GOTO 9999 c$$$ CALL MARE(JAC.XMAT,IREF,IREF,'TRACE ', c$$$ $ XTRA,IMPR,IRET) c$$$ IF (IRET.NE.0) GOTO 9999 c$$$ write(ioimp,*) 'In ccgmtl: JAC XDET,XTRA=',XDET,XTRA c$$$ CALL GEOLI2(IREF,1,1,M.XMAT,GTMP.XMAT,XDET, c$$$ $ IMPR,IRET) c$$$ IF (IRET.GT.0) GOTO 9999 c$$$ CALL MARE(M.XMAT,IREF,IREF,'TRACE ', c$$$ $ XTRA,IMPR,IRET) c$$$ IF (IRET.NE.0) GOTO 9999 c$$$ write(ioimp,*) 'In ccgmtl: MET XDET,XTRA=',XDET,XTRA c$$$ CALL GEOLI2(IREF,1,1,G.XMAT,GTMP.XMAT,XM, c$$$ $ IMPR,IRET) c$$$ IF (IRET.GT.0) GOTO 9999 c$$$ CALL MARE(G.XMAT,IREF,IREF,'TRACE ', c$$$ $ XL,IMPR,IRET) c$$$ IF (IRET.NE.0) GOTO 9999 c$$$ write(ioimp,*) 'In ccgmtl: JTMJ XM,XL=',XM,XL ENDIF * * Calcul des la métrique inverse de l'élément * IF (NOMLOI(1:4).EQ.'METL') THEN IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 CONTRI=G.XMAT(IDIM1,IDIM2) * WRITE(IOIMP,*) 'CONTRI=',CONTRI ELSE WRITE(IOIMP,*) 'NOMLOI=',NOMLOI WRITE(IOIMP,*) 'Erreur grave' GOTO 9999 ENDIF FC.WELCHE(1,1,1,1,IPFC,ILFC)= $ FC.WELCHE(1,1,1,1,IPFC,ILFC)+ $ CONTRI ENDDO ENDDO SEGSUP,M SEGSUP,G SEGSUP,IJR SEGSUP,JR SEGSUP,JT SEGSUP,MJ SEGSUP,J SEGSUP,JAC SEGSUP,MET * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine ccgmtl' RETURN * * End of subroutine CCGMTL * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales