Télécharger conge2.eso

Retour à la liste

Numérotation des lignes :

conge2
  1. C CONGE2 SOURCE CHAT 05/01/12 22:17:07 5004
  2. SUBROUTINE CONGE2 (L1,L2,RCONGE,NCONGE, NL1,LRAC,NL2)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. ************************************************************************
  6. *
  7. * C O N G E 2
  8. * -----------
  9. *
  10. * FONCTION:
  11. * ---------
  12. *
  13. * CREER UN CONGE DE RACCORDEMENT ENTRE DEUX LIGNES
  14. *
  15. * TYPE DU CONGE : CIRCULAIRE
  16. *
  17. * MODULES UTILISES:
  18. * -----------------
  19. *
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC SMELEME
  24. *
  25. * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
  26. * -----------
  27. *
  28. * L1 (E) PREMIERE LIGNE A RACCORDER
  29. * L2 (E) DEUXIEME LIGNE A RACCORDER
  30. * RCONGE (E) RAYON DU CONGE DU RACCORDEMENT
  31. * NCONGE (E) FACTEUR DE DECOUPAGE DU CONGE (CONVENTIONS
  32. * CLASSIQUES SUR SON SIGNE)
  33. * = 0 SI NON FOURNI
  34. * NL1 (S) LIGNE APPUYEE SUR L1 ET ABOUTISSANT SUR LE CONGE
  35. * LRAC (S) CONGE DE RACCORDEMENT
  36. * NL2 (S) LIGNE APPUYEE SUR L2 ET COMMENCANT SUR LE CONGE
  37. *
  38. INTEGER NCONGE
  39. *
  40. * CONSTANTES:
  41. * -----------
  42. *
  43. PARAMETER (DEMI=0.5D0)
  44. *
  45. * VARIABLES:
  46. * ----------
  47. *
  48. * ANG = DEMI ANGLE AU SOMMET DES DEUX DROITES
  49. * DID = DISTANCE DU PT D'INTERSECTION AU PT D'UNE DROITE
  50. * DIC = DISTANCE DU PT D'INTERSECTION AU CENTRE DU CERCLE
  51. * RESULT = 'OK ' OU 'PARA' OU 'NON '
  52. * NBNOEU = NOMBRE DE NOEUD DE L'ELEMENT
  53. * NBELEM = NOMBRE D'ELEMENT
  54. *
  55. INTEGER N,NBNOEU,NBELEM,NL
  56. CHARACTER*4 RESULT
  57. *
  58. * AUTEUR, DATE DE CREATION:
  59. * -------------------------
  60. *
  61. * LIONEL VIVAN 20 NOVEMBRE 1987
  62. *
  63. * LANGAGE:
  64. * --------
  65. *
  66. * ESOPE + FORTRAN77
  67. *
  68. ************************************************************************
  69. *
  70. MELEME=L1
  71. SEGACT,MELEME
  72. NL=LISOUS(/1)
  73. IF (NL.NE.0) THEN
  74. CALL ERREUR(25)
  75. RETURN
  76. END IF
  77. NBNOEU=NUM(/1)
  78. NBELEM=NUM(/2)
  79. IP9=NUM(NBNOEU,NBELEM)
  80. IP8=NUM(1,NBELEM)
  81. SEGDES,MELEME
  82. *
  83. MELEME=L2
  84. SEGACT,MELEME
  85. NL=LISOUS(/1)
  86. IF (NL.NE.0) THEN
  87. CALL ERREUR(25)
  88. RETURN
  89. END IF
  90. NBNOEU=NUM(/1)
  91. IP1=NUM(1,1)
  92. IP2=NUM(NBNOEU,1)
  93. SEGDES,MELEME
  94. *
  95. * TEST DE LA VALEUR DE RESULT
  96. *
  97. CALL INT2D(IP9,IP8,IP1,IP2,INTERS,RESULT)
  98. IF (IERR.NE.0) RETURN
  99. IF (RESULT.EQ.'PARA') THEN
  100. CALL ERREUR(397)
  101. RETURN
  102. ELSE IF (RESULT.EQ.'NON ') THEN
  103. CALL ERREUR(398)
  104. RETURN
  105. END IF
  106. *
  107. CALL EXCOO1(IP1,X1,Y1,Z1,D1)
  108. CALL EXCOO1(IP2,X2,Y2,Z2,D2)
  109. CALL EXCOO1(IP8,X8,Y8,Z8,D8)
  110. CALL EXCOO1(IP9,X9,Y9,Z9,D9)
  111. CALL EXCOO1(INTERS,XI,YI,ZI,DI)
  112. *
  113. * CONSTRUCTION DES VECTEURS P1P2 P9P8
  114. P1P21=X2-X1
  115. P1P22=Y2-Y1
  116. P1P23=Z2-Z1
  117. P9P81=X8-X9
  118. P9P82=Y8-Y9
  119. P9P83=Z8-Z9
  120. *
  121. PSA=(P1P21*P9P81)+(P1P22*P9P82)+(P1P23*P9P83)
  122. XN1=SQRT(P1P21**2+P1P22**2+P1P23**2)
  123. XN8=SQRT(P9P81**2+P9P82**2+P9P83**2)
  124. *
  125. * DEMI-ANGLE AU SOMMET DES DEUX DROITES
  126. ANG=(ACOS(PSA/(XN1*XN8)))*DEMI
  127. *
  128. * DISTANCE PT D'INTERSECTION - PT D'EXTREMITE DE LA DROITE
  129. DID=RCONGE/TAN(ANG)
  130. *
  131. * DISTANCE PT D'INTERSECTION - PT CENTRE DU CERCLE
  132. DIC=SQRT(RCONGE**2+DID**2)
  133. *
  134. * DETERMINATION DU POINT E (OU DEBUTERA LE CONGE)
  135. *
  136. XE=(DID/XN8)*P9P81+XI
  137. YE=(DID/XN8)*P9P82+YI
  138. ZE=(DID/XN8)*P9P83+ZI
  139. CALL CREPO1(XE,YE,ZE,IPE)
  140. *
  141. * DETERMINATION DU POINT F (OU FINIRA LE CONGE)
  142. *
  143. XF=(DID/XN1)*P1P21+XI
  144. YF=(DID/XN1)*P1P22+YI
  145. ZF=(DID/XN1)*P1P23+ZI
  146. CALL CREPO1(XF,YF,ZF,IPF)
  147. *
  148. * DETERMINATION DU POINT O (CENTRE DU CERCLE OU S'APPUIERA LE CONGE)
  149. *
  150. XEF=XE+XF-2.D0*XI
  151. YEF=YE+YF-2.D0*YI
  152. ZEF=ZE+ZF-2.D0*ZI
  153. PRO=DIC/SQRT(XEF**2+YEF**2+ZEF**2)
  154. XO=PRO*XEF+XI
  155. YO=PRO*YEF+YI
  156. ZO=PRO*ZEF+ZI
  157. CALL CREPO1(XO,YO,ZO,IPO)
  158. *
  159. * CREATION DES EXTREMITES DES LIGNES A RACCORDER
  160. *
  161. CALL RACLI1(L1,IPE,NL1)
  162. IF (IERR.NE.0) RETURN
  163. CALL RACLI2(IPF,L2,NL2)
  164. IF (IERR.NE.0) RETURN
  165. *
  166. * CREATION ARC DE CERCLE (COMMENCANT EN E, FINISSANT EN F)
  167. *
  168. IF (NCONGE.NE.0) THEN
  169. CALL ECRENT(NCONGE)
  170. END IF
  171. CALL ECROBJ('POINT',IPF)
  172. CALL ECROBJ('POINT',IPO)
  173. CALL ECROBJ('POINT',IPE)
  174. CALL LIGNE(3,1,DEN1,DEN2,N)
  175. IF (IERR.NE.0) RETURN
  176. CALL LIROBJ('MAILLAGE',LRAC,1,IRETOU)
  177. IF (IERR .NE. 0) RETURN
  178. CALL EXCOO1(IPE,XE,YE,ZE,DE)
  179. CALL EXCOO1(IPF,XF,YF,ZF,DF)
  180. IF (NCONGE.GT.0) THEN
  181. MELEME=LRAC
  182. SEGACT,MELEME
  183. NBNOEU=NUM(/1)
  184. NBELEM=NUM(/2)
  185. IP1C=NUM(NBNOEU,1)
  186. CALL EXCOO1(IP1C,X1C,Y1C,Z1C,D1C)
  187. CALL MODPOI(XE,YE,ZE,D1C,IPE)
  188. IP2C=NUM(1,NBELEM)
  189. CALL EXCOO1(IP2C,X2C,Y2C,Z2C,D2C)
  190. CALL MODPOI(XF,YF,ZF,D2C,IPF)
  191. SEGDES,MELEME
  192. END IF
  193. *
  194. END
  195.  
  196.  

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