Download tesja4.eso

Back to the list

   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