Télécharger angqua.eso

Retour à la liste

Numérotation des lignes :

angqua
  1. C ANGQUA SOURCE PV 07/11/23 21:15:23 5978
  2. SUBROUTINE ANGQUA (NOD1,NOD2,NOD3,NOD4, ANG1,ANG2,ANG3,ANG4)
  3. implicit real*8(a-h,o-z)
  4. ************************************************************************
  5. *
  6. * A N G Q U A
  7. * -----------
  8. *
  9. * FONCTION:
  10. * ---------
  11. *
  12. * CALCUL DES ANGLES AUX COINS D'UN QUADRANGLE.
  13. *
  14. * MODULES UTILISES:
  15. * -----------------
  16. *
  17. IMPLICIT INTEGER(I-N)
  18. -INC CCREEL
  19.  
  20. -INC PPARAM
  21. -INC CCOPTIO
  22. -INC SMCOORD
  23. *
  24. * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
  25. * -----------
  26. *
  27. * +XCOOR (E) VOIR LE COMMUN "COPTIO" ET LE SEGMENT "MCOORD".
  28. * (SEGMENT SUPPOSE ACTIF)
  29. * +IDIM (E) VOIR LE COMMUN "COPTIO".
  30. * NOD? (E) NUMERO DU NOEUD "?", "?"=1,4.
  31. * ANG? (S) ANGLE AU NOEUD "?" ENTRE 0 ET 2*PI.
  32. *
  33. REAL *8 ANG1,ANG2,ANG3,ANG4
  34. *
  35. * VARIABLES:
  36. * ----------
  37. *
  38. INTEGER IND4(0:5)
  39. REAL*8 XE(3,4),V1(3),V2(3),ANG(4)
  40. *
  41. * AUTEUR, DATE DE CREATION:
  42. * -------------------------
  43. *
  44. * PASCAL MANIGOT 5 OCTOBRE 1990
  45. *
  46. ************************************************************************
  47. *
  48. * INDICAGE CIRCULAIRE:
  49. DATA IND4/4,1,2,3,4,1/
  50. *
  51. IDIMP1 = IDIM + 1
  52. XE(1,1) = XCOOR((NOD1-1)*IDIMP1+1)
  53. XE(1,2) = XCOOR((NOD2-1)*IDIMP1+1)
  54. XE(1,3) = XCOOR((NOD3-1)*IDIMP1+1)
  55. XE(1,4) = XCOOR((NOD4-1)*IDIMP1+1)
  56. XE(2,1) = XCOOR((NOD1-1)*IDIMP1+2)
  57. XE(2,2) = XCOOR((NOD2-1)*IDIMP1+2)
  58. XE(2,3) = XCOOR((NOD3-1)*IDIMP1+2)
  59. XE(2,4) = XCOOR((NOD4-1)*IDIMP1+2)
  60. IF (IDIM.EQ.3) THEN
  61. XE(3,1) = XCOOR((NOD1-1)*IDIMP1+3)
  62. XE(3,2) = XCOOR((NOD2-1)*IDIMP1+3)
  63. XE(3,3) = XCOOR((NOD3-1)*IDIMP1+3)
  64. XE(3,4) = XCOOR((NOD4-1)*IDIMP1+3)
  65. ELSE
  66. XE(3,1) = 0.
  67. XE(3,2) = 0.
  68. XE(3,3) = 0.
  69. XE(3,4) = 0.
  70. END IF
  71. *
  72. * CALCUL DE LA NORMALE "EXTERIEURE" MOYENNE:
  73. *
  74. XN = (XE(2,3)-XE(2,1))*(XE(3,4)-XE(3,2))
  75. & - (XE(3,3)-XE(3,1))*(XE(2,4)-XE(2,2))
  76. YN = (XE(3,3)-XE(3,1))*(XE(1,4)-XE(1,2))
  77. & - (XE(1,3)-XE(1,1))*(XE(3,4)-XE(3,2))
  78. ZN = (XE(1,3)-XE(1,1))*(XE(2,4)-XE(2,2))
  79. & - (XE(2,3)-XE(2,1))*(XE(1,4)-XE(1,2))
  80. XNORM1 = SQRT(XN**2 + YN**2 + ZN**2)
  81. XN = XN / XNORM1
  82. YN = YN / XNORM1
  83. ZN = ZN / XNORM1
  84. *
  85. * CALCUL DES ANGLES:
  86. *
  87. DO 100 K=1,4
  88. KP1 = IND4(K+1)
  89. KM1 = IND4(K-1)
  90. DO 110 J=1,3
  91. V1(J) = XE(J,KP1) - XE(J,K)
  92. V2(J) = XE(J,KM1) - XE(J,K)
  93. 110 CONTINUE
  94. * END DO
  95. XNORM1 = SQRT(V1(1)**2 + V1(2)**2 + V1(3)**2)
  96. & * SQRT(V2(1)**2 + V2(2)**2 + V2(3)**2)
  97. COSINU = (V1(1)*V2(1) + V1(2)*V2(2) + V1(3)*V2(3)) / XNORM1
  98. ANG(K) = ACOS(COSINU)
  99. XPVECT = V1(2)*V2(3) - V1(3)*V2(2)
  100. YPVECT = V1(3)*V2(1) - V1(1)*V2(3)
  101. ZPVECT = V1(1)*V2(2) - V1(2)*V2(1)
  102. S = XPVECT*XN + YPVECT*YN + ZPVECT*ZN
  103. IF (S .LT. 0.) THEN
  104. ANG(K) = (2. * REAL(XPI)) - ANG(K)
  105. END IF
  106. 100 CONTINUE
  107. * END DO
  108. *
  109. ANG1 = ANG(1)
  110. ANG2 = ANG(2)
  111. ANG3 = ANG(3)
  112. ANG4 = ANG(4)
  113. *
  114. END
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  

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