1 : C TESJA2 SOURCE GOUNAND 05/12/21 21:37:08 5281 2 : SUBROUTINE TESJA2(MYLRFS,MYPGS, 3 : $ IMPR,IRET) 4 : IMPLICIT REAL*8 (A-H,O-Z) 5 : IMPLICIT INTEGER (I-N) 6 : C*********************************************************************** 7 : C NOM : TESJA2 8 : C PROJET : Noyau linéaire NLIN 9 : C DESCRIPTION : On vérifie le calcul de la matrice jacobienne et de son 10 : C déterminant sur un segment... 11 : C 12 : C LANGAGE : ESOPE 13 : C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) 14 : C mél : gounand@semt2.smts.cea.fr 15 : C*********************************************************************** 16 : C APPELES : 17 : C APPELES (E/S) : 18 : C APPELES (BLAS) : 19 : C APPELES (CALCUL) : 20 : C APPELE PAR : TESTJA 21 : C*********************************************************************** 22 : C SYNTAXE GIBIANE : 23 : C ENTREES : 24 : C ENTREES/SORTIES : 25 : C SORTIES : 26 : C*********************************************************************** 27 : C VERSION : v1, 16/08/99, version initiale 28 : C HISTORIQUE : v1, 16/08/99, création 29 : C HISTORIQUE : 30 : C HISTORIQUE : 31 : C*********************************************************************** 32 : C Prière de PRENDRE LE TEMPS de compléter les commentaires 33 : C en cas de modification de ce sous-programme afin de faciliter 34 : C la maintenance ! 35 : C*********************************************************************** 36 : -INC CCOPTIO 37 : -INC CCREEL 38 : CBEGININCLUDE SELREF 39 : SEGMENT ELREF 40 : CHARACTER*(LNNOM) NOMLRF 41 : CHARACTER*(LNFORM) FORME 42 : CHARACTER*(LNTYPL) TYPEL 43 : CHARACTER*(LNESP) ESPACE 44 : INTEGER DEGRE 45 : REAL*8 XCONOD(NDIMEL,NBNOD) 46 : INTEGER NPQUAF(NBDDL) 47 : INTEGER NUMCMP(NBDDL) 48 : INTEGER QUENOD(NBDDL) 49 : INTEGER ORDDER(NDIMEL,NBDDL) 50 : POINTEUR MBPOLY.POLYNS 51 : ENDSEGMENT 52 : SEGMENT ELREFS 53 : POINTEUR LISEL(0).ELREF 54 : ENDSEGMENT 55 : CENDINCLUDE SELREF 56 : POINTEUR MYLRFS.ELREFS 57 : POINTEUR MYLRF.ELREF 58 : CBEGININCLUDE SPOGAU 59 : SEGMENT POGAU 60 : CHARACTER*(LNNPG) NOMPG 61 : CHARACTER*(LNTPG) TYPMPG 62 : CHARACTER*(LNFPG) FORLPG 63 : INTEGER NORDPG 64 : REAL*8 XCOPG(NDLPG,NBPG) 65 : REAL*8 XPOPG(NBPG) 66 : ENDSEGMENT 67 : SEGMENT POGAUS 68 : POINTEUR LISPG(0).POGAU 69 : ENDSEGMENT 70 : CENDINCLUDE SPOGAU 71 : POINTEUR MYPGS.POGAUS 72 : POINTEUR MYPG.POGAU 73 : CBEGININCLUDE SMCHAEL 74 : SEGMENT MCHAEL 75 : POINTEUR IMACHE(N1).MELEME 76 : POINTEUR ICHEVA(N1).MCHEVA 77 : ENDSEGMENT 78 : SEGMENT MCHEVA 79 : REAL*8 VELCHE(NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM) 80 : ENDSEGMENT 81 : SEGMENT LCHEVA 82 : POINTEUR LISCHE(NBCHE).MCHEVA 83 : ENDSEGMENT 84 : CENDINCLUDE SMCHAEL 85 : INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM 86 : POINTEUR JCOOR.MCHEVA 87 : POINTEUR JMAJAC.MCHEVA 88 : POINTEUR JMIJAC.MCHEVA 89 : POINTEUR JDTJAC.MCHEVA 90 : POINTEUR FFGPG.MCHEVA 91 : POINTEUR DFFGPG.MCHEVA 92 : * 93 : INTEGER IMPR,IRET 94 : * 95 : REAL*8 JXX(1,1),JIXX(1,1) 96 : REAL*8 X1,X2 97 : REAL*8 L,DETJXX,DETA,JXXA,JIXXA,XERR 98 : REAL*8 XERREL 99 : INTEGER NPG,INPG,INBTES 100 : LOGICAL LERJ 101 : * 102 : * Executable statements 103 : * 104 : WRITE(IOIMP,*) 'Entrée dans tesja2' 105 : * 106 : * On teste sur un segment à deux noeuds (D&T p.96) 107 : * avec six points de Gauss (sens direct et indirect pour le segment). 108 : * Dimension des espaces de référence et réels : 1, 1 109 : * 109 : CALL FILRF('H1D1SE2',MYLRFS,MYLRF,IMPR,IRET) 110 : IF (IRET.NE.0) GOTO 9999 110 : CALL FIPG('GAC1-11-6',MYPGS,MYPG,IMPR,IRET) 111 : IF (IRET.NE.0) GOTO 9999 111 : CALL KFNREF(MYLRF,MYPG,FFGPG,DFFGPG,IMPR,IRET) 112 : IF (IRET.NE.0) GOTO 9999 113 : DO 3 INBTES=1,2 114 : IF (INBTES.EQ.1) THEN 115 : X1=-2.D0*XPI 116 : X2=XPI 117 : ELSEIF (INBTES.EQ.2) THEN 118 : X1=3.D0*XPI 119 : X2=-XPI 120 : ELSE 121 : WRITE(IOIMP,*) 'Erreur dans le nombre de tests' 122 : GOTO 9999 123 : ENDIF 124 : NBELM=1 125 : NBPOI=1 126 : N2COL=1 127 : N2LIG=1 128 : NBCOL=2 129 : NBLIG=1 130 : SEGINI JCOOR 131 : JCOOR.VELCHE(1,1,1,1,1,1)=X1 132 : JCOOR.VELCHE(1,2,1,1,1,1)=X2 133 : SEGDES JCOOR 134 : IF (IMPR.GT.3) THEN 135 : WRITE(IOIMP,*) 'JCOOR' 135 : CALL PRCHVA(JCOOR,IMPR,IRET) 136 : IF (IRET.NE.0) GOTO 9999 137 : ENDIF 138 : LERJ=.FALSE. 138 : CALL GEOLIN(DFFGPG,JCOOR,NBELM, 139 : $ JMAJAC,JMIJAC,JDTJAC,LERJ, 140 : $ IMPR,IRET) 141 : IF (IRET.NE.0) GOTO 9999 142 : * 143 : * Test sur les valeurs de la matrice jacobienne, de son inverse 144 : * et de son déterminant aux points de Gauss... 145 : * 146 : SEGACT JMAJAC 147 : SEGACT JMIJAC 148 : SEGACT JDTJAC 149 : L=(X2-X1) 150 : JXX(1,1)=L/2.D0 151 : JIXX(1,1)=2.D0/L 152 : DETJXX=L/2.D0 153 : DO INPG=1,JMAJAC.VELCHE(/5) 154 : JXXA=JMAJAC.VELCHE(1,1,1,1,INPG,1) 155 : XERR=XERREL(JXX(1,1),JXXA) 156 : IF (XERR.GT.10.D0*XZPREC) THEN 157 : WRITE(IOIMP,*) 'Erreur calcul mat. jac.' 158 : WRITE(IOIMP,*) 'XERR=',XERR, ' XZPREC=',XZPREC 159 : WRITE(IOIMP,*) 'JXX=',JXX(1,1) 160 : WRITE(IOIMP,*) 'JXXA=',JXXA 161 : GOTO 9999 162 : ENDIF 163 : ENDDO 164 : DO INPG=1,JMIJAC.VELCHE(/5) 165 : JIXXA=JMIJAC.VELCHE(1,1,1,1,INPG,1) 166 : XERR=XERREL(JIXX(1,1),JIXXA) 167 : IF (XERR.GT.10.D0*XZPREC) THEN 168 : WRITE(IOIMP,*) 'Erreur calcul mat. jac.' 169 : WRITE(IOIMP,*) 'XERR=',XERR, ' XZPREC=',XZPREC 170 : WRITE(IOIMP,*) 'JIXX=',JIXX(1,1) 171 : WRITE(IOIMP,*) 'JIXXA=',JIXXA 172 : GOTO 9999 173 : ENDIF 174 : ENDDO 175 : DO INPG=1,JDTJAC.VELCHE(/5) 176 : DETA=JDTJAC.VELCHE(1,1,1,1,INPG,1) 177 : XERR=XERREL(DETJXX,DETA) 178 : IF (XERR.GT.10.D0*XZPREC) THEN 179 : WRITE(IOIMP,*) 'Erreur calcul det. mat. jac.' 180 : WRITE(IOIMP,*) 'XERR=',XERR, ' XZPREC=',XZPREC 181 : WRITE(IOIMP,*) 'DETJXX=',DETJXX 182 : WRITE(IOIMP,*) 'DETA=',DETA 183 : GOTO 9999 184 : ENDIF 185 : ENDDO 186 : SEGDES JDTJAC 187 : SEGDES JMIJAC 188 : SEGDES JMAJAC 189 : IF (IMPR.GT.3) THEN 190 : WRITE(IOIMP,*) 'JMAJAC' 190 : CALL PRCHVA(JMAJAC,IMPR,IRET) 191 : IF (IRET.NE.0) GOTO 9999 192 : WRITE(IOIMP,*) 'JMIJAC' 192 : CALL PRCHVA(JMIJAC,IMPR,IRET) 193 : IF (IRET.NE.0) GOTO 9999 194 : WRITE(IOIMP,*) 'JDTJAC' 194 : CALL PRCHVA(JDTJAC,IMPR,IRET) 195 : IF (IRET.NE.0) GOTO 9999 196 : ENDIF 197 : WRITE(IOIMP,*) 'Test',INBTES,' successful' 198 : 3 CONTINUE 199 : * 200 : * Normal termination 201 : * 202 : IRET=0 203 : RETURN 204 : * 205 : * Format handling 206 : * 207 : * 208 : * Error handling 209 : * 210 : 9999 CONTINUE 211 : IRET=1 212 : WRITE(IOIMP,*) 'An error was detected in subroutine tesja2' 213 : RETURN 214 : * 215 : * End of subroutine tesja2 216 : * 217 : END 218 : 219 :
© Cast3M 2003 - All rights reserved.
Disclaimer