1 : C TESJA3 SOURCE GOUNAND 05/12/21 21:37:09 5281 2 : SUBROUTINE TESJA3(MYLRFS,MYPGS, 3 : $ IMPR,IRET) 4 : IMPLICIT REAL*8 (A-H,O-Z) 5 : IMPLICIT INTEGER (I-N) 6 : C*********************************************************************** 7 : C NOM : TESJA3 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 triangle... 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(2,2) 96 : REAL*8 X1,X2,X3 97 : REAL*8 Y1,Y2,Y3 98 : REAL*8 DETJXX,DETA,JXXA,XERR 99 : REAL*8 XERREL 100 : INTEGER NPG,INPG,ICOL,ILIG,INBTES 101 : LOGICAL LERJ 102 : * 103 : * Executable statements 104 : * 105 : WRITE(IOIMP,*) 'Entrée dans tesja3' 106 : * 107 : * On teste sur un triangle à trois noeuds (D&T p.108) 108 : * avec douze points de Gauss (sens direct et indirect pour le triangle). 109 : * Dimension des espaces de référence et réels : 2, 2 110 : * 110 : CALL FILRF('H1D1TR3',MYLRFS,MYLRF,IMPR,IRET) 111 : IF (IRET.NE.0) GOTO 9999 111 : CALL FIPG('GAT2-7-12',MYPGS,MYPG,IMPR,IRET) 112 : IF (IRET.NE.0) GOTO 9999 112 : CALL KFNREF(MYLRF,MYPG,FFGPG,DFFGPG,IMPR,IRET) 113 : IF (IRET.NE.0) GOTO 9999 114 : DO 3 INBTES=1,2 115 : IF (INBTES.EQ.1) THEN 116 : X1=1.01D0 117 : Y1=0.98D0 118 : X2=2.02D0 119 : Y2=1.99D0 120 : X3=3.03D0 121 : Y3=4.03D0 122 : ELSEIF (INBTES.EQ.2) THEN 123 : X1=1.01D0 124 : Y1=0.98D0 125 : X2=3.03D0 126 : Y2=4.03D0 127 : X3=2.02D0 128 : Y3=1.99D0 129 : ELSE 130 : WRITE(IOIMP,*) 'Erreur dans le nombre de tests' 131 : GOTO 9999 132 : ENDIF 133 : NBELM=1 134 : NBPOI=1 135 : N2COL=2 136 : N2LIG=1 137 : NBCOL=3 138 : NBLIG=1 139 : SEGINI JCOOR 140 : JCOOR.VELCHE(1,1,1,1,1,1)=X1 141 : JCOOR.VELCHE(1,1,1,2,1,1)=Y1 142 : JCOOR.VELCHE(1,2,1,1,1,1)=X2 143 : JCOOR.VELCHE(1,2,1,2,1,1)=Y2 144 : JCOOR.VELCHE(1,3,1,1,1,1)=X3 145 : JCOOR.VELCHE(1,3,1,2,1,1)=Y3 146 : SEGDES JCOOR 147 : IF (IMPR.GT.3) THEN 148 : WRITE(IOIMP,*) 'JCOOR' 148 : CALL PRCHVA(JCOOR,IMPR,IRET) 149 : IF (IRET.NE.0) GOTO 9999 150 : ENDIF 151 : LERJ=.FALSE. 151 : CALL GEOLIN(DFFGPG,JCOOR,NBELM, 152 : $ JMAJAC,JMIJAC,JDTJAC,LERJ, 153 : $ IMPR,IRET) 154 : IF (IRET.NE.0) GOTO 9999 155 : * 156 : * Test sur les valeurs de la matrice jacobienne et de son 157 : * déterminant aux points de Gauss... 158 : * 159 : SEGACT MYPG 160 : SEGACT JMAJAC 161 : SEGACT JDTJAC 162 : JXX(1,1)=X2-X1 163 : JXX(1,2)=X3-X1 164 : JXX(2,1)=Y2-Y1 165 : JXX(2,2)=Y3-Y1 166 : DETJXX=((X2-X1)*(Y3-Y1))-((X3-X1)*(Y2-Y1)) 167 : DO INPG=1,JMAJAC.VELCHE(/5) 168 : DO 322 ILIG=1,2 169 : DO 3222 ICOL=1,2 170 : JXXA=JMAJAC.VELCHE(1,1,ILIG,ICOL,INPG,1) 171 : XERR=XERREL(JXX(ILIG,ICOL),JXXA) 172 : IF (XERR.GT.10.D0*XZPREC) THEN 173 : WRITE(IOIMP,*) 'Erreur calcul mat. jac.' 174 : WRITE(IOIMP,*) 'XERR=',XERR, ' XZPREC=',XZPREC 175 : WRITE(IOIMP,*) 'JXX=',JXX(ILIG,ICOL) 176 : WRITE(IOIMP,*) 'JXXA=',JXXA 177 : GOTO 9999 178 : ENDIF 179 : 3222 CONTINUE 180 : 322 CONTINUE 181 : ENDDO 182 : DO INPG=1,JDTJAC.VELCHE(/5) 183 : DETA=JDTJAC.VELCHE(1,1,1,1,INPG,1) 184 : XERR=XERREL(DETJXX,DETA) 185 : IF (XERR.GT.10.D0*XZPREC) THEN 186 : WRITE(IOIMP,*) 'Erreur calcul det. mat. jac.' 187 : WRITE(IOIMP,*) 'XERR=',XERR, ' XZPREC=',XZPREC 188 : WRITE(IOIMP,*) 'DETJXX=',DETJXX 189 : WRITE(IOIMP,*) 'DETA=',DETA 190 : GOTO 9999 191 : ENDIF 192 : ENDDO 193 : SEGDES MYPG 194 : SEGDES JDTJAC 195 : SEGDES JMAJAC 196 : IF (IMPR.GT.3) THEN 197 : WRITE(IOIMP,*) 'JMAJAC' 197 : CALL PRCHVA(JMAJAC,IMPR,IRET) 198 : IF (IRET.NE.0) GOTO 9999 199 : WRITE(IOIMP,*) 'JMIJAC' 199 : CALL PRCHVA(JMIJAC,IMPR,IRET) 200 : IF (IRET.NE.0) GOTO 9999 201 : WRITE(IOIMP,*) 'JDTJAC' 201 : CALL PRCHVA(JDTJAC,IMPR,IRET) 202 : IF (IRET.NE.0) GOTO 9999 203 : ENDIF 204 : WRITE(IOIMP,*) 'Test',INBTES,' successful' 205 : 3 CONTINUE 206 : * 207 : * Normal termination 208 : * 209 : IRET=0 210 : RETURN 211 : * 212 : * Format handling 213 : * 214 : * 215 : * Error handling 216 : * 217 : 9999 CONTINUE 218 : IRET=1 219 : WRITE(IOIMP,*) 'An error was detected in subroutine tesja3' 220 : RETURN 221 : * 222 : * End of subroutine tesja3 223 : * 224 : END 225 : 226 :
© Cast3M 2003 - All rights reserved.
Disclaimer