Télécharger shpoly.eso

Retour à la liste

Numérotation des lignes :

shpoly
  1. C SHPOLY SOURCE OF166741 24/07/25 21:15:04 11950
  2.  
  3. C=======================================================================
  4. C
  5. C FONCTIONS DE FORME ET LEUR DERIVEES - ELEMENTS 2D POLYGONES
  6. C
  7. C=======================================================================
  8. C QSI ETA DZE COORDONNEES REDUITES DU POINT DE GAUSS
  9. C (DZE non utilise car ici element 2D)
  10. C MELE numero de l'element POLYgone a N cotes (= 108 + N)
  11. C
  12. C SHP FONCTIONS DE FORME :
  13. C - SHP(1,INO) FONCTIONS DE FORME DU ND INO
  14. C - SHP(2,INO) DERIVEE PR RPPRT A QSI
  15. C - SHP(3,INO) DERIVEE PR RPPRT A ETA
  16. C - SHP(4,INO) DERIVEE PR RPPRT A DZE (non utilisee ici)
  17. C - SHP(5,INO) non utilisee ici
  18. C - SHP(6,INO) non utilisee ici
  19. C
  20. C IRET = 0 en cas d'erreur, = 1 en cas "normal"
  21. C=======================================================================
  22.  
  23. SUBROUTINE SHPOLY (QSI,ETA,DZE,MELE,SHP,IRET)
  24.  
  25. IMPLICIT INTEGER(I-N)
  26. IMPLICIT REAL*8(A-H,O-Z)
  27.  
  28. C Include contenant quelques constantes mathematiques dont XPI :
  29. -INC CCREEL
  30.  
  31. DIMENSION SHP(6,*)
  32.  
  33. PARAMETER (NPOMAX = 20)
  34. C DISTANCE DES POINTS A UN POLYGONE A N COTES
  35.  
  36. REAL*8 DIST(NPOMAX), DDISDQ(NPOMAX), DDISDE(NPOMAX),
  37. & NUMER(NPOMAX), DNUMDQ(NPOMAX), DNUMDE(NPOMAX)
  38.  
  39. C NOMBRE DE NOEUDS EN FONCTION DU NUMERO D'ELEMENT MELE (108+NBNO)
  40.  
  41. INTEGER NBNO(111:122)
  42. DATA NBNO / 3,4,5,6,7,8,9,10,11,12,13,14 /
  43.  
  44. IRET = 1
  45.  
  46. C FONCTIONS DE FORME BIDIMENSIONNELLES
  47. C FONCTIONS DE POLYGONE A N NOEUDS
  48.  
  49. N = NBNO(MELE)
  50.  
  51. c* IF (N.GT.NPOMAX) THEN
  52. c* IRET = 0
  53. c* CALL ERREUR(5)
  54. c* RETURN
  55. c* ENDIF
  56.  
  57. C CALCUL DES DISTANCES ET DES DERIVEES DU POINT AUX COTES DU POLYGONE
  58.  
  59. COPISN = COS(XPI/N)
  60.  
  61. DO I = 1, N
  62.  
  63. ALPHA = 2.D0*XPI*(I-1)/N
  64. COSIN = COS(ALPHA)
  65. SINUS = SIN(ALPHA)
  66.  
  67. DIST(I) = COPISN - QSI * COSIN - ETA * SINUS
  68. DDISDQ(I) = - COSIN
  69. DDISDE(I) = - SINUS
  70.  
  71. ENDDO
  72.  
  73. C CALCUL DES NUMERATEURS ET DENOMINATEUR DES FRACTIONS RATIONNELLES ET DERIVEES
  74.  
  75. DENOM = 0.D0
  76. DDENDQ = 0.D0
  77. DDENDE = 0.D0
  78.  
  79. DO I = 1, N
  80.  
  81. NUMER(I) = 1.D0
  82. DNUMDQ(I) = 0.D0
  83. DNUMDE(I) = 0.D0
  84.  
  85. DO J = 1, N
  86.  
  87. IF ( (J.NE.I) .AND. (J.NE.I+1) .AND.
  88. & ((I.NE.N).OR.(J.NE.1)) ) THEN
  89.  
  90. NUMER(I) = NUMER(I) * DIST(J)
  91.  
  92. C CALCUL DU PRODUIT DES DISTANCES POUR LA DERIVEE
  93.  
  94. PROD = 1.D0
  95.  
  96. DO K = 1, N
  97.  
  98. IF ( (K.NE.I) .AND. (K.NE.I+1) .AND.
  99. & ((I.NE.N).OR.(K.NE.1)) .AND. (K.NE.J) ) THEN
  100.  
  101. PROD = PROD * DIST(K)
  102.  
  103. END IF
  104.  
  105. ENDDO
  106.  
  107. DNUMDQ(I) = DNUMDQ(I) + PROD * DDISDQ(J)
  108. DNUMDE(I) = DNUMDE(I) + PROD * DDISDE(J)
  109.  
  110. END IF
  111.  
  112. ENDDO
  113.  
  114. DENOM = DENOM + NUMER(I)
  115. DDENDQ = DDENDQ + DNUMDQ(I)
  116. DDENDE = DDENDE + DNUMDE(I)
  117.  
  118. ENDDO
  119.  
  120. if (abs(denom).lt.1.E-18) then
  121. c* write(*,*) 'SHPOLY : DENOM "nul" =',DENOM,DDENDQ,DDENDE
  122. denom = 1.E-18
  123. endif
  124.  
  125. C CALCUL DES FONCTIONS DE FORME ET DE LEURS DERIVEES
  126. DO I = 1, N
  127. SHP(1,I) = NUMER(I)/DENOM
  128. SHP(2,I) = (DNUMDQ(I)*DENOM - NUMER(I)*DDENDQ)/(DENOM*DENOM)
  129. SHP(3,I) = (DNUMDE(I)*DENOM - NUMER(I)*DDENDE)/(DENOM*DENOM)
  130. c** SHP(4,I) = 0.D0
  131. c** SHP(5,I) = 0.D0
  132. c** SHP(6,I) = 0.D0
  133. ENDDO
  134.  
  135. c return
  136. END
  137.  
  138.  
  139.  

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