Télécharger kfnref.eso

Retour à la liste

Numérotation des lignes :

kfnref
  1. C KFNREF SOURCE GOUNAND 21/06/02 21:17:07 11022
  2. SUBROUTINE KFNREF(MYLRF,MYPG,
  3. $ FNPG,DFNPG,
  4. $ IMPR,IRET)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6. IMPLICIT INTEGER (I-N)
  7. C***********************************************************************
  8. C NOM : KFNREF
  9. C PROJET : Noyau linéaire NLIN
  10. C DESCRIPTION : Calcul des fonctions de forme et de leurs
  11. C dérivées aux points de Gauss sur l'élément
  12. C de référence.
  13. C Le but avoué de ce sous-programme est d'effectuer
  14. C toutes les opérations de pré-traitement sur un élément
  15. C de référence donné.
  16. C
  17. C LANGAGE : ESOPE
  18. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  19. C mél : gounand@semt2.smts.cea.fr
  20. C***********************************************************************
  21. C APPELES : CALPN, IVMAT, NI
  22. C APPELE PAR : KALPBG
  23. C***********************************************************************
  24. C ENTREES : MYLRF, MYPG
  25. C ENTREES/SORTIES : -
  26. C SORTIES : FNPG, DFNPG
  27. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  28. C***********************************************************************
  29. C VERSION : v1, 26/07/99, version initiale
  30. C HISTORIQUE : v1, 26/07/99, création
  31. C HISTORIQUE : v1.1 16/09/99, remaniement pour que la base polynômiale
  32. C puisse contenir des polynômes au lieu de
  33. C monômes exclusivement...
  34. C HISTORIQUE : v2, 10/05/00, modif. du segment ELREF
  35. C HISTORIQUE : v2.1 02/10/03 ajout d'astuces
  36. C HISTORIQUE :
  37. C***********************************************************************
  38. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  39. C en cas de modification de ce sous-programme afin de faciliter
  40. C la maintenance !
  41. C***********************************************************************
  42. -INC PPARAM
  43. -INC CCOPTIO
  44. -INC CCREEL
  45. -INC TNLIN
  46. *-INC SELREF
  47. POINTEUR MYLRF.ELREF
  48. *-INC SPOGAU
  49. POINTEUR MYPG.POGAU
  50. *-INC SMCHAEL
  51. POINTEUR FNPG.MCHEVA
  52. POINTEUR DFNPG.MCHEVA
  53. -INC SMLENTI
  54. INTEGER JG
  55. POINTEUR IVTMP.MLENTI
  56. -INC TMXMAT
  57. POINTEUR PN.MXMAT
  58. POINTEUR PNM1.MXMAT
  59. *
  60. INTEGER IMPR,IRET
  61. *
  62. LOGICAL LLAHE,LCAST
  63. LOGICAL LCSTE,LLINE,LEGAL
  64. INTEGER NDFN
  65. REAL*8 DETPN
  66. *
  67. * Executable statements
  68. *
  69. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans kfnref'
  70. SEGACT MYLRF
  71. *
  72. LCAST=(MYLRF.NOMLRF.EQ.'H1D1PY5'.OR.MYLRF.NOMLRF.EQ.'H1D2PY13'
  73. $ .OR.MYLRF.NOMLRF.EQ.'H1D2PR15'.OR.MYLRF.NOMLRF.EQ.'H1D2CU20')
  74. *
  75. NDIML=MYLRF.ORDDER(/1)
  76. NBDDL=MYLRF.ORDDER(/2)
  77. LLAHE=(MYLRF.TYPEL.EQ.'LAGRANGE'.OR.MYLRF.TYPEL.EQ.'HERMITE')
  78. * On fait un cas particulier aux éléments de Lagrange
  79. * à un ddl : dans ce cas-la, la fonction de forme
  80. * est constante et sa dérivée est nulle
  81. LCSTE=(MYLRF.TYPEL.EQ.'LAGRANGE'.AND.NBDDL.EQ.1)
  82. * On fait un cas particulier aux éléments de Lagrange
  83. * linéaire (simplex) : dans ce cas-la, les dérivées des fonctions de
  84. * forme sont constantes
  85. LLINE=(MYLRF.TYPEL.EQ.'LAGRANGE'.AND.NBDDL.EQ.(NDIML+1))
  86. SEGDES MYLRF
  87. *
  88. * On repique les éléments dans SHAPE
  89. *
  90. IF (LCAST) THEN
  91. CALL SH2FNR(MYLRF,MYPG,
  92. $ FNPG,DFNPG,
  93. $ IMPR,IRET)
  94. IF (IRET.NE.0) GOTO 9999
  95. *
  96. * Astuce foireuse
  97. *
  98. ELSEIF (LCSTE) THEN
  99. NBLIG=1
  100. NBCOL=1
  101. N2LIG=1
  102. N2COL=1
  103. NBPOI=1
  104. NBELM=1
  105. SEGINI FNPG
  106. FNPG.WELCHE(1,1,1,1,1,1)=1.D0
  107. SEGDES FNPG
  108. NBLIG=1
  109. NBCOL=1
  110. N2LIG=1
  111. N2COL=NDIML
  112. NBPOI=1
  113. NBELM=1
  114. SEGINI DFNPG
  115. DO IDIML=1,NDIML
  116. DFNPG.WELCHE(1,1,1,IDIML,1,1)=0.D0
  117. ENDDO
  118. SEGDES DFNPG
  119. * Cas des éléments de Lagrange et Hermite
  120. ELSEIF (LLAHE) THEN
  121. *
  122. * Construisons la Matrice [PN] à l'aide de la base polynômiale :
  123. * et des coordonnées de noeuds d'approximation
  124. **
  125. CALL CALPN(MYLRF,
  126. $ PN,
  127. $ IMPR,IRET)
  128. IF (IRET.NE.0) GOTO 9999
  129. *
  130. * Inversons la Matrice [PN]
  131. *
  132. SEGACT PN
  133. SEGINI,PNM1=PN
  134. NDFN=PN.XMAT(/1)
  135. JG=NDFN
  136. SEGINI IVTMP
  137. IIMPR=1
  138. CALL IVMAT(NDFN,PN.XMAT,
  139. $ IVTMP.LECT,
  140. $ PNM1.XMAT,DETPN,
  141. $ IIMPR,IRET)
  142. IF (IRET.NE.0) GOTO 9999
  143. SEGSUP IVTMP
  144. SEGSUP PN
  145. *
  146. * On peut maintenant calculer les valeurs des fonctions de forme
  147. * et leurs dérivées premières (par rapport aux coordonnées de l'espace
  148. * de référence) aux points de Gauss sur l'élément de référence
  149. *
  150. CALL NI(MYLRF,MYPG,PNM1,
  151. $ FNPG,DFNPG,
  152. $ IMPR,IRET)
  153. IF (IRET.NE.0) GOTO 9999
  154. SEGSUP PNM1
  155. ELSE
  156. WRITE(IOIMP,*) 'Le type d''élément ',MYLRF.TYPEL
  157. WRITE(IOIMP,*) 'n''est pas reconnu.'
  158. GOTO 9999
  159. ENDIF
  160. *
  161. * Astuce foireuse (mais on fait quand même des
  162. * vérifications)
  163. *
  164. IF (LLINE) THEN
  165. SEGACT DFNPG*MOD
  166. NBPOGO=DFNPG.WELCHE(/5)
  167. DO IDIML=1,NDIML
  168. DO IDDL=1,NBDDL
  169. VALDF=DFNPG.WELCHE(1,IDDL,1,IDIML,1,1)
  170. DO IPOGO=2,NBPOGO
  171. VALDF2=DFNPG.WELCHE(1,IDDL,1,IDIML,IPOGO,1)
  172. LEGAL=(ABS(VALDF2-VALDF).LE.100.D0*XZPREC)
  173. IF (.NOT.LEGAL) THEN
  174. WRITE(IOIMP,*) 'Houston, on a un probleme'
  175. * SEGPRT,DFNPG
  176. GOTO 9999
  177. ENDIF
  178. ENDDO
  179. ENDDO
  180. ENDDO
  181. NBLIG=1
  182. NBCOL=NBDDL
  183. N2LIG=1
  184. N2COL=NDIML
  185. NBPOI=1
  186. NBELM=1
  187. SEGADJ,DFNPG
  188. SEGDES DFNPG
  189. ENDIF
  190. *
  191. * Normal termination
  192. *
  193. IRET=0
  194. RETURN
  195. *
  196. * Error handling
  197. *
  198. 9999 CONTINUE
  199. IRET=1
  200. WRITE(IOIMP,*) 'An error was detected in subroutine kfnref'
  201. RETURN
  202. *
  203. * End of subroutine KFNREF
  204. *
  205. END
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  

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