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