Télécharger tesja1.eso

Retour à la liste

Numérotation des lignes :

tesja1
  1. C TESJA1 SOURCE GOUNAND 26/01/09 21:15:55 12441
  2. SUBROUTINE TESJA1(MYLRFS,MYPGS,
  3. $ IMPR,IRET)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. IMPLICIT INTEGER (I-N)
  6. C***********************************************************************
  7. C NOM : TESJA1
  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 carré...
  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.  
  37. -INC PPARAM
  38. -INC CCOPTIO
  39. -INC CCREEL
  40. -INC TNLIN
  41. *-INC SELREF
  42. POINTEUR MYLRFS.ELREFS
  43. POINTEUR MYLRF.ELREF
  44. *-INC SPOGAU
  45. POINTEUR MYPGS.POGAUS
  46. POINTEUR MYPG.POGAU
  47. *-INC SMCHAEL
  48. INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM
  49. POINTEUR JCOOR.MCHEVA
  50. POINTEUR JMAJAC.MCHEVA
  51. POINTEUR JMIJAC.MCHEVA
  52. POINTEUR JDTJAC.MCHEVA
  53. POINTEUR FFGPG.MCHEVA
  54. POINTEUR DFFGPG.MCHEVA
  55. *
  56. INTEGER IMPR,IRET
  57. *
  58. REAL*8 JXX(2,2)
  59. REAL*8 X1,X2,X3,X4
  60. REAL*8 Y1,Y2,Y3,Y4
  61. REAL*8 KSIPG,ETAPG,A0,A1,A2,DETJXX,DETA,JXXA,XERR
  62. INTEGER NPG,INPG,ICOL,ILIG,INBTES
  63. *
  64. * Executable statements
  65. *
  66. WRITE(IOIMP,*) 'Entrée dans tesja1'
  67. *
  68. * On teste sur un élément quadrilatéral à quatre noeuds (D&T p.54-55)
  69. * avec douze points de Gauss, dans le cas rectangulaire, et dans le cas
  70. * où l'élément est illicite (les côtés opposés se croisent).
  71. * Dimension des espaces de référence et réels : 2, 2
  72. *
  73. *
  74. CALL FILRF('H1D1QU4',MYLRFS,MYLRF,IMPR,IRET)
  75. IF (IRET.NE.0) GOTO 9999
  76. CALL FIPG('GAC2-7-12A',MYPGS,MYPG,IMPR,IRET)
  77. IF (IRET.NE.0) GOTO 9999
  78. CALL KFNREF(MYLRF,MYPG,FFGPG,DFFGPG,IMPR,IRET)
  79. IF (IRET.NE.0) GOTO 9999
  80. DO 3 INBTES=1,3
  81. IF (INBTES.EQ.1) THEN
  82. X1=0.9D0
  83. Y1=1.1D0
  84. X2=1.75D0
  85. Y2=2.25D0
  86. X3=3.4D0
  87. Y3=3.9D0
  88. X4=2.1D0
  89. Y4=6.2D0
  90. ELSEIF (INBTES.EQ.2) THEN
  91. X1=0.9D0
  92. Y1=1.1D0
  93. X2=1.75D0
  94. Y2=Y1
  95. X3=X2
  96. Y3=3.9D0
  97. X4=X1
  98. Y4=Y3
  99. ELSEIF (INBTES.EQ.3) THEN
  100. X1=0.9D0
  101. Y1=1.1D0
  102. X3=1.75D0
  103. Y3=2.25D0
  104. X2=3.4D0
  105. Y2=3.9D0
  106. X4=2.1D0
  107. Y4=6.2D0
  108. ELSE
  109. WRITE(IOIMP,*) 'Erreur dans le nombre de tests'
  110. GOTO 9999
  111. ENDIF
  112. NBELM=1
  113. NBPOI=1
  114. N2COL=2
  115. N2LIG=1
  116. NBCOL=4
  117. NBLIG=1
  118. SEGINI JCOOR
  119. JCOOR.WELCHE(1,1,1,1,1,1)=X1
  120. JCOOR.WELCHE(1,1,1,2,1,1)=Y1
  121. JCOOR.WELCHE(1,2,1,1,1,1)=X2
  122. JCOOR.WELCHE(1,2,1,2,1,1)=Y2
  123. JCOOR.WELCHE(1,3,1,1,1,1)=X3
  124. JCOOR.WELCHE(1,3,1,2,1,1)=Y3
  125. JCOOR.WELCHE(1,4,1,1,1,1)=X4
  126. JCOOR.WELCHE(1,4,1,2,1,1)=Y4
  127. * Echelle de valeurs pour les coordonnées
  128. XYMAX=XZERO
  129. do ibelm=1,nbelm
  130. do ibpoi=1,nbpoi
  131. do i2col=1,n2col
  132. do i2lig=1,n2lig
  133. do ibcol=1,nbcol
  134. do iblig=1,nblig
  135. XYMAX=MAX(abs(jcoor.welche(iblig,ibcol,i2lig
  136. $ ,i2col,ibpoi,ibelm)),xymax)
  137. enddo
  138. enddo
  139. enddo
  140. enddo
  141. enddo
  142. enddo
  143. xtprec=max(XYMAX*xzprec,sqrt(xpetit))
  144. *
  145. IF (IMPR.GT.3) THEN
  146. WRITE(IOIMP,*) 'JCOOR'
  147. CALL PRCHVA(JCOOR,IMPR,IRET)
  148. IF (IRET.NE.0) GOTO 9999
  149. ENDIF
  150. CALL GEOLIN(DFFGPG,JCOOR,NBELM,
  151. $ JMAJAC,JMIJAC,JDTJAC,
  152. $ IMPR,IRET)
  153. IF (INBTES.NE.3) THEN
  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. NPG=MYPG.XCOPG(/2)
  163. DO 32 INPG=1,NPG
  164. KSIPG=MYPG.XCOPG(1,INPG)
  165. ETAPG=MYPG.XCOPG(2,INPG)
  166. JXX(1,1)=0.25D0*((-X1+X2+X3-X4)
  167. $ +(ETAPG*(X1-X2+X3-X4)))
  168. JXX(1,2)=0.25D0*((-X1-X2+X3+X4)
  169. $ +(KSIPG*(X1-X2+X3-X4)))
  170. JXX(2,1)=0.25D0*((-Y1+Y2+Y3-Y4)
  171. $ +(ETAPG*(Y1-Y2+Y3-Y4)))
  172. JXX(2,2)=0.25D0*((-Y1-Y2+Y3+Y4)
  173. $ +(KSIPG*(Y1-Y2+Y3-Y4)))
  174. A0=0.125D0*(((Y4-Y2)*(X3-X1))
  175. $ -((Y3-Y1)*(X4-X2)))
  176. A1=0.125D0*(((Y3-Y4)*(X2-X1))
  177. $ -((Y2-Y1)*(X3-X4)))
  178. A2=0.125D0*(((Y4-Y1)*(X3-X2))
  179. $ -((Y3-Y2)*(X4-X1)))
  180. DETJXX=A0+(A1*KSIPG)+(A2*ETAPG)
  181. DO 322 ILIG=1,2
  182. DO 3222 ICOL=1,2
  183. JXXA=JMAJAC.WELCHE(1,1,ILIG,ICOL,INPG,1)
  184. XERR=ABS(JXX(ILIG,ICOL)-JXXA)
  185. IF (XERR.GT.XTPREC) THEN
  186. WRITE(IOIMP,*) 'Erreur calcul mat. jac.'
  187. WRITE(IOIMP,*) 'XERR=',XERR, ' XTPREC=',XTPREC
  188. WRITE(IOIMP,*) 'JXX=',JXX(ILIG,ICOL)
  189. WRITE(IOIMP,*) 'JXXA=',JXXA
  190. GOTO 9999
  191. ENDIF
  192. 3222 CONTINUE
  193. 322 CONTINUE
  194. DETA=JDTJAC.WELCHE(1,1,1,1,INPG,1)
  195. XERR=ABS(DETJXX-DETA)
  196. IF (XERR.GT.XTPREC) THEN
  197. WRITE(IOIMP,*) 'Erreur calcul det. mat. jac.'
  198. WRITE(IOIMP,*) 'XERR=',XERR, ' XTPREC=',XTPREC
  199. WRITE(IOIMP,*) 'DETJXX=',DETJXX
  200. WRITE(IOIMP,*) 'DETA=',DETA
  201. GOTO 9999
  202. ENDIF
  203. 32 CONTINUE
  204. SEGDES MYPG
  205. SEGDES JDTJAC
  206. SEGDES JMAJAC
  207. IF (IMPR.GT.3) THEN
  208. WRITE(IOIMP,*) 'JMAJAC'
  209. CALL PRCHVA(JMAJAC,IMPR,IRET)
  210. IF (IRET.NE.0) GOTO 9999
  211. WRITE(IOIMP,*) 'JMIJAC'
  212. CALL PRCHVA(JMIJAC,IMPR,IRET)
  213. IF (IRET.NE.0) GOTO 9999
  214. WRITE(IOIMP,*) 'JDTJAC'
  215. CALL PRCHVA(JDTJAC,IMPR,IRET)
  216. IF (IRET.NE.0) GOTO 9999
  217. ENDIF
  218. WRITE(IOIMP,*) 'Test',INBTES,' successful'
  219. ELSE
  220. IF (JMIJAC.NE.0) THEN
  221. WRITE(IOIMP,*)
  222. $ 'Linverse du Jacobien naurait pas du etre calcule...'
  223. GOTO 9999
  224. ELSE
  225. WRITE(IOIMP,*)
  226. $ 'Inverse du Jacobien non calculable comme prevu...'
  227. ENDIF
  228. ENDIF
  229. 3 CONTINUE
  230. *
  231. * Normal termination
  232. *
  233. IRET=0
  234. RETURN
  235. *
  236. * Format handling
  237. *
  238. *
  239. * Error handling
  240. *
  241. 9999 CONTINUE
  242. IRET=1
  243. WRITE(IOIMP,*) 'An error was detected in subroutine tesja1'
  244. RETURN
  245. *
  246. * End of subroutine tesja1
  247. *
  248. END
  249.  
  250.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales