Télécharger geolif.eso

Retour à la liste

Numérotation des lignes :

geolif
  1. C GEOLIF SOURCE GOUNAND 21/06/02 21:16:09 11022
  2. SUBROUTINE GEOLIF(DFFPG,JCOOR,SSFACT,NBELEF,
  3. $ JMAJAC,JMIJAC,JDTJAC,LERJ,
  4. $ IMPR,IRET)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6. IMPLICIT INTEGER (I-N)
  7. C***********************************************************************
  8. C NOM : GEOLIF
  9. C PROJET : Noyau linéaire NLIN
  10. C DESCRIPTION : Calcul de la matrice jacobienne d'une transformation
  11. C géométrique aux points de Gauss d'un élément de
  12. C référence pour chaque élément réel.
  13. C On a :
  14. C Fonction f : R^m -> R^n
  15. C a=(a1...am) |-> f(a)=(f1(a)...fn(a)
  16. C => matjac(i,j)(a)=Dj fi (a) = dfi / dxj (a)
  17. C
  18. C Par exemple, pour une surface en 3D, la matrice jacobienne
  19. C s'exprime comme :
  20. C
  21. C [ <xn> ]
  22. C [J] = [ <yn> ] . [ { dNg/d(ksi) } { dNg/d(eta) } ]
  23. C [ <zn> ]
  24. C
  25. C (3x2) (3 x Nnoeuds) (Nnoeuds x 2)
  26. C
  27. C Ici, le nb de ddl est égal aux nbs de noeuds car l'interpolation
  28. C pour la géométrie est de type nodale.
  29. C
  30. C Si la matrice jacobienne J est carrée, on calcule
  31. C également l'inverse de la matrice jacobienne j ainsi que
  32. C son déterminant : det J (appelé Jacobien).
  33. C Si la matrice jacobienne n'est pas carrée, le Jacobien
  34. C est calculé comme :
  35. C sqrt(det(transpose(J)*J))
  36. C Le but de ce sous-programme est d'effectuer toutes les
  37. C opérations de calcul dépendant uniquement de la
  38. C géométrie (ie de la variable : coordonnées des points).
  39. C
  40. C LANGAGE : ESOPE
  41. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  42. C mél : gounand@semt2.smts.cea.fr
  43. C***********************************************************************
  44. C APPELES : RSET8 (copie de tableaux de CHARACTER*8)
  45. C PRCHVA (impression d'un segment de type MCHEVA)
  46. C GEOLI1 (calcul de la matrice jacobienne (fortran 77
  47. C ))
  48. C GEOLI2 (calcul de l'inverse et du déterminant de la
  49. C matrice jacobienne (fortran 77))
  50. C GEOLI3 (calcul de sqrt(det(transpose(J)*J)), J
  51. C étant la matrice jacobienne (fortran 77))
  52. C APPELE PAR : NLIN
  53. C***********************************************************************
  54. C ENTREES : * DFFPG (type MCHEVA) : valeurs des dérivées
  55. C premières des fonctions d'interpolation de la
  56. C transformation géométrique aux points de gauss
  57. C sur l'élément de référence.
  58. C Structure (cf.include SMCHAEL) :
  59. C (1, nb. ddl, 1, dim.esp.réf, nb. poi. gauss, 1)
  60. C * JCOOR (type MCHEVA) : valeurs des ddl de la
  61. C transformation géométrique sur le maillage
  62. C élémentaire courant.
  63. C Structure (cf.include SMCHAEL) :
  64. C (1, nb. ddl, 1, dim. esp. réel,
  65. C 1, nb. éléments)
  66. C * NBELEV (type entier) : nombre d'éléments du
  67. C maillage élémentaire courant.
  68. C ENTREES/SORTIES : -
  69. C SORTIES : * JMAJAC (type MCHEVA) : valeurs de la matrice
  70. C jacobienne aux points de Gauss sur le maillage
  71. C élémentaire courant.
  72. C Structure (cf.include SMCHAEL) :
  73. C (1, 1, dim. esp. réel, dim. esp. référence,
  74. C nb. poi. gauss, nb. éléments)
  75. C * JMIJAC (type MCHEVA) : valeurs de l'inverse de
  76. C la matrice jacobienne aux points de Gauss sur
  77. C le maillage élémentaire courant.
  78. C Structure (cf.include SMCHAEL) :
  79. C (1, 1, dim. esp. référence, dim. esp. réel,
  80. C nb. poi. gauss, nb. éléments)
  81. C JMIJAC n'existe que si dim.esp.réf=dim.esp.réel
  82. C * JDTJAC (type MCHEVA) : valeurs du déterminant
  83. C de la matrice jacobienne aux points de Gauss
  84. C sur le maillage élémentaire courant.
  85. C Structure (cf.include SMCHAEL) :
  86. C (1, 1, 1, 1, nb. poi. gauss, nb. éléments)
  87. C Si la matrice jacobienne n'est pas carrée, on
  88. C a calculé sqrt(det(trans(J).J))
  89. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  90. C***********************************************************************
  91. C VERSION : v2, 03/10/03, refonte complète (modif SMTNLIN)
  92. C VERSION : v1, 09/08/99, version initiale
  93. C HISTORIQUE : v1, 09/08/99, création
  94. C HISTORIQUE :
  95. C HISTORIQUE :
  96. C***********************************************************************
  97. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  98. C en cas de modification de ce sous-programme afin de faciliter
  99. C la maintenance !
  100. C***********************************************************************
  101.  
  102. -INC PPARAM
  103. -INC CCOPTIO
  104. -INC TNLIN
  105. *-INC SFACTIV
  106. *-INC SMCHAEL
  107. INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM
  108. POINTEUR JCOOR.MCHEVA
  109. POINTEUR JMAJAC.MCHEVA
  110. POINTEUR JMIJAC.MCHEVA
  111. POINTEUR JDTJAC.MCHEVA
  112. * Valeur des fns d'interpolation de l'espace géométrique aux pts de Gauss
  113. POINTEUR DFFPG.MCHEVA
  114. *
  115. INTEGER NBELEV,NBELEF,NBELFV
  116. INTEGER IMPR,IRET
  117. *
  118. LOGICAL LCARRE,LERJ
  119. INTEGER IESREF,IESREL,NBPOGO
  120. *
  121. * Executable statements
  122. *
  123. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans geolif'
  124. SEGACT SSFACT
  125. NBELFV=SSFACT.LFACTI(/1)
  126. NBELEV=SSFACT.LFACTI(/2)
  127. SEGACT JCOOR
  128. NBLIG=JCOOR.WELCHE(/1)
  129. NBCOL=JCOOR.WELCHE(/2)
  130. N2LIG=JCOOR.WELCHE(/3)
  131. N2COL=JCOOR.WELCHE(/4)
  132. NBPOI=JCOOR.WELCHE(/5)
  133. NBELM=JCOOR.WELCHE(/6)
  134. * On pourrait envisager un cas où tous les éléments seraient
  135. * identiques (ex. carré) NBELM=1
  136. IF (NBLIG.NE.1.OR.N2LIG.NE.1
  137. $ .OR.NBPOI.NE.1.OR.NBELM.NE.NBELEV) THEN
  138. WRITE(IOIMP,*) 'Erreur dims JCOOR'
  139. GOTO 9999
  140. ENDIF
  141. NDDL=NBCOL
  142. IESREL=N2COL
  143. SEGACT DFFPG
  144. NBLIG=DFFPG.WELCHE(/1)
  145. NBCOL=DFFPG.WELCHE(/2)
  146. N2LIG=DFFPG.WELCHE(/3)
  147. N2COL=DFFPG.WELCHE(/4)
  148. NBPOI=DFFPG.WELCHE(/5)
  149. NBELM=DFFPG.WELCHE(/6)
  150. IF (NBLIG.NE.1.OR.NBCOL.NE.NDDL.OR.N2LIG.NE.1
  151. $ .OR.(NBELM.NE.NBELFV.AND.NBELM.NE.1)) THEN
  152. WRITE(IOIMP,*) 'Erreur dims DFFPG'
  153. GOTO 9999
  154. ENDIF
  155. IESREF=N2COL
  156. NBPOGO=NBPOI
  157. NLFVDF=NBELM
  158. IF (IESREF.LT.IESREL) THEN
  159. LCARRE=.FALSE.
  160. ELSEIF (IESREF.EQ.IESREL) THEN
  161. LCARRE=.TRUE.
  162. ELSE
  163. WRITE(IOIMP,*) 'Dim. esp. ref. > dim. esp. reel ???'
  164. WRITE(IOIMP,*) 'IESREF=',IESREF,' IESREL=',IESREL
  165. GOTO 9999
  166. ENDIF
  167. *
  168. * Initialisations...
  169. *
  170. NBLIG=1
  171. NBCOL=1
  172. N2LIG=IESREL
  173. N2COL=IESREF
  174. NBPOI=NBPOGO
  175. NBELM=NBELEF
  176. SEGINI JMAJAC
  177. * SEGPRT,DFFPG
  178. *
  179. * On effectue le calcul de la matrice jacobienne aux points de Gauss
  180. *
  181. CALL GEOLF1(IESREL,IESREF,NDDL,NBPOGO,NBELEV,NBELFV,NBELEF,
  182. $ NLFVDF,
  183. $ DFFPG.WELCHE,JCOOR.WELCHE,SSFACT.LFACTI,
  184. $ JMAJAC.WELCHE,
  185. $ IMPR,IRET)
  186. IF (IRET.NE.0) GOTO 9999
  187. * SEGPRT,JMAJAC
  188. *
  189. * Si la matrice est carrée, on tente de calculer
  190. * son inverse et son déterminant...
  191. *
  192. IF (LCARRE) THEN
  193. NBLIG=1
  194. NBCOL=1
  195. N2LIG=IESREF
  196. N2COL=IESREL
  197. NBPOI=NBPOGO
  198. NBELM=NBELEF
  199. SEGINI JMIJAC
  200. NBLIG=1
  201. NBCOL=1
  202. N2LIG=1
  203. N2COL=1
  204. NBPOI=NBPOGO
  205. NBELM=NBELEF
  206. SEGINI JDTJAC
  207. CALL GEOLI2(IESREF,NBPOGO,NBELEF,JMAJAC.WELCHE,
  208. $ JMIJAC.WELCHE,JDTJAC.WELCHE,LERJ,
  209. $ IMPR,IRET)
  210. * SEGPRT,JDTJAC
  211. IF (IRET.NE.0) THEN
  212. IF (LERJ) GOTO 9666
  213. GOTO 9999
  214. ENDIF
  215. SEGDES JDTJAC
  216. SEGDES JMIJAC
  217. ELSE
  218. *
  219. * Sinon on calcule : SQRT ( det (transpose(A) * A))
  220. *
  221. * Pas de matrice inverse
  222. JMIJAC=0
  223. *
  224. NBLIG=1
  225. NBCOL=1
  226. N2LIG=1
  227. N2COL=1
  228. NBPOI=NBPOGO
  229. NBELM=NBELEF
  230. SEGINI JDTJAC
  231. CALL GEOLI3(IESREL,IESREF,NBPOGO,NBELEF,JMAJAC.WELCHE,
  232. $ JDTJAC.WELCHE,
  233. $ IMPR,IRET)
  234. IF (IRET.NE.0) GOTO 9999
  235. SEGDES JDTJAC
  236. ENDIF
  237. SEGDES JMAJAC
  238. SEGDES SSFACT
  239. SEGDES JCOOR
  240. SEGDES DFFPG
  241. *
  242. * Normal termination
  243. *
  244. IRET=0
  245. RETURN
  246. *
  247. * Format handling
  248. *
  249. *
  250. * Error handling
  251. *
  252. 9666 CONTINUE
  253. IRET=666
  254. RETURN
  255. 9999 CONTINUE
  256. IRET=1
  257. WRITE(IOIMP,*) 'An error was detected in subroutine geolif'
  258. RETURN
  259. *
  260. * End of subroutine GEOLIF
  261. *
  262. END
  263.  
  264.  
  265.  
  266.  

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